IDC网络质量监控之(九)数据展示与告警篇(安装并调试prometheus_alertmanager+grafana+dingtlak)

第一步:安装grafana

1、安装grafana
    wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm
    sudo yum localinstall grafana-6.5.2-1.x86_64.rpm

2、修改grafana通知url
    #修改通知url,添加如下一句    vi /etc/grafana/grafana.ini 
    root_url = http://xx.xxx.com:3000

3、启动,开机启动,端口是3000,默认用户名密码 admin admin,首次登录要求修改密码
    systemctl start grafana-server
    systemctl enable grafana-server

4、登录grafana添加Prometheus数据源
    设置数据源,数据源名称,类型,ip地址,端口号
    http://xx.xxx.com:3000/login

分别创建延时和丢包图
创建延时图


创建丢包图


配置grafana辅助告警

第二步:安装alertmanager

#下载。解压,重命名
    wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
    tar xf alertmanager-0.20.0.linux-amd64.tar.gz -C /root
    rm -rf alertmanager-0.20.0.linux-amd64.tar.gz
    mv alertmanager-0.20.0* alertmanager

第三步:安装prometheus-webhook-dingtalk

#1、下载。解压,重命名
    wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v1.4.0/prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
    tar xf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz -C /root
    rm -rf prometheus-webhook-dingtalk-1.4.0.linux-amd64.tar.gz
    mv prometheus-webhook-dingtalk-1.4.* prometheus-webhook-dingtalk

#2、调整prometheus-webhook-dingtalk配置文件
    cat /root/prometheus-webhook-dingtalk/config.yml 

timeout: 5s
templates:
  - /root/prometheus-webhook-dingtalk/template.tmpl
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=f57b7344aa1df50176927c62sasasasad46489d970f199695f4b53e4a17dff
#3、(这个模板的格式很重要,因为Prometheus默认是推送的json格式给webhook,后面把他推送出来的格式贴出来)创建prometheus-webhook-dingtalk 的通知模板文件,原本的模板文件可以在gihub上看到https://github.com/timonwong/prometheus-webhook-dingtalk/blob/master/template/default.tmpl

    cat /root/prometheus-webhook-dingtalk/template.tmpl   ##下面的内容是一个文件,直接复制即可


{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{ end }}

{{ define "default.__text_alert_list" }}{{ range . }}
**告警级别:** \[{{ .Labels.severity | upper }}\]

**告警目标:** {{ .Annotations.summary }}

**触发时间:** {{ .StartsAt.Format "2006-01-02 15:04:05" }}

**恢复时间:** {{ .EndsAt.Format "2006-01-02 15:04:05" }}

**告警详情:**
#### {{ .Annotations.description }}
**快速查看URL:** [>✪<]({{ .GeneratorURL }})

**--------------分割线---------------**
{{ end }}{{ end }}

{{/* Default */}}
{{ define "default.title" }}{{ template "__subject" . }}{{ end }}
{{ define "default.content" }}#### \[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}\] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})**
{{ if gt (len .Alerts.Firing) 0 -}}
**告警状态:** [触发告警]
{{ template "default.__text_alert_list" .Alerts.Firing }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
**告警状态:** [恢复]
{{ template "default.__text_alert_list" .Alerts.Resolved }}
{{- end }}
{{- end }}

这是用上面模板推送出来的告警样例

4、调试并将prometheus-webhook-dingtalk 写入开机自启服务,默认会监听8060端口
    /root/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk   --config.file=/root/prometheus-webhook-dingtalk/config.yml --web.enable-ui
    #--web.enable-ui 是将自带的 UI界面开启,便于测试 模板的通知的形式,url http://localhost:8060

#编写开机自启服务
    cat /etc/systemd/system/dingtalk.service 

[Unit]
Description=prometheus-webhook-dingtalk
After=network-online.target

[Service]
User=root
Group=root
ExecStart=/root/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk   --config.file=/root/prometheus-webhook-dingtalk/config.yml --web.enable-ui
Restart=on-failure

[Install]
WantedBy=multi-user.targe

#启动并加入开机自启动
    systemctl start dingtalk.service
    systemctl enable dingtalk.service
5、配置alertmanager
    cat /root/alertmanager/alertmanager.yml

global:
  #处理超时时间,默认为5min
  resolve_timeout: 5m

# 定义路由树信息
route:
  # 报警分组依据,每个 group 只会定时产生一次通知,这就达到了降噪的效果
  group_by: ['alertname']

  #该节点中的警报会按'alertname'做 Group,当一个 AlertGroup 新建后,会等待10s秒钟的时间才会通告出去;每个分组可能会有不同的告警,其中最快每30s秒钟发送一条警报,同样的警报最多10分钟发送一次
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 10m

  # 发送警报的接收者的名称,以下receivers name的名称
  receiver: 'web.hook'

## 定义模板信心,因为默认会向webhook推送的josn信息,其格式可以查看官方文档,这里就不定义模板了,用默认即可
#templates:
#  - './template/*.tmpl'

# 定义警报接收者信息
receivers:
- name: 'web.hook'
  webhook_configs:
  # 发送已解决通知
  - send_resolved: true
    url: http://localhost:8060/dingtalk/webhook1/send

# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。 
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'job', 'instance']
6、调试并写入启动服务
#调试
    /root/alertmanager/alertmanager --config.file=/root/alertmanager/alertmanager.yml

