1.项目背景
已经搭建有了EFK(elasticsearch+filebeat+kibana)日志分析平台,而业务侧需要根据收集到的应用日志进行告警通知到对应的人员进行排查处理,但kibana提供的告警功能,需要付费许可才能使用webhook等方式进行外部通知,因此选择grafana来完成监控预警
grafana服务使用docker部署,将主机目录挂载到容器
2.部署grafana
#创建grafana用户
useradd -m grafana
#拉取docker镜像
docker pull grafana/grafana-enterprise:10.4.1
#运行grafana
docker run -d --name=grafana -p 3000:3000 grafana/grafana-enterprise:10.4.1
mkdir -p /home/grafana/config
#将配置文件从容器中拷贝出来
docker cp grafana:/etc/grafana/grafana.ini /home/grafana/config/grafana.ini
#将要存到宿主机的目录内容拷贝出来
#1.复制到宿主机临时目录
mkdir -p /home/grafana/data_tmp/
mkdir -p /home/grafana/grafana_home_tmp/
mkdir -p /home/grafana/provisioning_tmp/
docker cp grafana:/var/lib/grafana /home/grafana/data_tmp/
docker cp grafana:/usr/share/grafana /home/grafana/grafana_home_tmp/
docker cp grafana:/etc/grafana/provisioning /home/grafana/provisioning_tmp/
#2.从临时目录复制到所需目录
mkdir -p /home/grafana/data/
mkdir -p /home/grafana/grafana_home/
mkdir -p /home/grafana/provisioning/
cp -R /home/grafana/data_tmp/grafana/* /home/grafana/data/
cp -R /home/grafana/grafana_home_tmp/grafana/* /home/grafana/grafana_home/
cp -R /home/grafana/provisioning_tmp/provisioning/* /home/grafana/provisioning/
#3.删除临时目录
rm -rf /home/grafana/data_tmp/
rm -rf /home/grafana/grafana_home_tmp/
rm -rf /home/grafana/provisioning_tmp/
chmod -R 777 /home/grafana
docker stop grafana
docker rm grafana
#运行
#这里需要注意,之所以指定IP是因为grafana需要将es作为数据源,在grafana界面上需要填写数据源的地址,这里通过绑定到同一个docker network以达到使用内网地址通信
#docker network create elasticsearch --subnet 172.20.0.0/16 通过这个命令创建的network才可以支持不同的子网网段(为了保留es和kibana、grafana集群高可用的可能性)
docker run --name=grafana -v /home/grafana/config/grafana.ini:/etc/grafana/grafana.ini:ro -v /home/grafana/data:/var/lib/grafana -v /home/grafana/grafana_home:/usr/share/grafana -v /home/grafana/logs:/var/log/grafana -v /home/grafana/plugins:/var/lib/grafana/plugins -v /home/grafana/provisioning:/etc/grafana/provisioning -v /etc/localtime:/etc/localtime:ro --net elasticsearch --ip 172.20.2.2 -m 1GB -p 3000:3000 -d grafana/grafana-enterprise:10.4.1
启动好之后,通过浏览器访问 {domain}:3000 即可,默认账号密码都是 admin
3.配置grafana
3.1.添加数据源
3.2.创建Dashboard
保存第一个图表时,会需要填写Dashboard的信息
依次添加并排版即可
3.3.创建通知方式
3.3.1.创建通知方式
填写好之后可以点击"Test"按钮测试推送效果
3.3.2.配置通知模板(可选)
参考模板内容:
{{/* 定义消息体片段 */}}
{{ define "my_text_alert_list" }}{{ range . }}
所属环境:
{{ index .Labels.grafana_folder }}
oms_alert监控告警名称:
{{ index .Labels.alertname }}
告警详情:
{{ index .Annotations.summary }}
触发信息:
{{ index .Annotations.description }}
发生时间: {{ .StartsAt }}
{{ if eq .Status "resolved" }}
恢复时间: {{ .EndsAt }}
{{ end }}
{{ end }}{{ end }}
{{/* 定义消息体 */}}
{{ define "dingtalk.message" }}
{{ if gt (len .Alerts.Firing) 0 }}**--------发生告警---------**
{{ template "my_text_alert_list" .Alerts.Firing }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}**-------恢复告警------**
{{ template "my_text_alert_list" .Alerts.Resolved }}
{{ end }}
{{ end }}
注意:模板的标题需要和模板的名称一致,否则会导致消息无法发出(不知是版本问题还是设计如此)
3.4.配置通知策略
3.5.配置预警规则
添加预警规则有两种方式
3.5.1.在Dashboards中添加预警规则
3.5.2.直接添加自定义预警规则
3.5.3.配置预警规则
推荐使用Dashboards的方式添加,1是可以在图表中较为清晰的看到预警监测的指标信息,2是添加预警规则时会自动的带入Dashboards中图表的查询规则
4.遇到的问题
1.通知使用模板无法发送出去
在编辑通知模板时,模板名称需要和模板内容中设定的名称保持一致
2.通知发送到钉钉聊天窗口时,点击链接访问的是localhost
修改grafana.ini文件,找到 http_port domain root_url 三个参数,去除掉前面的分号,http_port domain两个参数填入自己实际的地址即可
5.术语解释
1. 预警列表的firing表示当前触发了多少个预警需要处理
6.参考
Grafana官方文档 Grafana open source documentation | Grafana documentation