Prometheus 监控平台(Prometheus Monitoring Platform)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

Prometheus 监控平台
部署与应用
技能目标
- 理解 Prometheus 的常用组件
- 理解配置文件与核心功能使用
- 掌握 Kubeadm 方式部署 Prometheus 监控
- 掌握 Prometheus+Grafana 图表展示

5.1 Prometheus+Grafana 监控概述

5.1.1 什么是 Prometheus

Prometheus (普罗米修斯)是一个最初在 SoundCloud 上构建的监控系统。自 2012
年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,
Prometheus 2016 年加入云原生云计算基金会( CNCF ),成为继 Kubernetes 之后的第
二个托管项目。
事实上,作为新一代的监控框架, Prometheus 具有以下特点:
多维数据模型:由度量名称和键值对标识的时间序列数据;
PromSQL :一种灵活的查询语言,可以利用多维数据完成复杂的查询;
不依赖分布式存储,单个服务器节点可直接工作;
基于 HTTP pull 方式采集时间序列数据;
推送时间序列数据通过 PushGateway 组件支持;
通过服务发现或静态配置发现目标;
多种图形模式及仪表盘支持。
Prometheus 适用于以机器为中心的监控以及高度动态面向服务架构的监控。

5.1.2 什么是 Grafana

Grafana 是一个可视化面板,有着非常漂亮的图表和布局展示,功能齐全的度量仪
表盘和图形编辑器,支持 Graphite zabbix InfluxDB Prometheus OpenTSDB
Elasticsearch 等作为数据源,比 Prometheus 自带的图表展示功能强大太多,更加灵活,
有丰富的插件,功能更加强大。本章推荐使用的监控图表模板,集群资源监控模板 id
3116 ,主机 Node 监控模板 id 9276 。在后期使用图表展示时可以通过 id 号导入所需的
监控模板。

5.1.3 为什么要用 Prometheus+Grafana 监控

监视应用程序的当前状态是预测问题和发现生产环境中瓶颈的最有效方法之一。监控是
整个产品周期中最重要的一环,及时预警减少故障影响面,而且能根据历史数据追溯问题。
一般在早期服务业务系统很少,通常可以用系统工具来解决,例如经常用到的监控命令
free vmstat df top iftop 等,这些适合临时性分析性能及排查故障中使用。随着互
联网 + 时代的发展人们对互联网依赖越来越大,一般常规性监控命令,不能满足现在业务的
需求。目前业内有很多不错的开源产品可供选择,利用开源产品很容易能做到这一点。如表
5-1 所示。
5-1 Zabbix,open-Falcon,Premetheus+Grafana 监控对比
监控方案告警特点适用
ZabbixYes大量定制工作大部分的互联网公司
open-falconYes功能模块分解比较细,显得更复杂系统和应用监控
Prometheus+GrafanaYes扩展性好容器、应用、主机全方位监控

5.1.3 Prometheus 组件

为了理解 Prometheus 工作原理,先来剖析下 Prometheus 的结构。 Prometheus 主要
包括以下组件,但是其中许多组件是可选的。

1.Prometheus 结构

Prometheus Server 用于收集指标和存储时间序列数据,并提供查询接口;
client Library 客户端库(例如 Go Python Java 等),为需要监控的服务产
生相应的 /metrics 并暴露给 Prometheus Server 。目前已经有很多软件原生就支持
Prometheus 并提供 /metrics ,可以直接使用。对于像操作系统已经不提供 /metrics
可以使用 exporter ,或者自己开发 exporter 来提供 /metrics 服务;
push gateway 主要用于临时性的 jobs 。由于这类 jobs 存在时间较短,可能在
Prometheus pull 之前就消失了。 Jobs 定时将指标 push push gateway ,再
Prometheus Server Push gateway pull 。这种方式主要用于服务层面的
metrics
exporter 用于暴露已有的第三方服务的 metrics Prometheus
alertmanager Prometheus server 端接收到 alerts 后,会进行去除重复数
据,分组,并路由到对应的接受方式,发出报警。常见的接收方式有:电子邮件,
pagerduty OpsGenie, webhook 等; Web UI Prometheus 内置一个简单的 Web 控制台,可以查询指标,查看配置
信息或者 Service Discovery 等,实际工作中,查看指标或者创建仪表盘通常使
Grafana Prometheus 作为 Grafana 的数据源。

2.Prometheus 数据模型

Prometheus 将所有数据存储为时间序列;具有相同度量名称以及标签属于同一个指标。
每个时间序列都由度量标准名称和一组键值对(也称为标签)唯一标识。
时间序列格式:
<metric name>{<label name>=<label value>, ...}
示例:
api_http_requests_total{method="POST", handler="/messages"}

3.Prometheus 指标类型

Counter :递增的计数器;
Gauge :可以任意变化的数值;
Histogram :对一段时间范围内数据进行采样,并对所有数值求和与统计数量;
Summary :与 Histogram 类似。

