设为首页 收藏本站
查看: 1157|回复: 0

[经验分享] 使用Grafana 展示Docker容器的监控图表并设置邮件报警规则

[复制链接]

尚未签到

发表于 2017-12-5 16:12:23 | 显示全部楼层 |阅读模式
  一、Docker 容器监控报警方式
DSC0000.png

  接着上篇文章的记录,看到grafana的版本已经更新到v4.1.1了,并且在4.0以后的版本中,加入了Alert Notifications 功能,这样在对容器 监控完,可以加入报警规则。根据官网介绍,报警方式也有很多种,常见的Email、Slack即时通讯、webhook等。
  本篇记录的是邮件的报警设置。环境和上篇基本一致,都是在Docker 平台测试环境下,另外本篇使用的grafana容器的版本是用的 dockerhub上最新版本,该版本为grafana/grafana:latest; 还有一点需要说明,由于该容器是使用了docker file 生成的,并且容器进程grafana-server 的服务启动脚本是run.sh,所以我们要对run.sh进行修改,之后重启容器,然后去界面上配置。
  整体大概步骤:创建容器-->修改容器内的run.sh文件,添加smtp相关配置 -->重启容器-->登陆grafana 界面,添加报警Notifications-->添加inFluxdb数据源-->编辑Graph,定义报警规则-->测试报警邮件验证
  二、部署grafana容器并配置邮件报警
  1.运行创建一个grafana 容器



[iyunv@docker ~]# docker run -d -p 80:3000 -e INFLUXDB_HOST=localhost -e INFLUXDB_PORT=8086 -e INFLUXDB_NAME=cadvisor -e INFLUXDB_USER=root -e INFLUXDB_PASS=root --link influxsrv:influxsrv --name grafana-alerting grafana/grafana
f9495c492b9e4c735f0002d47fc4af668691f83e60b70d7b09defbfa2c806f6d
  2.修改容器内grafana服务运行的脚本
  分为2种方法,
  第一种:
  将grafana-alerting 容器内的 run.sh 拷贝到宿主机上进行修改,修改完成后再copy 过去 覆盖替换即可



[iyunv@docker ~]# docker cp grafana-alerting:/run.sh /tmp/run.sh
  编辑/tmp/run.sh 文件(后面会给出文件完整内容)修改完成后,将该脚本替换容器内的脚本



[iyunv@docker ~]# docker cp /tmp/run.sh grafana-alerting:/run.sh
  第二种:
  进入到容器内,先apt-get update 更新系统,之后安装vim(默认官方镜像内,没有找到vim、vi、nano类似的编辑器。我是没有找到哈,也许可能会有),这个方式就不细说了吧。
  run.sh 文件完整内容如下:



