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

(图片点击放大查看)

相关文章
|
9月前
|
机器学习/深度学习 人工智能 运维
运维告警别乱飞了!AI智能报警案例解析
运维告警别乱飞了!AI智能报警案例解析
818 0
|
11月前
|
运维 算法 机器人
阿里云AnalyticDB具身智能方案:破解机器人仿真数据、算力与运维之困
本文将介绍阿里云瑶池旗下的云原生数据仓库AnalyticDB MySQL推出的全托管云上仿真解决方案,方案采用云原生架构,为开发者提供从开发环境、仿真计算到数据管理的全链路支持。
|
11月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
运维 监控 数据可视化
从告警到巡检,YashanDB Cloud Manager 帮我省下一半运维时间
数据库运维常依赖人工操作,易引发业务问题。YashanDB Cloud Manager(YCM)改变这一现状:可视化实例管理、全栈资源监控、智能巡检、灵活告警、高可用保障、权限审计体系,助企业降低故障影响、提升DBA效率、强化安全合规、标准化运维流程。若你被数据库运维困扰,可尝试此国产平台。
|
9月前
|
缓存 运维 监控
API 别乱跑:自动化运维里的流量管理秘籍
API 别乱跑:自动化运维里的流量管理秘籍
321 9
|
9月前
|
机器学习/深度学习 数据采集 运维
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
运维告警不是“撞大运”:聊聊数据驱动的异常检测模型
274 3
|
9月前
|
机器学习/深度学习 运维 数据挖掘
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
423 3
|
11月前
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+ OOS AI 助手实现 7×24 小时运维自由
通过钉钉机器人配置阿里云 OOS AI 助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。
|
11月前
|
运维 监控 关系型数据库
API天天出毛病?不如翻翻运维数据,真相都藏在这儿
API天天出毛病?不如翻翻运维数据,真相都藏在这儿
255 10
|
11月前
|
缓存 自然语言处理 算法
淘宝API智能客服机器人实现响应速度突破性提升
淘宝升级智能客服系统,通过算法优化与分布式架构重构,实现响应速度提升80%,日均处理咨询超2亿次。核心技术包括微服务架构、语义理解引擎与多轮对话优化,支撑92%机器人承接率,助力用户体验与运营效率双提升。
1135 0

热门文章

最新文章