4.Prometheus 指标实例

实例:可以抓取的目标称为实例( Instances )。
作业:具有相同目标的实例集合称为作业( Job )。

5.1.4 Prometheus 配置文件及核心功能使用

Prometheus 的主配置文件是 YAML 格式,使用 --config.file 指定配置文件的位置。以下
列出本节重要的配置项。

1. 全局配置文件

Prometheus scrape_interval 规则周期性从监控目标上收集数据,然后将数据存储到
本地存储上。 scrape_interval 可以设定全局也可以设定单个 metrics
Prometheus evaluation_interval 规则周期性对告警规则做计算,然后更新告警状态。
evaluation_interval 只有设定在全局。
global :全局配置。
alerting :告警配置。
rule_files :告警规则。
scrape_configs :配置数据源,称为 target ,每个 target job_name 命名。又分
为静态配置和服务发现。
global:
\\ 默认抓取周期,可用单位 ms smhdwy ,默认 1 分钟
[ scrape_interval: <duration> | default = 1m ]
\\ 默认抓取超时时间为 10
[ scrape_timeout: <duration> | default = 10s ]
\\ 估算规则的默认周期,默认 1 分钟
[ evaluation_interval: <duration> | default = 1m ]
\\ 和外部系统(例如 AlertManager )通信时为时间序列或者告警( Alert
\\ 强制添加的标签列表
external_labels:
[ <labelname>: <labelvalue> ... ]
\\ 规则文件列表
rule_files:
[ - <filepath_glob> ... ]
\\ 抓取配置列表
scrape_configs:
[ - <scrape_config> ... ]
\\Alertmanager 相关配置
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
\\ 远程读写特性相关的配置
remote_write:
[ - <remote_write> ... ]
remote_read:
[ - <remote_read> ... ]

2. 实例作业配置文件

scrape_configs 配置项是根据目标( target ),以静态方式或者自动发现方式指定配
置任务( job )以 http/s 周期性的收到( scrape/pull ),指定目标( target )上的指标数据
metric )。
Prometheus 将收到( scrape )的指标( metric )数据保存在本地或者远程存储上。
\\ 任务名称,自动作为抓取到指标的一个标签
job_name: <job_name>
\\ 抓取周期
[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]
\\ 每次抓取的超时
[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]
\\ 从目标抓取指标的 URL 路径
[ metrics_path: <path> | default = /metrics ]
\\ 当添加标签发现指标已经有同名标签时,是否保留原有标签不覆盖
[ honor_labels: <boolean> | default = false ]
\\ 抓取协议
[ scheme: <scheme> | default = http ]
\\HTTP 请求参数
params:
[ <string>: [<string>, ...] ]
\\ 身份验证信息
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
\\Authorization 请求头取值
[ bearer_token: <secret> ]
\\ 从文件读取 Authorization 请求头
[ bearer_token_file: /path/to/bearer/token/file ]
\\TLS 配置
tls_config:
[ <tls_config> ]
\\ 代理配置
[ proxy_url: <string> ]
\\DNS 服务发现配置
dns_sd_configs:
[ - <dns_sd_config> ... ]
\\ 文件服务发现配置
file_sd_configs:
[ - <file_sd_config> ... ]
\\K8S 服务发现配置
kubernetes_sd_configs:
[ - <kubernetes_sd_config> ... ]
\\ Job 的静态配置的目标列表
static_configs:
[ - <static_config> ... ]
\\ 目标重打标签配置
relabel_configs:
[ - <relabel_config> ... ]
\\ 指标重打标签配置
metric_relabel_configs:
[ - <relabel_config> ... ]
\\ 每次抓取允许的最大样本数量,如果在指标重打标签后,样本数量仍然超过限制,则
整个抓取认为失败
\\0 表示不限制
[ sample_limit: <int> | default = 0

3. Prometheus 主配置标签

relabel_configs 配置文件中的标签可以允许在采集之前对任何目标及其标签进行修改
和替换,利于后期展示和理解,如图 5.1 所示。
5.1 relabel_config 配置文件内标签
replace :默认通过 regex 匹配 source_label 的值,使用 replacement 来引用表达式
匹配的分组;
keep :删除 regex 与连接不匹配的目标 source_labels
drop :删除 regex 与连接匹配的目标 source_labels
labeldrop :删除 regex 匹配的标签;
labelkeep :删除 regex 不匹配的标签;
hashmod :设置 target_label modules 连接的哈希值 source_labels
labelmap :匹配 regex 所有标签名称。然后复制匹配标签的值进行分组,
r
eplacement
分组引用( ${1},${2},… )替代。

4. 文件服务发现

Prometheus 也提供了服务发现功能,可以从 consul dns kubernetes file 等等多种
来源发现新的目标。其中最简单的是从文件发现服务。
支持服务发现的来源:
azure_sd_configs
// 支持微软云服务发现
consul_sd_configs
// 支持 consul 自动注册服务发现
dns_sd_configs
// 支持 dns 服务发现
ec2_sd_configs
// 支持阿里云服务发现
openstack_sd_configs // 支持 OpenStack 服务发现
file_sd_configs
// 支持文件服务发现
gce_sd_configs
// 支持 GCE 服务发现
kubernetes_sd_configs// 支持 K8s 服务发现
marathon_sd_configs // 支持 Marathon 服务发现
nerve_sd_configs
// 支持 Nerve 服务发现
serverset_sd_configs // 支持 Zookeeper Serverset 服务发现
triton_sd_configs
// 支持 Triton 服务发现

5.2 K8s 集群快速部署 Prometheus

5.2.1 环境介绍

1.本节实验环境

本节结合之前章节 k8s Kubeadm 环境来部署安装 Prometheus Grafana ,实
验环境包括一台 Master 节点,两台 Node 节点,关于本章 kubeadm 环境不做过多介
绍,重点关注 Prometheus 相关内容,具体配置要求如表 5-2 所示。
5-2 Kubeadm 安装 Prometheus 环境
主机名IP 地址操作系统主要软件
k8s-master192.168.9.206CentOS 7.3 x86_64PrometheusGrafana
k8s-node01192.168.9.207CentOS 7.3 x86_64node_exporter
k8s-node02192.168.9.208CentOS 7.3 x86_64NFSnode_exporter

2.实验要求

本节的实验要求如下:

通过 Kubeadm 实现快速部署 Prometheus+Grafana 监控系统。
完成对 K8s 资源监控并使用 Grafana 展示。
完成对 K8s Node 节点基础资源监控并用 Grafana 展示。

3.实现思路本节实验的实现思路大致如下:

1 )部署三台主机 K8s Kubeadm 基础环境。
2 )准备 Prometheus+Grafana 部署的 yaml 文件。
3 )通过 K8s 文件快速部署 Prometheus+Grafana 集群。
4 )通过 Grafana 添加数据源导入 K8s 资源监控模板实现 Grafana 图表展示。

