Prometheus+Grafana监控Kubernetes
Prometheus 介绍
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目, 拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基 金会(CNCF),成为继Kubernetes之后的第二个托管项目。
Prometheus组件与架构
-
Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
-
ClientLibrary:客户端库
-
Push Gateway:短期存储指标数据。主要用于临时性的任务
-
Exporters:采集已有的第三方服务监控指标并暴露metrics
-
Alertmanager:告警
-
Web UI:简单的Web控制台
Prometheus基本使用:怎么来监控?
如果要想监控,前提是能获取被监控端指标数据,并且这个 数据格式必须遵循Prometheus数据模型,这样才能识别和 采集,一般使用exporter提供监控指标数据
exporter列表:
https://prometheus.io/docs/instrumenting/exporters
-
Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
-
ClientLibrary:客户端库
-
Push Gateway:短期存储指标数据。主要用于临时性的任务
-
Exporters:采集已有的第三方服务监控指标并暴露metrics
-
Alertmanager:告警
-
Web UI:简单的Web控制台
Prometheus基本使用:部署
部署Prometheus:
docker run -d --name=prometheus -p 9090:9090 prom/prometheus |
访问地址:http://ip:9090/
部署文档:https://prometheus.io/docs/prometheus/latest/installation/
部署Grafana:
docker run -d --name=grafana -p 3000:3000 grafana/grafana |
访问地址:http://ip:3000/
部署文档:https://grafana.com/grafana/download
用户名/密码:admin/admin # 第一次需要重置密码
Prometheus基本使用:监控Linux服务器
node_exporter:用于监控Linux系统的指标采集器。
常用指标:
-
CPU
-
内存
-
硬盘
-
网络流量
-
文件描述符
-
系统负载
-
系统服务
数据接口:http://ip:9100/
使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter
在Prometheus配置文件添加被监控端:
scrape_configs: |
使用Grafana展示node_exporter数据指标,仪表盘ID: 9276
Prometheus基本使用:查询数据
PromQL(Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰 富,支持条件查询、操作符,并且内建了大量内置函数,供我们针对监控数据的各种维度进行查询。
数据模型:
-
Prometheus将所有数据存储为时间序列;
-
具有相同度量名称以及标签属于同一个指标;
-
每个时间序列都由度量标准名称和一组键值对(称为标签)唯一标识, 通过标签查询指定指标。
指标格式:
示例:
查询指标最新样本(称为瞬时向量):
node_cpu_seconds_total
可以通过附加一组标签来进一步过来这些时间序列:
node_cpu_seconds_total{job=“Linux Server”}
查询指标近5分钟内样本(称为范围向量,时间单位 s,m,h,d,w,y): node_cpu_seconds_total{job=“Linux Server”}[5m]
node_cpu_seconds_total{job=“Linux Server”}[1h]
Kubernetes 监控指标
Kubernetes本身监控
-
Node资源利用率
-
Node数量
-
每个Node运行Pod数量
-
资源对象状态
Pod监控
-
Pod总数量及每个控制器预期数量
-
Pod状态
-
容器资源利用率:CPU、内存、网络
Kubernetes 监控实现思路
Pod
kubelet的节点使用cAdvisor提供的metrics接口获取该节点所有Pod和容器相关的性能指标数据。
指标接口:https://NodeIP:10250/metrics/cadvisor
Node
使用node_exporter收集器采集节点资源利用率。
项目地址:https://github.com/prometheus/node_exporter
K8s资源对象
kube-state-metrics采集了k8s中各种资源对象的状态信息。
项目地址:https://github.com/kubernetes/kube-state-metrics
在Kubernetes平台部署相关组件
-
prometheus-deployment.yaml # 部署Prometheus
-
prometheus-configmap.yaml # Prometheus配置文件,主要配置Kubernetes服务发现
-
prometheus-rules.yaml # Prometheus告警规则
-
grafana.yaml # 可视化展示
-
node-exporter.yml # 采集节点资源,通过DaemonSet方式部署,并声明让Prometheus收集
-
kube-state-metrics.yaml # 采集K8s资源,并声明让Prometheus收集
-
alertmanager-configmap.yaml # 配置文件,配置发件人和收件人
-
alertmanager-deployment.yaml # 部署Alertmanager告警组件
#安装nfs安装包(每个k8s节点都要安装) |
kubernetes-node-kubelet:获取kebelet暴露的指标,访问地址https://NodeIP:10250/metrics |
#prometheus和altermanger手动热加载配置 |
Prometheus 告警
Prometheus报警功能利用Alertmanager组件完成,当Prometheus会对接收的指标数据比对告警规则,如果 满足条件,则将告警事件发送给Alertmanager组件,Alertmanager组件发送到接收人。
使用步骤:
-
部署Alertmanager
-
配置告警接收人
-
配置Prometheus与Alertmanager通信
-
在Prometheus中创建告警规则
global: |
# vi prometheus.yml |
告警状态:
-
Inactive:这里什么都没有发生。
-
Pending:已触发阈值,但未满足告警持续时间
-
Firing:已触发阈值且满足告警持续时间。警报发送给接受者。
小结:
1.在k8s中部署应用,在service或者pod中配置注解
annotations:
prometheus.io/scrape: 'true'
2.数据被采集到,可以写任意告警规则,出现问题,第一时间通知你
3.如果grafana仪表盘无法满足需求,可以自定义
4.grafana图标没数据,数据没采集到,promq写的有问题,服务器时间没同步
5.altermanger和prometheus配置文件如果没生效,手动配置热加载
curl -XPOST 10.244.169.152:9093/-/reload
curl -XPOST 10.244.26.74:9090/-/reload