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

介绍
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

#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安装在客户端上,其他都在服务端上既可。

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主配置

# 抓取规则
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

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: "{{ $labels.name }} CPU usage above 85% (current value: {{ $value }})"
- 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: "{{ $labels.name }} MEM usage above 95% (current value: {{ $value }})"
- 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: "{{ $labels.name }} DISK usage above 80% (current value: {{ $value }})"
- alert: 主机宕机
expr: up == 0
for: 1m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.name }} 停止工作"
description: "{{ $labels.name }} 宕机超过1分钟 (current value: {{ $value }})"

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

主页

在这里插入图片描述
是否有触发

在这里插入图片描述
具体规则查看

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值