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

(图片点击放大查看)

相关文章
|
8月前
|
机器学习/深度学习 人工智能 运维
运维告警别乱飞了!AI智能报警案例解析
运维告警别乱飞了!AI智能报警案例解析
779 0
|
运维 监控 数据可视化
从告警到巡检,YashanDB Cloud Manager 帮我省下一半运维时间
数据库运维常依赖人工操作,易引发业务问题。YashanDB Cloud Manager(YCM)改变这一现状:可视化实例管理、全栈资源监控、智能巡检、灵活告警、高可用保障、权限审计体系,助企业降低故障影响、提升DBA效率、强化安全合规、标准化运维流程。若你被数据库运维困扰,可尝试此国产平台。
|
7月前
|
传感器 人工智能 运维
拔俗AI巡检系统:让设备“会说话”,让隐患“早发现”,打造更安全高效的智能运维
AI巡检系统融合AI、物联网与大数据,实现设备7×24小时智能监测,自动识别隐患并预警,支持预测性维护,提升巡检效率5倍以上,准确率超95%。广泛应用于工厂、电力、交通等领域,推动运维从“被动响应”转向“主动预防”,降本增效,保障安全,助力数字化转型。(238字)
964 0
|
8月前
|
机器学习/深度学习 数据采集 运维
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
264 3
|
8月前
|
机器学习/深度学习 运维 数据挖掘
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
390 3
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1601 3
|
运维 监控 安全
安全运维:入侵检测与防御实战指南
安全运维:入侵检测与防御实战指南 【10月更文挑战第9天】
888 3
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
599 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
消息中间件 运维 安全
云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维
在 2024 年云栖大会上,阿里云智能集团产品专家刘尧全面介绍了云消息队列 ApsaraMQ Serverless 的落地成果和产品进展。此外,我们还邀请到杭州优行科技有限公司中间件消息研发负责人王智洋,分享了 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。
733 102
|
运维 监控 前端开发
Zabbix告警分析新革命:DeepSeek四大创新场景助力智能运维
面对日益复杂的IT环境,高效分析监控数据并快速响应成为运维的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新应用,包括一键式智能告警分析、Zabbix文档知识库助手及钉钉告警增强功能。通过部署指南和实用脚本,展示了如何提升故障排查效率,为运维工程师提供高效解决方案。
1361 5