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

发布时间 - 2026-01-10 22:40:19    点击率:

一、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/grafana
f9495c492b9e4c735f0002d47fc4af668691f83e60b70d7b09defbfa2c806f6d

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:=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 脚本启动时指定的参数。

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

[root@docker ~]# docker stop grafana-alerting
grafana-alerting
[root@docker ~]# docker start grafana-alerting
grafana-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=80000k
dd: writing '/dev/shm/test': No space left on device
65537+0 records in
65536+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监控报警方面暂时学习记录到这里吧,后期有什么扩展学习,在继续分享。文中有不足之处,还望大家多多指教。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# grafana  # docker  # 图表  # Docker 容器内存监控原理及应用  # python脚本监控docker容器  # 如何监控docker容器运行状态 shell 脚本  # 详解Docker容器可视化监控中心搭建  # docker cgroup 资源监控的详解  # 如何使用docker compose 部署ELK 8.X及监控  # docker 内存监控与压测方式  # Docker 监控平台部署的两种实现步骤  # 容器内  # 重启  # 配置文件  # 是在  # 上篇  # 会报  # 指的是  # 没有找到  # 创建一个  # 后期  # 的是  # 这是  # 我是  # 有什么  # 就会  # 会有  # 完成后  # 有个  # 多个  # 在此 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何实现文件上传和存储?(本地与S3配置)  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  WordPress 子目录安装中正确处理脚本路径的完整指南  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  网页设计与网站制作内容,怎样注册网站?  如何用已有域名快速搭建网站?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel怎么调用外部API_Laravel Http Client客户端使用  Java垃圾回收器的方法和原理总结  使用C语言编写圣诞表白程序  C#如何调用原生C++ COM对象详解  如何在Windows服务器上快速搭建网站?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何快速上传建站程序避免常见错误?  MySQL查询结果复制到新表的方法(更新、插入)  免费视频制作网站,更新又快又好的免费电影网站?  图册素材网站设计制作软件,图册的导出方式有几种?  JavaScript如何实现音频处理_Web Audio API如何工作?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何记录自定义日志?(Log频道配置)  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  深圳网站制作平台,深圳市做网站好的公司有哪些?  Python函数文档自动校验_规范解析【教程】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  香港服务器如何优化才能显著提升网站加载速度?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  php打包exe后无法访问网络共享_共享权限设置方法【教程】  微信小程序 require机制详解及实例代码  如何在阿里云完成域名注册与建站?  Linux系统命令中tree命令详解  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何用美橙互联一键搭建多站合一网站?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何使用Livewire构建动态组件?(入门代码)  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】