当前位置: 首页 > news >正文

prometheus部署和告警设置

prometheus概念

普罗米修斯是一个开源的,可以容器化部署(pod),部署在k8s集群中,也可以直接部署在宿主机的二进制的方式部署。

在k8s集群当中,一般都是用普罗米修斯来对集群进行监控。

  • 节点监控:监控集群所有节点的状态
  • pod监控:监控集群部署所有的服务

普罗米修斯:开源的服务监控系统和时序数据库

数据通过时序数据库来进行收集,展示数据模型,存储,以及提供插叙的接口。

核心组件:prometheus server 从静态配置的监控目标,以及基于服务发现,自动从目标中拉取数据,保存到数据中,以趋势化的图形来展示数据的变化。

任何被监控的目标都必须涵盖在监控系统当中,才能进行时序数据的采集、存储、告警和展示。

普罗米修斯支持自动发现,以及模板的直接使用。

普罗米修斯的特点

1、多维数据模型:由度量名称和键值对表示的时间序列的数据,每一个数据都有一个样本。

  • 时间序列数据:按照时间的顺序,记录系统、设备等等变化的数据。

2、内置时间序列数据库,所有的数据查询,展示都是依靠这个数据库。

3、promql:查询语句,用来实现多维数据的基础。

4、基于http协议的pull方式,采集时间序列数据。

5、可以通过pushGateway组件收集数据

6、既支持静态配置,也可以自动发现目标来收集数据。

7、因为普罗米修斯本身采集的数据直观化不是很好,可以外接一个图形化的解析工具grafana,更直观的分析趋势数据。

8、普罗米修斯本身设计的目的不是精确的展示数据,只是提供一种趋势的变化和走向。

存储引擎

TSDB作为数据的存储引擎:

  • 存储的数量十分庞大
  • 大部分都是写入操作
  • 写入操作是按照时序添加到数据库
  • 几乎不涉及更新数据,因为数据是实时变化,只需要记录即可。
  • 高并发的性能很强

普罗米修斯组件

1、prometheus server:服务核心组件,通过pull的方式获取数据,存储时间序列的数据。基于告警规则生成告警通知。

  • retrieval:负责在获取的目标主机抓取数据。
  • storage:存储,采集到数据保存到磁盘,数据保存默认是15天。
  • promql:查询语言的模块,时序趋势图如何获取,依靠查询语句来获取。

2、client library:客户端库,就是在客户端用于测量系统的工具。

3、node-exporter:用来收集服务器物理指标状态,包括负载、cpu、内存、硬盘(读写)、网络等等。

4、service discovery:服务发现,动态的监控目标,通过文件、DNS解析等等自动发现集群内的服务。

5、告警功能,altermanager:独立的告警模块,支持电子邮件、钉钉、企业微信。

6、pushgateway:类似一个中转站,通过这种方式代理收集数据,发送到prometheus server,不需要单独配置,自动功能,获取数据的方式也是pull。

7、grafana:数据展示

工作流程

1、获取数据,prometheus server 通过pushgateway,把采集目标的数据拉取到server中。

2、通过人工预设(promql)或者第三方下载的模板,对数据进行统计,形成一个趋势的时间序列的图形,把数据保存到TSDB中。

3、通过 altermanager,设置监控项的阈值,超过阈值之后提供告警的服务。

4、通过自带的wei ui界面可以展示时序数据的走向,推荐使用 grafana 来展示趋势的数据。

prometheus的局限性和zabbix的对比

prometheus的局限性:

1、prometheus是一个指标监控系统,不适合存储时间和日志,只是记录数据的变化,展示的是趋势化的监控,并非精确的数据。

2、prometheus不是为了存储大量的历史数据而设计的,而是为了展示近期查询的数据。

3、prometheus集群机制不成熟,单节点部署,没有高可用。

prometheus和zabbix的对比:

1、zabbix是大而全的监控系统,是一款非常成熟的系统,有web界面,告警功能等等,上手的难度也很低。但是定制化的使用难度比较大。

2、数据存储

  • zabbix使用第三方数据库来保存数据,目前支持mysql、postgresql、oracle等等,支持数据类型比较多,日志、文件都可以存储
  • prometheus使用自带的TSDB存储数据,不包含文本和日志,只支持时间序列的值。

3、查询功能

  • zabbix在查询方面功能较弱,只能在页面做一些有限操作。
  • prometheus自带数据库,有自己的promql,语句也非常灵活,在页面可以随时调整语句的结构,收集数据。

4、告警

从告警的层面来说,二者没有本质的区别。

总结:

