Zabbix 集成¶
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。 Zabbix 使用 MySQL、PostgreSQL、SQLite、Oracle 或 IBM DB2 储存资料。
zabbix 集成 CA 步骤¶
一、默认探针方式¶
- 创建应用
在Cloud Alert界面创建 zabbix 应用,并获取 appkey 。

-
在 zabbix server 端安装 CA 探针
-
切换到 zabbix 脚本目录:
cd /usr/local/zabbix-server/share/zabbix/alertscripts <small>补充:查看zabbix脚本目录方法: vi /etc/zabbix/zabbix_server.conf 查看AlertScriptsPath
-
获取睿象云 Cloud Alert agent 包:
wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.0.tar.gz
-
解压、安装。
tar -xzf ca_zabbix_release-4.0.0.tar.gz cd cloudalert/bin bash install.sh -- --处填入您新建应用时生成的appkey ``` !!! note "安装说明" 1. 在安装过程中根据安装提示,输入zabbix管理/监控/web登陆地址、管理员用户名、密码。 2. zabbix管理地址正确示例:http://zabbix.server.com/zabbix或者https://XXX 3. 安装时必须使用bash命令。 -
当提示"安装成功"时表示安装成功!
产生新的 zabbix 告警(problem),动作状态为“已送达”表示集成成功。
安装说明
集成成功后不需要启动服务,可直接使用。
-
排查启动 zabbix 服务权限和安装探针权限是否一致,若不一致请将探针权限修改成和启动 zabbix 服务权限一致
ps -aux|grep zabbix 查看zabbix启动服务权限 chown zabbix:zabbix cloudalert -R 探针权限改成zabbix的
-
CA 探针安装报错说明¶
1. Zabbix 管理地址输入错误
错误提示:
The Zabbix management address you entered is incorrect!!!Check please...
解决办法:正确输入 Zabbix 管理地址(正确示例:http://主机域名:端口/zabbix)
2. zabbix 用户名、密码错误
错误提示:
Auth Failed,Please check the user and password!!!`
解决办法:正确输入 Zabbix 管理员账号、密码,确认可用通过该账户正确登录 zabbix
3. 媒体类型(Media Type)已经存在
错误提示:
create media type failed! error message:{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Media type \"cloudalert media\" already exists."},"id":1}
解决办法:登陆 Zabbix 管理控制台,删除媒体类型“cloudalert media”
4. 用户组(User Group)已经存在
错误提示:
create user group failed! error message:{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"User group \"cloudalert group\" already exists."},"id":1}
解决办法:登陆 Zabbix 管理控制台,删除用户组“cloudalert group”
5. 用户(User)已经存在
错误提示:
create user failed! error message:{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"User \"cloudalert\" already exists."},"id":1}
解决办法:登陆 Zabbix 管理控制台,删除用户“cloudalert”
6. 动作(Action)已经存在
错误提示:
create action failed! error message:{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Action \"cloudalert action\" already exists."},"id":1}
解决办法:登陆 Zabbix 管理控制台,删除动作“cloudalert action”
ZABBIX 集成常见问题¶
-
当 zabbix 服务所在机器无外网 IP 时,需要在脚本中增加代理配置

-
当 zabbix 集成时 appkey 未填写或填写错误时,请在如下两个位置修改 appkey

CA 探针安装后测试告警方法¶
测试原理: 在 zabbix 管理平台中手动关闭掉已产生的告警,使 zabbix 重新产生告警,从而触发动作(action)并将告警发送到 Cloud Alert。
-
登录 zabbix 进入问题列表:监测中(Monitoring)->问题(Problems)。

-
选中告警->【整批确认】(Bulk acknowledge)

-
勾选【关闭问题】(Close problem)->【确认】(Acknowledge)
提示
当【关闭问题】无法勾选时,需要修改触发器-允许手动关闭

-
当 zabbix 重新生成告警时,查看动作是否触发成功。状态是“已送到”表示集成成功

-
登录 Cloud Alert,查看告警。
集成后收不到告警排错方法¶
排查步骤:
- 进入 zabbix 管控台,
监测中->问题勾选任意告警然后选择下方的整批确认按钮,触发 zabbix 确认告警(problem),动作状态为已送达

如动作状态为 已失败,提示信息如下:

解决方案: 将 alert.sh 脚本放到 /usr/local/zabbix/alertscripts/cloudalert/bin 即可。
- 查看探针日志
进入 zabbix 探针日志目录 (/usr/local/zabbix-server/share/zabbix/alertscripts/cloudalert/logs),查看探针日志(命令 :tail -f cloudalert.log)
如日志没有告警记录,请确认启动 zabbix 服务权限和安装探针权限是否一致,权限不一致会导致告警日志无法正常写入。
- 确认探针日志
有两种异常情况:
告警参数
[ZabbixActionParams] zabbix 告警参数是不是正常
正常示例:
2018-02-02 13:02:34 INFO [ZabbixActionParams]: {'app':'bb23435e-0669-92de-c864-e75023476970','eventId':'ci3-13608','eventType':'trigger','alarmName':'Com_selectentityName:ci3','entityId':'ci3-13608','alarmContent':'ci3 MySQL select operations per second:493.85 qps','priority':'5','host':'ci3','tag':[{'hostgroups':['Test']}],'agentVersion':'1120','service':'MySQL select operations per second','ip':'10.251.23.168','itemName':'MySQL select operations per second','itemValue':'493.85 qps'}
告警转发状态为 failed
[ItsmAlertResponse] 告警转发状态是不是成功(result 为success为成功,failed表示失败)
正常示例:
2018-02-02 13:02:35 INFO [ItsmAlertResponse]: {"result":"success","message":"receive event success","data":0,"totalCount": 0,"code":"0"}
如果告警转发状态为 success,表示 zabbix 探针集成成功,可以登录 Cloud Alert 查看告警,设置分派通知策略。
补充
(1)告警转发状态为 failed,请联系 CA 客服人员
(2)告警转发状态为 success,任然接受不到告警请联系 CA 客服人员
二、webhook 配置方式¶
(与探针方式 2 选 1,不可同时使用)
- 创建应用
在Cloud Alert界面创建 zabbix 应用,并获取 appkey 。
- 进入 管理 -> 报警媒介类型 -> 创建报警媒介类型

