スマートアラームCAとしてのZabbix統合デュオプラットフォーム(クラウドアラート)
I.はじめと予備的な理解
アプリケーションを介してクラウドアラート、あなたのアラーム、統一発送通知、統一された分析のアラームアクセス制御システム/プラットフォーム、集中管理。
プラットフォームは、理解し、名前を呼ばれる前に、2017年の後半に使用する最初のものですoneitsM
。警告製品名:OneAlert
今製品は、コアとして、クラウドに移行し、名前が変更されましたCloudAlert
。この記事では、早期警戒やレコードに導入された製品の使用です。
私たちは、最初にアカウントを登録する必要があります。公式サイトのリンクを、そして私たちのアカウントにアクセスしてください。私たちの選択Cloud Alert
。
そして、私たちの統合の上でクリックしてください。
私たちは、直接など、業界をリードする監視ツールを統合することができます:Zabbixの、Nagiosは、プロメテウス、OpenFalcon、SolarWindsのなどが、また、電子メールのメールボックスまたはあなたのアラームにREST APIアクセスを経由して統合することができます。
第二に、Zabbixのに統合
私たちは、最初に取得する必要がありAPPkey
、入ってくるパラメータをし、インストールインチ
まず、エージェントをインストールします
- 切り替えます
zabbix
(方法についてscriptsディレクトリzabbix
scriptsディレクトリ):
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
注意:1、インストール・プロンプト時にインストールに応じて、ZABBIXの管理アドレス、管理者のユーザー名とパスワードを入力します。
2、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
六 、卸载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 容器里面执行脚本,即可避免该问题。