Python自動化運維 系統基礎信息模塊

1.系統信息的收集

????????系統信息的收集,對于服務質量的把控,服務的監控等來說是非常重要的組成部分,甚至是核心的基礎支撐部分。我們可以通過大量的核心指標數據,結合對應的檢測體系,快速的發現異常現象的苗頭,進行可控的措施。

????????我們的運維就像是醫生,如果我們在診斷之前對病人的信息以及癥狀都不了解的話,如何對癥下藥。

基礎信息之psutil模塊

要在Linux中下載和安裝psutil庫,可以按照以下步驟進行操作:

  1. 打開終端。
  2. 使用以下命令安裝pip(如果已經安裝了pip,請跳過此步驟):
    • 對于Debian/Ubuntu系統:sudo apt-get install python3-pip
    • 對于CentOS/RHEL系統:sudo yum install python3-pip
  3. 使用以下命令安裝psutil庫:
    • 對于Python 2.x:sudo pip install psutil
    • 對于Python 3.x:sudo pip3 install psutil

現在,您已經成功在Linux中安裝了psutil庫。您可以在Python腳本中導入它并開始使用它。例如:

psutil是一個跨平臺庫,我們主要去用它來獲取兩部分信息

? ? ? ? 進程信息:

? ? ? ? 系統利用率 - cpu、內存、磁盤、網絡等。

它實現了提供同等命令行的一些相關功能,比如:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap (感興趣的可以去百度一下這些命令的具體作用以及原理,學到就是賺到)

通常我們獲取操作系統信息往往采用編寫shell來實現,如獲取當前物理內存總大小以及使用大小、shell命令如下

物理內存total值: free -m | grep? Mem | awk '{print $2}'

物理內存used值:free -m | grep? Mem | awk '{print $3}'

這樣長長的一段shell? 往往我們編寫起來會很麻煩 容易出錯? 同時也不容易記憶

相較而言使用psutil庫實現則更加簡單明了

安裝完成之后我們就可以在python文件中使用啦

?當然也可以在終端中去使用

?psutil模塊已經封裝了這些方法,根據需要調用就可以

(1) CPU信息

User Time,執行用戶進程時間的百分比

System Time,執行內核進程和中斷的時間百分比

WaitIO,由于IO等待而使CPU處于idle(空閑)狀態的時間百分比

idle,CPU處于idle狀態的時間百分比

import psutil
psutil.cpu_times()  # 使用cpu_time方法獲取cpu完整信息,需要現實所有邏輯CPU信息
# 指定方法變量 percpu=True即可,如psutil.cpu_times(percpu=True)
print(psutil.cpu_times())
psutil.cpu_times().user
print(psutil.cpu_times().user)
psutil.cpu_count()  # 獲取CPU的邏輯個數,默認logical=True4
print(psutil.cpu_count())
psutil.cpu_count(logical=False)  # 獲取CPU的物理個數
print(psutil.cpu_count(logical=False) )

我們使用Python的psutil.cpu_times()方法可以非常簡單的得到這些信息,同時也可以獲取CPU的硬件相關的信息,比如CPU的物理個數邏輯個數

( 2)內存信息

linux系統的內存利用率信息涉及total(內存總數)、used(已使用的內存數)、free(空閑的內存數)、buffers(緩沖使用數)、cache(緩存使用數)、swap(交換分區使用數),分別使用psutil.virtual_memory()psutil.swap_memory()方法獲取這些信息

import psutil
mem = psutil.virtual_memory() # 使用psutil.virtual_memory方法獲取內存完整信息
print(mem)mem.total  # 獲取內存總數
print(mem.total)
mem.free # 獲取空閑內存數
print(mem.free)psutil.swap_memory()  # 獲取swap分區信息
print(psutil.swap_memory())

(3)磁盤信息?

在系統的所有磁盤信息中,磁盤劉勇率使用psutil.disk_usage方法獲取。磁盤io信息包括read_count(讀io數)、write_count(寫io數)、read_bytes(io讀字節數)、warite_bytes(IO寫字節數)、read_time(磁盤讀時間)、write_time(磁盤寫時間)。這些io信息可以使用psutil.disk_io_counters()獲取

import psutil
psutil.disk_partitions()  # 使用psutil.disk_partitions方法獲取磁盤完整信息
print(psutil.disk_partitions())psutil.disk_usage('/')   # 使用psutil.disk_usage方法獲取分區參數的使用情況
print(psutil.disk_usage('/')) 

?(4)網絡信息

系統的網絡信息和磁盤IO信息類似,涉及到幾個關鍵點,包括bytes_sent(發送字節數)、bytes_recv(接受字節數)、packets_sent=200987(發送數據包數)、packets_recv(接受數據包數)等。這些信息都可以使用psutil.net_io_counters()獲取

