文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Zabbix问题告警如何实现处理闭环?

2024-11-30 15:25

关注

一、搭建Zabbix6.2平台

►通过Docker快速搭建Zabbix 6.2的最新版本。

1.1、创建Zabbix专属网络

创建Zabbix组件虚拟子网:Zabbix-Subnet

docker network create --subnet 172.10.0.0/16 --ip-range 172.10.240.0/20 Zabbix-Subnet

1.2、运行Zabbix MySQL容器

选择MySQL8.0作为Zabbix监控数据的存储引擎。

docker run --name Zabbix-MySQL -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-v /etc/localtime:/etc/localtime:ro \
-d mysql:8.0 \
--character-set-server=utf8 \
--collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

1.3、运行Zabbix Server容器

本文使用企业微信群机器人作为告警媒介,为确保容器能正常请求Webhook地址,通过--add-host绑定hosts实现强制解析,可根据实际情况配置。

docker run --name Zabbix-Server -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
--hostname="Zabbix-Server" \
-e DB_SERVER_HOST="Zabbix-MySQL" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-e ZBX_NODEADDRESS="Zabbix-Server" \
-v /etc/localtime:/etc/localtime:ro \
-p 10051:10051 \
--add-host qyapi.weixin.qq.com:157.148.55.111 \
-d zabbix/zabbix-server-mysql:alpine-6.2-latest

1.4、运行Zabbix Agent2容器

Zabbix Agent2基于Go语言开发,作为Zabbix Agent替代品,它几乎集成了Zabbix Agent原有的所有功能,且易于通过Go插件实现第三方功能。

docker run --name Zabbix-Agent -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e ZBX_HOSTNAME="Zabbix server" \
-e ZBX_SERVER_HOST="Zabbix-Server" \
-e ZBX_SERVER_PORT="10051" \
-v /etc/localtime:/etc/localtime:ro \
--privileged \
-d zabbix/zabbix-agent2:alpine-6.2-latest

►值得提及的是,Zabbix Agent2已内置证书校验功能,再无需通过复杂的openssl的脚本实现,效果如下:

docker exec -it Zabbix-Server zabbix_get -s Zabbix-Agent -k web.certificate.get[zabbix.com,,104.26.7.148] | python -m json.tool
{
    "result": {
        "message": "certificate verified successfully",
        "value": "valid"
    },
    "sha1_fingerprint": "8b5889c0a9ecb12a7f4ec1e2c91d70eebb70aa4a",
    "sha256_fingerprint": "22a31bd36212fd11bedaba8a3cd66e113710d68c2725b37ebd8c10c2ff49cc56",
    "x509": {
        "alternative_names": [
            "*.zabbix.com",
            "zabbix.com",
            "sni.cloudflaressl.com"
        ],
        "issuer": "CN=Cloudflare Inc ECC CA-3,O=Cloudflare\\, Inc.,C=US",
        "not_after": {
            "timestamp": 1685750399,
            "value": "Jun 02 23:59:59 2023 GMT"
        },
        "not_before": {
            "timestamp": 1654214400,
            "value": "Jun 03 00:00:00 2022 GMT"
        },
        "public_key_algorithm": "ECDSA",
        "serial_number": "014937aa9f28ce4846ddfb7109cbfb0e",
        "signature_algorithm": "ECDSA-SHA256",
        "subject": "CN=sni.cloudflaressl.com,O=Cloudflare\\, Inc.,L=San Francisco,ST=California,C=US",
        "version": 3
    }
}

1.5、运行Zabbix Web容器

选择Nginx作为ZabbixWeb前端引擎。

docker run --name Zabbix-Web -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e PHP_TZ="Asia/Shanghai" \
-e DB_SERVER_HOST="Zabbix-MySQL" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-v /etc/localtime:/etc/localtime:ro \
-p 80:8080 \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest

1.6、配置Zabbix Agent

Zabbix-Server容器启动时已配置链接到Zabbix-Agent,容器内部可直接找到,故这里的接口类型使用DNS方式即可。

批量创建Zabbix-AgentN容器并正确配置后,稍等片刻再次刷新仪表盘,查看已能正常收集数据。

二、创建Zabbix用户和告警媒介

2.1、添加Zabbix告警用户

目前Zabbix已具备完整的用户权限管理体系,我们可以通过设置不同群组不同用户授予不同操作和查看权限,满足运维团队的精细化管理。

►根据系统保障团队特点,通常需要创建一、二线两种运维角色。通过左侧导航->管理->用户群组,创建一个名为 系统保障团队的群组,主机权限视具体情况勾选主机群组、并授予 读或 读写,如下图所示:

►左侧导航->管理->用户,创建两个Zabbix Web用户,"用户名"分别为:servicedesk、appadmin,"用户名第一部分"分别为:运维服务台(一线)、应用运维(二线)。群组均为:系统保障团队,如下图所示:

切到用户权限页,勾选角色为:User role,当然这里可视实际情况而定,如下图所示:

2.2、添加企业微信群机器人

►创建一个Zabbix告警通知专用企微群,通过群窗口进入管理界面。点击添加群机器人赋予名字后,复制地址获取完整WebHook链接。

2.3、创建Webhook告警媒介

左侧导航->管理->媒介->创建媒介类型,填入名称"WXWork_RoBot",点击编辑脚本,复制以下内容进行填充。

