首頁  >  文章  >  後端開發  >  使用 Python 自動執行磁碟資源使用監控和伺服器運行狀況更新

使用 Python 自動執行磁碟資源使用監控和伺服器運行狀況更新

Linda Hamilton
Linda Hamilton原創
2024-10-30 10:23:03867瀏覽

Automating Disk Resource Usage Monitoring and Server Health Updates with Python

使用 Python 自動執行磁碟資源使用監控和伺服器運行狀況更新

監控伺服器磁碟使用情況對於保持最佳效能和防止停機至關重要。在這篇文章中,我們將探討如何使用 Python 腳本自動監控磁碟資源並透過 API 更新伺服器運作狀況。我們還將討論如何設定 cron 作業來定期執行腳本。

先決條件

  • Python程式設計基礎
  • 熟悉Linux命令列操作
  • 存取可以運行 Python 腳本並設定 cron 作業的伺服器
  • 用於更新伺服器運作狀況的 API 端點(替換為您的實際 API URL 和令牌)

Python 腳本解釋

以下是執行磁碟資源監控並透過 API 更新伺服器運作狀況的 Python 腳本。

本篇博文未涵蓋 Health API 創建,如果您也需要,請發表評論,我也會發布該 api 創建步驟。

import subprocess
import requests
import argparse


class Resource:
    file_system = ''
    disk_size = 0.0
    used = 0.0
    avail = 0.0
    use_percent = 0.0
    mounted_on = 0.0
    disk_free_threshold = 1
    mount_partition = "/"


class ResourcesMonitor(Resource):
    def __init__(self):
        self.__file_system = Resource.file_system
        self.__disk_size = Resource.disk_size
        self.__used = Resource.used
        self.__avail = Resource.avail
        self.__use_percent = Resource.use_percent
        self.__mounted_on = Resource.mounted_on
        self.__disk_free_threshold = Resource.disk_free_threshold
        self.__mount_partition = Resource.mount_partition

    def show_resource_usage(self):
        """
        Print the resource usage of disk.
        """
        print("file_system", "disk_size", "used", "avail", "use_percent", "mounted_on")
        print(self.__file_system, self.__disk_size, self.__used, self.__avail, self.__use_percent, self.__mounted_on)

    def check_resource_usage(self):
        """
        Check the disk usage by running the Unix 'df -h' command.
        """
        response_df = subprocess.Popen(["df", "-h"], stdout=subprocess.PIPE)
        for line in response_df.stdout:
            split_line = line.decode().split()
            if split_line[5] == self.__mount_partition:
                if int(split_line[4][:-1]) > self.__disk_free_threshold:
                    self.__file_system, self.__disk_size, self.__used = split_line[0], split_line[1], split_line[2]
                    self.__avail, self.__use_percent, self.__mounted_on = split_line[3], split_line[4], split_line[5]
                    self.show_resource_usage()
                    self.update_resource_usage_api(self)

    def update_resource_usage_api(self, resource):
        """
        Call the update API using all resource details.
        """
        update_resource_url = url.format(
            resource.__file_system,
            resource.__disk_size,
            resource.__used,
            resource.__avail,
            resource.__use_percent,
            resource_id
        )

        print(update_resource_url)
        payload = {}
        files = {}
        headers = {
            'token': 'Bearer APITOKEN'
        }
        try:
            response = requests.request("GET", update_resource_url, headers=headers, data=payload, files=files)
            if response.ok:
                print(response.json())
        except Exception as ex:
            print("Error while calling update API")
            print(ex)


if __name__ == '__main__':
    url = "http://yourapi.com/update_server_health_by_server_id?path={}&size={}" \
          "&used={}&avail={}&use_percent={}&id={}"
    parser = argparse.ArgumentParser(description='Disk Resource Monitor')
    parser.add_argument('-id', metavar='id', help='ID record of server', default=7, type=int)
    args = parser.parse_args()
    resource_id = args.id
    print(resource_id)
    resource_monitor = ResourcesMonitor()
    resource_monitor.check_resource_usage()

Resource 和 ResourcesMonitor 類

Resource 類別定義了與磁碟使用相關的屬性,例如檔案系統、磁碟大小、已使用空間等。 ResourcesMonitor類別繼承自Resource並初始化這些屬性。

檢查磁碟使用情況

check_resource_usage 方法執行 Unix df -h 指令來取得磁碟使用統計資料。它解析輸出以查找指定安裝分割區的磁碟使用情況(預設為/)。如果磁碟使用率超過閾值,則會更新資源詳細資訊並呼叫 API 更新方法。

透過 API 更新伺服器運行狀況

update_resource_usage_api 方法使用資源詳細資料建構 API 請求 URL,並傳送 GET 請求來更新伺服器運作狀況。確保將 http://yourapi.com/update_server_health_by_server_id 替換為您的實際 API 端點並提供正確的 API 令牌。

使用腳本

將腳本儲存為resource_monitor.py並使用Python 3運行它。

命令列參數

  • -id:要更新健康資料的伺服器ID(預設為7)。 這將有助於在多個伺服器中運行相同的腳本,只需更改 ID。

用法和輸出範例

$ python3 resource_monitor.py -id=7

Output:
file_system disk_size used avail use_percent mounted_on
/dev/root 39G 31G 8.1G 80% /

API GET Request:
http://yourapi.com/update_server_health_by_server_id?path=/dev/root&size=39G&used=31G&avail=8.1G&use_percent=80%&id=7

Response
{'success': 'Servers_health data Updated.', 'data': {'id': 7, 'server_id': 1, 'server_name': 'web-server', 'server_ip': '11.11.11.11', 'size': '39G', 'path': '/dev/root', 'used': '31G', 'avail': '8.1G', 'use_percent': '80%', 'created_at': '2021-08-28T13:45:28.000000Z', 'updated_at': '2024-10-27T08:02:43.000000Z'}}

使用 Cron 實現自動化

要每 30 分鐘自動執行一次腳本,請新增一個 cron 作業,如下所示:

*/30 * * * * python3 /home/ubuntu/resource_monitor.py -id=7 &

您可以透過執行 crontab -e 並新增以上行來編輯 cron 作業。這將確保腳本每 30 分鐘運行一次,從而保持您的伺服器運行狀況資料最新。

結論

透過自動化磁碟資源監控和伺服器運行狀況更新,您可以主動管理伺服器的效能並避免因磁碟空間短缺而導致的潛在問題。此 Python 腳本可作為起點,並可進行自訂以滿足您的特定需求。

以上是使用 Python 自動執行磁碟資源使用監控和伺服器運行狀況更新的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn