docker部署的grafana容器。主要是监控kolla部署下OpenStack的虚拟机和宿主机的状态警告。

设置相应的监控dashboard
https://blog.csdn.net/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-1
mkdir /etc/kolla/config/grafana/compute-2

多个宿主机grafana配置文件区别只在于server段的设置。其他的设置如[paths],[database],[session],[analytics],[security] 等设置是一样的。

http_addr    本机的IP地址
http_port   本机grafana的访问端口 默认3000
domain      此处需要设置为 虚拟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 = http
http_addr = 192.168.199.91
http_port = 3000
router_logging = true
static_root_path = public
enable_gzip = false
domain = 192.168.199.90[alerting]
enabled = true
execute_alerts = true

compute-2主机设置

vim /etc/kolla/config/grafana/compute-2/grafana.ini
[server]
protocol = http
http_addr = 192.168.199.92
http_port = 3000
router_logging = true
static_root_path = public
enable_gzip = false
domain = 192.168.199.90[alerting]
enabled = true
execute_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段的方式。

https://developers.dingtalk.com/document/app/custom-robot-access?spm=ding_open_doc.document.0.0.6d9d28e1i3hLoA

注,此处设置的IP段必须是公网IP,设置局域网IP是无效的。

设置完成,便可以得到一个webhook,通过此webhook即可使用该机器人

可以测试一下使用。将access_token设置为webhook后测试一下钉钉群有没有收到消息。

curl 'https://oapi.dingtalk.com/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.dingtalk.com/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 = true
host = smtp.163.com:25
user = XXX@163.com
password = XXX
skip_verify = false
from_address = XXX@163.com
from_name = Grafana
vim /etc/kolla/config/grafana/compute-2/grafana.ini
[smtp]
enabled = true
host = smtp.163.com:25
user = XXX@163.com
password = XXX
skip_verify = false
from_address = XXX@163.com
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()  #起始值与最终值之差/起始值与最终值的平均值*100
count_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 的方式。
https://grafana.com/docs/grafana/latest/administration/image_rendering/

多个宿主机节点时,网络可以互联,所以可以在其中一个节点设置安装 容器 ,其它节点直接使用。(不过这样,该容器提供的服务就不会像其他kolla部署的 服务那样具有高可用性,一旦部署该grafana-image-render 服务的宿主机上服务down掉,通知还是可以发送,但通知中图片会无法生成,变成一个感叹号。)

拉取docker镜像

docker pull grafana/grafana-image-renderer

运行容器 设置容器名render 环境变量 时区上海。其它容器环境变量可参考。https://github.com/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 render
a4754c32e391   grafana/grafana-image-renderer                            "dumb-init -- node b…"   15 seconds ago   Up 10 seconds                render
[root@ALLInOne-Kolla ~]# netstat -ntlp | grep 8081
tcp6       0      0 :::8081                 :::*                    LISTEN      58612/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/render
callback_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/render
callback_url = http://192.168.199.92:3000/

加载新配置。

kolla-ansible reconfigure -i /etc/kolla/multinode

完成后,点击一个Panel 点击Share

成功设置render后,会变为

点击可以生成图片,表示render设置成功。

设置notification的通知,使之包含图片。


如此设置,邮件的警告通知中会包含图片,但是钉钉的警告通知中依然没有图片,因为钉钉需要设置外部存储。

2.钉钉警告通知中附含图片需要设置外部存储。

https://www.bookstack.cn/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/render
callback_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/render
callback_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/grafana
logs = /var/log/kolla/grafana
plugins = /var/lib/grafana/plugins
provisioning = /etc/grafana/provisioning[server]
protocol = http
http_addr = 192.168.199.90
http_port = 3000
router_logging = true
static_root_path = public
enable_gzip = false
domain = 192.168.199.90[database]
type = mysql
host = 192.168.199.90:3306
name = grafana
user = grafana
password = AF3JKixhR5IF1jMUlHCdF7WwcF1eHN9MvG6GlKBh
ssl_mode = disable[session]
provider = mysql
provider_config = grafana:AF3JKixhR5IF1jMUlHCdF7WwcF1eHN9MvG6GlKBh@tcp(192.168.199.90:3306)/grafana
cookie_name = grafana_sess
cookie_secure = false
session_life_time = 86400[analytics]
reporting_enabled = false
check_for_updates = false[security]
admin_user = admin
admin_password = T491k2pKvj3JRBttyd4qlA4PsReK5I4Y7d0DX6z5[smtp]
enabled = true
host = smtp.163.com:25
user = 156XXX661@163.com
password = XXXXXXXX
skip_verify = false
from_address = 156XXXX7661@163.com
from_name = Grafana[alerting]
enabled = true
execute_alerts = true[rendering]
server_url = http://192.168.199.90:8081/render
callback_url = http://192.168.199.90:3000/[external_image_storage]
provider = local
kolla-ansible reconfigure -i /etc/kolla/all-in-one