#!/bin/bash -e
: "${GF_PATHS_DATA:=/var/lib/grafana}"
: "${GF_PATHS_LOGS:=/var/log/grafana}"
: "${GF_PATHS_PLUGINS:=/var/lib/grafana/plugins}"
: "${GF_SMTP_ENABLED:=true}"
: "${GF_SMTP_HOST:=smtp.163.com:25}"
: "${GF_SMTP_USER:=fkcloudstack@163.com}"
: "${GF_SMTP_PASSWORD:=fuck123}"
: "${GF_SMTP_FROM_ADDRESS:=fkcloudstack@163.com}"
chown -R grafana:grafana "$GF_PATHS_DATA" "$GF_PATHS_LOGS"
chown -R grafana:grafana /etc/grafana
if [ ! -z ${GF_AWS_PROFILES+x} ]; then
mkdir -p ~grafana/.aws/
touch ~grafana/.aws/credentials
for profile in ${GF_AWS_PROFILES}; do
access_key_varname="GF_AWS_${profile}_ACCESS_KEY_ID"
secret_key_varname="GF_AWS_${profile}_SECRET_ACCESS_KEY"
region_varname="GF_AWS_${profile}_REGION"
if [ ! -z "${!access_key_varname}" -a ! -z "${!secret_key_varname}" ]; then
echo "[${profile}]" >> ~grafana/.aws/credentials
echo "aws_access_key_id = ${!access_key_varname}" >> ~grafana/.aws/credentials
echo "aws_secret_access_key = ${!secret_key_varname}" >> ~grafana/.aws/credentials
if [ ! -z "${!region_varname}" ]; then
echo "region = ${!region_varname}" >> ~grafana/.aws/credentials
fi
fi
done
chown grafana:grafana -R ~grafana/.aws
chmod 600 ~grafana/.aws/credentials
fi
if [ ! -z "${GF_INSTALL_PLUGINS}" ]; then
OLDIFS=$IFS
IFS=','
for plugin in ${GF_INSTALL_PLUGINS}; do
grafana-cli  --pluginsDir "${GF_PATHS_PLUGINS}" plugins install ${plugin}
done
IFS=$OLDIFS
fi
exec gosu grafana /usr/sbin/grafana-server  \
--homepath=/usr/share/grafana             \
--config=/etc/grafana/grafana.ini         \
cfg:default.paths.data="$GF_PATHS_DATA"   \
cfg:default.paths.logs="$GF_PATHS_LOGS"   \
cfg:default.paths.plugins="$GF_PATHS_PLUGINS"   \
cfg:default.smtp.enabled="$GF_SMTP_ENABLED"   \
cfg:default.smtp.host="$GF_SMTP_HOST"   \
cfg:default.smtp.user="$GF_SMTP_USER"   \
cfg:default.smtp.password="$GF_SMTP_PASSWORD"   \
cfg:default.smtp.from_address="$GF_SMTP_FROM_ADDRESS"
  文件较容器内的文件只增加了10汗内容。前半部分加入的内容:

: "${GF_SMTP_ENABLED:=true}"    #启用smtp配置
: "${GF_SMTP_HOST:=smtp.163.com:25}"    #smtp服务器的地址:端口
: "${GF_SMTP_USER:=fkcloudstack@163.com}"    #认证的邮箱账户
: "${GF_SMTP_PASSWORD:=fuck123}"    #邮箱密码(注:163使用的客户端授权码作为用户密码)
: "${GF_SMTP_FROM_ADDRESS:=fkcloudstack@163.com}"    #邮箱发件人地址,注意!此处一定要和上面的邮箱认证账户保持一致。不然会报553错误。!!!

  后半部分加入的内容:

  cfg:default.smtp.enabled="$GF_SMTP_ENABLED"   \
cfg:default.smtp.host="$GF_SMTP_HOST"   \
cfg:default.smtp.user="$GF_SMTP_USER"   \
cfg:default.smtp.password="$GF_SMTP_PASSWORD"   \
cfg:default.smtp.from_address="$GF_SMTP_FROM_ADDRESS"
  小注释:

    Grafana服务器有一些配置选项,可以在.ini配置文件中指定或使用环境变量指定。默认配置文件路径/etc/grafana/grafana.ini,也可以在启动grafana-server时指定配置文件路径。
    环境变量格式:GF_<SectionName>_<KeyName> ;其中SectionName指的是配置文件中的中括号中的节名称,KeyName 指的是参数名称。要大写。
    cfg:default.smtp.host:这是在grafana 脚本启动时指定的参数。
     本文属于原创文章,如有转载,请注明出处及链接。来自飞走不可:http://www.cnblogs.com/hanyifeng/p/6293620.html
  3.修改完脚本,重启该容器,相当于重启服务



[iyunv@docker ~]# docker stop grafana-alerting
grafana-alerting
[iyunv@docker ~]# docker start grafana-alerting
grafana-alerting
  4.补充以上修改脚本方式是属于愚笨的一种方式,我的失误,但是我没有仔细测试在docker 创建容器时添加环境变量,多亏了这位朋友 @orientzc 最近提出的问题,原来是我当时运行一个等于‘=’号出了错误导致的。。。。失误失误!!现将更新内容放在这里,主要是修改创建grafana容器时运行的命令,内容如下:



