如何编写Linux服务器硬件监控脚本?,实时告警怎么做?

写一个Linux服务器硬件监控脚本,核心就是三件事:采集硬件状态、对比阈值、触发告警,这个闭环想通了,剩下全是在填坑误报怎么防、通知怎么发、脚本自己别挂掉。

Linux服务器硬件监控脚本怎么写才能避免假死和误报?

很多新手写完监控脚本,跑了两天就开始怀疑人生:凌晨三点CPU飙到90%疯狂告警,结果一看是跑批任务;硬盘温度偶尔跳一下,邮件轰炸了整个运维群,说白了,脚本的骨架是采集和告警,灵魂是防误报机制。

自己实现服务器监控
加载中
自己实现服务器监控

先搭好最常用的硬件指标采集框架

一个生产级的监控脚本,至少要覆盖这几类硬件状态:

  • CPU负载和核心温度:用mpstat看用户态和系统态占用率,用sensors读取CPU核心温度
  • 内存使用情况:free -m拿到总内存、已用、可用和缓存数据,重点关注可用内存比例
  • 磁盘空间和IO负载:df -h看分区使用率,iostat看读写延迟和队列长度
  • 硬盘健康状态(SMART信息):smartctl -a /dev/sda查硬盘已用寿命、重映射扇区数、通电时长
  • 风扇转速和主板温度:通过IPMI/ipmitool获取,或者依赖lm-sensors直接读

举个例子,我这边的脚本在采集磁盘SMART信息时,用smartctl -H先看整体健康状态,如果返回”PASSED”就不管,一旦出现”FAILED”立刻触发严重告警,比单纯盯着磁盘空间要提前预警很多天。

采集频率设置在什么范围才合理?

设置采集间隔时,先想清楚一个场景:你的业务夜里会有批量任务吗?会有瞬间的编译高峰吗?

  • 常规情况60秒一轮就够了,CPU、内存、磁盘这些指标变化没那么快
  • 核心数据库或交易系统,可以缩短到10到15秒一轮,代价是脚本进程占用的CPU会稍微高一点
  • 硬盘SMART检测不要每轮都跑,smartctl读取底层数据有一定开销,建议每10分钟或1小时跑一次

比较推荐的做法是把采集逻辑拆成两个循环:一个高频循环跑CPU/内存/磁盘空间,一个低频循环跑SMART和温度,这样脚本自己不会成为新的性能负担。

硬件监控脚本如何实现实时告警?三种通知渠道实测体验

如何编写Linux服务器硬件监控脚本?,实时告警怎么做?

脚本采集到的数据,得用一种能真正吵醒人的方式送出去,经历了大半夜被误报吵醒,又经历了硬盘快挂了邮件没人看之后,我把告警渠道分成了三个梯队,各有用武之地。

邮件通知:传统但适合固定工位场景

邮件适合内网环境,适合有IT值班人员的公司,你可以用系统自带的mail命令,或者sendmail、msmtp发给运维邮箱,优点是没有额外成本,缺点是邮件太容易被淹没,紧急程度不够醒目。

钉钉/企业微信机器人:中小团队的主流方案

现在不少中小团队都在用钉钉或企业微信的群机器人Webhook,脚本里用curl向Webhook地址推送JSON消息,十几行就能搞定,正文里带上主机名、IP、告警指标、当前数值和阈值,群里的值班同事一眼就能看到。

这类机器人还支持@指定成员,可以把告警直接推给对应负责人,相比邮件,实时性强了不止一点,而且免费。

短信网关:机房无外网环境的兜底方案

如果你管理的服务器在隔离机房,没有外网出口,短信是最稳妥的告警渠道,通常是脚本通过串口或者4G模组调用服务商的短信API,一条短信几分钱到一毛多,硬件监控一年短信费用也就几十块,换来的是哪怕机房网络断了也能收到告警。

为了直观对比,我整理了一张表:

告警渠道 实时性 部署成本 适合场景
邮件 低,容易延迟 几乎为零 有固定IT工位、内网环境
钉钉/企业微信机器人 高,秒级到达 零成本 中小团队日常运维值班
短信网关 最高,不依赖网络 按条计费,每年几十元 隔离机房、无人值守IDC

服务器硬件告警阈值设置多少合适?按场景调参才靠谱

关于服务器硬件告警阈值设置多少合适这个问题,行业里没有一套放之四海皆准的数字,因为

如何编写Linux服务器硬件监控脚本?,实时告警怎么做?

做数据库的机器和做Web静态资源的机器,压力模型完全不一样,抄别人的配置往往容易翻车,我自己调参时,是按照这个思路来的:

CPU和内存的阈值,先看业务角色

  • 数据库服务器:CPU持续超过70%,持续5分钟以上就发警告,数据库的查询高峰有周期性,短时冲高可以不用管,但长时间下不来就得查慢查询或锁等待了
  • Web应用服务器:多数情况下CPU在50%以下算健康,超过80%就该告警,注意区分用户态占用和系统态占用,如果是sy占比太高,可能是频繁切换进程或内核异常
  • 内存方面,生产环境建议可用内存低于20%时警告,需要留意的是,Linux的buff/cache不能简单算作不可用,建议用available字段判断

