Grafana+钉钉告警之小细节
读完需 4 分钟
速读需 2 分钟
简述
依托于多数据源的特性,Grafana可以说是运维监控中不可缺少的一环,可以将运维过程中隔离的数据进行集中展示,如:Zabbix主机资源、ELK流量、MySQL运营数据、容器监控等等。
其中Grafana最新版本v8.0对告警系统的重构,也足以看出官方对Grafana在监控告警方面的重视。另外,阿里云云监控、蓝鲸监控等场景也都有Grafana的影子,也说明了用户对其不同程度的依赖。
言归正传,对于Grafana钉钉告警不是什么新鲜事,关键在于当grafana告警渠道配置"Include image",而此时grafana又位于内网服务器无法上网,钉钉告警如何包含图片截图,就成了我们需要面对的问题。
告警渠道
1.钉钉添加机器人
新建“统一监控告警平台”,通过“智能群助手”添加钉钉机器人,一般选择 自定义(通过Webhook接入自定义服务)类型的机器人。
2.Grafana添加钉钉告警渠道
"Alerting"---"Notification channels"---"New channel",新建告警渠道。
其中:
Url 为钉钉机器人的Webhook地址;
Message Type 为消息类型,我们选择AutoCard;
告警设置,我们选择"Include image",告警包含截图并关闭问题解决信息;
图片渲染
当告警渠道开启"Include image",意味着Grafana需要与警报规则关联dashboard呈现为 PNG 图像,并将其包含在通知中,此时就需要配置图片渲染功能。
图片渲染需要额外安装一个在后台运行的插件,将渲染面板和仪表板处理为 PNG 图像。
图片渲染服务的部署直接通过grafana-cli直接安装或Docker安装,部署位置可以是本机或者远程服务器,比较灵活。
1. 安装插件
# 安装依赖包
yum install -y libXcomposite libXdamage libXtst cups libXScrnSaver pango atk adwaita-cursor-theme adwaita-icon-theme at at-spi2-atk at-spi2-core cairo-gobject colord-libs dconf desktop-file-utils ed emacs-filesystem gdk-pixbuf2 glib-networking gnutls gsettings-desktop-schemas gtk-update-icon-cache gtk3 hicolor-icon-theme jasper-libs json-glib libappindicator-gtk3 libdbusmenu libdbusmenu-gtk3 libepoxy liberation-fonts liberation-narrow-fonts liberation-sans-fonts liberation-serif-fonts libgusb libindicator-gtk3 libmodman libproxy libsoup libwayland-cursor libwayland-egl libxkbcommon m4 mailx nettle patch psmisc redhat-lsb-core redhat-lsb-submod-security rest spax time trousers xdg-utils xkeyboard-config
# 安装
grafana-cli plugins install grafana-image-renderer
# 重启
systemctl restart grafana-server
2.图片渲染
在dashboard中"share"---"Direct link rendered image" 可渲染图片。
注意:默认配置下,Link URL的地址"http://localhost:3000"。若要更改其地址,需要修改相应的配置文件,请继续往下看。
上图是渲染生成的图片,默认存放位置为"/var/lib/grafana/png"。
如果图片的标题“流量测试”为乱码,则原因可能有以下两种:
时区及语言不对;
系统中没有中文字体;
注意: 一般情况下在修改时区及语言无效后,可考虑是缺少字体问题导致。
可通过以下方式解决:
# 1.时区或语言问题
# 修改全局配置文件或默认配置文件
vim /usr/share/grafana/conf/defaults.ini
vim /etc/grafana/grafana.ini
# 添加如下
[plugin.grafana-image-render]
rendering_timezone = Asia/Shanghai
rendering_language = zh-CN,zh;q=0.9
# 重启
systemctl restart grafana-server
# 2.缺少中文字体
# 确认是否存在中文字体
fc-list :lang=zh
# 安装字体
将C:\Windows\Fonts 下的字体 放到Linux服务器/usr/share/fonts目录下
# 安装字体
cd /usr/share/fonts
mkfontscale
mkfontdir
fc-cache
# 再次确认
fc-list :lang=zh
3.配置文件
# 修改全局配置文件
vim /usr/share/grafana/conf/defaults.ini
[rendering]
# 远程渲染服务地址,如果使用grafana-cli部署可忽略;
server_url=
# 本地grafana地址
callback_url=
# 图片渲染并发数,防止服务器负载过高;
concurrent_render_request_limit = 30
另外,渲染的图片每10分钟后自动清理,我们可以通过调整" temp-data-lifetime " 参数来重新定义清理时间。
钉钉告警
钉钉告警关键在于,当grafana服务器在内网并且无法访问公网,此时钉钉就无法获取渲染的图片。而官网文档的解决方式是将渲染图片上传至可公网访问的外部图像存储,这样钉钉就可以直接访问外部图像存储来解决图片无法访问的问题。
Grafana支持的存储有s3、webdav、gcs、azure_blob、local,我们一般使用local本地存储,那么我们如何解决公网访问问题呢?
1.公网nginx代理
相信我们的生产环境肯定会有统一的公网nginx访问入口,我们只需要做一层代理即可。
vim grafana.test.com.conf
server {
listen 80;
listen 443 ssl;
server_name grafana.test.com;
underscores_in_headers on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://10.16.202.250:3000;
}
}
2.grafana配置
vim /usr/share/grafana/defaults.ini
[server]
protocol = http
# 默认为localhost
http_addr =
# 启动端口
http_port = 3000
# 绑定域名
domain = grafana.test.com
enforce_domain = false
# 访问地址
root_url = http://grafana.test.com/
serve_from_sub_path = false
经以上配置,就能解决公网访问grafana问题。一旦触发告警阈值,钉钉就会报警。
此时由于钉钉没有访问到图片,因此是404。此时需要开启的local本地存储。
vim /usr/share/grafana/defaults.ini
[external_image_storage]
provider = local
总结
Grafana+钉钉只是告警渠道的其中之一,这种方式没有告警收敛、告警静默等功能,如果阈值设置不合适,很容易导致告警泛滥。因此我们还可以使用alertmanager告警渠道,具体配置请参看《grafana+alertmanager实现微信报警》。
另外,如果grafana的访问考虑到安全问题,不想完全对外开放,需要在nginx设置黑白名单,此时首先要允许钉钉公网IP可以访问,否则告警时图片不会正常显示。
运维思索:cmdb打通zabbix、jumpserver探索
你与世界
只差一个
公众号