例項程式碼分享Python實現Linux監控
導讀 | 本文透過例項程式碼給大家介紹了Python實現 監控的方法,非常不錯,具有一定的參考借鑑價值,需要的朋友可以參考下。 |
Linux 系統為管理員提供了非常好的方法,使其可以在系統執行時更改核心,而不需要重新引導核心系統,這是透過/proc 虛擬檔案系統實現的。/proc 檔案虛擬系統是一種核心和核心模組用來向程式(process)傳送資訊的機制(所以叫做“/proc”),這個偽檔案系統允許與核心內部資料結構互動,獲取有關程式的有用資訊,在執行中(on the fly)改變設定(透過改變核心引數)。與其他檔案系統不同,/proc 存在於記憶體而不是硬碟中。proc 檔案系統提供的資訊如下:
程式資訊:系統中的任何一個程式,在 proc 的子目錄中都有一個同名的程式 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些資訊只有超級使用者可見,例如程式根目錄。每一個單獨含有現有程式資訊的程式有一些可用的專門連結,系統中的任何一個程式都有一個單獨的自連結指向程式資訊,其用處就是從程式中獲取 行資訊。
系統資訊:如果需要了解整個系統資訊中也可以從/proc/stat 中獲得,其中包括 CPU 佔用情況、磁碟空間、記憶體對換、中斷等。
CPU 資訊:利用/proc/CPUinfo 檔案可以獲得中央處理器的當前準確資訊。
負載資訊:/proc/loadavg 檔案包含系統負載資訊。
系統記憶體資訊:/proc/meminfo 檔案包含系統記憶體的詳細資訊,其中顯示實體記憶體的數量、可用交換空間的數量,以及空閒記憶體的數量等。
- apm 高階電源管理資訊
- cmdline 這個檔案給出了核心啟動的 行
- CPUinfo 中央處理器資訊
- devices 可以用到的裝置(塊裝置/字元裝置)
- dma 顯示當前使用的 DMA 通道
- filesystems 核心配置的檔案系統
- ioports 當前使用的 I/O 埠
- interrupts 這個檔案的每一行都有一個保留的中斷
- kcore 系統實體記憶體映像
- kmsg 核心輸出的訊息,被送到日誌檔案
- mdstat 這個檔案包含了由 md 裝置驅動程式控制的 RAID 裝置資訊
- loadavg 系統平均負載均衡
- meminfo 儲存器使用資訊,包括實體記憶體和交換記憶體
- modules 這個檔案給出可載入核心模組的資訊。lsmod 程式用這些資訊顯示有關模組的名稱,大小,使用數目方面的資訊
- net 網路協議狀態資訊
- partitions 系統識別的分割槽表
- pci pci 裝置資訊
- scsi scsi 裝置資訊
- self 到檢視/proc 程式程式目錄的符號連線
- stat 這個檔案包含的資訊有 CPU 利用率,磁碟,記憶體頁,記憶體對換,全部中斷,接觸開關以及賞賜自舉時間
- swaps 顯示的是交換分割槽的使用情況
- uptime 這個檔案給出自從上次系統自舉以來的秒數,以及其中有多少秒處於空閒
- version 這個檔案只有一行內容,說明正在執行的核心版本。可以用標準的程式設計方法進行分析獲得所需的系統資訊
#!/usr/bin/env Python from __future__ import print_function from collections import OrderedDict import pprint def CPUinfo(): ''' Return the information in /proc/CPUinfo as a dictionary in the following format: CPU_info['proc0']={...} CPU_info['proc1']={...} ''' CPUinfo=OrderedDict() procinfo=OrderedDict() nprocs = 0 with open('/proc/CPUinfo') as f: for line in f: if not line.strip(): # end of one processor CPUinfo['proc%s' % nprocs] = procinfo nprocs=nprocs+1 # Reset procinfo=OrderedDict() else: if len(line.split(':')) == 2: procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip() else: procinfo[line.split(':')[0].strip()] = '' return CPUinfo if __name__=='__main__': CPUinfo = CPUinfo() for processor in CPUinfo.keys(): print(CPUinfo[processor]['model name'])
簡單說明一下清單 1,讀取/proc/CPUinfo 中的資訊,返回 list,每核心一個 dict。其中 list 是一個使用方括號括起來的有序元素集合。List 可以作為以 0 下標開始的陣列。Dict 是 Python 的內建資料型別之一, 它定義了鍵和值之間一對一的關係。OrderedDict 是一個字典子類,可以記住其內容增加的順序。常規 dict 並不跟蹤插入順序,迭代處理時會根據鍵在雜湊表中儲存的順序來生成值。在 OrderedDict 中則相反,它會記住元素插入的順序,並在建立迭代器時使用這個順序。
#!/usr/bin/env Python import os def load_stat(): loadavg = {} f = open("/proc/loadavg") con = f.read().split() f.close() loadavg['lavg_1']=con[0] loadavg['lavg_5']=con[1] loadavg['lavg_15']=con[2] loadavg['nr']=con[3] loadavg['last_pid']=con[4] return loadavg print "loadavg",load_stat()['lavg_15']
簡單說明一下清單 2:清單 2 讀取/proc/loadavg 中的資訊,import os :Python 中 import 用於匯入不同的模組,包括系統提供和自定義的模組。其基本形式為:import 模組名 [as 別名],如果只需要匯入模組中的部分或全部內容可以用形式:from 模組名 import *來匯入相應的模組。OS 模組 os 模組提供了一個統一的作業系統介面函式,os 模組能在不同作業系統平臺如 nt,posix 中的特定函式間自動切換,從而實現跨平臺操作。
!/usr/bin/env Python from __future__ import print_function from collections import OrderedDict def meminfo(): ''' Return the information in /proc/meminfo as a dictionary ''' meminfo=OrderedDict() with open('/proc/meminfo') as f: for line in f: meminfo[line.split(':')[0]] = line.split(':')[1].strip() return meminfo if __name__=='__main__': #print(meminfo()) meminfo = meminfo() print('Total memory: {0}'.format(meminfo['MemTotal'])) print('Free memory: {0}'.format(meminfo['MemFree']))
#!/usr/bin/env Python import time import sys if len(sys.argv) > 1: INTERFACE = sys.argv[1] else: INTERFACE = 'eth0' STATS = [] print 'Interface:',INTERFACE def rx(): ifstat = open('/proc/net/dev').readlines() for interface in ifstat: if INTERFACE in interface: stat = float(interface.split()[1]) STATS[0:] = [stat] def tx(): ifstat = open('/proc/net/dev').readlines() for interface in ifstat: if INTERFACE in interface: stat = float(interface.split()[9]) STATS[1:] = [stat] print 'In Out' rx() tx() while True: time.sleep(1) rxstat_o = list(STATS) rx() tx() RX = float(STATS[0]) RX_O = rxstat_o[0] TX = float(STATS[1]) TX_O = rxstat_o[1] RX_RATE = round((RX - RX_O)/1024/1024,3) TX_RATE = round((TX - TX_O)/1024/1024,3) print RX_RATE ,'MB ',TX_RATE ,'MB'
#!/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 程式異常退出, 4 秒後重新啟動" time.sleep(3) os.system("service apache2 restart") except: print "Error", sys.exc_info()[1]
以上所述是小編給大家介紹的Python實現Linux監控的方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回覆大家的!
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2781897/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python實現遠端埠監控例項Python
- python3.10監控redis例項PythonRedis
- python 單一程式例項 實現Python
- 網路卡流量監控指令碼,python實現指令碼Python
- Python物件導向多型實現原理及程式碼例項Python物件多型
- 技術分享 | Linux 環境下針對程式維度的監控實現Linux
- Python實現簡單網頁圖片抓取完整程式碼例項Python網頁
- 技術分享| 如何使用Prometheus實現系統程式監控Prometheus
- vuejs實現新增tag標籤程式碼例項VueJS
- python類例項化如何實現Python
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- html實現簡單ListViews效果的例項程式碼HTMLView
- MyCat分片:水平拆分例項解析和程式碼實現!
- TiDB監控實現--存活監控TiDB
- 正則實現個位數補零程式碼例項
- 技術分享 | Linux 入侵檢測中的程式建立監控Linux
- TenSunS監控REDIS:使用一個redis_exporter監控所有的Redis例項RedisExport
- Linux系統效能監控採集項Linux
- JS實現監控微信小程式JS微信小程式
- Asp.Net 5分鐘實現網頁實時監控程式碼ASP.NET網頁
- python獲取zabbix監控項圖形Python
- Linux程式管理與效能監控Linux
- HashTable實現程式碼分享
- dom操作程式碼例項
- css梯形程式碼例項CSS
- 【深度學習基礎-11】簡單線性迴歸(下)--例項及python程式碼實現深度學習Python
- Python之粒子群演算法(含程式碼例項)Python演算法
- Linux 監控Linux
- Python訪問小程式簡單方法程式碼例項詳解Python
- linux安裝Arthas監控java程式LinuxJava
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- 大型監控網路系統規劃ip地址例項
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- HTML 使用表單標籤實現註冊頁面的例項程式碼HTML
- Python專案實戰例項Python
- python 連線mongodb實現增刪改查例項PythonMongoDB
- TenSunS監控Mysql:如何優雅的使用一個mysqld_exporter監控所有的MySQL例項MySqlExport
- 自定義監控項