监控平台prometheus+grafana+snmp_explorer+blackbox_exporter+alertmanager

一、背景介绍

公司需要监控交换机和IP设备,能够放在展示屏幕,及时发出告警信息。网上有很多监控软件,prometheus系列已经能够满足我们需求。prometheus功能强大,本次只用到一部功能。咱们先把基本的部署安装好,后续各种参数,还需要继续去研究。唯一不好的是,需要配置很多命令,对初学者和非技术人员,存在一定门槛,但这也形成比较高的自由度。

二、部署环境

服务器:

12核32G

操作系统

CentOS Linux release 7.6

注意点

建议部署前,关闭系统防火墙,后期调试完毕,再添加放行端口。

三、结构图

Grafana作为展示界面,Prometheus作为核心,调用snmp_explorter和blackbox_explorter监控模块,使用Alertmanager作为报警模块,形成一个完整的结构。
image

四、部署步骤

1、prometheus核心

下载安装包
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
解压安装文件
tar -xf prometheus-2.37.0.linux-amd64.tar.gz
新建用户组
groupadd -r prometheus
新建用户加入组
useradd -r -g prometheus -d / -s /sbin/nologin -c "prometheus user" prometheus
创建目录
mkdir /etc/prometheus
mkdir /home/prometheus
迁移文件夹
cp prometheus-2.37.0.linux-amd64/prometheus /usr/local/bin/
迁移配置文件夹
cp prometheus-2.37.0.linux-amd64/prometheus.yml /etc/prometheus/
赋予权限
chown -R prometheus:prometheus /etc/prometheus
chown -R prometheus:prometheus /home/prometheus/
创建启动脚本
vi /usr/lib/systemd/system/prometheus.service

