欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

整體架構(gòu)圖

核心設(shè)計思想

  • 無代理監(jiān)控:通過SSH直接獲取數(shù)據(jù),無需在目標(biāo)服務(wù)器安裝代理
  • 故障隔離:單臺服務(wù)器故障不影響整體監(jiān)控
  • 多級檢測:網(wǎng)絡(luò)層→資源層→服務(wù)層層層遞進
  • 冪等設(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    # 磁盤閾值%

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

2. 網(wǎng)絡(luò)檢測模塊 - 基于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,更貼近實際服務(wù)可用性
  • 檢測SSH服務(wù)端口(22),確保監(jiān)控功能可用
  • 設(shè)置超時時間防止阻塞

3. 指標(biāo)采集模塊 - 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())
        
        # 更多指標(biāo)采集...
        
    finally:
        ssh.close()
    return hostname, alerts
  • 多密鑰算法支持:自動嘗試RSA/Ed25519/ECDSA等算法
  • 安全連接設(shè)置:禁用SSH agent和密鑰搜索
  • 主機名獲取:優(yōu)先使用服務(wù)器真實主機名
  • 資源釋放:finally塊確保SSH連接關(guān)閉

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

def send_dingtalk_message(message):
    """發(fā)送Markdown格式消息到釘釘機器人"""
    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ā)送釘釘消息時出錯: {str(e)}")
  • 添加時間戳便于問題追蹤
  • 包含直接訪問監(jiān)控面板的鏈接
  • 使用emoji增強可讀性
  • 支持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:非交互模式運行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}'

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

  • $NF=="/":只監(jiān)控根分區(qū)
  • $5:使用率列(已去除%符號)
  • 可根據(jù)不同服務(wù)器掛載的分區(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é)果是否為空
  • 支持擴展添加關(guān)鍵進程

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

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

部署步驟

環(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ā)公鑰到目標(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",  # 使用專用賬戶
        "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

# 啟動服務(wù)
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

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

相關(guān)文章

  • python getopt詳解及簡單實例

    python getopt詳解及簡單實例

    這篇文章主要介紹了 python getopt詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • python使用Matplotlib畫條形圖

    python使用Matplotlib畫條形圖

    這篇文章主要為大家詳細介紹了python使用Matplotlib畫條形圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python爬取亞馬遜書籍信息代碼分享

    python爬取亞馬遜書籍信息代碼分享

    這篇文章主要介紹了python爬取亞馬遜書籍信息代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • pytorch分類模型繪制混淆矩陣以及可視化詳解

    pytorch分類模型繪制混淆矩陣以及可視化詳解

    混淆矩陣是ROC曲線繪制的基礎(chǔ),同時它也是衡量分類型模型準確度中最基本,最直觀,計算最簡單的方法,下面這篇文章主要給大家介紹了關(guān)于pytorch分類模型繪制混淆矩陣以及可視化的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Python中的wordcloud庫安裝問題及解決方法

    Python中的wordcloud庫安裝問題及解決方法

    這篇文章主要介紹了Python中的wordcloud庫安裝問題及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • tensorflow學(xué)習(xí)筆記之mnist的卷積神經(jīng)網(wǎng)絡(luò)實例

    tensorflow學(xué)習(xí)筆記之mnist的卷積神經(jīng)網(wǎng)絡(luò)實例

    這篇文章主要為大家詳細介紹了tensorflow學(xué)習(xí)筆記之mnist的卷積神經(jīng)網(wǎng)絡(luò)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • PyCharm中配置PySide2的圖文教程

    PyCharm中配置PySide2的圖文教程

    這篇文章主要介紹了PyCharm中配置PySide2的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • python實現(xiàn)日常記賬本小程序

    python實現(xiàn)日常記賬本小程序

    這篇文章主要為大家詳細介紹了python實現(xiàn)日常記賬本小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • tensorflow中的梯度求解及梯度裁剪操作

    tensorflow中的梯度求解及梯度裁剪操作

    這篇文章主要介紹了tensorflow中的梯度求解及梯度裁剪操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python實現(xiàn)的遞歸神經(jīng)網(wǎng)絡(luò)簡單示例

    Python實現(xiàn)的遞歸神經(jīng)網(wǎng)絡(luò)簡單示例

    這篇文章主要介紹了Python實現(xiàn)的遞歸神經(jīng)網(wǎng)絡(luò),是一篇摘錄自github代碼片段的文章,涉及Python遞歸與數(shù)學(xué)運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08

最新評論