python编程与数据分析基础(Python和R获取多台主机硬件配置信息和系统运行监测数据)
本文介绍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)
(本文为数据处理阶段,接下来将介绍主机运行评价、主机性能评价等内容。)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com