最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從原理到生產(chǎn)部署解析Python多服務器監(jiān)控告警系統(tǒng)開發(fā)

 更新時間:2025年09月09日 09:51:57   作者:ζ??山 ??有扶蘇 ???  
這篇文章將從原理到生產(chǎn)部署帶大家深入解析Python多服務器監(jiān)控告警系統(tǒng)開發(fā)過程,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

整體架構圖

核心設計思想

  • 無代理監(jiān)控:通過SSH直接獲取數(shù)據(jù),無需在目標服務器安裝代理
  • 故障隔離:單臺服務器故障不影響整體監(jiān)控
  • 多級檢測:網(wǎng)絡層→資源層→服務層層層遞進
  • 冪等設計:支持定時重復執(zhí)行,避免狀態(tài)累積

代碼深度解析

1. 配置模塊 - 靈活的參數(shù)管理

# 服務器配置列表
SERVERS = [
    {
        "host": "192.168.0.224", 
        "ssh_port": 22, 
        "ssh_user": "root", 
        "ssh_key": "/root/.ssh/server_monitor_key"
    },
    # 更多服務器...
]

# 監(jiān)控閾值設置
MEMORY_THRESHOLD = 90  # 內(nèi)存閾值%
CPU_THRESHOLD = 85     # CPU閾值%
DISK_THRESHOLD = 95    # 磁盤閾值%

# 檢測參數(shù)
DINGTALK_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token="
PING_TIMEOUT = 3       # 網(wǎng)絡檢測超時(秒)
CHECK_INTERVAL = 600   # 檢查間隔(秒)
  • 支持多服務器配置,可擴展性強
  • 關鍵參數(shù)集中管理,便于維護
  • 支持不同服務器使用不同認證方式

2. 網(wǎng)絡檢測模塊 - 基于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 True
    except Exception:
        return False
  • 使用TCP連接檢測替代ICMP ping,更貼近實際服務可用性
  • 檢測SSH服務端口(22),確保監(jiān)控功能可用
  • 設置超時時間防止阻塞

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

def get_server_metrics(server):
    # 創(chuàng)建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監(jiān)控命令
        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
  • 多密鑰算法支持:自動嘗試RSA/Ed25519/ECDSA等算法
  • 安全連接設置:禁用SSH agent和密鑰搜索
  • 主機名獲取:優(yōu)先使用服務器真實主機名
  • 資源釋放:finally塊確保SSH連接關閉

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

def send_dingtalk_message(message):
    """發(fā)送Markdown格式消息到釘釘機器人"""
    headers = {"Content-Type": "application/json"}

    # 創(chuàng)建Markdown格式消息
    markdown_content = "### ?? 服務器監(jiān)控告警\n" + message.replace("\n", "\n\n")

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

監(jiān)控指標采集技術詳解

1. CPU使用率采集

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

命令解析

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

2. 內(nèi)存使用率采集

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

計算原理

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

3. 磁盤使用率采集

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

關鍵參數(shù)

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

4. 進程監(jiān)控

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精確匹配進程名
  • 檢查返回結(jié)果是否為空
  • 支持擴展添加關鍵進程

生產(chǎn)環(huán)境部署指南

系統(tǒng)架構建議

部署步驟

環(huán)境準備

# 創(chuàng)建專用用戶
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

SSH密鑰配置

# 生成監(jiān)控專用密鑰
sudo -u monitor ssh-keygen -t ed25519 -f /home/monitor/.ssh/server_monitor_key

# 分發(fā)公鑰到目標服務器
for server in ${SERVERS[@]}; do
  sudo -u monitor ssh-copy-id -i /home/monitor/.ssh/server_monitor_key.pub ${server}
done

配置文件調(diào)整

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

系統(tǒng)服務化

# 創(chuàng)建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

# 日志輪轉(zhuǎn)配置
sudo tee /etc/logrotate.d/server-monitor <<EOF
/var/log/server-monitor.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 monitor adm
    sharedscripts
    postrotate
        systemctl restart server-monitor > /dev/null
    endscript
}
EOF

到此這篇關于從原理到生產(chǎn)部署解析Python多服務器監(jiān)控告警系統(tǒng)開發(fā)的文章就介紹到這了,更多相關Python多服務器監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django+Ajax異步刷新/定時自動刷新實例詳解

    Django+Ajax異步刷新/定時自動刷新實例詳解

    AJAX是前端技術的集合,包括JavaScript、XML、HTML、CSS等,下面這篇文章主要給大家介紹了關于Django+Ajax異步刷新/定時自動刷新的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關鍵詞的方法

    python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關鍵詞的方法

    這篇文章主要介紹了python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關鍵詞的方法,可實現(xiàn)針對文件夾及文件內(nèi)關鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • Pandas的read_csv函數(shù)參數(shù)分析詳解

    Pandas的read_csv函數(shù)參數(shù)分析詳解

    這篇文章主要介紹了Pandas的read_csv函數(shù)參數(shù)分析詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 解決django FileFIELD的編碼問題

    解決django FileFIELD的編碼問題

    這篇文章主要介紹了解決django FileFIELD的編碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python實現(xiàn)文件分片上傳的接口自動化

    python實現(xiàn)文件分片上傳的接口自動化

    這篇文章主要為大家詳細介紹了python實現(xiàn)文件分片上傳的接口自動化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Python單元測試unittest模塊使用終極指南

    Python單元測試unittest模塊使用終極指南

    本文將詳細介紹unittest模塊的各個方面,包括測試用例、斷言、測試套件、setUp和tearDown方法、跳過和期望異常、測試覆蓋率、持續(xù)集成等內(nèi)容,我們將提供豐富的示例代碼,以便讀者更好地理解如何使用unittest進行單元測試
    2023-12-12
  • Python干貨:分享Python繪制六種可視化圖表

    Python干貨:分享Python繪制六種可視化圖表

    可視化圖表有很多種,這篇文章主要介紹了Python繪制六種可視化圖表詳解的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Python實現(xiàn)二叉搜索樹增刪改查

    Python實現(xiàn)二叉搜索樹增刪改查

    二叉搜索樹是一種特殊的二叉樹,在本文中,我將介紹如何用Python語言實現(xiàn)一個簡單的二叉搜索樹,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • Python使用qrcode二維碼庫生成二維碼方法詳解

    Python使用qrcode二維碼庫生成二維碼方法詳解

    這篇文章主要介紹了Python使用qrcode二維碼庫生成二維碼方法詳解,需要的朋友可以參考下
    2020-02-02
  • python基礎梳理(一)(推薦)

    python基礎梳理(一)(推薦)

    這篇文章主要介紹了python基礎梳理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04

最新評論

东乡| 镇安县| 潼南县| 商都县| 徐州市| 孝感市| 远安县| 台中县| 商洛市| 凭祥市| 丰城市| 襄垣县| 陇西县| 太白县| 名山县| 济源市| 仙游县| 尚志市| 漾濞| 双桥区| 思茅市| 广昌县| 石台县| 勃利县| 黔西县| 清流县| 和顺县| 防城港市| 曲阜市| 镇沅| 东乡县| 文山县| 清河县| 普安县| 井陉县| 瑞金市| 洪雅县| 芷江| 龙游县| 炎陵县| 弥勒县|