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

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

问题背景

在之前这个场景中 调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员

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

监控脚本会自动提取POST-BODY后的内容输出到/tmp/message.json,然后调send_dingtalk_robot函数自动发送告警到用户

当时是后台运行这个shell脚本

nohup ./monitor_alertjson_sendtodingdingrobot.sh > monitor_alertjson_sendtodingdingrobot.log    2>&1 &

但是发现这个shell脚本在后台运行一段时间后,会发现这个脚本在后台不再运行,异常退出了

排查过程

由于不太好排查,可能是/var/log/graylog-server/server.log发生了轮转,或者其他原因

(图片点击放大查看)

(图片点击放大查看)

为了避免这样的问题发生,借助chatgpt修改了脚本,再结合crontab,做了脚本优化

修改后的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": "dingeXXXXX","appSecret": "XXXXXXXX"}' | 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"
# 检查标记文件是否存在
if [ -f "/tmp/file_monitor_running" ]; then
  # 如果标记文件存在,则表示上一次监控还未完成,退出脚本
  echo "Monitoring is already running. Exiting..."
  exit 0
fi
# 创建标记文件
touch /tmp/file_monitor_running
# 实时监控日志文件
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 "------------------Alert Start--------------------------------------"
    echo "已提取并保存内容到 $outputfile"
    echo "告警产生时间如下"
    echo `date "+%Y-%m-%d %H:%M:%S"`
    echo "告警内容如下"
    echo `cat $outputfile`
    send_dingtalk_robot
    echo "已发送钉钉机器人"
    echo "------------------Alert Finished-----------------------------------"
  fi
done
# 删除标记文件
rm -rf /tmp/file_monitor_running

结合crontab

crontab -e
*/5 * * * * /etc/graylog/server/monitor_alertjson_sendtodingdingrobot.sh >> /etc/graylog/server/monitor_alertjson_sendtodingdingrobot.log

(图片点击放大查看)

查看脚本后台运行状态

ps -faux

(图片点击放大查看)

Tips: 脚本中的appKey": "dingeXXXXX","appSecret": "XXXXXXXX"请自行替换

告警效果

(图片点击放大查看)

Tips:Linux文件创建时间的问题

在解决这个问题的过程想去确认 /var/log/graylog-server/server.log的文件的创建时间

但发现stat /var/log/graylog-server/server.log命令中无Birth信息

(图片点击放大查看)

这个问题引申出来Linux文件创建时间的问题

通过搜索相关知识,最终针对xfs ext4不同的文件系统,编写了一个shell脚本,来获取某个文件的创建时间. xfs ext4类型的文件系统均支持

vim get_file_creation_time.sh
脚本如下
#!/bin/bash
file="$1"  # 文件名作为参数传递给脚本
# 获取文件所在文件系统类型
filesystem=$(df --output=fstype "$file" | tail -n 1)
if [ "$filesystem" == "xfs" ]; then
  # XFS 文件系统
  inode=$(ls -i "$file" | awk '{print $1}')
  dfinfo=$(df --output=source "$file" | tail -n 1)
  if [ -z "$inode" ]; then
    echo "文件不存在或无法访问"
    exit 1
  fi
  crtime=$(xfs_db -r -c "inode $inode" -c "p v3.crtime.sec" "$dfinfo")
  if [ -z "$crtime" ]; then
    echo "无法获取文件的创建时间"
  else
    echo "$file 文件的创建时间: $crtime"
  fi
elif [ "$filesystem" == "ext4" ]; then
  # ext4 文件系统
  inode=$(ls -i "$file" | awk '{print $1}')
  dfinfo=$(df --output=source "$file" | tail -n 1)
  if [ -z "$inode" ]; then
    echo "文件不存在或无法访问"
    exit 1
  fi
  crtime=$(debugfs -R "stat <$inode>" "$dfinfo"  2>/dev/null | grep crtime | awk '{print $4,$5,$6, $7, $8}')
  if [ -z "$crtime" ]; then
    echo "无法获取文件的创建时间"
  else
    echo "$file 文件的创建时间: $crtime"
  fi
else
  echo "不支持的文件系统类型: $filesystem"
fi

脚本效果如下

  • xfs 文件系统下

(图片点击放大查看)

  • ext4文件系统下

(图片点击放大查看)

相关文章
|
3月前
|
机器学习/深度学习 人工智能 运维
运维不只是“修电脑”:聊聊运维如何助力 AI 优化服务质量
运维不只是“修电脑”:聊聊运维如何助力 AI 优化服务质量
262 9
|
6月前
|
JSON 安全 API
商城API接口:上货安全与实战指南
商城上货API接口在电商运营中扮演着核心角色,本文从功能、类型、安全性及实战案例多角度剖析其应用价值。主要功能涵盖商品信息管理(如发布、图片上传、类目设置)、库存与价格管理、订单处理、物流信息管理、用户信息管理及销售数据分析等。API类型包括RESTful、SOAP、JSON和XML等,其中RESTful和JSON因高效简洁而广泛应用。安全性方面,通过身份验证、授权及数据加密等措施保障接口安全,确保数据传输的可靠性。这些内容为开发者优化商城运营提供了重要指导。
112 1
|
2月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
154 8
|
2月前
|
存储 监控 安全
132_API部署:FastAPI与现代安全架构深度解析与LLM服务化最佳实践
在大语言模型(LLM)部署的最后一公里,API接口的设计与安全性直接决定了模型服务的可用性、稳定性与用户信任度。随着2025年LLM应用的爆炸式增长,如何构建高性能、高安全性的REST API成为开发者面临的核心挑战。FastAPI作为Python生态中最受青睐的Web框架之一,凭借其卓越的性能、强大的类型安全支持和完善的文档生成能力,已成为LLM服务化部署的首选方案。
|
3月前
|
存储 运维 监控
云存储账单太吓人?教你几招运维优化省钱大法
云存储账单太吓人?教你几招运维优化省钱大法
267 9
|
8月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
8月前
|
缓存 安全 API
API 接口开发与合理利用:构建高效、安全、可维护的数字桥梁
本文全面解析API接口的设计、优化与安全维护。API作为系统间交互的标准化契约,核心价值在于解耦系统、提升复用性和构建开放生态。设计时需遵循六大原则:明确输入输出、关注单一职责、实现自我表达、确保功能无重叠、保障幂等性及合理版本化。性能优化从批量处理、异步调用、并行执行等方面入手,同时结合缓存、池化技术和SQL优化提升效率。安全性涵盖加密传输、加签验签、Token认证、防重放攻击及限流熔断等十大要点。最后,通过文档自动生成、日志体系和版本管理确保接口可持续迭代。优秀的API应以契约优先、演进思维和防御心态为核心,成为系统的数字资产,支持内外部高效协作与生态建设。
|
3月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
141 4
|
5月前
|
传感器 算法 安全
机器人路径规划和避障算法matlab仿真,分别对比贪婪搜索,最安全距离,RPM以及RRT四种算法
本程序基于MATLAB 2022A实现机器人路径规划与避障仿真,对比贪婪搜索、最安全距离、RPM和RRT四种算法。通过地图模拟环境,输出各算法的路径规划结果,展示其在避障性能与路径优化方面的差异。代码包含核心路径搜索逻辑,并附有测试运行图示,适用于机器人路径规划研究与教学演示。
714 64
|
3月前
|
机器学习/深度学习 运维 数据挖掘
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
211 3