#写入启动文件
    cat /etc/systemd/system/alertmanager.service 

[Unit]
Description=Alertmanager
After=network-online.target

[Service]
User=root
Group=root
ExecStart=/root/alertmanager/alertmanager --config.file=/root/alertmanager/alertmanager.yml 
Restart=on-abort

[Install]
WantedBy=multi-user.target

#启动并加入自启动
    systemctl start alertmanager
    systemctl enable alertmanager
7、调整Prometheus配置文件,将alertmanagers加入,并
#调整Prometheus配置文件,在prometheus.yml 里面加入这两个段儿
    cat /root/prometheus/prometheus.yml

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ["localhost:9093"]
rule_files:
   - "./rules/*.yml"


8、创建Prometheus告警目录及文件
#创建Prometheus告警规则目录及文件
    mkdir /root/prometheus/rules/
    cat /root/prometheus/rules/DLDC_loss_rules.yml 

#注意我们把变量模板化了,如{{$labels.datacenter}} 以及 {{$labels.job}}等等
groups:
  - name: 国内机房丢包告警
    rules:
    - alert: 上海通联机房--丢包增大
      expr: (1-(sum_over_time(probe_success{datacenter='上海通联',job=~"DL_.*."}[1m])/10)) &gt; 0.4
      for: 3m
      labels:
        severity: warning
      annotations: 
        #建议写上summary describipton
        summary: "{{$labels.datacenter}}:{{$labels.instance}}"
        description: "{{$labels.job}}-To-{{$labels.datacenter}}-{{$labels.ISP}}-{{$labels.user}}-{{$labels.instance}}-丢包{{$value}}-{{$labels.foe}}-{{$labels.other}}"


#重载Prometheus 配置
    curl -X POST http://localhost:9090/-/reload

第四、alermanager 告警管理,可以通过web页面进行沉默让一些告警不推送出来

附Prometheus推送给webhook的json格式的告警数据

#Alertmanager将以以下JSON格式向配置的端点发送HTTP POST请求:
#注意prometheus-webhook-dingtalk 模板中调用命令的写法
{
  "version": "4",
  "groupKey": xx,    // key identifying the group of alerts (e.g. to deduplicate)
  "status": "[resolved|firing]",
  "receiver": xx,
  "groupLabels": xx,
  "commonLabels": xx,
  "commonAnnotations": xx,
  "externalURL": xx,  // backlink to the Alertmanager.
  "alerts": [
    {
      "status": "xx",
      "labels": xx,
      "annotations": xx,
      "startsAt": "xx",
      "endsAt": "xx",
      "generatorURL": xx // identifies the entity that caused the alert
    },
    ...
  ]
}

附参考文章,及参考dingtlak模板

http://www.songjiayang.com/posts/alertmanager-mo-ban-zhong-shi-jian-format
https://aleiwu.com/post/alertmanager/

Combining alert conditions

附grafana及Prometheus 实用查询语句

#TCP监控延迟查询语句
    probe_duration_seconds{job=~'DL_*.*TCP'}

#ICMP监控延迟查询语句(注意通配,不包含的写法)
    probe_icmp_duration_seconds{ phase='rtt',datacenter='IKG-香港', job=~'DL_.*.'}
    probe_icmp_duration_seconds{ phase='rtt',datacenter='IKG-香港', job!='DL_IKG'}

#丢包率监控查询语句(icmp&tcp通用)
    1-(sum_over_time(probe_success{job=~'DL_*.*TCP'}[1m])/60)
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/905.html
微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2020/2/22作者: 辣条①号

1 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. huajx huajx说道:
    -49#

    厉害