4.实验拓扑

本节实验拓扑如图 5.2 所示。
5.2 Prometheus 实验拓扑

5.2.2 部署 Prometheus

1. 安装 K8s

通过 Kubeadm 方式安装 K8s ,安装方法可参考 K8s集群部署。

2. 上传 yaml 文件

将编写好的 yaml 文件,上传到 k8s-master 主机的“ root/prometheus ”目录下。
[root@k8s-master prometheus]# ll
-rw-r--r--. 1 root root 644 6 22 17:03 alertmanager-configmap.yaml
-rw-r--r--. 1 root root 2194 6 22 17:18 alertmanager-deployment.yaml
-rw-r--r--. 1 root root 400 6 24 00:10 alertmanager-pvc.yaml
-rw-r--r--. 1 root root 392 6 22 16:59 alertmanager-service.yaml
-rw-r--r-- 1 root root 1446 6 20 10:50 grafana.yaml
// 部署 Grafana
drwxr-xr-x 2 root root
77 6 20 12:24 node
// 部署 Promethues Hosts Agent 二进制文件
-rw-r--r-- 1 root root 5096 6 20 12:28 prometheus-configmap.yaml
//Promethues 主配置文件
-rw-r--r-- 1 root root 1080 6 19 22:57 prometheus-rbac.yaml
// 授权 Promethues 访问 k8s API
-rw-r--r-- 1 root root 4848 6 19 22:57 prometheus-rules.yaml
//Promethues 报警规则
-rw-r--r-- 1 root root 392 6 19 22:57 prometheus-service.yaml //Promethues 暴露访问端口
-rw-r--r-- 1 root root 3368 6 19 23:17 prometheus-statefulset.yaml // 通过有状态对象部署
Promethues
[root@k8s-master prometheus]# grep 192.168.9. *.yaml
// 如果 IP 不同则需要修改
alertmanager-pvc.yaml:
server: 192.168.9.208
grafana.yaml:
server: 192.168.9.208
prometheus-configmap.yaml:
- 192.168.9.207:9100
prometheus-configmap.yaml:
- 192.168.9.208:9100
prometheus-statefulset.yaml:
server: 192.168.9.208

3. 应用 Prometheus RBAC 授权

只在 master 节点上执行。
[root@k8s-master prometheus]# kubectl apply -f prometheus-rbac.yaml

4. 通过 configmap 创建 Prometheus 主配置文件

只在 master 节点上执行。
[root@k8s-master prometheus]# kubectl apply -f prometheus-configmap.yaml

5. 部署 NFS

k8s-node02 节点部署 NFS 服务,可参考 Linux 网络服务nfs服务部署

6. 部署 Prometheus 及 Services

