Python运用zabbix开发简易巡检工具
利用SSH或者Zabbix监控,配合Django开发框架,改造出属于自己的监控平台,实现包括主机图形,自动发现,计划任务,批量cmd执行,服务监控,日志监控等功能,由于公司机器混乱,基本上市面上的所有设备都能找到,监控这些不同型号不同系统的主机需要分别对待,我们就借助各种开源项目来做一个简单的巡检工具,方便工作需要。
安装Zabbix客户端
首先客户端还是需要安装zabbix-agent这个监控工具,该工具可以监控所有的平台,windows linux mac unix 等,利用该工具完成一整套自动化平台一点问题都没有,连ansible都不需要了。
[root@localhost ~]# wget http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.3-1.el7.x86_64.rpm |
该配置文件,并启动服务完事。
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf |
服务端下载
https://www.zabbix.com/cn/download_agents
下载好之后将里面的 zabbix-get.exe 拖入项目中,直接调用就好。
基本的数据采集命令:
zabbix_get.exe -s 192.168.1.20 -p 10050 -k system.hostname |
允许远程执行命令:
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf |
监控CPU
system.cpu.util[<cpu>,<type>,<mode>] |
监控内存
proc.mem[<name>,<user>,<mode>,<cmdline>,<memtype>] |
监控网卡
net.if.in [if,<mode>] #网卡入口流量 |
监控IO/读写
vfs.dev.read [<device>,<type>,<mode>] #磁盘读取 |
文件操作:
zabbix_get.exe -s 192.168.1.20 -p 10050 -k vfs.file.exists[/etc/passwd] |
磁盘利用率
监控磁盘使用情况需要vfs.fs.size[fs,<mode>]键值 |
先来完成一个Ping操作
import os,sqlite3,datetime,time,signal,sys |
封装connect方法 connect.py
import os,subprocess,sys,math |
调用命令,获取系统基本信息。
import connect |
批量ping检测
import subprocess, datetime, time |
批量进程检测
import subprocess, datetime, time |
批量CPU负载检测等
import subprocess, datetime, time,math |
封装一个Zabbix调用类:
import subprocess,datetime,time,math |
简单的监控脚本编写 (无脑写法)
首先是连接脚本 win32_connect.py
import subprocess, datetime, time |
接着是win32_core.py
import win32_connect |
最后的win32_engine.py
import os,subprocess,sys,math |
监控unix系列,Unix_core.py
import paramiko |
配置文件
unix_base.db |
比较好的改进写法
上方代码中每个表都有一份账号密码,很麻烦,第二次重写我通过一个UUID序号,来定位用户名密码等登录信息,然后在一个配置文件中包含了所有配置项,程序中对不同的项目进行解析,来实现一个配置文件配置所有的配置项,只有基础base结构存储账号密码,每个base结构对应一个UUID号,当添加进程等表时,自动根据UUID号码,来解析账号密码,这样通过序号关联,只需写一份密码即可,通过UUID相关联。
使用Django开发图形化界面
收集目标主机数据的类:
import os,subprocess,sys,math |
admin.py
from django.contrib import admin |
models.py
from django.db import models |
先来判断是否有指定的IP地址,有的话后端直接爬取数据并填充到数据库中,要求是只需要输入IP地址即可取出所有的数据,并自动填充,有几台自动填充几台。
if __name__ == "__main__": |
fabric的使用技巧 fabric工具也是自动化运维利器,其默认依赖于paramiko的二次封装.
# 简单实现命令执行 |