Grafana监控告警发送通知到钉钉群、邮件相关推荐

  1. Prometheus+Grafana监控告警配置

    文章目录 Prometheus介绍 Prometheus及其组件安装 Prometheus安装 PromQL介绍 mysqld_exporter组件安装 node_exporter组件安装 alert ...

  2. [个人笔记] Zabbix配置钉钉群聊告警机制

    系统工程 - 运维篇 第二章 Zabbix配置钉钉群聊告警机制 系统工程 - 运维篇 系列文章回顾 下章内容 前言 实施步骤 Zabbix配置钉钉群聊告警机制 新增监控主机,添加监控项,触发器 导入自 ...

  3. prometheus+grafana监控以及企业微信告警

    prometheus+grafana监控以及企业微信告警(单机二进制部署) 一.下载部署包,更改其中两个包名称,放到/data下 1.安装包以及解压步骤 grafana-enterprise-8.4. ...

  4. 基于XXL-JOB和钉钉机器人构建系统监控

    概述   线上系统挂了,服务异常了,响应超时了:系统运行结果不符合预期...   用户被影响,甲方爸爸不开心,后果很严重.   从某种意义上讲,"在用户遇到问题之前把问题解决,问题也就不算问 ...

  5. prometheus+node_exporter+grafana+alertManager+prometheus-webhook-dingtalk实现服务器监控显示,钉钉机器人告警消息通知

    1.下载prometheus安装 ① 从 https://prometheus.io/download/ 下载相应版本,安装到服务器上官网提供的是二进制版,解压就能用,不需要编译 [root@loac ...

  6. prometheus 发送恢复 值_基于prometheus+grafana+alertmanager监控系统配置钉钉告警

    概述 因为目前工作基本都是用钉钉办公,所以今天主要介绍一下怎么在prometheus配置钉钉告警,这里的前提是已经部署了alertmanager. 一.配置go 由于Prometheus 是用gola ...

  7. #yyds盘点#如何用Python发送告警通知到钉钉?

    如何用Python发送告警通知到钉钉? 一.前言 前不久,看到了明哥写的如何用Python发送警告通知到企业微信,想起来之前写过用Pytho发送指定格式数据到钉钉的服务,本文将之前的代码重构下,变成一 ...

  8. 运维监控系列(15)-Alertmanager添加163邮箱、钉钉、微信告警通知功能

    163邮箱 可用通过邮件方式进行告警通知的发送,接着上篇文档,我们配置发送邮件告警方式. 1. 设置163邮箱 发送邮件,需要smtp邮件服务器,首先需要对网易邮箱进行设置. 首先登陆163邮箱,进入 ...

  9. Prometheus+Grafana+钉钉部署一个单机的MySQL监控告警系统

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. [toc] 一.Prometheus # 1.下载 ...

最新文章

  1. 如何让一个应届毕业生快速成长?
  2. c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化
  3. 六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步
  4. 解释大型网站js,css文件后面为什么有参数?
  5. Implementation:Bellman-ford
  6. 用Python实现每天向女友表白一次,甜蜜暴击,最后终于被我追到手了!太厉害了!
  7. boost::mpl::size相关的测试程序
  8. sqlliet 创建多表查询的视图_第4关 复杂查询
  9. 【转】IOS制作静态库
  10. vue项目条形码和二维码生成工具试用
  11. [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别?
  12. 事业单位综合应用能力计算机,最新事业单位统考-综合应用能力C类梳理精华.pdf...
  13. 神经网络反向传导算法
  14. gitbook 入门教程之常用命令详解
  15. 18计算机二级考试用word吗,计算机二级Word篇-实操真题详解18
  16. 2-16 mysql主从复制
  17. python入门_老男孩_数据类型简介_int/bool/str转换_字符串索引和切片_字符串操作_day3...
  18. Parallels Desktop 安装Win 10提示“安全启动功能防止操作系统启动”该如何操作?
  19. pm2 启动 Node + TS 项目
  20. 学科分类号 计算机技术,学科分类号 0806.DOC

热门文章

  1. php好玩的,PHP好玩的开发框架
  2. 在jupyter中使用pypy
  3. 生活中十大省钱小秘诀
  4. Python/scipy之希尔伯特变换hilbert
  5. CFM与RPM-名词解释
  6. php mb_substitute_character,fatel error:call to undefined function mb_substitute_character()
  7. JavaScript-Servlet
  8. Android 基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器aaa
  9. [Linux操作]screen的安装和使用
  10. 探索2018年春节互联网流量峰值再创新高背后