深入解析Python多服務器監控告警系統:從原理到生產部署

深入解析Python多服務器監控告警系統:從原理到生產部署

整體架構圖

image-20250626180939436

核心設計思想

  1. 無代理監控:通過SSH直接獲取數據,無需在目標服務器安裝代理
  2. 故障隔離:單臺服務器故障不影響整體監控
  3. 多級檢測:網絡層→資源層→服務層層層遞進
  4. 冪等設計:支持定時重復執行,避免狀態累積

代碼深度解析

1. 配置模塊 - 靈活的參數管理

# 服務器配置列表
SERVERS = [{"host": "192.168.0.224", "ssh_port": 22, "ssh_user": "root", "ssh_key": "/root/.ssh/server_monitor_key"},# 更多服務器...
]# 監控閾值設置
MEMORY_THRESHOLD = 90  # 內存閾值%
CPU_THRESHOLD = 85     # CPU閾值%
DISK_THRESHOLD = 95    # 磁盤閾值%# 檢測參數
DINGTALK_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token="
PING_TIMEOUT = 3       # 網絡檢測超時(秒)
CHECK_INTERVAL = 600   # 檢查間隔(秒)
  • 支持多服務器配置,可擴展性強
  • 關鍵參數集中管理,便于維護
  • 支持不同服務器使用不同認證方式

2. 網絡檢測模塊 - 基于TCP的連通性檢查

def check_network(host):try:socket.setdefaulttimeout(PING_TIMEOUT)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((host, 22))  # 檢測SSH端口s.close()return Trueexcept Exception:return False
  • 使用TCP連接檢測替代ICMP ping,更貼近實際服務可用性
  • 檢測SSH服務端口(22),確保監控功能可用
  • 設置超時時間防止阻塞

3. 指標采集模塊 - SSH命令執行與解析

def get_server_metrics(server):# 創建SSH客戶端ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:# 多密鑰類型支持try:private_key = paramiko.RSAKey.from_private_key_file(server["ssh_key"])except:try:private_key = paramiko.Ed25519Key.from_private_key_file(server["ssh_key"])except:private_key = paramiko.ECDSAKey.from_private_key_file(server["ssh_key"])# 建立SSH連接ssh.connect(hostname=server["host"],port=server["ssh_port"],username=server["ssh_user"],pkey=private_key,timeout=15,look_for_keys=False,allow_agent=False)# 獲取主機名stdin, stdout, stderr = ssh.exec_command("hostname")hostname = stdout.read().decode().strip() or server["host"]# CPU監控命令stdin, stdout, stderr = ssh.exec_command("top -bn1 | grep 'Cpu(s)' | awk -F'[ ,]+' '{print $8}' | tr -d '%' | awk '{print 100 - $1}'")cpu_usage = float(stdout.read().decode().strip())# 更多指標采集...finally:ssh.close()return hostname, alerts
  1. 多密鑰算法支持:自動嘗試RSA/Ed25519/ECDSA等算法
  2. 安全連接設置:禁用SSH agent和密鑰搜索
  3. 主機名獲取:優先使用服務器真實主機名
  4. 資源釋放:finally塊確保SSH連接關閉

4. 告警模塊 - 釘釘機器人集成

def send_dingtalk_message(message):"""發送Markdown格式消息到釘釘機器人"""headers = {"Content-Type": "application/json"}# 創建Markdown格式消息markdown_content = "### 🚨 服務器監控告警\n" + message.replace("\n", "\n\n")data = {"msgtype": "markdown","markdown": {"title": "服務器監控告警","text": markdown_content}}try:response = requests.post(DINGTALK_WEBHOOK,data=json.dumps(data),headers=headers,timeout=10)if response.status_code == 200:print("釘釘消息發送成功")else:print(f"釘釘消息發送失敗: {response.text}")except Exception as e:print(f"發送釘釘消息時出錯: {str(e)}")
  • 添加時間戳便于問題追蹤
  • 包含直接訪問監控面板的鏈接
  • 使用emoji增強可讀性
  • 支持Markdown格式(加粗、換行等)

監控指標采集技術詳解

1. CPU使用率采集

top -bn1 | grep 'Cpu(s)' | awk -F'[ ,]+' '{print $8}' | tr -d '%' | awk '{print 100 - $1}'

命令解析

  1. top -bn1:非交互模式運行top命令
  2. grep 'Cpu(s)':過濾CPU行
  3. awk處理:提取空閑CPU百分比
  4. 100 - 空閑值:計算實際使用率

2. 內存使用率采集

free | awk 'NR==2{printf "%.2f", $3*100/$2 }'

計算原理

總內存 = $2
已用內存 = $3
使用率 = (已用內存 / 總內存) * 100

3. 磁盤使用率采集

df -h | awk '$NF=="/"{printf "%d", $5}'

關鍵參數

  • $NF=="/":只監控根分區
  • $5:使用率列(已去除%符號)
  • 可根據不同服務器掛載的分區自行調整

4. 進程監控