import psutil
psutil.net_io_counters() # 使用psutil.net_io_counters()獲取網絡總的IO信息,默認pernic = False
print(psutil.net_io_counters())psutil.net_io_counters(pernic = True) # 輸出每個網絡接口的IO信息
print(psutil.net_io_counters(pernic = True))

(5)其他系統信息

除了上面介紹的幾個獲取系統基本信息的方法,psutil模塊還支持獲取用戶登錄,開機時間等信息

import psutil,datetime
psutil.users()  # 使用psutil.users方法返回當前登錄系統的用戶信息
print(psutil.users())
psutil.boot_time()   # 獲取開機時間,以linux時間戳格式返回
print(psutil.boot_time())
# 使用psutil.boot_time方式獲取開機時間,以Linux時間戳格式返回
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d%H:%M:%S")
print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d%H:%M:%S"))

2.系統進程管理方法

(1)進程信息

獲得當前系統的進程信息,可以讓運維人員得知應用程序的運行狀態,包括進程的啟動時間、查看或者設置CPU親和度、內存使用率、IO信息、socket鏈接、線程數等、這些信息可以呈現出指定進程是否存活、資源利用情況、問題定位提供很好的數據參考

import psutil
psutil.pids()   # 列出所有進程
p = psutil.Process(2424)  # 實例化一個Process對象,參考為一進程PID
p.name('java') # 進程名
p.exe('/usr/bin/java') # 進程bin路徑
p.cwd('/usr/local/hadoop-1') # 進程工作目錄絕對路徑
p.status('sleeping')   # 進程狀態
p.create_time()
p.uids()  # 進程信息
p.gids()   # 進程gid信息 
p.cpu_times()  # 進程CPU時間信息,包括user、system兩個cpu時間
p.cpu_affinity()  # get進程CPU親和度,如要設置進程CPU親和度,將CPU號作為參數即可
p.memory_percent()  # 進程內存利用率
p.memory_info()    # 進程內存rss、vms信息
p.io_counters()  # 進程io信息,包括讀寫io數及字節數
p.connections()   # 返回打開進程socket的namedutples列表,包括fs、family、ladder等信息
p.num_threads()   # 進程開啟的線程數

(2)popen類的使用

psutil提供的popen類的作用是獲取用戶啟動的應用程序的進程信息,以便跟蹤進程的運行狀態

import psutil
from subprocess import PIPE
# 通過psutil的Popen方法啟動應用程序,可以根據該程序運行的所有相關信息
p = psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout = PIPE)
p.name()
p.username()
p.communicate()
p.cpu_times()   # 得到進程運行的CPU時間

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37416.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot項目如何整合rocketmq

1、項目導入rocketmq依賴 添加 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency> 完整內容如下: <?xml version="1.0" encoding="…

Golang | Leetcode Golang題解之第208題實現Trie前綴樹

題目&#xff1a; 題解&#xff1a; type Trie struct {children [26]*TrieisEnd bool }func Constructor() Trie {return Trie{} }func (t *Trie) Insert(word string) {node : tfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &Trie{…

mac|tableau public 儀表盤使用

對華東地區的利潤進行儀表盤可視化 選擇下面的功能表的新建儀表盤,把上面的表1表2放入其中 通過下圖操作將兩個表聯合起來&#xff0c;即上圖使用篩選器時下面的表隨之改變 將上圖設置為篩選器&#xff0c;可以通過點擊地區查看數據

MySQL之MHA高可用集群及故障切換

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套優秀的mysql高可用環境下故障切換和主從復制的軟件。MHA的出現就是為了解決mysql單點故障。Mysql故障切換過程中&#xff0c;MHA能做到0-30秒內自動完成故障性切換操作。MHA能在故障切換的過程中最大程度…

特征工程的力量

為什么你應該使用邏輯回歸來建模非線性決策邊界&#xff08;使用 Python 代碼&#xff09; 作為一名大數據從業者&#xff0c;復雜的機器學習技術非常具有吸引力。使用一些深度神經網絡 (DNN) 獲得額外的 1% 準確率&#xff0c;并在此過程中啟動 GPU 實例&#xff0c;這讓人非常…

【使用webrtc-streamer解析rtsp視頻流】

webrtc-streamer WebRTC (Web Real-Time Communications) 是一項實時通訊技術&#xff0c;它允許網絡應用或者站點&#xff0c;在不借助中間媒介的情況下&#xff0c;建立瀏覽器之間點對點&#xff08;Peer-to-Peer&#xff09;的連接&#xff0c;實現視頻流和&#xff08;或&a…

了解 ZooKeeper:關鍵概念和架構

ZooKeeper 是一種分布式協調服務&#xff0c;廣泛用于分布式系統中&#xff0c;用于維護配置信息、命名、同步和組服務。它最初由雅虎開發&#xff0c;現在是一個 Apache 項目&#xff0c;已成為許多大型分布式應用程序不可或缺的一部分。本文深入探討 ZooKeeper 的關鍵概念和架…

