本文介紹Python和R從zabbix的API接口取數方法,同時針對運維人員和設備管理人員提供一種通用的獲取系統層數據的方法。
	
數據源與數據接入
一、運行監測數據
獲取運行監測數據可以借助一些成熟的監測工具,常見的如Zabbix, Nagios,配置好agent,搜集存儲數據,然後直接從數據庫取數。如果沒有數據庫權限,則申請頁面查看賬号,借助監測工具提供的API取數,可以獲取所有主機的監測數據。用Python和R提取zabbix數據,以下為示例腳本,設置定時執行任務即可:
Python - pyzabbix
	from pyzabbix.api import ZabbixAPI
zapi = ZabbixAPI(url='http://127.0.0.1/zabbix/', user='root', password='root')
# 遍曆所有的HOSTID,HOST
host_item=zapi.host.get(monitored_hosts=1, output='extend')
# 獲取系統相關監測項
sys_item = zapi.item.get(
        host=eval(host1),
        search={
            'key_':'system'  # system,vm,vfs,icmp
        },
        output='extend'
    )
R - RZabbix包
	# 加載包
library("RZabbix")
url = 'http://127.0.0.1:8088'
# 授權
auth <- ZabbixAPI(url,
          body = list(method = "user.login",
                      params = jsonlite::unbox(
                        data.frame(user = root
                                   password = root)
## get_item
item_get <- ZabbixAPI(url,
                         body = list(method = "item.get",
                                     params = jsonlite::unbox(
                                       data.frame( 
                                         output = "extend",
                                         hostids = "host1
                                         sortfield = "name"
                                       )),
                                     auth = auth))
二、硬件配置信息
獲取硬件配置信息的源頭是使用命令行得到配置參數。針對1台主機,自不必說。當有20,30台以上設備時,如何配置命令行呢?一種方法是配置Zabbix腳本,分發到各個agent執行返回結果。另一種方法:在Python和R執行shell命令。
第一步是要連接主機,這一步用到paramiko模塊,通過SSHClient方法,需要提供每台主機的以下信息:
	hostname = '192.168.0.158', port = 22, username = 'root', password = 'root'
接下來循環執行shell腳本,把執行結果彙總即可。
	import paramiko
import pandas as pd
# 定義hosts列表
# eg, hosts = pd.DataFrame({'id':0,'hostname':'192.168.56.158','port':22,'username':'root','password':'root'},index=[0])
for i in range(0,20):
	s = paramiko.SSHClient()
	s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
	df = hosts[hosts['id'] == i] # 循環處理
	lst = df.values.tolist()
	s.connect(hostname = lst[0][1], port = lst[0][2], username = lst[0][3], password = lst[0][4])
	sshcmd = “cat /proc/cpuinfo | grep 'model name' |uniq'”# 查看CPU型号
	stdin, stdout, stderr = s.exec_command(sshcmd)
	print(stdout.read())
	print(stderr.read())
	s.close()
R語言則使用system函數,但R腳本隻限于當前環境執行。
	# 獲取CPU使用率,去%号
grep_out0 <- system(paste0("ps -A -o ","%","cpu | awk ","\'","{","s =$1","}"," END ","{","print s","}","\'"),intern = T)
# 獲取内存使用率,去%号
grep_out3 <- system(paste0("free -m | sed -n ","\'","2p","\'"," | awk ","\'","{","print ","$3/$2","}","\'"),intern = T)
(本文為數據處理階段,接下來将介紹主機運行評價、主機性能評價等内容。)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!