【优化篇】调用钉钉机器人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文件系统下

(图片点击放大查看)

相关文章
|
7月前
|
机器学习/深度学习 人工智能 运维
运维不只是“修电脑”:聊聊运维如何助力 AI 优化服务质量
运维不只是“修电脑”:聊聊运维如何助力 AI 优化服务质量
488 9
|
7月前
|
机器学习/深度学习 人工智能 运维
运维告警别乱飞了!AI智能报警案例解析
运维告警别乱飞了!AI智能报警案例解析
721 0
|
6月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
254 8
|
7月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
5984 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
12月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
12月前
|
运维 监控 数据可视化
从告警到巡检,YashanDB Cloud Manager 帮我省下一半运维时间
数据库运维常依赖人工操作,易引发业务问题。YashanDB Cloud Manager(YCM)改变这一现状:可视化实例管理、全栈资源监控、智能巡检、灵活告警、高可用保障、权限审计体系,助企业降低故障影响、提升DBA效率、强化安全合规、标准化运维流程。若你被数据库运维困扰,可尝试此国产平台。
|
7月前
|
存储 运维 监控
云存储账单太吓人?教你几招运维优化省钱大法
云存储账单太吓人?教你几招运维优化省钱大法
319 9
|
9月前
|
传感器 算法 安全
机器人路径规划和避障算法matlab仿真,分别对比贪婪搜索,最安全距离,RPM以及RRT四种算法
本程序基于MATLAB 2022A实现机器人路径规划与避障仿真,对比贪婪搜索、最安全距离、RPM和RRT四种算法。通过地图模拟环境,输出各算法的路径规划结果,展示其在避障性能与路径优化方面的差异。代码包含核心路径搜索逻辑,并附有测试运行图示,适用于机器人路径规划研究与教学演示。
1009 64
|
7月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
224 4
|
6月前
|
传感器 人工智能 运维
拔俗AI巡检系统:让设备“会说话”,让隐患“早发现”,打造更安全高效的智能运维
AI巡检系统融合AI、物联网与大数据,实现设备7×24小时智能监测,自动识别隐患并预警,支持预测性维护,提升巡检效率5倍以上,准确率超95%。广泛应用于工厂、电力、交通等领域,推动运维从“被动响应”转向“主动预防”,降本增效,保障安全,助力数字化转型。(238字)
874 0