docker run -d -p 80:3000 -e INFLUXDB_HOST=localhost -e INFLUXDB_PORT=8086 -e INFLUXDB_NAME=cadvisor -e INFLUXDB_USER=root -e INFLUXDB_PASS=root \
-e GF_SMTP_ENABLED=true -e GF_SMTP_SKIP_VERIFY=true -e GF_SMTP_HOST=smtp.163.com:25 -e GF_SMTP_USER=fkcloudstack@163.com \
-e GF_SMTP_PASSWORD=fuck123 -e GF_SMTP_FROM_ADDRESS=fkcloudstack@163.com --link influxsrv:influxsrv --name grafana-alerting grafana/grafana
  这样运行创建容器后,就无需在修改容器内grafana服务运行的脚本了!再次感谢daniellee、torkelo,还有留言的小兄弟 @orientzc!
  4.打开浏览器,访问http://ip,首页如下:
DSC0001.png

  添加一个通知组,(可添加多个,方便分组发送报警设置)
DSC0002.png

  Name: 定义一个通知名,可在后期的Graph 添加Alert 报警规则时,指定Send to
  Type:这里定义的email
  Email addresses: 定义接收人邮件列表
  最后保存,点击SendTest,如果你的邮箱收到以下邮件,配置就成功了。
DSC0003.png

  
5.添加数据源,和上篇内容中添加信息一样。此步就略过啦。
  6.添加一个Dashboard
DSC0004.png

  然后新建一个Graph,编辑,下面有个Alert,,创建一个Alert。如下图:
DSC0005.png

  Alert Config 填写内容如下:
DSC0006.png

  Notifications处填写如下:
  主要选择发送到之前定义的通知组
DSC0007.png

  7.进入所监控的容器内,使用以下命令模拟内存升高
  本文属于原创文章,如有转载,请注明出处及链接。来自飞走不可:http://www.cnblogs.com/hanyifeng/p/6293620.html
  进入容器:



[iyunv@docker ~]# docker exec -it cadvisor /bin/ash
  使用dd命令,如下:



/ # swapoff -a
/ # dd if=/dev/zero of=/dev/shm/test bs=1k count=80000k
dd: writing '/dev/shm/test': No space left on device
65537+0 records in
65536+0 records out
  然后观察Grafana的graph 界面,可以发现报警规则已经生效,可以登录设定的邮箱,看下有无收到邮件。
DSC0008.png

  邮件内容如下:
DSC0009.png

  释放内存,只需要删除/dev/shm/test 文件即可。



/ # rm -f /dev/shm/test
  等待5分钟(这个5分钟是在报警规则那定义的5m)后,警告就会解除。&hearts; 的颜色也会由红色变成绿色
DSC00010.png

  OK的邮件也已经收到,如下 :)
DSC00011.png

  另外,可以在Alerting--Alert Llist中查看警告列表。
DSC00012.png

  三、后记
  目前Grafana 只支持graph添加报警规则,官方说后续会支持Singlestat和Table 面板,详细介绍的,可以参考这里。grafana监控报警方面暂时学习记录到这里吧,后期有什么扩展学习,在继续分享。文中有不足之处,还望大家多多指教。
  更新时间:2017-4-20 18:30
  更新日志:修改创建Ganfana容器时运行的命令,添加SMTP服务的环境变量,支持启动后即可添加notifications 邮箱测试!
  本文属于原创文章,如有转载,请注明出处及链接。来自飞走不可:http://www.cnblogs.com/hanyifeng/p/6293620.html
  _

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420872-1-1.html 上篇帖子: Docker 打包 部署 下篇帖子: Windows 10下Docker使用经验谈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表