Cloud Alert 經過應用,接入監控系統/平臺的告警,集中管理您的告警,統一分派通知,統一分析。php
這個平臺最早了解和使用是在 2017 年下半年,以前的名稱叫 oneitsM
。預警產品名稱爲 : OneAlert
, 如今該產品已經遷移到 睿象雲,並改名爲 CloudAlert
。本文主要是介紹和記錄下該預警產品的使用。html
咱們首先要註冊一個帳號:官網連接,而後登錄咱們的帳號。選擇咱們的 Cloud Alert
。ios
而後點擊咱們上方的集成。web
咱們能夠直接集成業界主流的監控工具,如:Zabbix、Nagios、Prometheus、OpenFalcon、SolarWinds等,同時也能夠經過 Email 郵箱集成或者 REST API 方式接入您的告警。docker
咱們須要先獲取咱們的 APPkey
,而後在安裝的時候,傳入該參數。json
1、安裝 Agentapi
zabbix
腳本目錄 (如何查看 zabbix
腳本目錄):cd /usr/local/zabbix-server/share/zabbix/alertscripts
wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz
tar -xzf ca_zabbix_release-2.1.0.tar.gz cd cloudalert/bin bash install.sh APPkey
注:一、在安裝過程當中根據安裝提示,輸入zabbix管理地址、管理員用戶名、密碼。bash
二、zabbix管理地址正確示例:http://zabbix.server.com/zabbix微信
zabbix server
管理界面查看是否添加成功。出現該腳本就意味着成功了。工具
這裏要嚴重的注意一點,就是 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
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 容器裏面執行腳本,便可避免該問題。