ホームページ  >  記事  >  バックエンド開発  >  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。