Prometheus 部署操作在 master 节点上执行。在执行 yaml 文件部署前需要先在
k8s-node02 节点上完成 NFS 共享存储的安装,并且在所有 node 节点创建挂载目录,配置
过程如下所示。
[root@k8s-node02 ~]# vim /etc/exports
// 启动 nfs rpcbind 服务
/data/file 192.168.9.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
[root@k8s-node02 ~]# mkdir -p /data/file/prometheus-data
//k8s-node02 节点执行
[root@k8s-master prometheus]# kubectl apply -f prometheus-statefulset.yaml
// 有拉取镜像操
作,如果网络较慢可能会失败超时
[root@k8s-master prometheus]# kubectl apply -f prometheus-service.yaml

7. 查看已部署的 Prometheus Pod 及 svc

Pod 结果为 runing ,说明 Promethues 部署成功,可以用 svc 暴露出来的端口访问
Prometheus 控制台。
[root@k8s-master prometheus]# kubectl get pod,svc -n kube-system

8. 验证是否部署成功

Prometheus 默认部署完成,只有运行程序的 Node 节点可以从外部访问,可通过如下
设置方式来实现通过任意节点来访问 Prometheus 控制台。三个节点都需要执行。
[root@k8s-master prometheus]# iptables -P FORWARD ACCEPT
[root@k8s-master prometheus]# echo 1 > /proc/sys/net/ipv4/ip_forward
如果部署成功,可通过访问 http://192.168.9.206:30090 来查看 Prometheus 的控制台
页面,如图 5.3 所示。
图 5.3 Prometheus 图形界面
5.2.3 部署 Grafana 图表展示

1. 部署 Grafana

k8s-master 主机进行操作。需要在部署 Grafana yaml 文件之前创建 Grafana 挂载
的数据目录。
[root@k8s-master prometheus]# mkdir -p /data/file/grafana-data
// 三个节点均需创建
[root@k8s-master prometheus]# chmod -R 777 /data/file/grafana-data/ // 三个节点均需创建
[root@k8s-master prometheus]# kubectl apply -f grafana.yaml
// 有拉取镜像操作

2. 查看 Grafana 部署是否成功

通过查看 Pod 是否为 runing 状态及其暴露的端口,判断 Grafana 部署是否成功。
[root@k8s-master prometheus]# kubectl get pod,svc -n kube-system

3. 验证并访问 Grafana

如果通过 http://192.168.9.207:30007 能访问到控制台,就说明 Grafana 部署成功。控 制台界面如图 5.4 所示。
图 5.4 Grafana 控制台

5.2.4 监控 k8s Node 节点

Prometheus 社区提供的 NodeExporter 项目可以对主机的关键度量指标进行监控。通
Kubernetes DeamonSet 可以在各个主机节点上部署有且仅有一个 NodeExporter
例,实现对主机性能指标数据的监控。但由于容器隔离原因,使用容器 NodeExporter 并不
能正确获取到宿主机磁盘信息,故此本章将 NodeExporter 部署到宿主机上来对 Node 进行
监控。

1. 部署 Prometheus Agent 代理

[root@k8s-master prometheus]# cd /root/prometheus/
[root@k8s-master prometheus]# scp -r node 192.168.9.207:/root/
[root@k8s-master prometheus]# scp -r node 192.168.9.208:/root/
执行以下操作,安装 Prometheus Agent 。并通过 netstat 命令判断是否成功。
[root@k8s-node01 node]# sh node_exporter.sh
[root@k8s-node02 node]# sh node_exporter.sh
[root@k8s-node01 node]# netstat -anplt | grep node_export
tcp6
0
0 :::9100
:::*
LISTEN
32399/node_exporter
tcp6
0
0 192.168.9.207:9100
192.168.9.208:19304
ESTABLISHED
32399/node_exporter
[root@k8s-node02 node]# netstat -anplt | grep node_export
tcp6
0
0 :::9100
:::*
LISTEN
32399/node_exporter
tcp6
0
0 192.168.9.207:9100
192.168.9.208:19304
ESTABLISHED
32399/node_exporter

2. 修改 Prometheus 主配置文件