try {
    var params = JSON.parse(value),
        request = new HttpRequest(),
        msg = {
            msgtype: 'markdown',
            markdown: {
                content: params.Subject + '\n' + params.Message
            }
        },
        response;
    if (params.HTTPProxy) {
        request.setProxy(params.HTTPProxy);
    }
    request.addHeader('Content-Type: application/json');
    response = request.post(params.To,JSON.stringify(msg)
    );
    response = JSON.parse(response);  
    if (request.getStatus() != 200) {
        throw 'Response Status: ' + request.getStatus();
    }
    if (response.errcode !== 0) {
        throw 'Response errcode: ' + response.errcode + '\n' + 'Response errmsg: ' + response.errmsg;
    }
    return JSON.stringify(response);
}catch (error) {
    throw 'Sending failed: ' + error;
}

其他参数保持和下图一致即可。

2.4、测试Webhook告警媒介

►Zabbix Web端同样提供WebHook媒介的测试,以便验证配置的正确性。通过左侧导航->管理->媒介,找到"WXWork_RoBot",在动作列点击 测试。参数说明:

HTTPProxyHTTP代理:留空

Message消息体输入:"测试内容、测试内容"

Subject体输入"# 测试"

To发送体输入:企微Webhook机器人完整链接

点击下方测试,如无例外,在企微专用告警群里,你会收到机器人 小Z发出的如下消息:

假若告警媒介出现问题,JS脚本会自动抛出对应异常信息,如下图所示:

如下是输入错误的企微机器人地址后抛出的异常

Sending failed: Response errcode: 93000 Response errmsg: invalid webhook url, hint: [1670835060365200618705084], from ip: x.x.x.x, more info at https://open.work.weixin.qq.com/devtool/query?e=93000

2.5、配置Zabbix告警动作

►Zabbix的告警动作对检测到的异常采取不同的通知措施。这里,通过左侧导航->配置->动作->触发器动作,创建三种告警动作:告警动作、告警恢复动作、告警更新动作,来实现系统保障团队对告警的闭环处理。

►系统保障团队可通过自身情况选择将不同告警阶段动作的信息发送给不同的团队。配置过程中,三种告警动作参数全部保持一致,即发给用户组 Admin(Zabbix Administrator)、仅送到告警媒介 WXWork_Robot。

关于告警动作解释:

告警动作,即当告警出现时,Zabbix将告警信息发送给哪些用户.

告警恢复动作,即当告警恢复时,Zabbix将告警信息发送给哪些用户。

告警恢复动作,即当告警信息变化时,Zabbix将变化发送给哪些用户。

最终触发器告警动作的完整视图,如下图所示:

2.6、配置Zabbix告警消息模板

Zabbix告警动作需要结合对应报警媒介中的消息模板完成告警消息的推送,这里的消息模板分别对应前面配置三个告警动作,即:

告警动作->消息模板:问题

告警恢复动作->消息模板:问题恢复

告警更新动作->消息模板:问题更新

最终配置,如下图所示:

三、Zabbix6.2动作之更新操作通知

3.1、触发Zabbix告警消息

为了校验告警有效性,通常需要人为触发告警。当然,触发方式由很多种,你可以缩短item收集时间,也可以暴力直接拉升服务器负载。

这里通过Zabbix Agent节点执行dd命令,迅速拉满节点CPU,触发Zabbix告警。

cpu_count=`cat /proc/cpuinfo | grep "physical id" | wc -l`;echo "当前节点核心数: ${cpu_count} 个";for i in `seq 1 ${cpu_count}`; do echo -e "--------\n正在拉满核心${i}"; dd if=/dev/zero of=/dev/null & sleep 5; done
当前节点核心数: 2 个
--------
正在拉满核心1
[1] 5802
--------
正在拉满核心2
[2] 5807

通过 top -H很快就能看到 CPU idel值已接近或处于0,告警在即。

PS:结束上述命令可以使用 pkill -9 dd

3.2、接收Zabbix告警消息

人为触发告警后,一线服务台巡检或听到告警音(如启用)仪表盘时,就会已看到告警条。

在企微专用告警群里,成功接收到告警信息,如下图所示:

3.3、处置Zabbix告警消息

按系统保障团队工作流程机制,一线服务台需要在限定时间内电话知达当日值班二线或相关服务负责人。此时一线服务台在仪表盘上,点击告警条上的"否",对问题进行跟踪反馈。

1)此时在告警群里,已看到一线服务台对Zabbix告警信息做出响应。

2)当日值班二线或相关服务负责人收到告警后,立即对告警问题进行处置,如解决问题得到解决,对告警信息进行评价。

3)Zabbix监控继续对问题项进行检索,如满足恢复条件,自动发送告警恢复信息。

4)一线服务台接收到恢复告警后,确认并记录问题,最终完成整个告警问题的闭环处理。

根据经验,在运维事件管理中,有效地记录系统保障人员的问题处理时间和根因分析,定期做复盘,这对提升团队的服务质量有很大的帮助。

四、小结

除了可以在线反馈问题处理进度外,Zabbix告警确认(ACK)功能还能改变告警等级从严或简单处理,通过也能对告警通知信息进行抑制和屏蔽。

来源:Zabbix开源社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