如果对于传统的服务器监控、已经传统方式部署的服务(不是基于容器化部署的)推荐使用zabbix。各种的模版和自定义的监控项非常成熟,对于监控要求不高的,可以使用zabbix,如果是监控容器化部署的服务不推荐使用zabbix。

prometheus和k8s集群的配合度更高,适配性更强,定制化程度也很高,上手难度在于如何实现promql的数据查询。监控微服务推荐使用prometheus。

prometheus的pod部署

1、部署node-exporter

node-exporter:节点收集数据。daemonset 在每个节点部署一个pod。

通过 node-exporter 采集cpu的数据,node-exporter 默认的监听端口是 9100,可以执行 curl http://主机ip:9100/metrics 获取到主机的所有监控数据。

2、部署prometheus的组件

创建 sa 账号,对 sa 做 rbac 授权

部署Prometheus

部署Prometheus的deployment和service

网页访问http://192.168.254.100:30296/prometheus,网页访问http://192.168.254.100:30296/

查询 K8S 集群中一分钟之内每个 Pod 的 CPU 使用率

sum by (name)( rate(container_cpu_usage_seconds_total{image!="", name!=""}[1m] ) )

3、部署grafana图形化界面

部署grafana

Grafana 配置

(1)浏览器访问http://192.168.80.11:32087 ,登陆 grafana

(2)开始配置 grafana 的 web 界面:选择 Add data source

【Name】设置成 Prometheus

【Type】选择  Prometheus

【URL】设置成 http://prometheus.monitor-sa.svc:9090 

#使用service的集群内部端口配置服务端地址

点击 【Save & Test】

(3)导入监控模板

在web 界面点击+号,import,导入提前准备好的模板。

prometheus告警设置

1、设置监控的告警邮箱,以及告警的设置。部署alter-mail.yaml,以configmap的形式传给pod。

2、创建 sa 账号,对 sa 做 rbac 授权

kubectl create serviceaccount monitor -n monitor-sa

#创建 sa 账号,对 sa 做 rbac 授权

kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrole=cluster-admin  --serviceaccount=monitor-sa:monitor

#把 sa 账号 monitor 通过 clusterrolebing 绑定到 clusterrole 上

3、创建 prometheus 和告警规则配置文件 prometheus-alertmanager-cfg.yaml

4、删除之前的配置

kubectl delete -f Prometheus-configmap.yaml

kubectl delete -f prometheus-server.yaml

5、部署prometheus-alertmanager-cfg.yaml和alter-mail.yaml

6、更新配置,部署新的prometheus 和 alertmanager

首先生成一个 secret 资源 etcd-certs,这个在部署 prometheus 需要,用于监控 etcd 相关资源

kubectl -n monitor-sa create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.key --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/ca.crt

再部署prometheus 和 alertmanager,prometheus-server-alert.yaml

然后运行kubectl apply -f prometheus-server-alert.yaml

7、部署 prometheus 和 alertmanager 的service,prometheus-service-alter.yaml

8、这时候我们登录用web登录普罗米修斯发现告警已经生成并且已经发qq邮件给我们

上面的告警是因为 kube-proxy 默认端口10249是监听在 127.0.0.1 上的,需要改成监听到物理节点上,,直接修改即可

kubectl get pods -n kube-system | grep kube-proxy |awk '{print $1}' | xargs kubectl delete pods -n kube-system                                            #重新启动 kube-proxy

相关文章:

  • (十)趣学设计模式 之 外观模式!
  • 【计算机网络】IP协议
  • 飞鱼科技游戏策划岗内推
  • PydanticToolsParser 工具(tool call)把 LLM 生成的文本转成结构化的数据(Pydantic 模型)过程中遇到的坑
  • 第一章 SQL简介
  • python 把数组转字符串的4种方法
  • Buildroot 添加自定义模块-内置文件到文件系统
  • ffmpeg avdevice_register_all 注册设备的作用
  • Git 分支管理
  • Java基础关键_012_包装类
  • Linux的文件与目录管理
  • Redis7——基础篇(八)
  • Visual Studio Code FAQ
  • 零基础学习机器学习分类模型
  • 【Linux】进程状态(二)
  • 有问题的两题
  • 2024大模型技术全景解构:从开源生态到商业落地的深度博弈
  • SpringWeb
  • 初识Skywalking
  • 基于MATLAB红外弱小目标检测MPCM算法复现
  • 海珠网站建设哪家好/惠州seo关键字优化
  • 做301网站打不开/百度网址导航主页
  • 在哪里可以学到做网站/二级域名网址查询
  • 北京出名做网站的公司/企业营销策划书范文
  • wordpress学生/广东做seo的公司
  • 黄骅市人民政府/360优化大师官方下载最新版