Zabbix集成Cloud Alert(睿象雲)實現電話短信預警


Zabbix 集成 睿象雲智能告警平台 CA ( Cloud Alert )

一 、簡介與前期了解

Cloud Alert 通過應用,接入監控系統/平台的告警,集中管理您的告警,統一分派通知,統一分析。

這個平台最先了解和使用是在 2017 年下半年,之前的名稱叫 oneitsM。預警產品名稱為 : OneAlert, 現在該產品已經遷移到 睿象雲,並更名為 CloudAlert 。本文主要是介紹和記錄下該預警產品的使用。

我們首先要注冊一個賬號:官網鏈接,然后登陸我們的賬號。選擇我們的 Cloud Alert

然后點擊我們上方的集成。

我們可以直接集成業界主流的監控工具,如:Zabbix、Nagios、Prometheus、OpenFalcon、SolarWinds等,同時也可以通過 Email 郵箱集成或者 REST API 方式接入您的告警。

二、集成到 Zabbix

我們需要先獲取我們的 APPkey ,然后在安裝的時候,傳入該參數。

一、安裝 Agent

  1. 切換到 zabbix 腳本目錄 (如何查看 zabbix 腳本目錄):
cd /usr/local/zabbix-server/share/zabbix/alertscripts 
  1. 獲取Cloud Alert Agent包:
wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz
  1. 解壓、安裝。
tar -xzf ca_zabbix_release-2.1.0.tar.gz 
cd cloudalert/bin 
bash install.sh APPkey

注:1、在安裝過程中根據安裝提示,輸入zabbix管理地址、管理員用戶名、密碼。

​ 2、zabbix管理地址正確示例:http://zabbix.server.com/zabbix

  1. 當提示"安裝成功"時表示安裝成功!
  2. zabbix server 管理界面查看是否添加成功。

1561622519970

出現該腳本就意味着成功了。

三 、創建分派策略和通知策略

這里要嚴重的注意一點,就是 CloudAlert 的 預警級別只有三種,它和 zabbix 的級別對應見下表.我們在設置通知策略和分派策略需要注意.

zabbix 級別狀態 參數值 OneAlert 級別狀態
information (信息) 1 提醒
not_classified (未分類) 1 提醒
warning (警告) 2 警告
average (一般嚴重) 2 警告
high (嚴重) 3 嚴重
disaster (災難) 3 嚴重

分派策略

通知策略

我們這里只使用到 CloudAlert 的通知策略的通知方式中的電話和短信,因為我們 微信已經對接了我們的企業微信預警,郵箱也使用了企業郵箱(進垃圾郵箱的概率更低一些).所以我們這里只設置 通知方式為 電話和短信. 並且只有在嚴重預警的時候才會觸發.

四 、設置動作

在執行安裝腳本的時候,默認已經幫我們添加好了動作 cloudalert action。但是沒有設置觸發條件,我們可以設置一下觸發條件,觸發器示警度 大於等於 嚴重 的時候,進行觸發該動作.

五 、生成預警

當我們的預警達到閾值,就會觸發報警.

短信預警內容:

【睿象雲】16:48:53,發生嚴重級別告警:Zabbix agent on Test-186 is unreachable for 5 minutesTest-186 Agent ping:Up (1)Zabbix agent on Test-186 is unreachable for 5 minutes,告警對象:Test-186,告警編號:585679

六 、卸載Cloud Alert

Web 設置卸載

  • 刪除報警媒介 cloudalert media
  • 刪除用戶群組 cloudalert group
  • 刪除用戶 cloudalert
  • 刪除動作 cloudalert action

有人會說我們沒有添加上面的東西,為什么會存在上面這些內容,我們在 執行 install.sh 腳本的時候就會添加這些.

腳本文件卸載

​ 刪除腳本 刪除 /usr/local/zabbix-server/share/zabbix/alertscripts cloudalert文件夾。

七、注意事項

錯誤內容

我安裝的 zabbix server 是使用的 docker 安裝的, 腳本目錄是使用的數據卷(我們可以用 docker inspect container_id 查看到)。我們將腳本放置在該數據卷后,安裝,也提示成功了,但是在預警的時候,有報錯。

報錯內容如下:

/usr/lib/zabbix/alertscripts/cloudalert/bin
/usr/lib/zabbix/alertscripts/cloudalert/bin/log.sh: line 11: /var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log: No such file or directory
cp: cannot stat '/var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log': No such file or directory
/usr/lib/zabbix/alertscripts/cloudalert/bin/log.sh: line 16: /var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log: No such file or directory
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 623 0 89 100 534 1141 6850 --:--:-- --:--:-- --:--:-- 6935
/usr/lib/zabbix/alertscripts/cloudalert/bin/log.sh: line 11: /var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log: No such file or directory
cp: cannot stat '/var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log': No such file or directory
/usr/lib/zabbix/alertscripts/cloudalert/bin/log.sh: line 16: /var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log: No such file or directory

解析過程與解決問題

從上面我們可以看到是腳本 log.sh 執行的過程中報錯了,提示沒有該文件,它寫入的文件是 /var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/logs/cloudalert.log ,這個文件路徑是 docker 宿主機的日志文件路徑,程序在 docker 里面運行,這個路徑肯定是獲取不到的。我們通過查看 log.sh 腳本發現,

#!/bin/bash
if [ -z "$DIR" ]; then
    DIR="$( cd "$( dirname "$0"  )" && pwd  )"
fi

source $DIR/cloudalert.conf
function log(){
  path=$base_path
  log=$path/logs/cloudalert.log
  time=`date +%Y-%m-%d\ %H:%M:%S`
  echo $time $1 [$2]: "$3" >> $log
  bak_log=$path/logs/cloudalert.log_`date +%Y-%m`
  if [ ! -f $bak_log ];
  then
    cp $log $bak_log
    > $log
  fi
}

日志路徑引用了 base_path,這個值是在 cloudalert.conf 里定義的. 我們可以在配置文件中看到, base_path 值獲取的是 宿主機 cloudalert 所在的路徑. 而不是實際在 docker 容器里的路徑。

current_path=/var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert/bin
base_path=/var/lib/docker/volumes/bb221b74a7d8ad528194867830db0c1ac8fdc31f2ab0ee4456ffce61646fd83a/_data/cloudalert
agentVersion=1130
AppKey=1233444555666
zabbix_host=http://127.0.0.1
zabbix_url=http://127.0.0.1/api_jsonrpc.php
user=Admin
password=admin            

我們將 base_path 的值更改為 在docker 容器里面的值 /usr/lib/zabbix/alertscripts/cloudalert .

然后就沒有報錯了.

反思

這個問題的引起,是我在 宿主機下將執行的該腳本,導致的腳本執行的時候獲取的是宿主機的目錄,而不是 docker 主機里面的目錄路徑,在 docker 容器里面執行腳本,即可避免該問題。


免責聲明!

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



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