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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 调用钉钉机器人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函数自动发送出来

(图片点击放大查看)

(图片点击放大查看)

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

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
JSON API 数据格式
微店商品列表接口(微店 API 系列)
微店商品列表接口是微店API系列的一部分,帮助开发者获取店铺中的商品信息。首先需注册微店开发者账号并完成实名认证,选择合适的开发工具如PyCharm或VS Code,并确保熟悉HTTP协议和JSON格式。该接口支持GET/POST请求,主要参数包括店铺ID、页码、每页数量和商品状态等。响应数据为JSON格式,包含商品详细信息及状态码。Python示例代码展示了如何调用此接口。应用场景包括商品管理系统集成、数据分析、多平台数据同步及商品展示推广。
|
4天前
|
机器人 API
自定义飞书Webhook机器人api接口
自定义飞书Webhook机器人api接口
51 25
|
4天前
|
JSON 监控 API
唯品会商品详情接口(唯品会 API 系列)
唯品会商品详情接口助力电商发展,提供商品名称、价格、规格等详细信息,支持HTTP GET/POST请求,响应为JSON格式。开发者可通过API Key和商品ID获取数据,应用于电商数据分析、竞品调研、应用开发及价格监控,提升业务效率与竞争力。示例代码展示Python调用方法,方便快捷。
|
2天前
|
JSON 监控 API
虾皮(shopee)商品列表接口(虾皮API 系列)
虾皮(Shopee)是东南亚及台湾地区的知名电商平台,提供丰富的商品数据。通过其API接口,开发者可合法获取商品列表信息,包括商品ID、名称、价格等,支持按分类、关键词、价格范围等条件筛选。Python示例代码展示了如何使用API进行请求,并解析返回的JSON数据。应用场景涵盖市场调研、竞品分析、选品决策、价格监控及数据可视化,帮助电商从业者和分析师更好地理解市场动态,优化运营策略。
|
29天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
3天前
|
监控 数据挖掘 API
唯品会商品列表接口(唯品会 API 系列)
唯品会商品列表接口助力电商数据分析、竞品调研和价格监控。开发者可通过合法途径获取接口权限,使用HTTP GET/POST请求获取商品名称、价格等信息,返回JSON格式数据。Python示例代码展示如何调用接口并解析返回数据。应用场景涵盖市场调研、价格监控、数据挖掘与分析及电商运营优化,为企业决策提供有力支持。
|
14天前
|
搜索推荐 数据挖掘 API
微店商品详情接口(微店API系列)
微店商品详情接口是微店API的重要组成部分,帮助开发者和商家获取商品的详细信息(如标题、价格、库存等),并将其集成到应用程序或数据分析系统中。该接口支持HTTP GET/POST请求,返回JSON/XML格式数据,需通过AppKey和AppSecret进行身份验证和签名加密。应用场景包括商品信息同步、数据分析与市场调研、个性化推荐系统等,助力商业决策和业务拓展。
40 13
|
17天前
|
供应链 数据挖掘 API
1688app 商品详情接口系列(1688API)
1688作为国内知名批发采购平台,提供了一系列商品详情接口(API),助力企业和开发者获取商品基础、价格、库存及供应商信息。通过Python示例代码展示如何调用这些接口,应用场景涵盖采购决策辅助、数据分析与市场调研、电商平台整合及供应链管理系统的优化,为企业和采购商提供有力的数据支持,提升业务效率和竞争力。
62 15
|
23天前
|
JSON 搜索推荐 API
京东店铺所有商品接口系列(京东 API)
本文介绍如何使用Python调用京东API获取店铺商品信息。前期需搭建Python环境,安装`requests`库并熟悉`json`库的使用。接口采用POST请求,参数包括`app_key`、`method`、`timestamp`、`v`、`sign`和业务参数`360buy_param_json`。通过示例代码展示如何生成签名并发送请求。应用场景涵盖店铺管理、竞品分析、数据统计及商品推荐系统,帮助商家优化运营和提升竞争力。
70 23
|
15天前
|
JSON 数据挖掘 开发者
1688 商品评论接口系列(1688API)
1688商品评论接口助力电商数据分析与优化。通过该接口,开发者可获取指定商品的评论数据(如昵称、内容、评分等),支持情感分析和质量反馈收集。接口采用HTTP GET/POST请求,返回JSON格式数据。Python示例代码展示如何调用接口并处理响应。应用场景包括商家产品优化、客户服务提升、市场调研及电商平台数据分析。