監控 Linux 服務器資源

使用 Bash 腳本監控 Linux 服務器資源并發送告警郵件

  • 前言
  • 一、🛠? 腳本功能概覽
  • 二、 📜 腳本核心邏輯分解
        • 2.1. 變量初始化
        • 2.2. CPU 使用率監控
        • 2.3. 內存使用率監控
        • 2.4. 磁盤使用率監控
        • 2.5. 磁盤 IO 延遲監控(await)
        • 2.6. 網絡流量監控
  • 三、📤 告警通知機制
  • 四、📁 日志文件說明
  • 五、? 使用建議
        • 5.1. 配置定時任務(Cron)
        • 5.2. 郵件發送配置
        • 5.3. 安全性建議
        • 5.4. 擴展功能建議
  • 六、🧩 總結

前言

??在現代 IT 運維中,及時掌握服務器的運行狀態至關重要。當 CPU、內存、磁盤、IO 或網絡等關鍵指標出現異常時,快速告警能夠幫助運維人員第一時間響應,避免服務中斷或性能下降。

??本文將介紹一個用 Bash 腳本編寫的輕量級服務器資源監控工具,它能夠實時檢測以下指標:

  • CPU 使用率
  • 內存使用率
  • 磁盤使用率
  • 磁盤 IO 延遲(await)
  • 網絡流量(接收/發送速率)
    當任意一項指標超過設定的閾值時,腳本將通過 郵件 發送告警信息,同時在本地日志文件中記錄狀態,便于后續排查與審計。

一、🛠? 腳本功能概覽

監控項指標說明閾值參數告警方式
CPUCPU 使用率百分比CPUMAX=80%郵件 + 本地日志
內存內存使用率百分比MEMMAX=80%郵件 + 本地日志
磁盤根分區使用率百分比DISK_MAX=80%郵件 + 本地日志
IO(磁盤)IO await(讀/寫)THRES_AWAIT=50ms郵件 + 本地日志
網絡接收/發送流量(MB/s)NETWORK=10MB/s郵件 + 本地日志

二、 📜 腳本核心邏輯分解

2.1. 變量初始化

腳本開頭定義了日志路徑、郵箱配置、SMTP 信息以及各項監控閾值:

#日志
LOG_CPU="/var/log/cpu.log"
LOG_MEM="/var/log/mem.log"
LOG_DISK="/var/log/disk.log"
LOG_IO="/var/log/io_await.log"
LOG_NET="/var/log/net.log"
#郵箱
EMAIL="you_mail@.com"
SMTP_HOST="smtp.163.com"
SMTP_PORT=465
SMTP_USER="you_mail@.com"
SMTP_PASS="授權碼"
#告警閾值
CPUMAX=80
MEMMAX=80
DISK_MAX=80
THRES_AWAIT=50
NETWORK=10

📌 注意:腳本使用了 mail 命令發送郵件,背后需配置好如 ssmtpsendmail 或者通過 mutt 等工具結合 SMTP 服務發送。默認 mail 命令可能無法直接使用,需要額外配置。

2.2. CPU 使用率監控

通過 top 命令提取 CPU 空閑率,再計算使用率,并與閾值比較:

CPU=$(top -bn1|grep "Cpu(s)"|awk '{print $2}')
if (( $(echo "$CPU > $CPUMAX" | bc -l))); thenCPU_ALERT="CPU使用率: ${CPU}%(超過${CPUMAX}%)${TIME}"
elseCPU_ALERT=""echo "${TIME} :OK"   >> /var/log/cpu.log
fi

在這里插入圖片描述

2.3. 內存使用率監控

通過 free 命令獲取已用和總內存,計算使用率:

MEM_USE=$(free | awk '/Mem:/ {print $3}')
MEM_TOTAL=$(free |awk '/Mem:/ {print $2}')
MEM_USAGE=$(echo "scale=2; $MEM_USE * 100/ $MEM_TOTAL "| bc)

