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

(图片点击放大查看)

相关文章
|
6月前
|
运维 监控 安全
安全运维:入侵检测与防御实战指南
安全运维:入侵检测与防御实战指南 【10月更文挑战第9天】
355 3
|
5月前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
275 0
|
3月前
|
人工智能 机器人 API
AppFlow:无代码部署Dify作为钉钉智能机器人
本文介绍如何通过计算巢AppFlow完成Dify的无代码部署,并将其配置到钉钉中作为智能机器人使用。首先,在钉钉开放平台创建应用,获取Client ID和Client Secret。接着,创建消息卡片模板并授予应用发送权限。然后,使用AppFlow模板创建连接流,配置Dify鉴权凭证及钉钉连接凭证,完成连接流的发布。最后,在钉钉应用中配置机器人,发布应用版本,实现与Dify应用的对话功能。
AppFlow:无代码部署Dify作为钉钉智能机器人
|
1月前
|
消息中间件 运维 安全
云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维
云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维
|
7月前
|
消息中间件 运维 安全
云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维
在 2024 年云栖大会上,阿里云智能集团产品专家刘尧全面介绍了云消息队列 ApsaraMQ Serverless 的落地成果和产品进展。此外,我们还邀请到杭州优行科技有限公司中间件消息研发负责人王智洋,分享了 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。
334 21
|
4月前
|
人工智能 运维 自然语言处理
今晚围观—>安全运维工程师现场直播用通义灵码发现和修复代码漏洞
12 月 18 日晚 19:30 分,阿里云中小企业直播间「AI 编码助手一年养成记:从“打酱油”到企业开发“真正助手”」见。
|
6月前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
111 1
|
8月前
|
运维 监控 安全
运维之道:构建高效、稳定和安全的系统
在数字化时代的浪潮中,运维(运营与维护)的重要性日益凸显。本文深入浅出地探讨了如何构建一个高效、稳定且安全的系统,从基础设施的搭建到日常的监控管理,再到安全防护的策略实施,每一个环节都是确保业务连续性和数据安全的关键。通过实例分析和最佳实践的分享,旨在为读者提供一套完整的运维解决方案,帮助团队提升运维效率,降低风险,保障业务的稳健发展。
|
9月前
|
API 运维
开发与运维函数问题之Gather API与Stream Collector的区别如何解决
开发与运维函数问题之Gather API与Stream Collector的区别如何解决
70 1
|
8月前
|
运维 安全 网络安全
云端安全之盾:云计算与网络安全的协同演进运维自动化之路:从传统到现代化的转变
【8月更文挑战第23天】在数字化浪潮下,云计算以其灵活性和可扩展性成为企业数字化转型的重要推手。然而,随着云服务的快速发展,网络安全威胁也日益增多。本文将探讨云计算与网络安全如何相互促进,共同成长,以确保信息安全,并分析云服务提供商采取的安全策略以及企业在采用云服务时应注意的安全实践。

热门文章

最新文章