processes = ["kubelet", "dockerd", "kube-proxy"]
for process in processes:stdin, stdout, stderr = ssh.exec_command(f"pgrep -x {process}")if not stdout.read().decode().strip():missing_processes.append(process)

進程檢測邏輯

  • 使用pgrep -x精確匹配進程名
  • 檢查返回結果是否為空
  • 支持擴展添加關鍵進程

生產環境部署指南

系統架構建議

image-20250626181927407

部署步驟

  1. 環境準備

    # 創建專用用戶
    sudo useradd -m -s /bin/bash monitor
    sudo passwd monitor# 安裝依賴
    sudo apt-get update
    sudo apt-get install python3-pip
    sudo -u monitor pip install paramiko requests
    
  2. SSH密鑰配置

    # 生成監控專用密鑰
    sudo -u monitor ssh-keygen -t ed25519 -f /home/monitor/.ssh/server_monitor_key# 分發公鑰到目標服務器
    for server in ${SERVERS[@]}; dosudo -u monitor ssh-copy-id -i /home/monitor/.ssh/server_monitor_key.pub ${server}
    done
    
  3. 配置文件調整

    # 修改服務器配置
    SERVERS = [{"host": "10.0.1.101", "ssh_port": 22, "ssh_user": "monitor",  # 使用專用賬戶"ssh_key": "/home/monitor/.ssh/server_monitor_key"  # 正確路徑},# 更多服務器...
    ]
    
  4. 系統服務化

    bash

    # 創建systemd服務文件
    sudo tee /etc/systemd/system/server-monitor.service <<EOF
    [Unit]
    Description=Server Monitoring Service
    After=network.target[Service]
    User=monitor
    ExecStart=/usr/bin/python3 /opt/monitor/new_server_monitor.py
    Restart=always
    RestartSec=30[Install]
    WantedBy=multi-user.target
    EOF# 啟動服務
    sudo systemctl daemon-reload
    sudo systemctl enable server-monitor
    sudo systemctl start server-monitor
    

日志管理方案

# 查看實時日志
journalctl -u server-monitor -f# 日志輪轉配置
sudo tee /etc/logrotate.d/server-monitor <<EOF
/var/log/server-monitor.log {dailymissingokrotate 30compressdelaycompressnotifemptycreate 640 monitor admsharedscriptspostrotatesystemctl restart server-monitor > /dev/nullendscript
}
EOF

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

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

相關文章

JUC:10.線程、monitor管程、鎖對象之間在synchronized加鎖的流程(未完)

一、monitor管程工作原理&#xff1a; 首先&#xff0c;synchronized是一個對象鎖&#xff0c;當線程運行到某個臨界區&#xff0c;這個臨界區使用synchronized對對象obj進行了上鎖&#xff0c;此時底層發生了什么&#xff1f; 1.當synchronized對obj上鎖后&#xff0c;synch…

Elasticsearch(ES)分頁

Elasticsearch&#xff08;簡稱 ES&#xff09;本身不適合傳統意義上的“深分頁”&#xff0c;但提供了多種分頁方式&#xff0c;每種適用不同場景。我們來詳細講解&#xff1a; 一、基本分頁&#xff08;from size&#xff09; 最常用的分頁方式&#xff0c;類似 SQL 的 LIM…

原生微信小程序:用 `setData` 正確修改數組中的對象項狀態(附實戰技巧)

&#x1f4cc; 背景介紹 在微信小程序開發中&#xff0c;我們經常需要修改數組中某個對象的某個字段&#xff0c;比如&#xff1a; 列表中的某一項展開/收起多選狀態切換數據列表中的臨時標記等 一個常見的場景是&#xff1a; lists: [{ show: true }, { show: true }, { s…

Oracle 臨時表空間相關操作

一、臨時表空間概述 臨時表空間&#xff08;Temporary Tablespace&#xff09;是Oracle數據庫中用于存儲臨時數據的特殊存儲區域&#xff0c;其數據在會話結束或事務提交后自動清除&#xff0c;重啟數據庫后徹底消失。主要用途包括&#xff1a; 存儲排序操作&#xff08;如OR…

從靜態到動態:Web渲染模式的演進和突破

渲染模式有好多種&#xff0c;了解下web的各種渲染模式&#xff0c;對技術選型有很大的參考作用。 一、靜態HTML時代 早期&#xff08;1990 - 1995年&#xff09;網頁開發完全依賴手工編寫HTML&#xff08;HyperText Markup Language&#xff09;和CSS&#xff08;層疊樣式表…

Flask(六) 數據庫操作SQLAlchemy

文章目錄 一、準備工作二、最小化可運行示例? 補充延遲綁定方式&#xff08;推薦方式&#xff09; 三、數據庫基本操作&#xff08;增刪改查&#xff09;1. 插入數據&#xff08;增&#xff09;2. 查詢數據&#xff08;查&#xff09;3. 更新數據&#xff08;改&#xff09;4.…

PYTHON從入門到實踐7-獲取用戶輸入與while循環

# 【1】獲取用戶輸入 # 【2】python數據類型的轉換 input_res input("請輸入一個數字\n") if int(input_res) % 10 0:print("你輸入的數是10的倍數") else:print("你輸入的數不是10的倍數") # 【3】while循環&#xff0c;適合不知道循環多少次…

學習筆記(C++篇)—— Day 8

1.STL簡介 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2.STL的六大組件 先這樣&#xff0c;下一部分是string的內容&#xff0c;內容比較多&a…

ant+Jmeter+jenkins接口自動化,如何實現把執行失敗的接口信息單獨發郵件?

B站講的最好的自動化測試教程&#xff0c;工具框架附項目實戰一套速通&#xff0c;零基礎完全輕松掌握&#xff01;自動化測試課程、web/app/接口 實現AntJMeterJenkins接口自動化失敗接口郵件通知方案 要實現只發送執行失敗的接口信息郵件通知&#xff0c;可以通過以下步驟實…

惡意Python包“psslib“實施拼寫錯誤攻擊,可強制關閉Windows系統

Socket威脅研究團隊發現一個名為psslib的惡意Python包&#xff0c;該軟件包偽裝成提供密碼安全功能&#xff0c;實則會突然關閉Windows系統。這個由化名umaraq的威脅行為者開發的軟件包&#xff0c;是對知名密碼哈希工具庫passlib的拼寫錯誤仿冒&#xff08;typosquatting&…

云原生灰度方案對比:服務網格灰度(Istio ) 與 K8s Ingress 灰度(Nginx Ingress )

服務網格灰度與 Kubernetes Ingress 灰度是云原生環境下兩種主流的灰度發布方案&#xff0c;它們在架構定位、實現方式和適用場景上存在顯著差異。以下從多個維度對比分析&#xff0c;并給出選型建議&#xff1a; 一、核心區別對比 維度服務網格灰度&#xff08;以 Istio 為例…

科技如何影響我們的生活?

科技已成為我們生活中不可或缺的一部分&#xff0c;徹底改變了我們工作、溝通和生活的方式。從智能手機到智能家居&#xff0c;科技已滲透到我們生活的每個角落。無論是用手機鬧鐘開啟新的一天&#xff0c;通過 Alexa 開關燈光&#xff0c;還是打開 Uber 或 Lyft 打車上班&…

Re--攻防世界-基礎android

Jadx 可以看到有賬號密碼輸入 進入checkPassword函數 分析一下&#xff1a; 對每個字符 pass[len] 進行以下計算 pass[len] (char) (((255 - len) - 100) - pass[len]); 解密腳本 def decrypt_password(): password [] for len in range(12): c (255 - le…

InnoDB表空間結構-系統表空間

系統表空間整體結構 頁號為7的SYS類型頁結構

如何構建知識庫

構建個人知識庫是一個系統化的過程&#xff0c;需要結合工具選擇、信息管理和持續優化。以下是分步驟的實用指南&#xff0c;包含現代工具和方法的建議&#xff1a; 一、明確知識庫定位&#xff08;Why&#xff09; ?核心目標? 學習型&#xff1a;支持學術研究/職業發展&…

3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——2.SimHash算法文本去重實戰案例:新聞文章去重場景

SimHash算法文本去重實戰案例&#xff1a;新聞文章去重場景 一、案例背景與目標二、具體實現步驟與示例1. **待去重文本示例**2. **步驟1&#xff1a;文本預處理與特征提取**3. **步驟2&#xff1a;特征向量化與哈希映射**4. **步驟3&#xff1a;特征向量聚合**5. **步驟4&…

MSPM0G3507之GPIO配置報錯 #Sysconfig報錯

聲明&#xff1a;本文完全免費閱讀&#xff0c;如果你發現某天文章被設置了“VIP權限”&#xff0c;請私信我解除&#xff08;非筆者所為&#xff09;。 一、問題現象 在打開sysconfig后&#xff0c;GPIO這里會報錯。 Unable to render selection Error:launchPadShortcut:Vali…

2025年檢測相機十大品牌測評:工業級精度與場景化解決方案解析

一、引言 在工業自動化與智能制造領域&#xff0c;檢測相機作為質量管控的核心硬件&#xff0c;正以“高精度、高速度、高適應性”的特性重塑生產流程。這類設備通過光學成像與智能算法結合&#xff0c;實現對工件表面缺陷、尺寸偏差、裝配精度的精準檢測&#xff0c;效率較傳…

Python異步編程深度解析

一、異步編程范式演進 同步阻塞的困境&#xff1a;GIL限制與線程切換開銷 事件循環本質&#xff1a;單線程并發模型 協程優勢&#xff1a;比線程更輕量的執行單元 IO密集型場景&#xff1a;網絡請求/文件操作的最佳實踐 二、核心語法精要 import asyncioasync def fetch_…

網絡緩沖區

用戶態網絡緩沖區 網絡緩沖區原理為什么需要用戶態網絡緩沖區Linux下如何接收和發送數據包用戶態網絡緩沖區設計的本質 網絡緩沖區代碼實現 網絡緩沖區原理 為什么需要用戶態網絡緩沖區 在網絡開發中&#xff0c;我們經常使用到read/write/recv/send等系統調用接口&#xff0…