Zabbix整合Cloud Alert(睿象雲)實現電話簡訊預警

自由早晚亂餘生發表於2019-06-27

Zabbix 整合 睿象雲智慧告警平臺 CA ( Cloud Alert )

一 、簡介與前期瞭解

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

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

我們首先要註冊一個賬號:官網連結,然後登陸我們的賬號。選擇我們的 Cloud Alert

Zabbix整合Cloud Alert(睿象雲)實現電話簡訊預警

然後點選我們上方的整合。

Zabbix整合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 嚴重

分派策略

Zabbix整合Cloud Alert(睿象雲)實現電話簡訊預警

通知策略

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

Zabbix整合Cloud Alert(睿象雲)實現電話簡訊預警

四 、設定動作

在執行安裝指令碼的時候,預設已經幫我們新增好了動作 cloudalert action。但是沒有設定觸發條件,我們可以設定一下觸發條件,觸發器示警度 大於等於 嚴重 的時候,進行觸發該動作.

Zabbix整合Cloud Alert(睿象雲)實現電話簡訊預警

五 、生成預警

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

簡訊預警內容:

【睿象雲】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/alertscriptscloudalert資料夾。

七、注意事項

錯誤內容

我安裝的 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 容器裡面執行指令碼,即可避免該問題。

相關文章