使用prometheus采集数据,Grafana作为成图展示,Alertmanager输出告警
监控告警平台使用docker-compose运行
参考其他文档完成docker,docker-compose安装
基础环境
- 已完成docker,docker-compose安装
- centos7.9
- IP:192.168.3.10
- 已关闭防火墙及selinux(
/etc/selinux/config
中修改SELINUX
值为disable
) - 数据盘空间:根据存储时长及监控点数量估算(主要是prometheus数据)
- 创建监控文件夹
# 主监控文件夹
mkdir monitor
# 创建监控平台各个应用文件夹,以下均在主监控文件夹monitor中
# 创建prometheus文件夹
mkdir -p prometheus/data
chmod 777 data
# 创建Grafana文件夹
mkdir -p grafana/grafana-storage
chmod 777 grafana-storage
# 创建Alertmanager文件夹,规则文件夹,被采集设备信息文件夹
mkdir alert rules targets
编写docker-compose文件
编写docker-compose文件,运行监控告警平台;在monitor文件夹下新建monitor-docker-compose.yml
配置文件,具体参考如下(配置文件中的端口为默认,可根据需求自行修改测试):
version: '3.2'
services:
prometheus:
image: prom/prometheus
restart: "always"
ports:
- 9090:9090
container_name: "prometheus"
volumes:
- "./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml"
- "./rules:/etc/prometheus/rules"
- "./prometheus/data:/prometheus"
- "./targets:/etc/prometheus/targets"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
alertmanager:
image: prom/alertmanager:latest
restart: "always"
ports:
- 9093:9093
container_name: "alertmanager"
volumes:
- "./alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml"
- "./alert/template/:/etc/alertmanager/template/"
grafana:
image: grafana/grafana
restart: "always"
ports:
- 3000:3000
container_name: "grafana"
volumes:
- "./grafana/grafana-storage:/var/lib/grafana"
构建prometheus配置文件
在prometheus文件夹中新建配置文件prometheus.yml
,具体配置如下:
global:
scrape_interval: 15s # 多久 收集 一次数据
evaluation_interval: 15s # 多久 评估 一次规则
scrape_timeout: 10s # 每次 收集数据的 超时时间
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['192.168.3.10:9090']
labels:
instance: prometheus
# 此处为被监控节点信息,下面会说到这个文件
- job_name: node
file_sd_configs:
- files:
- ./targets/*.yml
refresh_interval: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.3.10:9093
# 以下为告警规则文件
rule_files:
- "/etc/prometheus/rules/*.yml"
构建Altermanager配置文件
此处测试告警外发至企业微信,Altermanager还支持外发钉钉,邮件等。具体可参考官网链接
global:
resolve_timeout: 1m
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_corp_id: '企业微信秘钥'
wechat_api_secret: '应用秘钥'
route:
receiver: 'monitor_node'
group_wait: 30s
group_interval: 5m
repeat_interval: 5m
group_by: [alertname]
routes:
- receiver: 'monitor_node'
group_wait: 10s
templates:
- "template/*.tmpl"
receivers:
- name: 'monitor_node'
wechat_configs:
- send_resolved: true
message: '{{ template "wechat.default.message" . }}'
to_party: 'id_num' # 机器人所在部门ID
agent_id: '应用ID' # 企业微信中创建的应用的ID
api_secret: '应用秘钥' # 企业微信中,应用的Secret
被监控节点安装node-exporter
以下实例压缩包安装方式,也可采用docker,docker-compose方式安装:
# 压缩包安装
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
# 写入服务
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart= /xxx/node_exporter # node-exporter目录
PrivateTmp=true
RestartSec=5
StartLimitInterval=0
Restart=always
[Install]
WantedBy=multi-user.target
# 重载配置
systemctl daemon-reload
被监控节点targets配置
这里使用file_sd_configs
方式采集被监控节点信息(node-exporter),其他方式可参考官方文档;跟据具体业务环境有多种方式可参考;
在targets
文件夹中新建node.yml
,参考配置如下:
- targets: ['192.168.3.11:9100']
labels:
instance: vm01
- targets: ['192.168.3.12:9100']
labels:
instance: vm02
- targets: ['192.168.3.13:9100']
labels:
instance: vm03
告警规则配置
这篇文章主要是提供监控-成图-告警的实现测试,非生产环境;具体的告警规则可结合实际环境来进行配置;
将规则配置文件放在rules
文件夹中,命名为*.yml
对应prometheus中的配置项。
具体可以参考官方配置
这里放一部分我的测试rules
配置==参考==:
groups:
- name: node-alert
rules:
- alert: node-down
expr: prometheus:up == 0
for: 1m
labels:
severity: 'critical'
annotations:
summary: "instance: {{ $labels.instance }} 宕机"
description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} 宕机"
value: "{{ $value }}"
instance: "{{ $labels.instance }}"
- alert: node-cpu-high
expr: prometheus:cpu:total:percent > 80
for: 3m
labels:
severity: info
annotations:
summary: "instance: {{ $labels.instance }} cpu 使用率高于 {{ $value }}"
description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} CPU使用率持续高于80% 。"
value: "{{ $value }}"
instance: "{{ $labels.instance }}"
- alert: node-cpu-iowait-high
expr: prometheus:cpu:iowait:percent >= 12
for: 3m
labels:
severity: info
annotations:
summary: "instance: {{ $labels.instance }} cpu iowait 高于 {{ $value }}"
description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} cpu iowait持续高于12%"
value: "{{ $value }}"
instance: "{{ $labels.instance }}"
运行测试环境
# 在monitor文件夹下运行
docker-compose -f monitor-docker-compose.yml up -d
# docker ps查看prometheus,Altermanager,Grafana三个容器状态
# web登陆Grafana管理页面,配置dashboard
运行环境测试正常后,可以在Altermanager管理页面继续测试告警的静默等功能,Grafana仪表盘导入位置参考下图:
Grafana仪表盘可在官方文档找到
鼠标悬停+
上边,选择Import
将从官网找到的
dashboard id
填入,并Load
即可。
END
- 排错可先查官方文档,学习内容丰富
- 每个步骤做好测试,缩小排查范围
- 欢迎交流指正~~