使用Grafana 展示Docker容器的監控圖表並設置郵件報警規則


 

一、Docker 容器監控報警方式

  

  接着上篇文章的記錄,看到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 容器

[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 腳本啟動時指定的參數。

   本文屬於原創文章,如有轉載,請注明出處及鏈接。來自飛走不可http://www.cnblogs.com/hanyifeng/p/6293620.html

3.修改完腳本,重啟該容器,相當於重啟服務

[root@docker ~]# docker stop grafana-alerting
grafana-alerting
[root@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服務運行的腳本了!再次感謝danielleetorkelo,還有留言的小兄弟 @orientzc!

4.打開瀏覽器,訪問http://ip,首頁如下:

添加一個通知組,(可添加多個,方便分組發送報警設置)

Name: 定義一個通知名,可在后期的Graph 添加Alert 報警規則時,指定Send to

Type:這里定義的email

Email addresses: 定義接收人郵件列表

最后保存,點擊SendTest,如果你的郵箱收到以下郵件,配置就成功了。


5.添加數據源,和上篇內容中添加信息一樣。此步就略過啦。

6.添加一個Dashboard

然后新建一個Graph,編輯,下面有個Alert,,創建一個Alert。如下圖:

Alert Config 填寫內容如下:

Notifications處填寫如下:

主要選擇發送到之前定義的通知組

7.進入所監控的容器內,使用以下命令模擬內存升高

本文屬於原創文章,如有轉載,請注明出處及鏈接。來自飛走不可http://www.cnblogs.com/hanyifeng/p/6293620.html

進入容器:

[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監控報警方面暫時學習記錄到這里吧,后期有什么擴展學習,在繼續分享。文中有不足之處,還望大家多多指教。

 

更新時間:2017-4-20 18:30

更新日志:修改創建Ganfana容器時運行的命令,添加SMTP服務的環境變量,支持啟動后即可添加notifications 郵箱測試!

 

 

本文屬於原創文章,如有轉載,請注明出處及鏈接。來自飛走不可http://www.cnblogs.com/hanyifeng/p/6293620.html

_ 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM