目录
[一、prometheus 介绍](#一、prometheus 介绍)
[二、prometheus 对比 zabbix](#二、prometheus 对比 zabbix)
[三、prometheus 监控插件](#三、prometheus 监控插件)
[3、编辑alertmanager 的配置文件](#3、编辑alertmanager 的配置文件)
[4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/)](#4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/))
一、prometheus 介绍
Prometheus 是一个开源的系统监控和警报工具,广泛用于监视和度量应用程序、服务和基础设施的性能和可用性。它最初由SoundCloud开发并开源,现在是一个独立的开源项目,由Cloud Native Computing Foundation(CNCF)托管。以下是关于 Prometheus 的一些主要特点和功能:
-
多维数据模型:Prometheus 使用多维数据模型来存储和查询监控数据。每个数据样本都包括时间戳和一组标签(labels),这允许用户对数据进行高度维度化的查询和分析。
-
PromQL 查询语言:Prometheus 提供了强大的查询语言,称为 PromQL,用于执行各种复杂的数据查询、聚合和变换操作。PromQL 支持范围查询、集合运算、数学运算和聚合等功能。
-
灵活的数据收集:Prometheus 支持多种数据收集方式,包括主动拉取(pull)和被动推送(push)模式。它可以通过各种数据源(如HTTP、Exposition格式的端点、JMX、Node Exporter等)获取监控数据。
-
动态发现和自动注册:Prometheus 支持服务发现,可以自动发现和注册新的监控目标,特别适合在容器化环境中动态添加和移除应用程序和服务。
-
警报和通知:Prometheus 具有内置的警报管理系统,允许用户定义和配置警报规则。当警报触发时,它可以通过各种渠道发送通知,如电子邮件、Slack、PagerDuty等。
-
可扩展性:Prometheus 可以通过联邦(Federation)和远程写入功能轻松扩展,以支持多个 Prometheus 实例的集成和数据汇总。
-
内置 Web UI:Prometheus 提供一个内置的Web界面,允许用户查询和可视化监控数据,查看警报规则以及检查目标的状态。
-
生态系统和插件:Prometheus 生态系统非常丰富,包括各种导出器、Grafana仪表板、Alertmanager、Pushgateway 等工具,可以扩展和增强 Prometheus 的功能。
-
云原生支持:Prometheus 适合在云原生环境中运行,特别是在Kubernetes集群中。它能够轻松地与云原生工具和平台集成。
Prometheus 被广泛用于监控微服务架构、容器化应用、云基础设施和传统的物理服务器。它是一个功能强大、灵活且可扩展的监控工具,广受社区欢迎,用于监视生产环境中的各种应用程序和服务。
二、prometheus 对比 zabbix
Prometheus 的优势:
-
云原生和容器友好:Prometheus 被设计为云原生和容器化环境的监控解决方案。它支持动态发现和监控Kubernetes和Docker等容器化环境中的应用程序和服务。
-
强大的多维数据模型:Prometheus 使用标签(labels)来对监控数据进行多维度的分类和查询,这使得数据分析和告警配置更加灵活和强大。
-
强大的查询语言:Prometheus Query Language(PromQL)非常适合对时间序列数据进行查询和分析,可以执行复杂的数据分析操作。
-
开源和活跃的社区:Prometheus 是一个开源项目,拥有庞大的社区支持和活跃的开发。这意味着有大量的插件、导出器和仪表板可供使用。
-
性能和扩展性:Prometheus 的性能非常出色,能够高效地处理大量的时间序列数据。它还支持联邦(Federation)和远程写入等功能,以支持多个 Prometheus 实例的集成和扩展。
Prometheus 的劣势:
-
长期存储:Prometheus 的默认存储系统不适合长期存储,因此通常需要与其他长期存储方案集成,如 Thanos 或 Cortex。
-
复杂性:Prometheus 配置可能需要更多的手动设置,尤其是在大型环境中,这可能会导致一些复杂性。
Zabbix 的优势:
-
综合性:Zabbix 提供了全面的监控功能,包括主机性能监控、网络监控、应用程序监控、日志监控等。它是一个综合性的监控解决方案。
-
可视化和仪表板:Zabbix 提供了丰富的仪表板和可视化工具,帮助用户更容易地分析监控数据。
-
通知和告警:Zabbix 具有强大的通知和告警功能,可以通过多种渠道(如电子邮件、SMS、Slack等)通知管理员和运维人员。
-
长期存储:Zabbix 具有内置的数据库用于长期存储监控数据,因此可以长期保留历史数据。
Zabbix 的劣势:
-
配置复杂性:Zabbix 的配置可能较为复杂,特别是在大型环境中,需要耗费较多的时间和精力来进行配置和维护。
-
不太适合云原生环境:Zabbix 通常需要较多的手动配置来适应云原生和容器化环境,与容器编排平台(如Kubernetes)的集成可能需要额外的工作。
总的来说,Prometheus 更适合云原生、容器化环境,具有强大的多维数据模型和灵活的查询语言。Zabbix 则更适合那些需要全面监控功能、可视化和长期存储的传统监控需求。选择哪个系统通常会取决于您的具体需求、环境和技术栈。您也可以考虑将它们结合使用,以满足不同方面的监控需求。
三、prometheus 监控插件
还包括一些其他的插件未列出
-
Node Exporter:
- Node Exporter 用于监控主机级别的系统性能和资源利用情况,包括 CPU、内存、磁盘、网络、负载等。
-
Blackbox Exporter:
- Blackbox Exporter 用于执行网络探测,监控网络服务的可用性和性能。它可以执行HTTP、TCP、ICMP等类型的探测。
-
JMX Exporter:
- JMX Exporter 用于监控Java应用程序,通过JMX接口暴露Java应用程序内部的性能数据。
-
cAdvisor (Container Advisor):
- cAdvisor 用于监控容器的性能和资源利用情况,包括Docker容器和Kubernetes容器。
-
PostgreSQL Exporter:
- PostgreSQL Exporter 用于监控PostgreSQL数据库的性能和查询统计信息。
-
MySQL Exporter:
- MySQL Exporter 用于监控MySQL数据库的性能和查询统计信息。
-
Redis Exporter:
- Redis Exporter 用于监控Redis数据库的性能和统计信息。
-
Nginx Exporter:
- Nginx Exporter 用于监控Nginx Web服务器的性能和请求统计信息。
-
Apache Exporter:
- Apache Exporter 用于监控Apache HTTP服务器的性能和请求统计信息。
-
Prometheus MySQL Exporter:
- 这个Exporter用于监控Prometheus自身的性能和状态,包括Prometheus的TSDB状态和查询性能。
四、部署
1、下载所需的包
包以上传,自行下载
解压后如图,redis、mysql 用于测试
2.编辑prometheus的配置文件
cpp
vim prometheus-2.45.0.linux-amd64/prometheus.yml
3、编辑alertmanager 的配置文件
cpp
vim alertmanager-0.26.0.linux-amd64/alertmanager.yml
将以前的全部删除
bash
# 定义邮件通知模板的路径,可以是模板文件的目录,支持通配符 *.tmpl
global:
resolve_timeout: 5m
smtp_from: 'xxxxx' # 发件⼈
smtp_smarthost: 'smtp.163.com:465' # 邮箱服务器的POP3/SMTP 主机配置 smtp.qq.com
smtp_auth_username: 'xxxxxxxxx' # ⽤⼾名
smtp_auth_password: 'xxxxxxxxxx' # 授权码
smtp_require_tls: false
templates:
- /opt/alertmanager/tmpl/*.tmpl #邮件模板的路径
# 设置路由规则,指定如何分组和发送警报
route:
group_by: ['alertname'] # 根据警报名称进行分组,确保同一类型的警报被归为一组
group_wait: 30s # 当一个警报组内的警报发生后,等待 30 秒,以便将它们一起发送
group_interval: 5m # 每 5 分钟发送一次警报组
repeat_interval: 1h # 如果警报仍然处于活动状态,每小时重复发送一次
receiver: 'email-notifications' # 默认使用 'email-notifications' 接收者来发送警报通知
# 定义接收者配置,包括电子邮件通知设置
receivers:
- name: 'email-notifications' # 接收者名称,用于路由规则中的指定
email_configs:
- to: 'xxxxxx@163.com' # 收件人的电子邮件地址
from: 'xxxxxxxx@163.com' # 发件人的电子邮件地址
smarthost: 'smtp.163.com:25' # SMTP 服务器地址和端口
auth_username: 'xxxxxxxx@163.com' # SMTP 服务器的用户名
auth_password: 'xxxxxxx' # SMTP 服务器的密码
html: '{{ template "email.html" . }}' # 使用指定的邮件模板
# 定义抑制规则,用于控制警报的触发和抑制
inhibit_rules:
- source_match:
severity: 'critical' # 匹配来自严重性为 'critical' 的警报
target_match:
severity: 'warning' # 匹配目标严重性为 'warning' 的警报
equal: ['alertname', 'dev', 'instance'] # 仅当警报名称、标签 'dev' 和 'instance' 均匹配时抑制
4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/)
cpp
{{ define "email.html" }}
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 80%;
margin: 20px auto;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
h1 {
text-align: center;
}
.alert-details {
margin-top: 20px;
}
.alert-item {
border: 1px solid #ddd;
padding: 10px;
margin-bottom: 10px;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h1>监控报警通知</h1>
<table>
<tr>
<th>告警状态</th>
<th>告警级别</th>
<th>告警类型</th>
<th>告警应用</th>
<th>告警主机</th>
<th>告警详情</th>
<th>触发阀值</th>
<th>告警时间</th>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ .Status }}</td>
<td>{{ $alert.Labels.severity }}</td>
<td>{{ $alert.Labels.alertname }}</td>
<td>{{ $alert.Annotations.summary }}</td>
<td>{{ $alert.Labels.instance }}</td>
<td>{{ $alert.Annotations.description }}</td>
<td>{{ $alert.Annotations.value }}</td>
<td>{{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}</td>
</tr>
{{ end }}
</table>
</body>
</html>
{{ end }}
5.启动(注意所在目录)
启动prometheus
cpp
[root@localhost prometheus-2.45.0.linux-amd64]# ./prometheus
启动altermanager
cpp
[root@localhost alertmanager-0.26.0.linux-amd64]# ./alertmanager
启动node_exporter
cpp
[root@localhost node_exporter-1.6.1.linux-amd64]# ./node_exporter
6浏览器访问
prometheus IP:9090
altermanager IP:
grafana IP:3000
设置中文
与Prometheus关联
监控模板的导入