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 CurlHttpRequest(); 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.Status() !== 200 ) { var message = 'Request failed with status code '+request.Status(); 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 告警设置中集成的步骤。