01 agent模式

在要采集的服务器上采集数据,然后上报到指定的服务器

subprocess

通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息

subprocess.call(['df','-hT'], shell=False)

执行命令,并返回执行状态,其中shell参数为False时,命令需要通过列表的方式传入,当shell为True时,可直接传入命令

subprocess.getoutput('df')

结果是执行命令后的值,

可以执行命令,然后自己去切割处理数据

psutil

安装

pip3 install psutil

如果提示没权限,加上sudo

cpu

import psutil

# cpu个数
psutil.cpu_count() # logical默认是True,逻辑个数
psutil.cpu_count(logical=False) # 物理个数

# cpu使用率
psutil.cpu_percent(interval=0.5, percpu=False) 
"""
interval 阻塞时间,默认不阻塞
percpu 显示所有cpu使用率,默认不显示
"""

内存

import psutil

# 内存使用率
psutil.virtual_memory() 
"""
结果分析(元组):
total 物理内存总数
available 可用物理内存
used 已使用物理内存
percent 已使用百分比
"""

psutil.swap_memory() 
"""
结果分析(元组):
total 总交换内存(以字节为单位
used 使用的交换内存(以字节为单位、free:可用字节交换内存
percent 使用的百分比
sin 系统已从磁盘交换的字节数(累积、sout:系统已从磁盘换出的字节数(累积)
"""

硬盘

import psutil

# 硬盘使用信息
psutil.disk_usage(path) 

"""
path 要获取的路径

结果分析(元组):
total 总的
used 已使用的
free 剩余的
percent 使用百分比
"""

# 获取硬盘挂载信息
psutil.disk_partitions(all=False) 
"""
all 是否获取虚拟硬盘(非物理硬盘信息),默认是False不获取
"""

网卡

# 网卡信息
psutil.net_io_counters(pernic=False)
"""
pernic 是否获取网卡的全部信息,默认是False不获取

结果分析(元组):
bytes_sent 发送字节数
bytes_recv 接受字节数
packets_sent 发送数据包
packets_recv 接收数据包
errin 错误包接收包
errout 错误出栈包 
dropin 丢弃入栈包 
dropout 丢弃出栈包 
"""

其他

import psutil

# 开机时间(时间戳)
psutil.boot_time()
# 转化为格式化
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")

02 SSH模式

在固定的服务器上,远程连要采集的服务器,采集数据

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname="ip", port="端口", username="用户名", password="密码")
# 执行命令
stdin, stdout, stderr = ssh.exec_command("linux命令")
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

线程池并发采集

from concurrent.futures import ThreadPoolExecutor
    p = ThreadPoolExecutor(10)
        p.submit("采集的方法")

总结

01 优点采集速度快,效率高,缺点每个节点都要装agent

02 优点只需要在know_hosts文件中加需要采集的节点信息,方便部署,缺点采集速度慢,相对没那么及时