[上篇] 搭建高级的性能监控系统(Prometheus+Grafana+Node Exporter+Alertmanager)

2023-11-30 16:12:17 浏览数 (3)

介绍

Prometheus、Grafana、Node Exporter 和Alertmanager是一组用于监控和可视化系统性能的开源工具。它们通常一起使用,形成一个强大的完整的监控和告警系统。

一般来说,这四个工具一起协作,形成了一个完整的监控和告警系统。Node Exporter用于收集主机级别的指标,Prometheus存储和查询这些指标,Grafana提供可视化界面,而Alertmanager则负责管理和发送告警。整个系统的目标是帮助管理员和开发人员实时了解系统的状态、性能和健康状况,并在必要时采取措施。

Prometheus

Prometheus 是一种开源的系统监控和警报工具。它最初由 SoundCloud 开发,并成为 Cloud Native Computing Foundation(CNCF)的一部分。Prometheus 支持多维度的数据模型和强大的查询语言,使得用户可以轻松地收集和查询各种类型的监控数据。

Grafana

Grafana 是一个开源的数据可视化和监控平台。它提供了丰富的图表和仪表盘,可以将各种数据源的信息可视化展示。Grafana 支持多个数据源,包括 Prometheus、Graphite、InfluxDB 等,因此可以与各种监控系统集成,提供灵活且强大的可视化功能。

Node Exporter

Node Exporter 是一个用于在 Unix/Linux 系统上暴露系统信息的 Prometheus Exporter。它会收集关于系统资源使用情况、性能指标等方面的信息,并将这些信息提供给 Prometheus 进行监控。Node Exporter 通常与 Prometheus 配合使用,以监控主机上的各种系统级别的指标,例如 CPU 使用率、内存使用率、磁盘空间等。

Alertmanager

Alertmanager 是 Prometheus 生态系统中的一个组件,负责处理和管理告警。当 Prometheus 检测到异常或达到某个预定的阈值时,它将生成告警并将其发送到 Alertmanager。Alertmanager 可以进行静默、分组、抑制和路由告警,并将它们发送到不同的接收端,如电子邮件、Slack 等。

预览

我们先看效果

这是grafana面板的局部截图,一个整体系统资源总览,方便我们快速发现问题并检索,这也是我们日常使用最频繁的地点。

下面是prometheus的局部截图

接下来就是alertmanager的截图,主要是接收prometheus触发的告警,alertmanager负责推送。

最后就是我们的采集器Node Exporter,在宿主机上部署,一般是监听9100端口,访问后可以看到宿主机的各种指标参数。

准备

服务端

Centos7 Docker

客户端

Centos 可选Docker

安装使用

接下来我们将进行安装和使用,首先是安装我们指标收集器

node Exporter

代码语言:javascript复制

#arm平台
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-arm64.tar.gz
tar -xzf node_exporter-1.6.1.linux-arm64.tar.gz
cp node_exporter-1.6.1.linux-arm64/node_exporter /usr/local/bin/


#amd平台
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz
cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/


#进程守护
cat > /etc/systemd/system/notdeexporter.service << EOF
[Unit]
Description=notdeexporter
After=network.target network-online.target nss-lookup.target
[Service]
Type=simple
StandardError=journal
ExecStart = /usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=512000
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF


#启动
systemctl daemon-reload
systemctl start notdeexporter
systemctl enable notdeexporter
systemctl status notdeexporter
 
 
 

当我们看到绿色的active (running) 则安装成功。

访问宿主 9100端口既可访问Node Exporter采集的指标数据

prometheus

接下来我们接着安装prometheus,除了Node Exporter,其他的我们都将采用docker进行安装,因为除了Node Exporter安装在客户端上,其他都在服务端上既可。

代码语言:javascript复制

docker stop prometheusserver
docker rm prometheusserver
docker run -i --restart=always 
--name prometheusserver 
-p 9000:9090 
-v /root/prometheus/data:/prometheus-data 
-v /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 
-v /root/prometheus/rules:/etc/prometheus/rules 
-d prom/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus-data/ 
 
 
 

9000:9090

9090是容器内部端口,9000外部端口作为NGINX代理使用,你也可以直接访问9000端口

/prometheus-data

/prometheus-data 是 prometheus的数据目录

/etc/prometheus/prometheus.yml

/etc/prometheus/prometheus.yml是prometheus主配置

代码语言:javascript复制

# 抓取规则
global:
scrape_interval: 15s # 抓取间隔
evaluation_interval: 15s # 评估间隔
# 触发规则
rule_files:
- /etc/prometheus/rules/*.rules
# alert告警服务器
alerting:
alertmanagers:
- static_configs:
- targets: ['域名/服务器 端口']
# 监控客户端列表
scrape_configs:
- job_name: "测试服务器"
static_configs:
- targets: ['域名/IP:9100']
labels:
name: "1号服务器"
group: "测试服务器"
- targets: ['域名/IP:9100']
labels:
name: "2号服务器/编译/监控"
group: "测试服务器"
- job_name: "应用服务器"
static_configs:
- targets: ['域名/IP:9100']
labels:
name: "邮件服务器"
group: "应用服务器"
- targets: ['域名/IP:9100']
labels:
name: "测试服务器"
group: "应用服务器"


 
 
 

/etc/prometheus/rules

/etc/prometheus/rules主要是存放告警规则的目录

举例:hoststats-alert.rules

代码语言:javascript复制

groups:
- name: hostStatsAlert
rules:
- alert: CPU告警
expr: (1 - avg(rate(node_cpu_seconds_total{vendor=~"",account=~"",mode="idle",name=~".*.*"}[5m])) by (name)) * 100 > 85
for: 1m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.name }} CPU usgae high"
description: "{{ 
- alert: 内存告警
expr: (1 - (node_memory_MemAvailable_bytes{vendor=~"",account=~"",name=~".*.*"} / (node_memory_MemTotal_bytes{vendor=~"",account=~"",name=~".*.*"})))* 100 > 95
for: 1m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.name }} MEM usgae high"
description: "{{ 
- alert: 磁盘告警
expr: max((node_filesystem_size_bytes{vendor=~"",account=~"",name=~".*.*",fstype=~"ext.?|xfs"}-node_filesystem_free_bytes{vendor=~"",account=~"",name=~".*.*",fstype=~"ext.?|xfs"}) *100/(node_filesystem_avail_bytes {vendor=~"",account=~"",name=~".*.*",fstype=~"ext.?|xfs"} (node_filesystem_size_bytes{vendor=~"",account=~"",name=~".*.*",fstype=~"ext.?|xfs"}-node_filesystem_free_bytes{vendor=~"",account=~"",name=~".*.*",fstype=~"ext.?|xfs"})))by(name) > 80
for: 1m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.name }} DISK usgae high"
description: "{{ 
- alert: 主机宕机
expr: up == 0
for: 1m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.name }} 停止工作"
description: "{{ 
 
 
 

当配置完成并启动容器后,访问服务端 9000端口即可访问

主页

是否有触发

具体规则查看

0 人点赞