使用prometheus监控node_exporter告警案例

测试案例:

非常简单的一个直观演示prometheus案例,个人感觉远比官方random那个好多了!
覆盖功能组件全,监测内容完全可控,而且更加直观。当然有几个PromQL其实都大同小异。

1.使用node_exporters监控文件夹,文件夹内部文件由用户自己输入,为方便看prometheus的图表效果,写了个自动生成脚本gen.sh,用于每隔固定时间生成一个记录。

2.用户开始测试时,手动输入metrics,用于演示alter从 inactive->Pending->Firing 同时,可以演示在altermanager中接收到alter告警。

3.altermanager接收到告警后如何处理,本文没有实现,其实要测试很简单,将默认altermanager.yml中http改为随便一台nc-lk port主机,如文中发送XXX:9002,那么在XXX主机上nc -lk 9002即可,即可接收到altermanager发来的完整json数据。
g

具体步骤

下载安装go环境略,也可以使用docker来测,相关版本:
主机:host01
版本:
linux: centos7
go: go version go1.13.8 linux/amd64

安装目录:
使用prometheus监控node_exporter告警案例_第1张图片
1.

# 目录过长建立链接
ln -s /opt/k8s/node_exporter-0.18.1.linux-amd64 /opt/node_exporter
  1. 启动node_exporter
# 关闭其他监控,默认全部都是开启,导致node_exporter/metrics下指标太多,不直观
./node_exporter --collector.textfile.directory="/opt/node_exporter/statistic" \
 --no-collector.arp \
 --no-collector.bcache \
 --no-collector.bonding \
 --no-collector.conntrack \
 --no-collector.cpu \
 --no-collector.cpufreq \
 --no-collector.diskstats \
 --no-collector.edac \
 --no-collector.entropy \
 --no-collector.filefd \
 --no-collector.filesystem \
 --no-collector.hwmon \
 --no-collector.infiniband \
 --no-collector.ipvs \
 --no-collector.loadavg \
 --no-collector.mdadm \
 --no-collector.meminfo \
 --no-collector.netclass \
 --no-collector.netdev \
 --no-collector.netstat \
 --no-collector.nfs \
 --no-collector.nfsd \
 --no-collector.pressure \
 --no-collector.sockstat \
 --no-collector.stat \
 --no-collector.time \
 --no-collector.timex \
 --no-collector.uname \
 --no-collector.vmstat \
 --no-collector.xfs \
 --no-collector.zfs 

3.手动输入metrics

# 写入数据 ,可直接修改文件,必须.prom后缀
echo 'demo{date="20200304"} 1' >  /opt/node_exporter/statistic/demo.prom

4.脚本自动生成数据

# 用脚本每隔5s生成记录
[root@host01 node_exporter]# vim gen.sh 
#!/bin/bash  
function rand(){
        min=$1
        max=$(($2-$min+1))
        num=$(($RANDOM+1000000000))
        echo $(($num%$max+$min))  
}
rnd=$(rand 400000 500000)
while :
do
        sleep 5
        rnd=$(rand 40 200)
        echo 'demo{date="20200304"}'+${rnd} >  /opt/node_exporter/statistic/demo.prom
done
exit 0

5.增加prometheus监控节点

# 修改prometheus.yml,增加监控对象
  - job_name: 'demo_job'
    scrape_interval: 3s
    static_configs:
      - targets: ['host01:9100']

6.增加prometheus告警规则

# 修改prometheus.yml,新增告警规则
rule_files:
  - 'demo.rules.yml'

告警规则具体内容

# 告警规则内容,监控demo指标是否大于等于140,如果大于则判断3是否持续30秒
[root@host01 prometheus-2.16.0.linux-amd64]# cat demo.rules.yml 
groups:
- name: demo-alert
  rules:
  - alert: demo-monitor
    expr: demo > 140
    for: 3m
    labels:
      bp: hypertension
    annotations:
      company: "demo"
      desc: "current value:{{ $value }}"

7.altermanager安装

altermanager告警处理配置

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://host03:9002/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

prometheus server端 ,增加altermanager节点监控

# 修改prometheus.yml,新增alertmanager
alerting:
  alertmanagers:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306092831160.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hcl9samg=,size_16,color_FFFFFF,t_70)
    static_configs:
      - targets: ['host01:9093']

8.完整prometheus server配置文件

# 完整server配置
[root@host01 prometheus-2.16.0.linux-amd64]# cat prometheus.yml
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s   # 每15s处理下是否metrics满足rule_files配置的条件
  external_labels:
    monitor: 'demo-monitor'
rule_files:
  - 'demo.rules.yml'
scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    scrape_interval: 5s   # 覆盖全局的抓取数据配置
    static_configs:
      - targets: ['host01:9090']

  - job_name: 'demo_job'
    scrape_interval: 3s
    static_configs:
      - targets: ['host01:9100']

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['host01:9093']

9.演示:

最初没有告警:
使用prometheus监控node_exporter告警案例_第2张图片
当出现告警:进入pending状态,等待配置的for时长三分钟,进入Firing状态并发送给altermanager
使用prometheus监控node_exporter告警案例_第3张图片
三分钟后altermanager接收到告警:
使用prometheus监控node_exporter告警案例_第4张图片

你可能感兴趣的:(其他相关)