未使用: 因为有的dashboard是中文的,所以这个对中文不支持,有解决办法的可以给我留言
场景:
前端组想要看这个dashboard每周发送给他邮箱
这是一个常见的需求,但是目前Grafana没有直接支持,所以我就查了一下,有一个grafana-reporter可以实现这个需求,因为参考的文档比较杂,所以我就在这里简单的记录一下
方案:Grafana-reporter
首先有一个开源工具叫Grafana reporter。他的做法是另起一个服务,然后利用Grafana的一个功能:Links.
在Grafana的Dashboard界面,点击设置按钮可以看到左边的标签中有一个“Links”,该功能可以给当前面板上加一些按钮,来调用某些链接(Link)。所以这个工具的做法是另外运行一个HTTP服务,然后在Grafana的面板中添加这个链接,点击后可以生成当前面板的PDF文件,当然也可以下载该PDF文件。
那么利用这个工具,你就可以自行访问该链接,拼装Dashboard的uid进去,得到该面板的PDF文件,通过脚本下载下来后再发邮件就行了。
这个方法的麻烦之处在于需要另外跑一个服务来提供PDF生成能力,而且PDF也不太好直接放在邮件正文里展现,更适合作为附件存在。
1.安装Grafana-reporter
github地址:https://github.com/IzakMarais/reporter
1.1 docker安装
需注意时区问题,默认生成的报表为UTC时区,推荐使用修改时区后镜像或挂载时区文件
docker run --name grafana-reporter --rm -v /etc/localtime:/etc/localtime -p 8686:8686 --net="host" izakmarais/grafana-reporter
2.匿名模式
2.1 Grafana开启匿名模式
vim /etc/grafana/grafana.ini
[auth.anonymous]
# enable anonymous access
enabled = true
# specify organization name that should be used for unauthenticated users
;org_name = Main Org.
# specify role for unauthenticated users
org_role = Viewer
2.2 检查匿名登陆
Signout
输入grafana地址
2.3 配置dashboard links

url: http://10.90.227.77:8686/api/v5/report/$uid
面板uid就是grafana进入到该dashboard页面时,网址中的值如图

d/$uid
举例:我的网址是:http://10.90.227.77:3000/d/ZNfv6Z6Gk/test?fullscreen&panelId=2
那我的url就是:http://10.90.227.77:8686/api/v5/report/ZNfv6Z6Gk
2.4 点击生成pdf


2.5 不支持中文
如果这个dashboard的名字是中文的就会出现如下报错


3.API token模式
有的公司不支持匿名访问;所以通过 api进行访问:
参考这个:https://blog.csdn.net/weixin_42963678/article/details/114131640
关闭匿名登陆后点击后 有报错
3.1 配置API KEY


弹出来的key,拷贝到其他地方保存,因为关闭之后就没有这个了

eyJrIjoibFdvb3R3ZDBhNzlYVG44Nkg0U05wQUpKUE91VFJvOWYiLCJuIjoidGVzdCIsImlkIjoxfQ==
3.2 配置url
得到了key之后,返回编辑link的url
将 http://10.90.227.77:8686/api/v5/report/ZNfv6Z6Gk
改成http://10.90.227.77:8686/api/v5/report/ZNfv6Z6Gk?apitoken=eyJrIjoibFdvb3R3ZDBhNzlYVG44Nkg0U05wQUpKUE91VFJvOWYiLCJuIjoidGVzdCIsImlkIjoxfQ==
3.3 注意版本
这里遇到个问题,因为不同版本的关系,有些版本使用 ?apitoken== ,但是我用的Grafana v7.4.3 (010f20c1c8),应该使用 ?apitoken= ,就是一个=的差别,写错了会报无效key,Got Status 401 Unauthorized, message: {“message”:“invalid API key”} ,这种情况检查一下自己复制key有没有复制对,中英文符号有没有误
还有一个问题,我尝试多次新增key,有些key的值末尾是有 == ,有些key的值是没有 == 的,所以只要复制完全,不需要额外给没有 == 的key添加 ==

4.发送邮件
参考:https://blog.csdn.net/why_still_confused/article/details/89075244
4.1 配置邮箱
以163邮箱为例
cat >>/etc/mail.rc<<"EOF"
set from=yxxx@163.com
set smtp=smtp.163.com:25
set smtp-auth-user=yxxx@163.com
set smtp-auth-password="ZLNLFBNUOJYLCVHM" #客户端授权码
set ssl-verify=ignore #不使用ssl
set nss-config-dir=/etc/pki/nssdb
EOF
4.2 下载pdf
wget -O test.pdf http://10.90.227.77:8686/api/v5/report/ZNfv6Z6Gk?apitoken=eyJrIjoibFdvb3R3ZDBhNzlYVG44Nkg0U05wQUpKUE91VFJvOWYiLCJuIjoidGVzdCIsImlkIjoxfQ==&from=now-5m&to=now
4.3 发送邮件
echo "a" | mail -s "Grafana监控日报"-`date +%Y-%m-%d` -a test.pdf ylmcr7@163.com

4.4 定时任务脚本
增加对应的dashboard报告可依照格式添加,并在mail命令中使用-a参数添加附件
cat >reporter.sh<<"EOF"
#/bin/bash
#auuthor:ricardo
#shell for creating grafana dashboard report
filepath=/media/raid10/grafana/report/
date=$(date +%Y-%m-%d)
# dashboard report name
filename_es_general=Elasticsearch-Nginx-generalapi.linghit.com-${date}.pdf
filename_spring=SpringBoot-Statistics-${date}.pdf
filename_es_api=Elasticsearch-Nginx-api.linghit.com-${date}.pdf
# download grafana dashboard report
wget -O ${filepath}${filename_es_general} http://172.16.7.5:8686/api/v5/report/8oPnVDCmz?from=now-24h&to=now&var-host=test.qq.com
wget -O ${filepath}${filename_spring} http://172.16.7.5:8686/api/v5/report/wAu8Swerd?from=now-24h&to=now
wget -O ${filepath}${filename_es_api} http://172.16.7.5:8686/api/v5/report/8oPnVDCmz?from=now-24h&to=now&var-host=test.qq.com
sleep 30s
# send email
mail -v \
-a ${filepath}${filename_es_general} -a ${filepath}${filename_spring} -a ${filepath}${filename_es_api} \
-s "Grafana监控日报"-`date +%Y-%m-%d` \
-c "test@qq.com" test@qq.com < /media/raid10/grafana/content.txt
EOF