docker部署的grafana容器。主要是监控kolla部署下OpenStack的虚拟机和宿主机的状态警告。
设置相应的监控dashboard
/dandanfengyun/article/details/114540296
一、配置grafana配置文件。
如192.168.199.91,192.168.199.92两个计算节点
VIP为192.168.199.90
grafana 配置文件修改不管是 Email方式还是DingDing方式。
警报通知中会包含一个URL地址,通过该URL访问到grafana,配置文件中server段未设置root_url,默认
root_url = %(protocol)s://%(domain)s:%(http_port)s/
这样才能通过发送的notification通知打开grafana,默认的domain=localhost,所以默认情况下如果接收到警告的主机点击警告通知访问到的网址是http://localhost:3000
,是无法访问到grafana的,所以需要设置domain为vip,这样才能通过警告通知点击访问grafana。
设置domain为虚拟IP。
mkdir -p /etc/kolla/config/grafanamkdir /etc/kolla/config/grafana/compute-1mkdir /etc/kolla/config/grafana/compute-2
多个宿主机grafana配置文件区别只在于server段的设置。其他的设置如[paths],[database],[session],[analytics],[security] 等设置是一样的。
http_addr 本机的IP地址http_port 本机grafana的访问端口 默认3000domain 此处需要设置为 虚拟IP,因为设置虚拟IP后root_url=http://vip:3000,通过警告通知可以访问到grafana。
复制配置文件到config
cp /etc/kolla/grafana/grafana.ini /etc/kolla/config/grafana/compute-1/cp /etc/kolla/grafana/grafana.ini /etc/kolla/config/grafana/compute-2/
compute-1主机设置
vim /etc/kolla/config/grafana/compute-1/grafana.ini
[server]protocol = httphttp_addr = 192.168.199.91http_port = 3000router_logging = truestatic_root_path = publicenable_gzip = falsedomain = 192.168.199.90[alerting]enabled = trueexecute_alerts = true
compute-2主机设置
vim /etc/kolla/config/grafana/compute-2/grafana.ini
[server]protocol = httphttp_addr = 192.168.199.92http_port = 3000router_logging = truestatic_root_path = publicenable_gzip = falsedomain = 192.168.199.90[alerting]enabled = trueexecute_alerts = true
[alerting] 段可以不用设置。因为和未设置时默认的设定一致。
kolla加载使grafana 配置修改生效。
kolla-ansible reconfigure -i /etc/kolla/multinode
二、设置notification。
虽然有多个grafana节点,但是每个节点数据保存都是在同一个mysql数据库中,包括data source,dashboard和alert notification。所以,不用担心多个grafana也同时发送多个同样的警告通知。
警告通知的设置。在监控告警时选择以何种警告通知的方式将警告发送出去,如邮件,钉钉。可以选择多个警告通知方式。
1.钉钉警告通知设置
在grafana设置前,需要在钉钉群里设置一个自定义机器人。
选择一个要发送警告通知的群。点击右上角群设置 选项。
智能群助手-添加机器人
选择自定义。
可以设置机器人名字,添加到群组,以及安全设置。可以设置为
安全设置 有三种方式,关键词,加签,设置IP段。可以选择一种,此处选择IP段的方式。
/document/app/custom-robot-access?spm=ding_open_doc.document.0.0.6d9d28e1i3hLoA
注,此处设置的IP段必须是公网IP,设置局域网IP是无效的。
设置完成,便可以得到一个webhook,通过此webhook即可使用该机器人
可以测试一下使用。将access_token设置为webhook后测试一下钉钉群有没有收到消息。
curl '/robot/send?access_token=xxxxxxxx' \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "我就是我, 是不一样的烟火"}}'
钉钉机器人基本设置完成。如果发送消息的主机IP段未在钉钉机器人添加的IP段里,发送消息时会报错
{"errcode":310000,"errmsg":"ip XXXXX not in whitelist, more: [https://ding-/doc#/serverapi2/qf2nxq]"}
通过grafana页面添加钉钉的notification channels
点击 Add channel
大概分为四部分的设置,Name,Type,Optional setting,Notification settings。
Name随便起一个名字 DingDing ALertType选择DingDingUrl 钉钉生成的webhookOptional DingDing settings Message Type 选择ActionCard。此处可以选择link和ActionCard,区别不大。选择link时,警告通知发送的信息是简略版。选择ActionCard时 警告通知信息比较完整。Notification settings有四个可以勾选的default是否设置为默认notification,勾选时,panel中设置的所有alert都会通过该notification发送警告消息。选择勾选Include Image消息中是否包含图片,就是Panel此时的状态图片。由于此时未设置image-render插件,不勾选。Disable Resolve MessageDisable the resolve message [OK] that is sent when alerting state returns to false应该是是否禁止当一个Panel从警告状态alerting转换为OK时,发送通知。选择不勾选时,不禁止,也就是会发送OK的消息通知。Send reminders设置重复发送警告通知,当一个Panel为alert状态后初次发送通知当状态一直保持在alert时,是否每隔一段时间再次发送一个警告通知。选择勾选,时间设置为15min,要大于evaluation interval(每隔多长时间检测一次状态)
测试点击test测试设置
第一第二条消息分别是设置为link和ActionCard时通知的样式。测试成功选择save保存。然后可以设置真正的告警规则。
点击消息时可以进入 grafana界面,
如果未设置grafana配置文件domain,点击消息进入的网址是。
http://localhost:3000/
如果设置了domain。如vip 192.168.199.90,点击消息进入的网址是。
http://192.168.199.90:3000/
vip 是一个局域网IP
是否可访问到grafana与 接收通知的主机与grafana宿主机的连通有关。如果在一个局域网下,可以直接访问到grafana界面。
不在一个局域网下,可以收到通知,但是点击消息的grafana网址是无法识别的,无法访问grafana界面。(可以设置domain为一个公网IP,绑定到局域网的VIP上,然后就可以访问了,不过应该没必要。。。)
2.邮件警告通知设置
如果选择以邮件的方式 发送警告通知。需要设置grafana配置文件,设置右键发送人的账号密码和smtp服务器。
选择是网易的163 邮箱 password需要设置为第三方登录授权码。多个宿主机配置文件邮件相关修改一致。
vim /etc/kolla/config/grafana/compute-1/grafana.ini
[smtp]enabled = truehost = :25user =XXX@password = XXXskip_verify = falsefrom_address = XXX@from_name = Grafana
vim /etc/kolla/config/grafana/compute-2/grafana.ini
[smtp]enabled = truehost = :25user =XXX@password = XXXskip_verify = falsefrom_address = XXX@from_name = Grafana
加载新的配置文件,使得grafana可以发送邮件。
kolla-ansible reconfigure -i /etc/kolla/multinode
通过grafana页面添加邮件的notification channels
基本和钉钉的notification设置一致,type设为Email,Address设置为收件人的邮箱,不同账号中间使用 ; 隔开。
Test 后 保存。
三、设置Alert Rules
测试设置警告规则,主要目的是触发警告。
Panel查询不能使用 模板变量,否则无法设置告警规则。
Template variables are not supported in alert queries(模板变量不支持 alert 查询。)
解决办法:
单独配置个告警的视图(Panel),用正则匹配出所有的主机 或者 每台主机单独一个查询语句 或者 分组查询
设置 分组查询,将虚拟机分组。也就是一个Panel显示多个虚拟机的状态信息。在Panel上设置告警规则。
设置监控Panel 与警告规则
Panel查询语句
按照宿主机,实例UUID,网卡名分组查询虚拟机的 网卡接收网速。没有使用设置的模板变量,模板变量也无法影响到该Panel。
SELECT non_negative_derivative(mean("value"), 1s) FROM "virt_rx" WHERE ("type" = 'if_octets') AND $timeFilter GROUP BY time($__interval), "host", "instance", "type_instance" fill(null)
该条查询语句是 A,如果你又加了一条查询语句那么就会有B(也可以自己命名)。 点击Alert,设置该条查询语句的警告规则。
告警规则设置。
1.Name规则名称。
2.Evaluate every 警报规则评估间隔。(每隔多长时间检测一下当前Panel告警规则状态)
3.FOR 状态持续时间。(每隔一个警报规则评估间隔就会检测一下当前Panel状态,如果检测结果是符合规则,状态会从OK变为Pending,如果不符合,会变为OK状态。如果在FOR设置的时间内,状态没有从Pending变为OK,那么状态就会变为ALerting 并且发送警告通知)
4.WHEN判断标准last(),avg(),min(),max(),sum(),count(),median(),diff(),percent_diff(),count_non_null()
有一些模糊的函数含义。
count() #数据点数(在单位时间里去抓取了几次metric)。median() #MEDIAN 函数是一种计算机函数,能够返回给定数值的中值,中值是在一组数值中居于中间的数值,如果参数集合中包含偶数个数字,函数 MEDIAN 将返回位于中间的两个数的平均值。diff() #起始值和最终值之间的差异 percent_diff() #起始值与最终值之差/起始值与最终值的平均值*100count_non_null() #value不为空的count
5.query(A, 5m, now): 字母定义从“Metrics”选项卡执行的查询,比如我们只有一条metrics查询语句就是A。 后两个参数定义时间范围5m,即现在到之前的的5分钟。 也可以设置成从10m开始,now为2m,以定义10分钟前到2分钟前的时间范围,如果你要忽略最后2分钟的数据,这将很有用。
可以有多个查询语句,中间使用AND OR连接。
6.IS ABOVE 阈值 设置。
IS ABOVE 在什么值以上也就是大于某个值IS BELOW #在什么值下面也就是小于某个值IS OUTSIDE RANGE #在两个值的范围以外IS WITHIN RANGE #在两个值的范围内HAS NO VALUE #没有值
此处设置为 每分钟进行一次警报规则评估,如果5分钟内,Panel的状态保持为Pending会发送警告。评估标准是,A查询语句在即现在到之前的的5分钟内,查询结果平均数大于100。(大于100就表示网速过快,测试警告发送,数值设置小一点)
No Data & Error Handling表示查询的metric没数据或者查询异常时设置Panel的状态。
Notifications 设置该警告规则使用的通知方式。notification通知方式设为default时,此处是一定会包含该notification的,如果没有设置default,此处可以选择notification。
Message 。设置 发送通知消息中 自定义的一些话,没必要设置。。。
设置完成点击 Apply 应用设置。然后还需在dashboard界面点击save,才能生效(即使是导入已经设置好告警规则的dashboard,导入完成也需要点击save才能使警告规则生效)
等待一段时间,如果警告规则触发,可以在顶顶群或邮件上收到通知。
grafana发送了一个警告通知。如果状态从Alerting变为OK,也会发送一个通知。
点击通知即可进入到grafana相应的Panel页面。
可以查看grafana的alert。
以上的通知中都不含图片,可能看上去不够直观。
如果需要在通知中包含图片,需要notification设置Include Image。且grafana安装grafana-render-imager 插件。
四、设置警告通知中包含图片。
邮件告警通知中包含图片,只需grafana设置grafana-image-render插件即可。但钉钉等告警通知如果需要显示图片,需要设置外部存储 保存图片(应该是为了省流,设置图片外部存储,警告通知中包含的图片只用是一个URL),且该外部存储必须使用公网IP,能够被不再同一个局域网的电脑访问。
1.设置安装使用grafana-image-render 插件。
grafana-image-render 是一个图片渲染器,可以在grafana容器内部安装该插件实现图片渲染功能。也可以docker安装一个grafana-image-rendere 图片渲染容器,设置grafana使用该图片渲染容器生成图片。
由于直接在grafana容器内安装grafana-image-rendere插件会导致生成的图片中文乱码,且图片下方时间刻度时区为UTC。所以使用docker安装一个grafana-image-rendere 的方式。
/docs/grafana/latest/administration/image_rendering/
多个宿主机节点时,网络可以互联,所以可以在其中一个节点设置安装 容器 ,其它节点直接使用。(不过这样,该容器提供的服务就不会像其他kolla部署的 服务那样具有高可用性,一旦部署该grafana-image-render 服务的宿主机上服务down掉,通知还是可以发送,但通知中图片会无法生成,变成一个感叹号。)
拉取docker镜像
docker pull grafana/grafana-image-renderer
运行容器 设置容器名render 环境变量 时区上海。其它容器环境变量可参考。/grafana/grafana-image-renderer/blob/master/docs/remote_rendering_using_docker.md
docker run -d --name=render --network=host --restart=always -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer
设置网络为host,容器端口直接绑定主机的端口,restart为自动重启。该容器默认的服务端口是8081。
该容器绑定了宿主机的8081端口。
[root@ALLInOne-Kolla ~]# docker ps -a | grep rendera4754c32e391 grafana/grafana-image-renderer "dumb-init -- node b…" 15 seconds ago Up 10 secondsrender[root@ALLInOne-Kolla ~]# netstat -ntlp | grep 8081tcp6 00 :::8081 :::*LISTEN58612/node
尝试访问安装该docker容器的宿主机的8081 端口
192.168.199.91:8081
设置grafana使用该容器渲染生成图片。
vim /etc/kolla/config/grafana/compute-1/grafana.ini
添加 [render] server_url是grafana-image-renderer容器提供的render服务端口,callback_url是调用render服务的grafana的端口。
[rendering]server_url = http://192.168.199.91:8081/rendercallback_url = http://192.168.199.91:3000/
vim /etc/kolla/config/grafana/compute-2/grafana.ini
server_url 一致,callback_url 不一样。
[rendering]server_url = http://192.168.199.91:8081/rendercallback_url = http://192.168.199.92:3000/
加载新配置。
kolla-ansible reconfigure -i /etc/kolla/multinode
完成后,点击一个Panel 点击Share
成功设置render后,会变为
点击可以生成图片,表示render设置成功。
设置notification的通知,使之包含图片。
如此设置,邮件的警告通知中会包含图片,但是钉钉的警告通知中依然没有图片,因为钉钉需要设置外部存储。
2.钉钉警告通知中附含图片需要设置外部存储。
/read/grafana-v6.2/76cfcba775b0ea24.md
[external_image_storage]# Used for uploading images to public servers so they can be included in slack/email messages.# you can choose between (s3, webdav, gcs, azure_blob, local);provider =
可以设置的外部存储,包括s3, webdav, gcs, azure_blob, local。
最重要不是grafana图片外部存储的保存方式,钉钉通知中想要正常显示图片,需要外部存储提供的服务是可直接访问到的公网IP端口。
可以设置最简单的的local方式,设置grafana配置文件
[external_image_storage]provider = local
kolla-ansible reconfigure -i /etc/kolla/multinode
不需要其他配置,可以理解为将本机当作一个存储展示grafana图片的服务器。只需要本机IP是公网IP,且通过本机公网IP可以访问到grafana即可。
使用一个什么云测试一下。
如果是局域网下的IP,或者端口禁止访问,那么显示的图片是一个感叹号。
如果不设置公共IP用来展示图片,不勾选Include Image比较好。
除了local外,其它方式需要额外的设置,如s3。
可以使用ceph集群代替s3
[external_image_storage]# Used for uploading images to public servers so they can be included in slack/email messages.# you can choose between (s3, webdav, gcs, azure_blob, local);provider =[external_image_storage.s3];endpoint =;path_style_access =;bucket =;region =;path =;access_key =;secret_key =
3.设置grafana-image-render容器的高可用。
由于grafana-image-render不是由kolla部署控制的,所以多节点部署时该容器提供的服务是不会被自动设置为高可用的,如果希望设置为高可用,需要修改haproxy配置。
多个节点安装 grafana-image-render。
删除原render容器
docker rm -f render
设置render容器8081端口绑定 各自宿主机的8081端口。
docker run -d --name=render -p 192.168.199.91:8081:8081 --restart=always -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer
docker run -d --name=render -p 192.168.199.92:8081:8081 --restart=always -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer
netstat -ntlp | grep 8081
haproxy服务提供了负载均衡,keepalived提供了一个vip负责高可用。
设置render的haproxy 服务配置文件。只用修改haproxy的配置文件即可。
mkdir -p /etc/kolla/config/haproxy/services.d/
vim /etc/kolla/config/haproxy/services.d/render.cfg
listen render_servermode httphttp-request del-header X-Forwarded-Protooption httplogoption forwardforhttp-request set-header X-Forwarded-Proto https if { ssl_fc }bind 192.168.199.90:8081server compute-1 192.168.199.91:8081 check inter 2000 rise 2 fall 5server compute-2 192.168.199.92:8081 check inter 2000 rise 2 fall 5
bind 监听vip 的8081 端口,当接收到请求时,根据一定算法将其转发到合适的server,server就是提供render服务的不同宿主机上的grafana-image-render容器,安装了多少个容器,此处就设置多少个server。
当设置了render的高可用后,grafana关于rendering的配置也需要重新设置。
将server_url IP设置为vip,callback_url 的IP还是设置为宿主机各自的IP
vim /etc/kolla/config/grafana/compute-1/grafana.ini
[rendering]server_url = http://192.168.199.90:8081/rendercallback_url = http://192.168.199.91:3000/
vim /etc/kolla/config/grafana/compute-2/grafana.ini
[rendering]server_url = http://192.168.199.90:8081/rendercallback_url = http://192.168.199.92:3000/
加载新配置。
kolla-ansible reconfigure -i /etc/kolla/multinode
单个节点下grafana设置警告
与多个节点设置没有什么大区别,配置文件修改反而更简单。
cp /etc/kolla/grafana/grafana.ini /etc/kolla/config/vim /etc/kolla/config/grafana.ini
[paths]data = /var/lib/grafanalogs = /var/log/kolla/grafanaplugins = /var/lib/grafana/pluginsprovisioning = /etc/grafana/provisioning[server]protocol = httphttp_addr = 192.168.199.90http_port = 3000router_logging = truestatic_root_path = publicenable_gzip = falsedomain = 192.168.199.90[database]type = mysqlhost = 192.168.199.90:3306name = grafanauser = grafanapassword = AF3JKixhR5IF1jMUlHCdF7WwcF1eHN9MvG6GlKBhssl_mode = disable[session]provider = mysqlprovider_config = grafana:AF3JKixhR5IF1jMUlHCdF7WwcF1eHN9MvG6GlKBh@tcp(192.168.199.90:3306)/grafanacookie_name = grafana_sesscookie_secure = falsesession_life_time = 86400[analytics]reporting_enabled = falsecheck_for_updates = false[security]admin_user = adminadmin_password = T491k2pKvj3JRBttyd4qlA4PsReK5I4Y7d0DX6z5[smtp]enabled = truehost = :25user =156XXX661@password = XXXXXXXXskip_verify = falsefrom_address = 156XXXX7661@from_name = Grafana[alerting]enabled = trueexecute_alerts = true[rendering]server_url = http://192.168.199.90:8081/rendercallback_url = http://192.168.199.90:3000/[external_image_storage]provider = local
kolla-ansible reconfigure -i /etc/kolla/all-in-one
如果觉得《Grafana监控告警发送通知到钉钉群 邮件》对你有帮助,请点赞、收藏,并留下你的观点哦!