第一步:安装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 ##下面的内容是一个文件,直接复制即可
# 注意这行是为了解决 alertmanager使用utc时间,导致告警时间比北京时间慢8小时(不要该里面的任何数字,不然时间不准确)
# **触发时间:** {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ 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.Add 28800e9).Format "2006-01-02 15:04:05" }}
**恢复时间:** {{ (.EndsAt.Add 28800e9).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.target
#启动并加入开机自启动
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)) > 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/
https://www.robustperception.io/combining-alert-conditions
https://www.jianshu.com/p/eae67b770c3e
附grafana及Prometheus 实用查询语句
#TCP&HTTP监控延迟查询语句
probe_duration_seconds{job=~'DL_*.*TCP'}
probe_duration_seconds{job=~'DL_*.*HTTP'}
#查看web页面的大小变化(在http监控里面使用)
probe_http_content_length
#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)
#通用查询语句(不指定查询语句,只写目标,会显示出所有与该目标相关的语句,选择你需要的就行)
{instance='192.168.100.1',job='DL_广州移动'}
附 Prometheus如何删除历史数据,记得之前Prometheus的配置文件要开启api,--web.enable-admin-api
删除指定job的历史数据,(他不会立即删除,会在后期进行整理时删除)
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={job="上海双线"}'
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={job="广州移动"}'
删除指定instance的历史数据
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={instance="10.244.2.158:9090"}'
删除指定标签lable 的数据 ,如这里删除 ISP=优化带宽 的所有数据
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={ISP="优化带宽"}'
删除所有数据
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={__name__=~".+"}'
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论