当前位置: 首页 > news >正文

北京网站排名公司志愿海南网站

北京网站排名公司,志愿海南网站,卖手机网站开发的必要性,百度登录账号首页脚本概述这是一个用于服务器日常巡检的 Shell 脚本,主要功能包括:检查多台主机的网络连通性 监控CPU、内存和磁盘使用率 生成详细的巡检报告 通过企业微信发送告警通知核心技术点1. 主机批量管理使用Ansible工具远程执行命令和脚本 通过主机…

脚本概述

这是一个用于服务器日常巡检的 Shell 脚本,主要功能包括:

  •     检查多台主机的网络连通性
  •     监控CPU、内存和磁盘使用率
  •     生成详细的巡检报告
  •     通过企业微信发送告警通知

核心技术点

1. 主机批量管理

  •     使用Ansible工具远程执行命令和脚本
  •     通过主机清单文件 (ip_file) 管理所有待巡检主机

2. 资源监控技术

  •     ​​CPU监控​​:通过top命令获取CPU总使用率
  •     ​​内存监控​​:调用自定义脚本mem.sh获取内存使用率
  •     ​​磁盘监控​​:调用自定义脚本disk.sh获取磁盘使用率

3. 阈值告警机制

  •     设置多级告警阈值(警告/严重)
  •     使用颜色标记不同严重级别的问题
  •     问题计数器统计异常主机数量

4. 报告生成系统(生成三种报告文件)

  •      完整巡检结果(result_file)
  •      问题主机报告(problem_file)
  •      最终汇总报告(final_report)
  •      使用 Markdown 格式增强可读性

5. 通知集成

  •     通过企业微信Webhook API发送告警
  •     支持富文本格式(HTML样式标记)
  •     自动包含日期信息和问题摘要

脚本内容

注意事项:该脚本依赖 Ansible 工具,执行该脚本前需要提前做好以下准备工作:

  • 安装Ansible
  • 配置 ssh 免密登录(在控制节点生成SSH密钥对,并将公钥分发到所有被管理节点)
  • 配置 Ansible 主机清单 Inventory 文件(默认/etc/ansible/hosts),将脚本中ip_file中的ip都加入到 Ansible 主机清单文件中。

整体的 Shell 脚本内容如下:

$ cat /path/dailycheck.sh 
#!/bin/bash # ip_file 用于存放需要巡检的主机清单
ip_file="/path1/hosts"# result_file 用于存所有主机的巡检结果
result_file="/path1/resulted/resulted.$(date +%Y%m%d)"# problem_file 用于存放有问题/告警的主机信息
problem_file="/path1/problems/problems.$(date +%Y%m%d)"# final_report 存放巡检报告,也是发到企微群聊的最终报告
final_report=/path1/resulted/final_report_$(date +%Y%m%d).log# 检查 ip_file 文件是否存在,不存在则终止脚本执行
[ ! -f "$ip_file" ] && echo "找不到ip文件: $ip_file" && exit 1# 初始化结果文件
echo "<font color="blue">IT生产环境巡检结果</font>" > $result_file
echo -e "<font color="blue">告警详情:</font>" > $problem_file# 定义阈值
CPU_WARNING=90
CPU_CRITICAL=95
MEM_WARNING=90
MEM_CRITICAL=95
DISK_WARNING=90
DISK_CRITICAL=95# 定义问题计数器
problem_count=0# for 循环巡检主机清单中的主机
for ip in `cat $ip_file`;do# 初始化变量has_problem=0problem_details=()normal_details=()# 记录基础信息到完整日志echo -e "\n===== 主机 $ip 巡检结果 =====" >> $result_file# 检查服务器到网关的网络连通性ansible $ip -m shell -a "ping -c 2 -i 1 192.168.175.254 " > /dev/null 2>&1if [ $? -eq 0 ];thennetwork_status="网络: 可达"echo "网络正常" >> $result_fileelse network_status="<font color="red">网络不可达!</font>"problem_details+=("$ip $network_status")echo "网络状态: 不可达" >> $result_filehas_problem=1fi # 检查cpu使用率cpu_usage=$(ansible $ip -m shell -a 'top -bn1 | grep "Cpu(s)" | awk "{print \$2 + \$4}"' 2>/dev/null | sed -n '2p' | cut -d '.' -f1)if [ -n "$cpu_usage" ]; thenif [ "$cpu_usage" -ge $CPU_CRITICAL ]; thencpu_display="<font color="red">${cpu_usage}%(严重)</font>"problem_details+=("CPU: $cpu_display")has_problem=1elif [ "$cpu_usage" -ge $CPU_WARNING ]; thencpu_display="<font color="yellow">${cpu_usage}%(警告)</font>"problem_details+=("CPU: $cpu_display")has_problem=1elsecpu_display="${cpu_usage}%"fiecho "CPU使用率: $cpu_display" >> $result_fileelseecho "CPU使用率: 数据获取失败" >> $result_filefi# 检查内存使用率mem_usage=$(ansible $ip -m script -a '/path1/mem.sh' | sed -n 10p | cut -d'"' -f2 | cut -d '.' -f1)if [ -n "$mem_usage" ]; thenif [ "$mem_usage" -ge $MEM_CRITICAL ]; thenmem_display="<font color="red">${mem_usage}%(严重)</font>"problem_details+=("内存: $mem_display")has_problem=1elif [ "$mem_usage" -ge $MEM_WARNING ]; thenmem_display="<font color="yellow">${mem_usage}%(警告)</font>"problem_details+=("内存: $mem_display")has_problem=1elsemem_display="${mem_usage}%"fiecho "内存使用率: $mem_display" >> $result_fileelseecho "内存使用率: 数据获取失败" >> $result_filefi# 检查磁盘使用率disk_usage=$(ansible $ip -m script -a '/path1/disk.sh' | sed -n 10p | cut -d'"' -f2 | cut -d '.' -f1)if [ -n "$disk_usage" ]; thenif [ "$disk_usage" -ge $DISK_CRITICAL ]; thendisk_display="<font color="red">${disk_usage}%(严重)</font>"problem_details+=("磁盘: $disk_display")has_problem=1elif [ "$disk_usage" -ge $DISK_WARNING ]; thendisk_display="<font color="yellow">${disk_usage}%(警告)</font>"problem_details+=("磁盘: $disk_display")has_problem=1elsedisk_display="${disk_usage}%"fiecho "磁盘使用率: $disk_display" >> $result_fileelseecho "磁盘使用率: 数据获取失败" >> $result_filefi# 记录问题主机if [ $has_problem -eq 1 ]; thenecho "\n主机: $ip \n$network_status" >> $problem_filefor detail in "${problem_details[@]}"; doecho "$detail" >> "$problem_file"doneecho "" >> "$problem_file"problem_count=$((problem_count+1))fidone# 生成最终报告
total_hosts=$(cat "$ip_file" | wc -l)
{echo "## 巡检日期: $(date +%Y-%m-%d)"echo "## 巡检对象: IT生产环境"echo "## 总主机数: $total_hosts 台"echo "## 告警主机: $problem_count 台"if [ $problem_count -gt 0 ]; thencat $problem_fileelseecho "<font color="green">本次巡检无异常!</font>"fi
} > $final_report# 发送异常报告到企业微信
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxx"
FINAL_REPORT=`cat $final_report`
curl -X POST -H 'Content-Type: application/json' -d "{\"msgtype\": \"markdown\", \"markdown\": {\"content\": \"$FINAL_REPORT\"}}" $WEBHOOK_URL

可以添加 crond 定时任务,周期性执行巡检脚本

$ crontab -l
0 8 * * 1-5 /path1/dailycheck.sh

巡检脚本中嵌套的脚本有:

  • mem.sh 脚本,用于获取内存使用率
$ cat /path1/ 
#!/bin/bash
free -m | awk '/Mem:/ {printf("%.2f\n", $3/$2 * 100.0)}'
  • disk.sh 脚本,用于获取磁盘使用率
$ cat /path1/disk.sh 
#!/bin/bash
df -Th | grep -E '/\s*$|^/\s*$' | awk '{print $6}' | tr -d '%'

巡检报告

生成的巡检报告效果如下:

http://www.dtcms.com/a/412005.html

相关文章:

  • 【Android之路】图片无障碍化、文本易翻译初步和R类
  • 解决Compile Run插件运行c/c++中文乱码问题
  • 深圳做营销网站公司简介网站口碑推广
  • 网站流量是如何计算的wordpress资讯站
  • 做网站的范本深圳58同城招聘网
  • 深入浅出高并发内存池:原理、设计与实现
  • 0926第一个口头OC——快手主站前端
  • 网站职业技术培训学校广告设计公司深圳策划设计公司
  • A股大盘数据-20250926分析
  • 振动力学|01 单自由度系统的振动分析
  • 【Luogu_P2184】 贪婪大陆【树状数组】
  • 太原网站制作网站建设相关岗位名称
  • phpstorm content.dat.storageData 文件解析:作用、风险与处理建议
  • 做网站要学一些什么一学一做教育视频网站有哪些内容
  • 基于华为openEuler部署Blog轻量级博客系统
  • 西安企业建站费用互联网营销外包推广
  • 怎样做平台网站制作表白网页
  • 【系统架构设计(37)】数据库体系结构
  • 八爪鱼网络网站建设哪里有做商城的网站
  • 网站历史记录怎么恢复百度推广服务
  • 服装设计素材网站网站维护工程师
  • 如何快速查找并解除端口占用:完整指南
  • 【给蔡磊】基因编辑根治渐冻症
  • 如何掘金西方游戏市场?从玩家付费偏好解析2025出海品类与商业化模式
  • 平面设计师上的网站wordpress调用内容
  • 宁波比较好的网站公司中国建设业管理协会网站
  • SCADA系统集成WebSocket实战:构建实时可视化管理看板
  • 深圳网站制作建设公司网站给篡改了要怎么做
  • 什么是响应式网站建设英文公司网站制作
  • 外贸商城网站 定制凡客精选带货达人