在這里插入圖片描述
同樣與 MEMMAX 比較,超過則告警。

2.4. 磁盤使用率監控

使用 df -h / 獲取根分區使用百分比,去掉 % 后與 DISK_MAX 比較:

DISK_INFO=$(df -h / | grep / | awk '{print $5}'|sed 's/%//g')

在這里插入圖片描述

2.5. 磁盤 IO 延遲監控(await)

使用 iostat -x 1 2 獲取磁盤 sda 的讀寫 await 值(第 10 和 11 列),判斷是否超過 50ms:

IO_AWAIT_R=$(iostat -x 1 2|grep sda|tail -1 |awk '{print $10}')
IO_AWAIT_W=$(iostat -x 1 2|grep sda|tail -1 |awk '{print $11}')

🧠 小知識:await 表示每次 IO 請求的平均等待時間(單位:毫秒),數值過高可能意味著磁盤存在性能瓶頸。

在這里插入圖片描述

2.6. 網絡流量監控

通過 /proc/net/dev 獲取指定網卡(默認第一個非 lo 網卡)的接收(RX)和發送(TX)字節數,轉換為 MB/s,與 NETWORK 閾值(10MB/s)對比:

NIC=$(ifconfig | grep -B1 "inet" | grep -v 'lo' |head -n1 |awk '{print $1}'|sed 's/://g')
RX_BYTES=$(grep "$NIC" /proc/net/dev |awk '{print $2}')
TX_BYTES=$(grep "$NIC" /proc/net/dev |awk '{print $10}')

?? 注意:該網絡監控邏輯是瞬時流量,如果要監控帶寬速率(比如每秒流量),需要兩次采樣做差值計算,這里簡化處理,僅作參考。

在這里插入圖片描述


三、📤 告警通知機制

當任一監控項超過閾值時,腳本會:

  1. 拼接告警信息,包括時間與具體異常項;
  2. 通過 mail 命令發送郵件給指定郵箱;
  3. 將狀態寫入對應的日志文件(如 /var/log/cpu.log)。
    示例告警郵件內容:
告警時間: 2025-09-07 20:12:36
【CPU】CPU使用率: 85.6%(超過80%)2025-09-07 20:12:36
【硬盤】硬盤使用率: 87%(超過80%)2025-09-07 20:12:36

四、📁 日志文件說明

腳本會在 /var/log/ 目錄下生成如下日志,用于記錄每次檢測的結果,便于后續分析:

  • cpu.log:CPU 告警或正常信息
  • mem.log:內存告警或正常信息
  • disk.log:磁盤使用率告警或正常信息
  • io_await.log:IO await 告警信息
  • net.log:網絡流量告警信息
    每個日志文件在檢測正常時都會追加一行 :OK,方便做定時任務監控和統計。

五、? 使用建議

5.1. 配置定時任務(Cron)

可以將此腳本保存為 /usr/local/bin/server_monitor.sh,然后添加到 crontab 中,例如每分鐘執行一次:

* * * * * /bin/bash /usr/local/bin/server_monitor.sh
5.2. 郵件發送配置

腳本中使用的是 mail 命令發送郵件,但要使其真正可用,通常需要:

  • 安裝并配置 mailxmutt 或者 ssmtp
  • 或者使用 curl 調用第三方郵件 API(如阿里云郵件推送、SendGrid 等)
    推薦使用 mutt 或配置好 sendmail 與 SMTP 服務對接。
