監控伺服器磁碟使用情況對於保持最佳效能和防止停機至關重要。在這篇文章中,我們將探討如何使用 Python 腳本自動監控磁碟資源並透過 API 更新伺服器運作狀況。我們還將討論如何設定 cron 作業來定期執行腳本。
以下是執行磁碟資源監控並透過 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並初始化這些屬性。
check_resource_usage 方法執行 Unix df -h 指令來取得磁碟使用統計資料。它解析輸出以查找指定安裝分割區的磁碟使用情況(預設為/)。如果磁碟使用率超過閾值,則會更新資源詳細資訊並呼叫 API 更新方法。
update_resource_usage_api 方法使用資源詳細資料建構 API 請求 URL,並傳送 GET 請求來更新伺服器運作狀況。確保將 http://yourapi.com/update_server_health_by_server_id 替換為您的實際 API 端點並提供正確的 API 令牌。
將腳本儲存為resource_monitor.py並使用Python 3運行它。
$ 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'}}
要每 30 分鐘自動執行一次腳本,請新增一個 cron 作業,如下所示:
*/30 * * * * python3 /home/ubuntu/resource_monitor.py -id=7 &
您可以透過執行 crontab -e 並新增以上行來編輯 cron 作業。這將確保腳本每 30 分鐘運行一次,從而保持您的伺服器運行狀況資料最新。
透過自動化磁碟資源監控和伺服器運行狀況更新,您可以主動管理伺服器的效能並避免因磁碟空間短缺而導致的潛在問題。此 Python 腳本可作為起點,並可進行自訂以滿足您的特定需求。
以上是使用 Python 自動執行磁碟資源使用監控和伺服器運行狀況更新的詳細內容。更多資訊請關注PHP中文網其他相關文章!