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

一、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监控报警方面暂时学习记录到这里吧,后期有什么扩展学习,在继续分享。文中有不足之处,还望大家多多指教。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解docker容器硬盘动态扩容

    扩容容器 默认来说,如果你使用 Device Mapper 的存储插件,所有的镜像和容器是从一个初始 10G 的文件系统中创建的.让我们来看看如何从一个更大的文件系统中创建一个容器. 首先,我们用 Ubuntu 的镜像来创建我们的容器.我们不需要在这个容器里运行任何东西,只需要这个文件(或者关联的文件系统)存在.为了演示,我们会在这个容器里运行 df ,来看一下根文件系统的大小. $ docker run -d ubuntu df -h / 4ab0bdde0a0dd663d35993e4010

  • docker容器跨服务器的迁移的方法

    docker的备份方式有export和save两种. export是当前的状态,针对的是容器,docker save 是针对镜像images. export 找出要备份容器的ID [root@wls12c ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 037b847bf093 centos "/bin/bash" 3 minutes ago Exited (0) 2 minute naughty_dav

  • Docker 技巧之删除Docker容器和镜像

    公司业务在生产环境100多台服务器上用了docker,已经有大半年了,可是最近发现,每个服务器上的各种镜像好多好乱,就想批量删除镜像,需要的来看一下把. 删除所有未运行 Docker 容器 docker rm $(docker ps -a -q) 删除所有 Docker 镜像 删除所有未打 tag 的镜像 docker rmi $(docker images -q | awk '/^<none>/ { print $3 }') 删除所有镜像 docker rmi $(docker images

  • Docker容器中运行nginx

    nginx简介 Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少,稳定性高等优势.与旧版本(<=2.2)的Apache不同,nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑,削减了上下文调度开销,所以并发服务能力更强.整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活. 在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高.同时Nginx在OpenBSD或FreeBSD

  • Docker定制容器镜像的2种方法(推荐)

    一.需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh.所以上网也查了查资料.下面详细的纪录下.在centos 容器内安装ssh后,转成新的镜像用于后期测试使用. 二.镜像定制 第一种方式(手动修改容器镜像) 1.先下载centos镜像 [root@docker ~]# docker pull centos 2.启动容器并进行配置 启动容器, [root@docker ~]# docker run -it -d --

  • Docker 中的容器完全解析

    Docker 中的容器完全解析 Docker中的容器可以看成是镜像的一个运行环境,它带有额外的可写文件层. 一.创建容器: 1.新建容器: docker create -it --name [CONTAINERNAME] [NAME]:[TAG] 比如: docker create -it --name container ubuntu:add /bin/bash 此为根据镜像的名称创建容器,容器的名称为container 2.查看容器详情列表: docker ps -a 可以查看到容器的ID,

  • 详解docker容器间通信的一种方法

    以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两个博客. docker启动命令 ghost: docker run -e NODE_ENV=production --name ghost1 -v /path/to/data/ghost/ghost1/:/var/lib/ghost -d ghost docker run -e NODE_ENV=production --name ghost2 -v /path

  • Docker容器通过独立IP暴露给局域网的方法

    Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBox用起来方便,部署起来也非常容易.官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 2.宿主机可以打开防火墙让局域网其他设备通过访问宿主机的端口进而访问docker的端口 这里以CDNS为例,CDNS是一个用于避免DNS污染的程序,通过CDNS可以把你的计算机变成一个抗污染的DNS

  • 详解Docker 容器互联方法

    Docker容器都是独立的,互相隔离的环境.然而,它们通常只有互相通信时才能发挥作用. 虽然有许多方法可以连接容器们,可是我将并不会试着去将其全部讨论在内.但是在这一系列的方法中,我们将看看那些常用的做法. 虽然看起来是很浅显,但是这对于与Docker成天打交道的朋友来说,理解这些技术及底层的设计理念就显得非常地重要了. 理解这些主题将会: 帮助开发和运维人员探索广泛的容器部署的选择. 让开发和运维人员更自信的着手于微服务microservice架构设计. 让开发和运维人员可以较好的编排更复杂的

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

    一.Docker 容器监控报警方式 接着上篇文章的记录,看到grafana的版本已经更新到4.2了,并且在4.0以后的版本中,加入了Alert Notifications 功能,这样在对容器 监控完,可以加入报警规则.根据官网介绍,报警方式也有很多种,常见的Email.Slack即时通讯.webhook等. 本篇记录的是邮件的报警设置.环境和上篇基本一致,都是在Docker 平台测试环境下,另外本篇使用的grafana容器的版本是用的 dockerhub上最新版本,该版本为grafana/gra

  • Docker 容器内存监控原理及应用

    Docker 容器内存监控 linux内存监控 要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念. 使用free命令可以查看当前内存使用情况. [root@localhost ~]$ free total used free shared buffers cached Mem: 264420684 213853512 50567172 71822688 2095364 175733516 -/+ buffers/cache: 36024632 228396052 Sw

  • golang实现对docker容器心跳监控功能

    自己写的go程序放到线上本来编译成二进制扔上去就行啦,但是怀着一颗docker的心,最终还是将它放到docker容器中运行起来了,运行起来也ok,一个最小容器64M,统一管理起来也方便,但是毕竟是个线上长驻内存的服务程序,万一跑挂了怎么办,如何才能监控它,直接上go代码,网上代码,略微做了下注释,但实测过,真实有效: package main import ( "encoding/json" "errors" "flag" "fmt&q

  • 详解Docker容器可视化监控中心搭建

    概述 一个宿主机上可以运行多个容器化应用,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率.内存占用.网络状况以及磁盘空间等等一系列信息,而且这些信息随时间变化,我们称其为时序数据,本文将实操 如何搭建一个可视化的监控中心 来收集这些承载着具体应用的容器的时序信息并可视化分析与展示! 动手了,动手了... 准备镜像 adviser:负责收集容器的随时间变化的数据 influxdb:负责存储时序数据 grafana:负责分析和展示时序数据 部署Influxdb服务 可以将

  • Docker 容器监控原理及 cAdvisor的安装与使用说明

    生产环境中监控容器的运行状况十分重要,通过监控我们可以随时掌握容器的运行状态,做到线上隐患和问题早发现,早解决. 所以今天我就和你分享关于容器监控的知识(原理及工具 cAdvisor). 虽然传统的物理机和虚拟机监控已经有了比较成熟的监控方案,但是容器的监控面临着更大的挑战,因为容器的行为和本质与传统的虚拟机是不一样的,总的来说,容器具有以下特性: 容器是短期存活的,并且可以动态调度 容器的本质是进程,而不是一个完整操作系统 由于容器非常轻量,容器的创建和销毁也会比传统虚拟机更加频繁 Docke

  • python监控日志中的报错并进行邮件报警

    目录 前言 实现思路 实现代码 前言 在测试过程中,注意力往往都在功能上,如果功能正常,是基本不会查看日志的,反之会查看日志定位问题.但是表面上的功能正常不能确保日志没有报错,不能确保其他功能点没有问题,这时我们就需要日志的监控,一旦有报错就触发报警机制(报警机制可以有邮件报警.钉钉微信发消息报警等),我选择的是发邮件报警. 实现思路 1.在测试过程中,日志时时在刷,时时监控难度太大 2.转换思路,每分钟对日志进行扫描一次,发现报错即报警 a.获取当前时间前一分钟的日志,并将日志全部写入一个文件

  • 搭建zabbix监控以及邮件报警的超级详细教学

    目录 一.zabbix 1.1 简介 1.2 zabbix主要功能 1.3 zabbix的主要特点 1.4 zabbix组件 1.5 zabbix原理 二.基于LNMP环境搭建zabbix监控 2.1 安装nginx 2.2 安装mariadb 2.3 安装php 2.4 修改php-fpm配置文件 2.5 修改nginx配置文件支持PHP并修改php配置文件 2.6 测试网页 2.7 测试连接数据库 2.8 建立数据库及用户并且授权 2.9 测试连接zabbix数据库 2.10 zabbix

  • Docker容器监控及日志管理实现过程解析

    当Docker部署规模变大后,需要对容器进行监控,一般Docker自带几个监控子命令ps.top和stats,然后是现在流行的开源监控工具Prometheus Docker自带的监控子命令ps docker ps ,列出容器,方便查看当前的运行的容器,以下是命令语法与参数 语法 docker ps [OPTIONS] OPTIONS说明: -a :显示所有的容器,包括未运行的. -f :根据条件过滤显示的内容. --format :指定返回值的模板文件. -l :显示最近创建的容器. -n :列

  • Prometheus 监控MySQL使用grafana展示

    目录 prometheus通过exporter监控mysql,并用grafana图表展示 1.测试机器 2.配置mysql host01 3.创建exporter帐号 4.下载,安装mysqld_exporter 4.1 编辑文件输入密码 4.2 添加启动服务文件 4.3 启动mysqld_exporter 4.4 测试验证 5.下载,安装node_exporter 5.1 添加启动服务文件 5.2 启动node_exporter 5.3 测试验证 6.安装prometheus+grafana

  • python脚本监控docker容器

    本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下 脚本功能: 1.监控CPU使用率 2.监控内存使用状况 3.监控网络流量 具体代码: #!/usr/bin/env python # --*-- coding:UTF-8 --*-- import sys import tab import re import os import time from docker import Client import commands keys_container_st

随机推荐