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

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

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

整體架構(gòu)圖

核心設(shè)計(jì)思想

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

代碼深度解析

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

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

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

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

2. 網(wǎng)絡(luò)檢測(cè)模塊 - 基于TCP的連通性檢查

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

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

def get_server_metrics(server):
    # 創(chuàng)建SSH客戶(hù)端
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 多密鑰類(lèi)型支持
        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
        )
        
        # 獲取主機(jī)名
        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())
        
        # 更多指標(biāo)采集...
        
    finally:
        ssh.close()
    return hostname, alerts
  • 多密鑰算法支持:自動(dòng)嘗試RSA/Ed25519/ECDSA等算法
  • 安全連接設(shè)置:禁用SSH agent和密鑰搜索
  • 主機(jī)名獲取:優(yōu)先使用服務(wù)器真實(shí)主機(jī)名
  • 資源釋放:finally塊確保SSH連接關(guān)閉

4. 告警模塊 - 釘釘機(jī)器人集成

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

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

    data = {
        "msgtype": "markdown",
        "markdown": {
            "title": "服務(wù)器監(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ā)送釘釘消息時(shí)出錯(cuò): {str(e)}")
  • 添加時(shí)間戳便于問(wèn)題追蹤
  • 包含直接訪(fǎng)問(wèn)監(jiān)控面板的鏈接
  • 使用emoji增強(qiáng)可讀性
  • 支持Markdown格式(加粗、換行等)

監(jiān)控指標(biāo)采集技術(shù)詳解

1. CPU使用率采集

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

命令解析

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

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

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

計(jì)算原理

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

3. 磁盤(pán)使用率采集

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

關(guān)鍵參數(shù)

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

4. 進(jìn)程監(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)

進(jìn)程檢測(cè)邏輯

  • 使用pgrep -x精確匹配進(jìn)程名
  • 檢查返回結(jié)果是否為空
  • 支持?jǐn)U展添加關(guān)鍵進(jìn)程

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

系統(tǒng)架構(gòu)建議

部署步驟

環(huán)境準(zhǔn)備

# 創(chuàng)建專(zhuān)用用戶(hù)
sudo useradd -m -s /bin/bash monitor
sudo passwd monitor

# 安裝依賴(lài)
sudo apt-get update
sudo apt-get install python3-pip
sudo -u monitor pip install paramiko requests

SSH密鑰配置

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

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

配置文件調(diào)整

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

系統(tǒng)服務(wù)化

# 創(chuàng)建systemd服務(wù)文件
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

# 啟動(dòng)服務(wù)
sudo systemctl daemon-reload
sudo systemctl enable server-monitor
sudo systemctl start server-monitor

日志管理方案

# 查看實(shí)時(shí)日志
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

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

相關(guān)文章

  • Django+Ajax異步刷新/定時(shí)自動(dòng)刷新實(shí)例詳解

    Django+Ajax異步刷新/定時(shí)自動(dòng)刷新實(shí)例詳解

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

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

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

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

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

    解決django FileFIELD的編碼問(wèn)題

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

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

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

    Python單元測(cè)試unittest模塊使用終極指南

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

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

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

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

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

    Python使用qrcode二維碼庫(kù)生成二維碼方法詳解

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

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

    這篇文章主要介紹了python基礎(chǔ)梳理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

逊克县| 柳州市| 惠安县| 伊吾县| 西林县| 广安市| 丹江口市| 溆浦县| 大新县| 邹平县| 抚远县| 晋城| 施甸县| 昌平区| 冷水江市| 梅河口市| 郸城县| 福贡县| 三明市| 上杭县| 堆龙德庆县| 常山县| 鄂尔多斯市| 大埔县| 濉溪县| 安陆市| 涿鹿县| 广平县| 北辰区| 宜兰县| 城口县| 琼海市| 大洼县| 子洲县| 夏津县| 洛宁县| 定西市| 启东市| 阜阳市| 谢通门县| 万载县|