调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员

简介: 调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员

调用钉钉机器人API接口将堡垒机安全运维告警消息单发给运维人员

1、原场景如下

在堡垒机运维时的安全告警是通过钉钉webhook机器人发送到钉钉群

比如某个运维人员操作了passwd命令,这时钉钉群里有如下告警

(图片点击放大查看)

安全运维工程师在收到钉钉群里的告警消息后,先通过告警里面的人员信息钉钉中查到这个运维人员,然后手动将告警转发给这个运维人员提醒该运维人员

2、需求

在思考能否将告警消息直接通过机器人将告警消息单独发送这个操作了passwd的运维人员,这样能做到立马自动通知

3、探索过程

在查看钉钉机器人的API文档后

https://open.dingtalk.com/document/orgapp/chatbots-send-one-on-one-chat-messages-in-batches

(图片点击放大查看)

(图片点击放大查看)

有了一些思路

HTTP请求格式如下

POST /v1.0/robot/oToMessages/batchSend HTTP/1.1
Host:api.dingtalk.com
x-acs-dingtalk-access-token:asdasdasdasd
Content-Type:application/json
{
  "robotCode" : "dingxxxxxx",
  "userIds" : [ "manager1234" ],
  "msgKey" : "sampleMarkdown",
  "msgParam" : "{\"text\": \"hello text\",\"title\": \"hello title\"}"
}

难点主要在于userIDs这个参数获取和msgParam告警文本消息(markdown格式)如何通过GrayLog告警模块构造出来

在Github上搜索graylog时,找到了一个可能实现这个功能的graylog插件

https://github.com/airbus-cyber/graylog-plugin-logging-alert

(图片点击放大查看)

实现的过程比较痛苦,反复调试与试错了一个星期,最终搞定了

4、实现的大致步骤

下面简单说一下具体的实现步骤

1、下载Graylog4.2版本对应的graylog-plugin-logging-alert插件包并安装

rpm -ivh graylog-plugin-logging-alert-4.1.2-1.noarch.rpm 
systemctl restart graylog-server

重启graylog-server服务生效

(图片点击放大查看)

2、修改Logging Alert Notification的配置

Update Logging Alert Notification Configuration

(图片点击放大查看)

这里我用逗号,来分隔,为了方便后面构造json格式请求body

(图片点击放大查看)

3、新建一下Logging Alert类型的告警通知

robotCode来自

Body Template内容如下

(图片点击放大查看)

POST-BODY{"robotCode": "dingeXXXXXXXdmzd"
  ${if backlog && backlog[0]} "userIds":["${backlog[0].fields.userIDnumber}"]
  "msgKey": "sampleMarkdown"
  "msgParam": "{\\"title\\": \\"${event_definition_title} \\"
             \\"text\\": \\"## [堡垒机告警信息] \\r### <font color=#FF0000> 告警描述:${event_definition_description}</font> \\r##### <font color=#FF0000>告警产生时间</font>:${backlog[0].timestamp} \\r##### <font color=#67C23A>告警详细情况</font>:<font color=#FF0000>员工:${backlog[0].fields.user} </font>通过堡垒机登录<font color=#FF0000>${backlog[0].fields.resource}</font>于<font color=#FF0000>${backlog[0].fields.timestamp}</font>时间点执行了passwd命令操作,具体操作命令见告警原始日志中command内容 \\r##### <font color=#67C23A>告警服务器名称</font>:<font color=#FF0000>${backlog[0].fields.resource}</font> \\r##### <font color=#67C23A>告警服务器的IP</font>:${backlog[0].fields.targetIP} \\r##### <font color=#67C23A>告警原始日志</font>:${backlog[0].message} \\" }" ${end}}

4、在原来推送到Webhook机器人的告警下再加上Logging Alert类型

还是保留之前钉钉群里的webhook机器人告警,两种告警并行

(图片点击放大查看)

5、在Graylog服务器编写一下日志监控的shell脚本

(图片点击放大查看)

(图片点击放大查看)

脚本内容如下monitor_alertjson_sendtodingdingrobot.sh

#!/bin/bash
send_dingtalk_robot(){
Token=`curl -s -X POST 'https://api.dingtalk.com/v1.0/oauth2/accessToken' -H 'Content-Type: application/json' -d '{"appKey": "请根据自己的环境自行补充","appSecret": "请根据自己的环境自行补充"}' | jq -r .accessToken`
curl -s -X POST 'https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend' -H 'Content-Type: application/json' -H "x-acs-dingtalk-access-token:$Token" -d@/tmp/message.json
}
logfile="/var/log/graylog-server/server.log"
outputfile="/tmp/message.json"
keyword="POST-BODY"
# 实时监控日志文件
tail -n 0 -f "$logfile" | while read -r line; do
  if [[ $line == *"$keyword"* ]]; then
    # 提取关键字后面的内容
    content=$(echo "$line" | awk -F"$keyword" '{print $2}')
    # 存储到文件
    echo "$content" > "$outputfile"
    echo "已提取并保存内容到 $outputfile"
    send_dingtalk_robot
    echo "已发送钉钉机器人"
  fi
done

6、执行监控脚本

当触发了告警时/var/log/graylog-server/server.log中会出现[LoggingAlert] POST-BODY的日志

监控脚本会自动提取后输出到/tmp/message.json,然后调send_dingtalk_robot函数自动发送出来

(图片点击放大查看)

(图片点击放大查看)

最终的效果如下 钉钉机器人通过单聊的方式将告警通知给该运维人员

当然只是简单实现了这个功能,后续还需要继续优化该脚本

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
9月前
|
机器学习/深度学习 人工智能 运维
运维告警别乱飞了!AI智能报警案例解析
运维告警别乱飞了!AI智能报警案例解析
855 0
|
运维 监控 数据可视化
从告警到巡检,YashanDB Cloud Manager 帮我省下一半运维时间
数据库运维常依赖人工操作,易引发业务问题。YashanDB Cloud Manager(YCM)改变这一现状:可视化实例管理、全栈资源监控、智能巡检、灵活告警、高可用保障、权限审计体系,助企业降低故障影响、提升DBA效率、强化安全合规、标准化运维流程。若你被数据库运维困扰,可尝试此国产平台。
|
9月前
|
机器学习/深度学习 数据采集 运维
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
288 3
|
9月前
|
机器学习/深度学习 运维 数据挖掘
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
449 3
|
11月前
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+ OOS AI 助手实现 7×24 小时运维自由
通过钉钉机器人配置阿里云 OOS AI 助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1691 3
|
11月前
|
缓存 自然语言处理 算法
淘宝API智能客服机器人实现响应速度突破性提升
淘宝升级智能客服系统,通过算法优化与分布式架构重构,实现响应速度提升80%,日均处理咨询超2亿次。核心技术包括微服务架构、语义理解引擎与多轮对话优化,支撑92%机器人承接率,助力用户体验与运营效率双提升。
1194 0
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
1050 1
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
662 7
数据采集监控与告警:错误重试、日志分析与自动化运维