5.3. 安全性建議
  • 不要將郵箱密碼明文寫在腳本中,建議使用環境變量或配置文件(并限制權限)
  • 腳本中涉及敏感信息(如 SMTP_PASS),建議設置文件權限為僅 root 可讀:
    chmod 700 /usr/local/bin/server_monitor.sh
    chmod 600 /var/log/*.log
    
5.4. 擴展功能建議
  • 增加更多網卡支持或多維度網絡流量統計
  • 增加進程級別的監控(如 MySQL、Nginx 是否在運行)
  • 使用更專業的監控工具集成,如 Prometheus + Grafana,但本腳本勝在輕量和易部署

六、🧩 總結

通過上述 Bash 腳本,我們可以快速搭建一套輕量級的服務器基礎資源監控和告警系統。雖然不如專業監控軟件功能全面,但對于小型環境、個人服務器或臨時監控需求,它簡單、有效、即插即用。

適用場景:

  • 個人 VPS 監控
  • 小公司內網服務器巡檢
  • 臨時排查性能問題
  • 學習 Linux 系統監控的入門實踐

技術棧:

  • Bash 腳本
  • Linux 命令(top, free, df, iostat, ifconfig, awk, bc)
  • 郵件發送(mail / mutt / SMTP)
  • Crontab 定時任務

💡 提示: 如果你首次使用 iostat,可能需要安裝 sysstat 包:

sudo apt install sysstat   # Debian / Ubuntu
sudo yum install sysstat   # CentOS / RHEL

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95992.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隨機獲取數組內任意元素

Math.random() * arr.length 是 JavaScript 中常用的表達式,用于生成一個范圍在 [0, arr.length) 之間的隨機浮點數(包含 0,但不包含數組長度本身)。 作用說明: Math.random() 生成一個 [0, 1) 區間的隨機浮點數&#…

android studio gradle 訪問不了

1.通過國內鏡像站 2.通過本地部署 參考這個搞定 https://blog.csdn.net/2401_82819685/article/details/144542784

科普:企業微信的第三方應用涉及的“配置應用權限”

企業微信的第三方應用涉及“配置應用權限”,它在不同階段含義不同:開發階段意指應用自身所需的功能權限,安裝階段意指企業管理員對應用使用范圍的控制,產生此歧義的問題,歸根到低還是語言的縮寫問題,設想一…

YOLOv11改進大全:從卷積層到檢測頭,全方位提升目標檢測性能

## 1 引言YOLO(You Only Look Once)系列作為目標檢測領域的重要算法,以其**高效推理**和**良好精度**贏得了廣泛認可。2024年9月,Ultralytics團隊正式發布了YOLOv11,在先前版本基礎上引入了**多項架構改進**和**訓練優…

JWT全面理解

目錄 一、JWT是什么 1、身份認證(最核心用途) 2、信息交換 3、授權控制 二、JWT的核心價值 三、如何理解JWT的結構和工作原理 1、三部分結構解析 2、核心工作流程 四、JWT的使用步驟 1、添加依賴 2、添加配置文件 3、創建實體類 4、創建JWT…

量子文件傳輸系統:簡單高效的文件分享解決方案

🌐 在線體驗地址:https://share-file.narutogis.com/ 📤 項目概述 量子文件傳輸系統是一款基于Python Flask開發的高效文件管理與分享工具,致力于提供簡單、安全、可靠的文件傳輸解決方案。系統支持用戶管理、文件上傳下載、自動…

基于 GitHub Actions 的零成本自動化部署:把 Vite/Vue3 項目一鍵發布到 GitHub Pages 的完整實戰

1. 實現自動化部署1.1. 創建 vue 項目# 1. 安裝/確認 Node.js(>14) node -v # 推薦 20.x# 2. 創建項目(交互式,選 Vue3 Router 等) npm init vuelatest github-actions-demo # 創建vite項目 # 或:v…

minio 文件批量下載

MinIO 批量下載功能說明 1. 功能描述 前端勾選多個對象文件后,一次性將這些對象從 MinIO 拉取并打包成 ZIP,通過瀏覽器直接下載。整體特性: 支持跨桶批量下載(不同 bucket 的對象可同時下載)。服務端采用流式壓縮邊…

機器學習11——特征選擇與稀疏學習

上一章:機器學習10——降維與度量學習 下一章:【從 0 到 1 落地】機器學習實操項目目錄:覆蓋入門到進階,大學生就業 / 競賽必備[TOC] 機器學習實戰項目:【從 0 到 1 落地】機器學習實操項目目錄:覆蓋入門到…

整理python快速構建數據可視化前端的Dash庫

一.Dash框架# 導入 Dash 相關庫 import dash from dash import dcc, html # dcc 是 Dash 核心組件庫,html 是 HTML 組件庫 from typing import Generic# 創建一個 Dash 應用實例 app dash.Dash(__name__)# 定義應用的布局 app.layout html.Div(children[# 添加一…

RNN循環神經網絡(一):基礎RNN結構、雙向RNN

RNN循環神經網絡 什么是循環神經網絡? 循環神經網絡(Recurrent Neural Network, RNN)是一類專門用于處理序列數據的神經網絡架構。與傳統的前饋神經網絡不同,RNN具有"記憶"能力,能夠捕捉數據中的時間依賴關系…

#C語言——刷題攻略:牛客編程入門訓練(十):攻克 循環控制(二),輕松拿捏!

🌟菜鳥主頁:晨非辰的主頁 👀學習專欄:《C語言刷題合集》 💪學習階段:C語言方向初學者 ?名言欣賞:"代碼行數決定你的下限,算法思維決定你的上限。" 目錄 1. BC82 乘法表…

daily notes[16]

文章目錄意大利語單詞 **“bello”**一、核心含義二、變形規則:最重要的部分1. 當 “bello” 位于 **名詞前面** 時2. 當 “bello” 位于 **名詞后面** 或 **動詞后面** 時三、用法總結與對比四、其他用法和常見表達references意大利語單詞 “bello” 融合了 指示形…

【知識庫】計算機二級python操作題(二)

文章目錄基本操作題1基本操作題2基本操作題3簡單應用題1簡單應用題2綜合應用題1基本操作題1考生文件夾下存在一個文件PY101.py,請寫代碼替換橫線,不修改其他代碼,實現以下功能,隨機選擇一個手機品牌屏幕輸出。 # 請在...處使用一行…

Nginx 服務用戶與防盜鏈配置

目錄 Nginx 服務用戶與防盜鏈配置 1. 隱藏版本號 1.1 配置方法 1.2 生效與驗證 2. 修改當前程序賬號 2.1 操作步驟 3. 緩存時間 3.1 配置方法 3.2 說明 4. 日志分割 4.1 實現方式(腳本自動分割) 5. 連接超時時間 5.1 核心超時指令&#xff0…

域格4G模塊通信協議之HTTP(三):下載大文件的兩種方式

域格ASR系列模塊支持HTTP下載大文件,本文將提供兩種方式。一、直接通過URC上報數據基礎操作核心指令說明配置說明響應說明應用示例注意點二、HTTP Range分段下載核心指令說明注意點一、直接通過URC上報數據 若文件體積適中,且需要 MCU 即時處理數據&…

Android 圖片 OOM 防護機制設計:大圖加載、內存復用與多級緩存

1. 為什么圖片加載總讓 Android 開發抓狂? 圖片是 Android 應用中不可或缺的元素,從用戶頭像到高清壁紙,從商品詳情頁到動態表情包,圖片無處不在。然而,圖片加載是內存管理的雷區,稍不留神就可能觸發臭名昭著的 OutOfMemoryError(OOM)。為啥圖片這么“吃內存”?原因很…

9月9日

TCP 服務器端#include <myhead.h> #define SER_PORT 8888 //服務器端口號 #define SER_IP "192.168.108.179" //服務器IP地址 int main(int argc, const char *argv[]) {//創建一個用于連接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…

Docker生產部署

目錄 一、準備工作&#xff1a;理解 Docker 與 Spring Boot 的關系 1. Docker 是什么&#xff1f; 2. Spring Boot 為什么適合 Docker&#xff1f; 二、編寫Dockerfile 三、配置管理 掛載外部配置文件 四、用 docker-compose 編排多服務 一、準備工作&#xff1a;理解 Do…