磁盘和温度阈值,宁可保守不要激进

磁盘的使用率比较对称。根分区或数据盘超过85%告警,超过90%升级为严重告警,这个数字在运维圈算是共识,因为一旦写满,不光业务挂掉,连syslog和监控脚本本身都可能跑不起来。

温度方面,大多数x86服务器的安全上限是75°C左右,建议CPU核心温度超过65°C就触发警告,超过72°C触发严重告警,但同时要看风扇转速,如果温度高而风扇转速没跟着上来,那多半是风扇故障或散热风道堵了。

防误报的核心技巧:连续N次采样确认

这也是我踩过最大的坑,解决方案很简单:连续采集3次,每次都超过阈值才触发告警,比如60秒一个周期,连续3次CPU超过80%才发通知,中间任何一次回落到阈值以下,计数器清零,所以监控脚本不能写得太简单,状态机逻辑是必不可少的。

硬件监控脚本的性能开销与生产环境避坑指南

监控脚本本身是个常驻进程,它的性能开销直接关系到业务稳定性,在云服务器上,这个问题更明显买的是2核4G的小机器,再跑个Python写的监控脚本,动不动吃5%的CPU,业务方大概要来找你聊天了。

Bash和Python怎么选?

  • 纯Bash脚本用/proc/stat、/proc/meminfo直接读内核数据,开销极小,适合只做简单阈值判断
  • Python脚本处理复杂逻辑更顺手,比如把数据写入SQLite、计算趋势、对接多个Webhook,但启动Python解释器本身就占一点内存
  • 如何编写Linux服务器硬件监控脚本?,实时告警怎么做?

  • 折中方案是:主循环用Bash,采集和告警逻辑用Python子进程,日常开销非常低

脚本本身的自我守护

写监控脚本,别忘了监控它自己,启动脚本时把PID写入文件,配合crontab每分钟检查一下进程是否存活,我自己的习惯是,要么用systemd管理监控服务,配置Restart=always,要么在crontab里加一条任务判断进程存在,不存在就拉起。

出门在外怎么快速定位硬件问题

有一次我在高铁上收到告警,说机房一台机器的磁盘SMART状态异常,手机上没有笔记本,只能借助脚本里提前集成的故障信息收集功能。把dmidecode、dmesg、smartctl -a和ipmitool sel list的输出统一打包到一个日志目录,这样收到告警短信或机器人推送时,直接登上去抓日志,远程排查效率高很多。

其实这个思路算是一条不成文的行业经验:监控脚本做的不是告警这一个动作,而是把故障的上下文也一并打包,方便后续定位。

关于Linux服务器硬件监控脚本的常见疑问解答

监控脚本每30秒跑一次会影响线上业务性能吗?

影响很小,但看写法,用Bash直接读/proc接口,每轮执行时间在毫秒级,几乎可以忽略不计,真正要留意的是smartctl这类底层工具扫描硬盘时的IO开销,有概率影响到正在做大量磁盘读写的业务,建议把它放到单独的低频周期里执行,比如每10分钟跑一次。

服务器硬件监控脚本怎么防误报?

核心思路是加状态判断,连续多次采样超过阈值再告警,同时对单次瞬时抖动设置容忍窗口,配套手段包括:区分告警级别、过滤已知的维护时间段、定期更新基线数据,能把误报率压下来,监控系统才算真正可用。

云服务器和物理机的硬件监控脚本有什么不一样?

云服务器拿不到温度、风扇、SMART这类底层硬件数据,因为虚拟化层屏蔽了这些接口,通常只能监控CPU使用率、内存、磁盘IO等资源指标,物理机则可以靠IPMI读取完整的硬件健康状态,如果买的是云服务器,建议把重点放在云平台自带的监控告警上,这类监控脚本更侧重于云主机的资源使用率与进程层面的异常检测。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e5%a6%82%e4%bd%95%e7%bc%96%e5%86%99linux%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%a1%ac%e4%bb%b6%e7%9b%91%e6%8e%a7%e8%84%9a%e6%9c%ac%ef%bc%9f%ef%bc%8c%e5%ae%9e%e6%97%b6%e5%91%8a%e8%ad%a6%e6%80%8e%e4%b9%88/

赞 (0)
pkg文件用虚拟机怎么运行?安装方法是什么?
上一篇 2026年9月3日 03:34
虚拟机重启后无法开机如何修复,vmware虚拟机启动失败原因?
下一篇 2026年9月3日 03:35

相关推荐

  • 域名证书怎么获取?SSL证书申请流程及下载教程

    域名证书(SSL/TLS证书)主要通过向受信任的证书颁发机构(CA)申请获取,下载后需安装至Web服务器以启用HTTPS加密,在数字化生存的今天,网站安全不再是“可选项”,而是“必选项”,当你访问一个网站,浏览器地址栏出现绿色小锁,或者看到“不安全”的红色警告,这背后就是域名证书在起作用,对于站长和运维人员来说……

    2026年6月22日
    1700
  • Weblogic和Tomcat哪个更好用?Weblogic和Tomcat的区别是什么

    WebLogic是企业级重型应用服务器,功能全面但昂贵复杂;Tomcat是轻量级Servlet容器,灵活免费但需额外配置,两者核心区别在于定位:前者适合大型复杂业务,后者适合中小型Web应用,在IT架构选型中,开发者常面临“选重还是选轻”的纠结,这不仅是技术栈的选择,更是成本与效率的博弈,WebLogic和To……

    2026年6月18日
    4800
  • 会议信息管理系统账号信息管理怎么做,有什么技巧?

    会议信息管理系统中的账号信息管理,是保障会议数据安全与权限合规的核心环节,它直接决定了系统能否高效、稳定地服务于企业内部协作,为什么账号信息管理是会议信息管理系统的核心账号信息管理并非简单的用户列表维护,而是会议系统安全运行的基石,近年来,企业内部会议数据泄露事件频发,相当一部分原因出在账号权限管理混乱上,行业……

    2026年7月31日
    700
  • web服务器测试方法究竟是什么?有哪些实用技巧?

    web服务器测试方法主要包括功能测试、性能测试、压力测试、安全测试、兼容性测试和稳定性测试,常用工具包括curl、ab、wrk、JMeter、nmap、openssl等, 下面按测试目标拆解具体方法和实操命令,web服务器测试方法有哪些?六类测试覆盖全生命周期功能测试:验证HTTP方法、状态码、响应内容是否符合……

    2026年10月6日
    000
  • 广州ECS云服务器取消自动登录怎么设置?操作步骤详解

    取消云服务器的自动登录功能,是提升广州地区企业IT基础设施安全防护等级的首要防线,对于运行关键业务的ECS实例而言,自动登录虽带来了一时的便捷,却留下了巨大的安全隐患,通过禁用该功能并配合密钥对管理,能有效阻断未经授权的物理访问与远程暴力破解,这是保障数据资产安全的核心举措,为何必须取消自动登录:安全与合规的双……

    2026年3月31日
    9900
  • 日本专属服务器怎么选,哪家机房性价比高?

    日本专属服务器就是用户独享一台物理服务器的全部资源,适合对性能、稳定性和数据安全有较高要求的业务场景,相比虚拟主机或云服务器,它没有邻居抢占资源,硬件层面完全隔离,尤其适合面向日本及亚太地区用户的网站、游戏、跨境电商和数据分析业务,日本专属服务器是什么?从租用方式理解日本专属服务器日本专属服务器,也叫日本独立服……

    2026年10月17日
    100
  • 独立服务器带宽和VPS带宽区别在哪?独立服务器带宽和VPS带宽哪个好?

    独立服务器带宽与VPS带宽的核心区别在于资源的独占性与共享性,独立服务器提供物理层面的独享带宽,性能强劲且稳定,适合大型业务;VPS带宽则是从物理服务器虚拟化分割出的共享资源,性价比高但存在争夺风险,选择何种方案,直接决定了业务的稳定性与成本结构, 资源归属本质:独享与共享的根本分野理解带宽区别的第一步,是看清……

    2026年3月6日
    11700
  • 高防CDN回源host设置错误会怎样?如何正确配置回源Host

    高防CDN回源Host设置错误会导致源站无法识别真实请求,进而引发403禁止访问、SSL证书校验失败或回源流量异常激增,直接造成业务中断,当你的网站接入高防CDN后,CDN节点作为客户端与源站之间的中间人,会将用户的请求转发给源站,在这个过程中,HTTP请求头中的Host字段至关重要,如果这个字段配置不当,就像……

    2026年6月17日
    2500
  • 如何测试服务器线路好不好?服务器线路质量怎么检测?

    判断服务器线路质量的优劣,核心在于稳定性、延迟与丢包率的综合表现,而非单一的带宽大小,优质的线路意味着数据传输路径短、节点少、抗干扰能力强,能够确保业务全天候稳定运行,测试服务器线路好不好,必须通过专业工具进行多维度的实测,拒绝主观臆断, 基础连通性测试:Ping与丢包率是“体检表”最直观的判断方法是使用Pin……

    2026年3月5日
    13800
  • 前置鉴权服务器有哪些品牌?,哪个牌子好?

    主流方案分为网关型、代理型和独立认证服务型三类,具体选型取决于业务规模和安全等级要求,Nginx、Spring Cloud Gateway、Keycloak是当前使用最广泛的三个代表,前置鉴权服务器有哪些类型?先看门卫的三种分工如果把后端服务比作一栋大楼,前置鉴权服务器就是站在大门口的安保系统,它干的活很纯粹……

    2026年10月12日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注