【Android】Activity子類之間的區別

從底層往頂層的繼承順序依次是&#xff1a; Activity&#xff0c;最原始的Activity androidx.core.app.ComponentActivity&#xff0c;僅僅優化了一個關于KeyEvent的攔截問題&#xff0c;一般不繼承這個類 androidx.activity.ComponentActivity&#xff0c;支持和Android Arc…

Spark Join優化案例:Join Key 遠大于 Payload

在一個案例中&#xff0c;大表 100GB、小表 10GB&#xff0c;它們全都遠超廣播變量閾值&#xff08;默認 10MB&#xff09;。因為小表的尺寸已經超過 8GB&#xff0c;在大于 8GB 的數據集上創建廣播變量&#xff0c;Spark 會直接拋出異常&#xff0c;中斷任務執行&#xff0c;所…

C語言 求 n 個數的階乘之和

求n個數的階乘之和&#xff08;即求1&#xff01;2&#xff01;3&#xff01;…n!&#xff09; 這個程序讀取用戶輸入的正整數 n&#xff0c;計算并輸出 1! 2! 3! ... n! 的值。 #include <stdio.h>// 計算階乘的函數 long factorial(int num) {long result 1;for…

恢復 IntelliJ IDEA 中消失的菜單欄

要恢復 IntelliJ IDEA 中消失的菜單欄&#xff0c;可以按照以下簡單步驟操作&#xff1a; 使用快捷鍵打開搜索&#xff1a;首先&#xff0c;雙擊 Shift 鍵打開全局搜索對話框。 搜索“Menu”&#xff1a;在搜索框中輸入 menu&#xff0c;然后從搜索結果中選擇與“Main Menu”相…

python-基礎篇-選擇-是什么

文章目錄 定義一&#xff1a;Python 條件語句跟其他語言基本一致的&#xff0c;都是通過一條或多條語句的執行結果&#xff08; True 或者 False &#xff09;來決定執行的代碼塊。1、什么是條件語句2、if 語句的基本形式3、if 語句多個判斷條件的形式4、if 語句多個條件同時判…

次序統計量

內容來源 概率論與數理統計教程&#xff08;第三版&#xff09; 茆詩松 高等教育出版社 數理統計學導論&#xff08;原書第7版&#xff09; 機械工業出版社 定義 設 X 1 , X 2 , ? , X n X_1,X_2,\cdots,X_n X1?,X2?,?,Xn? 是來自連續分布的隨機樣本 此分布具有 p d f…

【機器學習】Python reversed 函數

目錄&#xff1a; reversed()函數初探應用于列表和元組實戰演練&#xff1a;山海經故事文本處理 Python中的內置函數——reversed()。 這個函數能夠幫助你高效地處理序列類型數據&#xff0c;比如列表、元組、字符串等&#xff0c;通過它你可以輕松地反轉這些序列中的元素順…

JSON 簡述與應用

1. JSON 簡述 JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;常用于客戶端與服務器之間的數據傳遞。它基于JavaScript對象表示法&#xff0c;但獨立于語言&#xff0c;可以被多種編程語言解析和生成。 1.1 特點 輕量級&#…

JS對數據類型的檢測方式

1. typeof()對于基本數據類型沒問題&#xff0c;遇到引用數據類型就不管用 console.log( typeof 666 ); // number console.log( typeof [1,2,3] ); // object 2. instanceof()只能判斷引用數據類型&#xff0c;不能判斷基本數據類型 console.log( [] instanceof Array ) // tr…

Unity--協程--Coroutine

Unity–協程–Coroutine 1. 協程的基本概念 基本概念:不是線程,將代碼按照劃分的時間來執行,這個時間可以是具體的多少秒,也可以是物理幀的時間,也可以是一幀的繪制結束的時間。 協程的寫法&#xff1a;通過返回IEnumerator的函數實現&#xff0c;使用yield return語句暫停執…

Golang | Leetcode Golang題解之第205題同構字符串

題目&#xff1a; 題解&#xff1a; func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

python 查找輪廓

在Python中&#xff0c;查找圖像的輪廓通常使用OpenCV庫。以下是一個簡單的示例代碼&#xff0c;展示了如何使用OpenCV來查找并繪制圖像的輪廓&#xff1a; pythonimport cv2 import numpy as np# 讀取圖像 image cv2.imread(your_image.jpg, 0) # 請將your_image.jpg替換為您…

設備樹下的 platform 驅動編寫

設備樹下的 platform 驅動編寫 設備樹下的 platform 驅動簡介 platform 驅動框架分為總線、設備和驅動&#xff0c;其中總線不需要我們這些驅動程序員去管理&#xff0c;這個是 Linux 內核提供的&#xff0c;我們在編寫驅動的時候只要關注于設備和驅動的具體實現即可。在沒有…