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

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

一 、簡介與前期瞭解

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

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

咱們首先要註冊一個帳號:官網連接,而後登錄咱們的帳號。選擇咱們的 Cloud Alertios

而後點擊咱們上方的集成。web

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

2、集成到 Zabbix

咱們須要先獲取咱們的 APPkey ,而後在安裝的時候,傳入該參數。json

1、安裝 Agentapi

  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

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

​ 二、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/alertscriptscloudalert文件夾。

7、注意事項

錯誤內容

我安裝的 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 容器裏面執行腳本,便可避免該問題。

相關文章
相關標籤/搜索