- 添加参数
| 名称 | 值 |
|---|---|
| app | 填写 appkey 值 |
| URL | 填写 WebHook 地址,http://api.aiops.com/alert/api/event/zabbix/v3/ |
| alarmContent | {HOST.HOST}{ITEM.NAME}:{ITEM.VALUE}{TRIGGER.NAME} |
| alarmName | {TRIGGER.NAME} |
| entityId | {HOST.HOST}-{TRIGGER.ID} |
| eventId | {HOST.HOST}-{TRIGGER.ID} |
| entityName | {HOSTNAME} |
| eventType | {TRIGGER.STATUS} |
| host | {HOST.HOST} |
| ip | {HOST.IP} |
| itemName | {ITEM.NAME} |
| itemValue | {ITEM.VALUE} |
| Message | {ALERT.MESSAGE} |
| priority | {TRIGGER.NSEVERITY} |
| service | {ITEM.NAME} |
| tag | [{'hostgroups': ['{TRIGGER.HOSTGROUP.NAME}']}] |
| To | {ALERT.SENDTO} |
- 添加脚本内容(内容默认,直接添加即可)

脚本内容
var Ca = {
params: {},
proxy: null,
setParams: function (params) {
if (typeof params !== 'object') {
return;
}
Ca.params = params;
},
request: function () {
var data = {
app: Ca.params.app,
Message: Ca.params.Message,
To: Ca.params.To,
eventId: Ca.params.eventId,
eventType: Ca.params.eventType,
alarmName: Ca.params.alarmName,
entityId: Ca.params.entityId,
alarmContent: Ca.params.alarmContent,
priority: Ca.params.priority,
host: Ca.params.host,
tag: Ca.params.tag,
ip: Ca.params.ip,
itemName: Ca.params.itemName,
itemValue: Ca.params.itemValue,
entityName: Ca.params.entityName,
service: Ca.params.service
},
response,
url = Ca.params.URL,
request = new HttpRequest();
request.addHeader('Content-Type: application/json');
if (typeof Ca.HTTPProxy !== 'undefined' && Ca.HTTPProxy !== '') {
request.setProxy( Ca.HTTPProxy);
}
if (typeof data !== 'undefined') {
data = JSON.stringify(data);
}
response = request.post(url, data);
if (response !== null) {
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
}
}
if (request.getStatus() !== 200 ) {
var message = 'Request failed with status code '+request.getStatus();
if (response !== null && typeof response.errmsg !== 'undefined') {
message += ': '+ JSON.stringify(response.errmsg) ;
}
throw message + '. Check debug log for more information.';
}
return response;
},
};
try {
var params = JSON.parse(value);
if (typeof params.URL !== 'undefined'
&& typeof params.To !== 'undefined'
&& typeof params.Message !== 'undefined') {
}
else {
throw 'Missing parameter. URL, message, to parameter is required'
}
if (params.HTTPProxy) {
Ca.proxy = params.HTTPProxy;
}
Ca.setParams(params);
Ca.request();
return 'OK';
}catch (error) {
throw 'Sending failed: ' + error;
}
注意 zabbix5.0 版本以上,在创建报警类型时还需要添加两个 Message templates 类型分别为问题、Problem recovery



- 进入 配置-> 动作 -> 创建动作

a. 添加操作(内容默认直接添加即可)


b. 添加恢复操作(内容默认直接添加即可)


注意 5.0 以上版本,需要用户勾选 custom message 并自定义主题和消息内容

- 进入 管理 -> 用户 -> 点击 Admin 用户


注意:若已经安装过 CloudAlertzabbix 探针,需要进入配置——>动作 将 Cloud Alert Action 禁用
zabbix 与 CA 告警级别映射关系¶
| 睿象云 | zabbix(TRIGGER.NSEVERITY) |
|---|---|
| 致命 | 5 |
| 严重 | 4 |
| 警告 | 2,3 |
| 提醒 | 1 |
| 通知 | 0 |
zabbix有两种级别取值方式,睿象云采用的是 TRIGGER.NSEVERITY 字段
TRIGGER.NSEVERITY 与 TRIGGER.SEVERITY 对应关系如下
| zabbix(TRIGGER.NSEVERITY) | zabbix(TRIGGER.SEVERITY) |
|---|---|
| 0 | Not classified |
| 1 | Information |
| 2 | Warning |
| 3 | Average |
| 4 | High |
| 5 | Disaster |
| 睿象云 | Zabbix |
|---|---|
| 事件ID (eventId) | eventId |
以上是Zabbix 告警设置中集成的步骤。