侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

使用Grafana 展示Docker容器的监控图表并设置邮件报警规则(图解)

Docker  /  管理员 发布于 7年前   282

一、Docker 容器监控报警方式

  接着上篇文章的记录,看到grafana的版本已经更新到4.2了,并且在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 容器

[root@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/grafanaf9495c492b9e4c735f0002d47fc4af668691f83e60b70d7b09defbfa2c806f6d

2.修改容器内grafana服务运行的脚本

分为2种方法,

  第一种:

  将grafana-alerting 容器内的 run.sh 拷贝到宿主机上进行修改,修改完成后再copy 过去 覆盖替换即可

[root@docker ~]# docker cp grafana-alerting:/run.sh /tmp/run.sh

  编辑/tmp/run.sh 文件(后面会给出文件完整内容)修改完成后,将该脚本替换容器内的脚本

[root@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:[email protected]}": "${GF_SMTP_PASSWORD:=fuck123}": "${GF_SMTP_FROM_ADDRESS:[email protected]}"chown -R grafana:grafana "$GF_PATHS_DATA" "$GF_PATHS_LOGS"chown -R grafana:grafana /etc/grafanaif [ ! -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/credentialsfiif [ ! -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=$OLDIFSfiexec 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:[email protected]}"    #认证的邮箱账户: "${GF_SMTP_PASSWORD:=fuck123}"    #邮箱密码(注:163使用的客户端授权码作为用户密码): "${GF_SMTP_FROM_ADDRESS:[email protected]}"    #邮箱发件人地址,注意!此处一定要和上面的邮箱认证账户保持一致。不然会报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 脚本启动时指定的参数。

3.修改完脚本,重启该容器,相当于重启服务

[root@docker ~]# docker stop grafana-alertinggrafana-alerting[root@docker ~]# docker start grafana-alertinggrafana-alerting

4.打开浏览器,访问http://ip,首页如下:

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

Name: 定义一个通知名,可在后期的Graph 添加Alert 报警规则时,指定Send to

Type:这里定义的email

Email addresses: 定义接收人邮件列表

最后保存,点击SendTest,如果你的邮箱收到以下邮件,配置就成功了。

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

6.添加一个Dashboard

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

Alert Config 填写内容如下:

Notifications处填写如下:

主要选择发送到之前定义的通知组

7.进入所监控的容器内,使用以下命令模拟内存升高

进入容器:

[root@docker ~]# docker exec -it cadvisor /bin/ash

使用dd命令,如下:

/ # swapoff -a/ # dd if=/dev/zero of=/dev/shm/test bs=1k count=80000kdd: writing '/dev/shm/test': No space left on device65537+0 records in65536+0 records out

然后观察Grafana的graph 界面,可以发现报警规则已经生效,可以登录设定的邮箱,看下有无收到邮件。

邮件内容如下:

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

/ # rm -f /dev/shm/test

等待5分钟(这个5分钟是在报警规则那定义的5m)后,警告就会解除。♥ 的颜色也会由红色变成绿色

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

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

三、后记

  目前Grafana 只支持graph添加报警规则,官方说后续会支持Singlestat和Table 面板,详细介绍的,可以参考这里。grafana监控报警方面暂时学习记录到这里吧,后期有什么扩展学习,在继续分享。文中有不足之处,还望大家多多指教。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    Dockerfile基础分享
    下一条:
    Docker安装和简单使用入门教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在docker环境中实现Laravel项目执行定时任务和消息队列流程步骤(0个评论)
    • 在MacBook下laravel项目多php版本docker开发环境配置方案(0个评论)
    • 在docker环境中部署docker部署elk架构流程步骤(1个评论)
    • docker compose跟Dockerfile的区别浅析(0个评论)
    • Ubuntu 22.04系统中安装podman流程步骤(1个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-11
    • 2020-06
    • 2021-05
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-11
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客