点击查看代码
[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/home/prometheus \
--storage.tsdb.retention=15d \
--web.read-timeout=5m \
--web.max-connections=10 \
--query.max-concurrency=20 \
--query.timeout=2m \
--web.enable-lifecycle
Restart=on-failure
[Install]
WantedBy=multi-user.target

调试命令
systemctl enable prometheus
systemctl start prometheus
systemctl restart prometheus
systemctl status prometheus
检查服务是否启动
netstat -anlptu|grep :9090

tcp6 0 0 ::1:49954 ::1:9090 ESTABLISHED 16429/prometheus

验证
打开设备ip端口
http://192.168.0.212:9090

2、grafana模块

Grafana作为展示平台
下载安装
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.6-1.x86_64.rpm
sudo yum install grafana-enterprise-9.0.6-1.x86_64.rpm
调试
sudo /sbin/chkconfig --add grafana-server
启动
sudo service grafana-server start
验证
打开设备ip端口,默认账号admin,密码admin
http://192.168.0.212:3000

3、snmp_explorer模块

snmp_explorer作为获取snmp参数的模块。
下载
wget https://github.com/prometheus/snmp_exporter/releases/download/v0.19.0/snmp_exporter-0.19.0.linux-amd64.tar.gz
解压
tar -xf snmp_exporter-0.19.0.linux-amd64.tar.gz
创建目录
mkdir /opt/snmp_exporter
复制
mv snmp_exporter-0.19.0.linux-amd64 /opt/snmp_exporter
设置开机启动
/etc/systemd/system/snmp_exporter.service

点击查看代码
[Unit]
Description=node_exporter
After=network.target

[Service]
ExecStart=/opt/snmp_exporter/snmp_exporter --config.file=/opt/snmp_exporter/snmp.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

验证
打开设备ip端口
http://192.168.0.212:9116

4、blackbox_exporter模块

blackbox_exporter作为获取ping模块,包含DNS/SSL证书/TCP/端口检测
下载
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.15.1/blackbox_exporter-0.15.1.linux-amd64.tar.gz
解压
tar xf blackbox_exporter-0.15.1.linux-amd64.tar.gz
新建目录
mkdir /opt/blackbox_exporter
复制
mv blackbox_exporter-0.15.1.linux-amd64 /opt/blackbox_exporter
设置开机启动
/etc/systemd/system/blackbox_exporter.service

点击查看代码
[Unit]
Description=node_exporter
After=network.target

[Service]
ExecStart=/opt/blackbox_exporter/blackbox_exporter-0.15.1.linux-amd64/blackbox_exporter --config.file=/opt/blackbox_exporter/blackbox_exporter-0.15.1.linux-amd64/blackbox.yml

Restart=on-failure

[Install]
WantedBy=multi-user.target

验证
打开设备ip端口
http://192.168.0.212:9115

5、alertmanager模块

alertmanager作为告警模块,邮件、钉钉企业微信都可以设置。
下载
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
解压
tar -xf alertmanager-0.21.0.linux-amd64.tar.gz
新建目录
mkdir /opt/alertmanager
复制
mv alertmanager-0.21.0.linux-amd64 /opt/alertmanager

设置开机启动
/etc/systemd/system/alertmanager.service

点击查看代码
[Unit]
Description=node_exporter
After=network.target

[Service]
ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml \
  --storage.path=/opt/alertmanager/data \
  --data.retention=24h --web.listen-address=0.0.0.0:9093 \
  --cluster.listen-address=0.0.0.0:9094  \
  --cluster.advertise-address=0.0.0.0:9094

Restart=on-failure

[Install]
WantedBy=multi-user.target


验证
这个功能需要调试了参数,才能验证效果

五、效果测试

以上作为安装和验证单一功能的调试,属于基础版本,调试核心的配置,把各自的功能关联起来。

常用命令与路径

平台 常用命令 用途
prometheus /etc/prometheus/prometheus.yml 配置文件
curl -X POST http://127.0.0.1:9090/-/reload 热重启
systemctl restart prometheus 重启
systemctl status prometheus 状态
netstat -ntlp 查看服务状态
snmp_exporter /opt/snmp_exporter/snmp.yml 配置文件
systemctl restart snmp_exporter 重启
systemctl status snmp_exporter 状态
blackbox_exporter /opt/blackbox_exporter/blackbox_ecporter/blackbox.yml 配置文件
systemctl restart blackbox_exporter 重启
systemctl status blackbox_exporter 状态
grafana /etc/grafana/grafana.ini 配置文件
service grafana-server restart 重启
service grafana-server status 状态

模块关联

prometheus+snmp_exporter

在prometheus配置文件,设置snmp_exporter的地址127.0.0.1:9116,关联成功。

点击查看代码
  - job_name: 'network-switch'
    scrape_interval: 100s
    scrape_timeout: 80s

    static_configs:
      - targets: ['10.10.0.254']

    metrics_path: /snmp
    params:
      module: [if_mib]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9116

验证:重启服务后,打开prometheus网页http://192.168.0.212:9090 点击Status-Targets,可以看到相关的数据已经展示。
image

prometheus+blackbox_exporter

在prometheus配置文件,设置snmp_exporter的地址127.0.0.1:9115,关联成功。

点击查看代码
  - job_name: "IPPing"
    scrape_interval: 40s
    scrape_timeout: 20s
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
    - targets: 
      - 10.10.0.248
      - 10.60.0.25
      - 192.168.0.23
      labels:
        group: 核心设备 
        blackbox: 'Ping'

    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115

验证:重启服务后,打开prometheus网页http://192.168.0.212:9090 点击Status-Targets,可以看到相关的数据已经展示。
image

prometheus+grafana

打开grafana网页版,设置-Data sources,选择Prometheus,输入prometheus地址,即可关联成功。
image
验证:重启服务后,打开grafana网页http://192.168.0.212:3000 点击Dashboards-browse,创建监控图。
前期可以使用模板,参考一些,个人建议熟悉命令后,自己自定义调试。
模板-Dashboards-+Import,输入模板编号。
模板编号:12489
11169
image

prometheus+alertmanager_exporter

六、模块调试

snmp_exporter调试

Prometheus调用snmp_exporter模块获取到的信息,通过刚才的关联,提供给Prometheus使用,grafana读取Prometheus的snmp_exporter。所以,关键第一步是调试好snmp_exporter模块。
1、交换机设备设置
在交换机添加团体字
snmp-agent community read cipher kkroot
snmp-agent sys-info version v2c
2、在Prometheus配置文件添加交换机IP地址

点击查看代码
  - job_name: 'network-switch'
    scrape_interval: 100s
    scrape_timeout: 80s

    static_configs:
      - targets: ['10.10.0.254']
3、使用snmp_exporter验证是否能获取到交换机的snmp信息 方法1、使用网页端 登录http://192.168.0.212:9116 输入10.10.0.254,等待获取信息。

image
等待一会,获取以下信息
image

方法2、在服务器使用snmpwalk检查
snmpwalk -v 2c -c kkroot 10.10.0.254
image
4、验证
获取Inbound方向流量
(这些参数是根据刚才网页端得到的snmp里面的信息,调试出来的参数)
rate(ifInOctets{instance="10.10.0.254", ifName="GigabitEthernet0/0/23"}[5m]) * 8 / 1000000

image

blackbox_exporter调试

思路与刚才的snmp_exporter一样,可以自行思考下,比较简单
1、在Prometheus配置文件添加监控设备的IP地址

点击查看代码
  - job_name: "IPPing"
    scrape_interval: 40s
    scrape_timeout: 20s
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
    - targets: 
      - 10.10.0.248

2、使用blackbox_exporter验证是否能获取到Ping的IP信息。
登录http://192.168.0.212:9115/ 点击10.10.0.248的信息
image
可以查询到监控返回的信息
image
3、展示
probe_duration_seconds{group="核心设备"} * 1000

image

alertmanager调试

在prometheus配置文件,设置alertmanager的地址127.0.0.1:9093,开启rule_files规则关联成功。

点击查看代码
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 127.0.0.1:9093

rule_files:
   - "rules/*.rules"
  # - "second_rules.yml"

1、添加邮箱告警方式

点击查看代码
[root@monitor ~]# cat /opt/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'c1.xxxxxx.net:25'
  smtp_from: '111@kkroot.com'
  smtp_auth_username: '111@kkroot.com'
  smtp_auth_password: 'kkroot1234'

route:                       #配置警告发送,接受规则
  group_by: ['alertname']    #根据标签分组
  group_wait: 2m            #发送告警等待时间,为了合并相同告警一起发送
  group_interval: 5m        #发送告警间隔时间
  repeat_interval: 30m        #重复告警时间,控制发送告警频率
  receiver: 'web.hook'

receivers:
- name: 'web.hook'
  email_configs:
  - to: "kkkkkkk@qq.com"
    html: '{{template "email.to.html" .}}'
    send_resolved: true
    headers: {Subject: "监控告警"}
  - to: "qqqqqqqq@qq.com"
    html: '{{template "email.to.html" .}}'
    send_resolved: true
    headers: {Subject: "监控告警"}

2、设置规则

点击查看代码
[root@monitor rules]# pwd
/etc/prometheus/rules
[root@monitor rules]# cat icmp.rules 
groups:
- name: icmp_rules
  rules:
  - alert: Ping监控
    expr: probe_success == 0
    for: 5m
    labels:
      serverity: error
    annotations:
      summary: "设备离线"

3、验证效果
打开promethus平台,点击Alerts可看到规则。关掉10.10.0.248主机,可收到监控邮件。
image

七、故障处理

1、prometheus目标主机提示文本太长
修改超时时间,注意有空格
scrape_interval: 40s
scrape_timeout: 20s

posted @ 2022-09-16 17:22  rootkk  阅读(1163)  评论(0编辑  收藏  举报