k8s-master 节点上修改 prometheus-configmap.yaml 文件,并重新应用该配置文件。
需要修改的地方已加粗。其中 192.168.9.207-208 K8s Node 节点。
[root@k8s-master prometheus]# vim prometheus-configmap.yaml
#
Prometheus
configuration
format
https://prometheus.io/docs/prometheus/latest/configuration/configuration/
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
data:
prometheus.yml: |
rule_files:
- /etc/config/rules/*.rules
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: k8s-nodes // 需要添加的配置文件
static_configs:
- targets: - 192.168.9.207:9100
- 192.168.9.208:9100
……

3. 应用 confgmap 配置文件

执行以下操作,使其更新到 Prometheus 主配置文件中。
[root@k8s-master prometheus]# kubectl apply -f prometheus-configmap.yaml

4. 通过 Prometheus 控制台查看配置文件

访问 http://192.168.9.206:3009/graph ,上方菜单栏单击 Status 链接,之后再单击
Configuration 子链接,可以看到刚刚添加的 K8s Node 节点,如图 5.5 所示。
图 5.5 Configuration 配置项

5. 查看是否更新成功

从图 5.6 中可知,刚添加的 Node 节点,已更新到 Prometheus 配置文件中。
图 5.6 config 配置内容

5.2.5 配置 Grafana Dashbord

1. 创建 k8s-node Dashbord

1 )根据 Node id 导入监控模板,并用 Grafana 展示。首先进入控制面板首页,如图
5.7 所示。
图 5.7 Grafana 控制面板
2 )添加数据源。单击设置按钮(小齿轮图标),选择“ Data Source ”,如图 5.8
示。
图 5.8 选择数据源
3 )数据源选择 Prometheus 。鼠标放到 Prometheus 上,选择最右侧的“ Select ”按
钮,如图 5.9 所示。
图 5.9 添加 Prometheus 数据源
4 )配置数据源。 HTTP 配置项下的 URL 填写“ http://prometheus:9090 ”,这里的
prometheus K8s 集群内的 Service 名,也可以使用 IP 地址代替,如图 5.10 所示。
图 5.10 Prometheus 数据源配置
配置完成后,单击最下方的“ Save & Test ”按钮保存设置。
5 )通过 Node id 导入监控模板。单击首页左侧搜索框下面的 + 的按钮。选择 import
按钮,输入监控模板 id 9276 。单击 Load 按钮加载即可,最后单击 Import 按钮导入,如
5.11 所示。
图 5.11 监控模板导入
6 )完成上述步骤后,可以查看到 Node 节点在 Dashbord 监控页面展示情况,如图
5.12 所示。
图 5.12 监控展示页面

2. 创建 k8s 集群资源监控状态 Dashbord

1 )重复“创建 k8s-node Dashbord ”的前两步,把模板 id 修改为 3119 ,如图 5.13
所示。
图 5.13 导入 3119 资源监控面板
2 )创建完成后,如图 5.14 所示。
图 5.14 资源面板状态
至此, Dashbord 已经正确显示。接下来配置 Alertmanager 报警功能。
5.2.6 部署 Alertmanager 报警
Prometheus 平台中,告警由独立的组件 Alertmanager 处理。通常情况下,首先定
Prometheus Alertmanager 所在的位置,然后在 Prometheus 配置中创建告警规则,最后
配置 Alertmanager 来处理告警并发送给接收者(邮件, webhook slack 等)。
1. 报警流程
Prometheus 告警和通知的设置,首先部署 Alertmanager ,然后配置 Prometheus
Alertmanager 通信,最后在 Prometheus 中创建告警规则,如图 5.15 所示。
图 5.15 报警流程
2. 配置 Prometheus 与 Alertmanager 通信
[root@k8s-master prometheus]# vi prometheus-configmap.yaml
// 添加如下内容
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:80"]
2. 在 Prometheus 中创建告警规则
查看报警规则示例。
groups:
- name: example
# 报警规则组名称 rules:
# 任何实例 5 分钟内无法访问发出告警
- alert: InstanceDown
expr: up == 0
for: 5m # 持续时间 , 表示持续一分钟获取不到信息,则触发报警
labels:
severity: page # 自定义标签
annotations:
summary: "Instance {{ $labels.instance }} down" # 自定义摘要
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5
minutes." # 自定义具体描述
3. 告警状态
Alertmanager 中产生告警信息后,这些信息有如下三种状态。
Inactive :没有触发阈值。
Pending :已触发阈值,但未满足告警持续时间。
Firing :已触发阈值且满足告警持续时间。警报发送到 Notification Pipeline ,经过
处理,发送给接受者。
4. 告警发送
route 属性用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺
序进行匹配。示例如下所示。
route:
receiver: 'default-receiver'
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
group_by: [cluster, alertname]
# 所有不匹配以下子路由的告警都将保留在根节点,并发送到 “default-receiver”
routes:
# 所有 service=mysql 或者 service=cassandra 的告警分配到数据库接收端
- receiver: 'database-pager'
group_wait: 10s
match_re:
service: mysql|cassandra
# 所有带有 team=frontend 标签的告警都与此子路由匹配
# 按产品和环境分组的,而不是集群
- receiver: 'frontend-pager'
group_by: [product, environment]
match:
team: frontend
group_by :报警分组依据;
group_wait :为一个组发送通知的初始等待时间,默认 30s
group_interval :在发送新告警前的等待时间。通常 5m 或以上;
repeat_interval :发送重复告警的周期。如果已经发送了通知,再次发送之前需要
等待多长时间。通常 3 小时或以上。
主要处理流程:
1 )当接收到 Alert ,根据 labels 判断属于哪些 Route (可存在多个 Route ,一个 Route
有多个 Group ,一个 Group 有多个 Alert )。
2 )将 Alert 分配到 Group 中,没有则新建 Group
3 )新的 Group 等待 group_wait 指定的时间(等待时可能收到同一 Group Alert ),
根据 resolve_timeout 判断 Alert 是否解决,然后发送通知。
4 )已有的 Group 等待 group_interval 指定的时间,判断 Alert 是否解决,当上次发
送通知到现在的间隔大于 repeat_interval 或者 Group 有更新时会发送通知。
5. 告警收敛(分组、抑制、静默)
告警面临最大问题,是告警条目太多,相当于狼来了的形式。收件人很容易麻木,不再
继续理会,从而导致关键的告警常常被淹没,贻误处理故障的最佳时间。 Alertmanger 在一
定程度上很好的解决了这个问题。 Prometheus 成功的把一条告警发给了 Altermanager ,而
Altermanager 并不是简简单单的直接发送出去,这样就会导致告警信息过多,重要告警被
淹没,它对告警信息做了适当的收敛,如图 5.16 所示。
下面是告警收敛手段:
分组( group ):将类似性质的警报分类为单个通知;
抑制( Inhibition ):当警报发出后,停止重复发送由此警报引发的其他警报;
静默( Silences ):是一种简单的特定时间静音提醒的机制。
图 5.16 告警收敛过程
6. Prometheus 一条告警怎么触发流程
Prometheus 的告警触发流程如图 5.17 所示。
5.17 告警触发流程
报警处理流程如下:
1 Prometheus Server 监控目标主机上暴露的 http 接口(这里假设接口 A ),通过 上述 Promethes 配置的 'scrape_interval' 定义的时间间隔,定期采集目标主机上监控数据。
2 )当接口 A 不可用的时候, Server 端会持续的尝试从接口中取数据,直到
"scrape_timeout" 时间之后停止尝试。这时候把接口的状态变为 “DOWN”
3 Prometheus 同时根据配置的 "evaluation_interval" 的时间间隔,定期(默认 1min
的对 Alert Rule 进行评估。当到达评估周期的时候,发现接口 A DOWN ,即 UP=0 为真,
激活 Alert ,进入 “PENDING” 状态,并记录当前 active 的时间。
4 )当下一个 alert rule 的评估周期到来的时候,发现 UP=0 继续为真,然后判断警报
Active 的时间是否已经超出 rule 里的 ‘for’ 持续时间,如果未超出,则进入下一个评估周期;
如果时间超出,则 alert 的状态变为 “FIRING” ;同时调用 Alertmanager 接口,发送相关报警
数据。
5 Alertmanager 收到告警数据后,会将告警信息进行分组,然后根据 Alertmanager
配置的 “group_wait” 时间先进行等待。等 wait 时间过后再发送报警信息。
6 )属于同一个 Alert Group 的警报,在等待的过程中可能进入新的 alert ,如果之前
的报警已经成功发出,那么间隔 “group_interval” 的时间间隔后再重新发送报警信息。比如配
置的是邮件报警,那么同属一个 group 的报警信息会汇总在一个邮件里进行发送。
7 ) 如 果 Alert Group 里 的 警 报 一 直 没 发 生 变 化 并 且 已 经 成 功 发 送 , 等 待
‘repeat_interval’ 时间间隔之后再重复发送相同的报警邮件;如果之前的警报没有成功发送,
则相当于触发第 6 条条件,则需要等待 group_interval 时间间隔后重复发送。
8 )最后警报信息具体发给谁,满足什么样的条件下指定警报接收人,设置不同报警
发送频率,由 Alertmanager route 路由规则进行配置。
7. 通过部署 yaml 文件部署 Alertmanager
设置报警邮箱信息。在 k8s-master 上修改 alertmanager-configmap.yaml ,将邮箱配
置参数修改为自己的邮箱,具体操作如下所示。
[root@k8s-master prometheus]# vi alertmanager-configmap.yaml
// 省略部分内容
data:
alertmanager.yml: |
global:
resolve_timeout: 5m
smtp_smarthost: ' smtp.163.com:25 '
smtp_from: ' 18810044263@163.com '
// 发送邮箱
smtp_auth_username: ' 18810044263@163.com '
// 发送用户
smtp_auth_password: ' yourself_password '
// 修改为自己的密码
receivers:
- name: default-receiver
email_configs:
- to: " shikun_zhou@126.com "
// 修改为接收者邮箱
// 省略部分内容
k8s-master 节点上,分别执行 configmap 配置文件、 pvc 存储文件、 Alertmanager
主程序文件, Services 暴露端口文件。
[root@k8s-node01 ~]# mkdir /data/file/alertmanager-data/
[root@k8s-node01 ~]# chmod -R 777 /data/file/alertmanager-data/
[root@k8s-master prometheus]# kubectl apply -f alertmanager-configmap.yaml
[root@k8s-master prometheus]# kubectl apply -f alertmanager-pvc.yaml
[root@k8s-master prometheus]# kubectl apply -f alertmanager-deployment.yaml
[root@k8s-master prometheus]# kubectl apply -f alertmanager-service.yaml
配置告警,修改 prometheus 主配置文件,指定 rules 目录。
[root@k8s-master prometheus]# vi prometheus-statefulset.yaml
……
volumeMounts:
- name: config-volume
mountPath: /etc/config
- name: prometheus-data
mountPath: /data
subPath: ""
- name: prometheus-rules
// 新增报警规则内容
mountPath: /etc/config/rules
terminationGracePeriodSeconds: 300
volumes:
- name: config-volume
configMap:
name: prometheus-config
- name: prometheus-rules
// 新增报警规则内容
configMap:
name: prometheus-rules
- name: prometheus-data
persistentVolumeClaim:
claimName: prometheus-data
……
[root@k8s-master prometheus]# kubectl apply -f prometheus-rules.yaml
[root@k8s-master prometheus]# kubectl apply -f prometheus-statefulset.yaml
打开 Prometheus 控制台,在上方菜单栏中,单击 Status 链接,之后单击 Rules 。由结
果可知,新增的报警规则已成功添加,如图 5.18 所示。
图 5.18 新增报警规则
验证报警功能。在 k8s-node01 上停掉 Agent ,操作命令如下所示。
[root@k8s-node01 node]# systemctl stop node_exporter
Prometheus 控制的“ Alert ”链接下,根据告警规则, k8s-node01 节点会先出现
Pending 状态,之后变为 Firing 状态,如图 5.19 5.20 所示。
图 5.19 报警 Pending 状态
图 5.20 报警 Firing 状态
此时,查看之前配置的接收邮箱,会看到关于 k8s-node01 的报警信息,如图 5.21 所示。
图 5.21 接收报警信息
至此, Promethues 监控部署完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/875265.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

灰光模块,彩光模块-介绍

1. 引用 知识分享系列一&#xff1a;5G基础知识-CSDN博客 5G前传的最新进展-CSDN博客 灰光和彩光_通信行业5G招标系列点评之二&#xff1a;一文读懂5G前传-光纤、灰光、彩光、CWDM、LWDM、MWDM...-CSDN博客 ADOP带你了解&#xff1a;CWDM、DWDM、MWDM、LWDM&#xff1a;快速…

ffmpeg实现视频的合成与分割

视频合成与分割程序使用 作者开发了一款软件&#xff0c;可以实现对视频的合成和分割&#xff0c;界面如下&#xff1a; 播放时&#xff0c;可以选择多个视频源&#xff1b;在选中“保存视频”情况下&#xff0c;会将多个视频源合成一个视频。如果只取一个视频源中一段视频…

jmeter之TPS计算公式

需求&#xff1a; 如何确定环境当中的TPS指标 PV:&#xff08;Page View&#xff09;即页面访问量&#xff0c;每打开一次页面PV计数1&#xff0c;刷新页面也是。PV只统计页面访问次 数。 UV(Unique Visitor),唯一访问用户数&#xff0c;用来衡量真实访问网站的用户数量。 一般…

基于matlab交通标志识别系统用的APP designer设计的gui界面 交互原理:bp神经网络-训练好图像处理有灰度化-二值化-颜色区域定位识别

基于MATLAB的交通标志识别系统是一个实用的工具&#xff0c;用于识别道路交通标志。该系统结合了图像处理技术和BP神经网络模型&#xff0c;可以在给定的图像中定位并识别交通标志。通过使用MATLAB的App Designer工具&#xff0c;系统还提供了一个交互式的图形用户界面&#xf…

OpenAI发布o1大模型,突破LLM推理极限,弥补了之前在数学、科学和代码方面的不足

在北京时间9月13日凌晨&#xff0c;OpenAI正式发布了一系列全新的AI大模型【o1-preview 和 o1-mini】&#xff0c;专门针对复杂问题的解决。这一发布标志着一次重要的突破&#xff0c;新模型能够实现复杂的推理能力&#xff0c;通用模型在解决科学、代码和数学等领域中的难题方…

Linux 防火墙:iptables (一)

文章目录 iptables 概述netfilter 与 iptables 的关系 四表五链规则表规则链数据包处理的优先顺序与规则链匹配顺序规则表的优先顺序规则链的匹配顺序规则链内的匹配顺序匹配流程示意图 安装与格式iptables 的安装iptables 防火墙的配置方法iptables 命令行配置方法常用的控制类…

TestCraft - GPT支持的测试想法生成器和自动化测试生成器

在当今快速变化的软件开发世界中&#xff0c;自动化测试已成为确保软件质量的关键环节。而随着AI技术的进步&#xff0c;越来越多的工具开始引入人工智能&#xff0c;来辅助生成测试用例和自动化测试脚本。其中&#xff0c;TestCraft&#xff0c;作为一款GPT支持的测试想法生成…

【数据结构】双向链表专题

目录 1.双向链表的结构 2.双向链表的实现 2.1初始化 以参数的形式初始化链表&#xff1a; 以返回值的形式初始化链表&#xff1a; 2.2尾插 2.3打印 2.4头插 2.5尾删 2.6头删 2.7查找 2.8在指定位置之后插入数据​编辑 2.9删除pos节点 2.10销毁 3.整理代码 3.1…

Unity笔记:ScrollRect代码阅读

大体流程 Unity Docs - UGUI | Class ScrollRect 总的说 自身不负责Rebuild&#xff0c;设置脏之后交由LayoutRebuilder注册到CanvasUpdateRegistry里待rebuild的集合在固定时机统一Rebuild。自身只在Prelayout和Postlayout做一下数据准备和数据更新 自身的ICanvasElement.…

Visual Studio配置opencv环境

&#xff08;1&#xff09;打开属性页面&#xff08;鼠标放在解决方案上&#xff0c;点击右键会有一个属性选项弹出&#xff09; &#xff08;2&#xff09;配置opencv的include和opencv2路径&#xff0c;具体路径和版本根据自己电脑配置 &#xff08;3&#xff09;配置opencv…

OpenAI o1预览模型发布:推理能力更强 可达理科博士生水准

今日凌晨&#xff0c;OpenAI正式推出了OpenAI o1预览模型。 对于复杂推理任务而言&#xff0c;新模型代表着人工智能能力的崭新水平&#xff0c;其特点就是会在回答之前花更多时间进行思考&#xff0c;就像人类思考解决问题的过程一样。 OpenAI曾解释过&#xff0c;2023年发布…

卡车配置一键启动无钥匙进入手机控车

‌ 卡车智能一键启动无钥匙进入手机控车&#xff0c;通过手机应用程序与汽车内置硬件、软件的无线通信&#xff0c;实现对汽车的远程控制‌。 卡车改装一键启动的步骤包括安装门把手的感应装置、拆卸仪表台和门板&#xff0c;取出内部的待接线束&#xff0c;并将一键启动…

ip地址a段b段c段是什么意思

在互联网的世界里&#xff0c;每一个设备都需要一个独特的标识符来相互识别和通信&#xff0c;这就是IP地址。IP地址不仅仅是一串数字&#xff0c;它背后隐藏着网络的组织结构和设备的连接方式。本文将深入探讨IP地址中的A段、B段、C段的含义&#xff0c;以及它们在网络通信中的…

VSCode创建项目和编译多文件

前言 在刚安装好VSCode后&#xff0c;我简单尝试了仅main.cpp单文件编译代码&#xff0c;没有问题&#xff0c;但是当我尝试多文件编译时&#xff0c;就出现了无法识别cpp文件。 内容 创建项目 首先点击左上角“文件”&#xff1b;在菜单中选择“打开文件夹”&#xff1b;在…

建材家居家具电器整站网站打包下载预览图及地址二

木质装饰材料网站模板_建材家居家具电器类下载有预览图在博客首页.zip 响应式高端品牌建材陶瓷瓷砖网站模板_建材家居家具电器类下载有预览图在博客首页.zip 响应式创意家居网站模板_建材家居家具电器类下载有预览图在博客首页.zip 木纹地板墙砖类网站模板_建材家居家具电器…

极狐GitLab CI/CD 作业一直处于等待状态,如何解决?

本分分享 GitLab CI/CD Job 不工作的的故障排查方法&#xff1a;当 GitLab Runner 不接受 Job&#xff0c;Job 一直处于等待状态&#xff0c;如何解决此问题。 极狐GitLab 为 GitLab 在中国的发行版&#xff0c;中文版本对中国用户更友好。极狐GitLab 支持一键私有化部署&…

加密与安全_ sm-crypto 国密算法sm2、sm3和sm4的Java库

文章目录 Presm-crypto如何使用如何引入依赖 sm2获取密钥对加密解密签名验签获取椭圆曲线点 sm3sm4加密解密 Pre 加密与安全_三种方式实现基于国密非对称加密算法的加解密和签名验签 sm-crypto https://github.com/antherd/sm-crypto 国密算法sm2、sm3和sm4的java版。基于js…

linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff08;包含课程同版本linux系统文件等内容&#xff09;&#xff0c;供大家学习交流下载&#xff1a;…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境&#xff1a;Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境&#xff0c;而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误&#xff0c;提示需要一个可用的套件。 …

通信工程学习:什么是ASON自动交换光网络

ASON&#xff1a;自动交换光网络 ASON&#xff08;Automatically Switched Optical Network&#xff09;&#xff0c;即自动交换光网络&#xff0c;是一种在选路和信令控制下完成自动交换功能的新一代光网络。它代表了未来智能光网络发展的主流方向&#xff0c;是下一代智能光传…