Prometheus 是一个开源的系统监控和告警工具包,最初由 SoundCloud 开发,后来加入了 CNCF(云原生计算基金会),成为了云原生技术栈的核心项目之一。Prometheus 专为可靠的、灵活的监控系统而设计,广泛用于监控分布式系统和微服务架构。
Prometheus 的关键特性
多维数据模型
- Prometheus 采用多维数据模型,时间序列数据通过指标名称和键值对的标签(labels)来标识。这种设计允许灵活的查询和过滤,帮助用户轻松监控和分析特定维度的数据。
强大的查询语言 (PromQL)
- PromQL 是 Prometheus 的查询语言,功能强大,允许用户通过简单的语法对监控数据进行实时查询、计算和聚合。PromQL 可以帮助用户生成自定义的监控图表和告警规则。
独立的时间序列数据库 (TSDB)
- Prometheus 包含一个内置的时间序列数据库,能够高效地存储和查询监控数据。与传统数据库不同,Prometheus 专为处理时间序列数据而设计,具有更好的性能和可扩展性。
自动服务发现
- Prometheus 支持多种服务发现机制,如 Kubernetes、Consul、Etcd 等,使其能够自动发现并监控动态变化的服务和实例,无需手动配置。
灵活的告警管理
- Prometheus 通过 Alertmanager 实现告警管理,允许用户根据自定义的规则触发告警,并通过多种方式发送通知(如邮件、Slack、PagerDuty 等)。Alertmanager 还支持告警分组、抑制和静默等高级功能。
多种数据导出方式
- Prometheus 通过 Exporters 导出数据,这些导出器可以收集和转换来自不同系统和应用的监控数据,使 Prometheus 能够监控各种类型的系统(如操作系统、数据库、消息队列等)。
生态系统丰富
- Prometheus 拥有一个庞大的生态系统,包括多种 Exporters、仪表盘工具(如 Grafana)、集成工具(如 Thanos 用于水平扩展和高可用)以及社区贡献的插件和扩展。
适用场景
Prometheus 特别适用于以下场景:
- 云原生和容器化环境:Prometheus 与 Kubernetes 等容器编排平台紧密集成,是监控云原生应用的理想选择。
- 微服务架构:由于其灵活的标签系统和强大的查询语言,Prometheus 能够有效地监控分布式微服务架构。
- 高并发和动态环境:Prometheus 的服务发现和自动监控功能使其能够适应快速变化的基础设施和应用环境。
要使用 Prometheus 进行监控,需要下载和配置几个关键组件。以下是主要的组件:
Prometheus server
官方网站
https://prometheus.io/download/#prometheus
网站下载对应的软件包,直接wget太慢
tar -zxvf prometheus-2.53.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv prometheus-2.53.1.linux-amd64/ prometheus
尝试运行server
cd prometheus/
./prometheus --config.file=prometheus.yml
校验配置文件
./promtool check config ./prometheus.yml
编写启动脚本配置
vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-lifecycle
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动
systemctl daemon-reload
systemctl start prometheus
systemctl status prometheus
systemctl enable prometheus
netstat -tunlp| grep prometheus
访问测试
172.16.208.12:9090
Prometheus node_exporter
依然去官网找到对应的下载包
tar -zxvf anaconda-ks.cfg node_exporter-1.6.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv node_exporter-1.6.1.linux-amd64/ node_exporter
设置用户
groupadd prometheus
useradd -g prometheus -s /sbin/nologin prometheus
chown -R prometheus:prometheus /usr/local/node_exporter
#配置自启动服务如没有该文件自行创建
vim /usr/lib/systemd/system/node_exporter.service
[unit]
Description=The node_exporter Server
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
RestartSec=15s
SyslogIdentifier=node_exporter
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable node_exporter
systemctl restart node_exporter
在prometheus的server端配置
vim /usr/local/prometheus/prometheus.yml
static_configs:
- targets: ["192.168.8.207:9100","192.168.8.208:9100","192.168.8.209:9100","192.168.8.210:9100"]
连接测试:
alertmanager
Prometheus 的告警管理通过 Alertmanager 组件来实现,其中告警分组、抑制和静默是三个重要的功能,用于对告警进行更精细的控制和管理。
告警分组 (Grouping):告警分组是指将相似的告警事件归类到一起,以减少告警的数量和噪声。当多个告警在同一时间触发时,Alertmanager 可以将它们按照标签或其他属性进行分组,并将它们作为一个通知来发送。这种方式能够避免大量相似的告警单独发送,导致通知过载。
告警抑制 (Inhibition):告警抑制是指当某些告警条件满足时,抑制其他相关告警。通常用在一个问题会触发多个告警的情况下,其中一个告警可以掩盖其他次要的告警。例如,如果某个服务的主节点不可用,你可能会有告警标示多个从节点不可用,但主节点不可用已经说明了问题的根源,次要告警可以被抑制。
告警静默 (Silencing):告警静默是一种临时的抑制机制,允许你在特定的时间范围内禁用某些告警通知。通常用于计划内的维护或已知问题的处理,防止在这些期间发送大量无意义的告警通知。
去官网找到对应的下载包
tar -zxvf alertmanager-0.27.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.27.0.linux-amd64/ /usr/local/alertmanager
配置启动服务
vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Prometheus Alertmanager
After=network.target
[Service]
ExecStart=/usr/local/alertmanager/alertmanager -