- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
11.2 Func 常用模块及 API
Func提供了非常丰富的功能模块,包括CommandModule(执行命令)、CopyFileModule(拷贝文件)、CpuModule(CPU信息)、DiskModule(磁盘信息)、FileTrackerModule(文件跟踪)、IPtablesModule(iptables管理)、MountModule(Mount挂载)、NagiosServerModule(Nagios管理)、NetworkTest(网络测试)、ProcessModule(进程管理)、SysctlModule(sysctl管理)、SNMPModule(SNMP信息),等等,更多模块介绍见官网模块介绍:https://fedorahosted.org/func/wiki/ModulesList。命令行调用模块格式:
func<目标主机>call<module_name(模块名)><method_name(方法名)><module_args(模块参数)>
模块命令行执行结果都以Python的元组字符串返回(API以字典形式返回),这对后续进行结果集的解析工作非常有利,例如,远程运行“df-m”命令的运行结果如图11-2所示。
图11-2 返回主机内存使用信息
在所有模块中,CommandModule模块最常用,可以在目标被控主机执行任意命令。笔者建议使用API方式对应用场景的逻辑进行封装,将权限放到一个预先定制好的方框中,实现收敛操作。下面对Func常用的模块一一进行讲解。
11.2.1 选择目标主机
Func选择目标主机操作对象支持“*”与“?”方式匹配,其中“*”代表任意多个字符,“?”代表单个任意字符,例如:
# func "SN2013-*-02?" call command run "uptime"
“SN2013-*-02?”在本文环境中将匹配到SN2013-08-021、SN2013-08-022两台主机,可以根据实际应用场景随意组合。例如,我们定义的多台Web业务服务器主机名分别为:web1、web2、web3、…、webn.webapp.com,要查看所有Web应用的uptime信息可以运行:
# func "web*.webapp.com" call command run "uptime"
多个目标主机名使用分号分隔,如:
# func "web.example.org;mailserver.example.org;db.example.org" call command run "df -m"
11.2.2 常用模块详解
1.执行命令模块
(1)功能
CommandModule实现Linux远程命令调用执行。
(2)命令行模式
# func "*" call command run "ulimit -a" # func "SN2013-08-022" call command run "free -m"
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.command.run("free -m")
2.文件拷贝模块
(1)功能
CopyFileModule实现主控端向目标主机拷贝文件,类似于scp的功能。
(2)命令行模式
# func "SN2013-08-022" copyfile -f /etc/sysctl.conf --remotepath /etc/sysctl.conf
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") client.local.copyfile.send("/etc/sysctl.conf","/tmp/sysctl.conf")
3.CPU信息模块
(1)功能
CpuModule获取远程主机CPU信息,支持按时间(秒)采样平均值,如下面示例中的参数“10”。
(2)命令行模式
# func "SN2013-08-022" call cpu usage # func "SN2013-08-022" call cpu usage 10
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.cpu.usage(10)
4.磁盘信息模块
(1)功能
DiskModule实现获取远程主机的磁盘分区信息,参数为分区标签,如/data分区。
(2)命令行模式
# func "SN2013-08-022" call disk usage # func "SN2013-08-022" call disk usage /data
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.disk.usage("/dev/sda3")
5.拷贝远程文件模块
(1)功能
GetFileModule实现拉取远程Linux主机指定文件到主控端目录,不支持命令行模式。
(2)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") client.local.getfile.get("/etc/sysctl.conf","/tmp/")
6.iptables管理模块
(1)功能
IPtablesModule实现远程主机iptables配置。
(2)命令行模式
# func "SN2013-08-022" call iptables.port drop_to 53 192.168.0.0/24 udp src # func "SN2013-08-022" call iptables drop_from 192.168.0.10
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") client.iptables.port.drop_to(8080, "192.168.0.10", "tcp", "dst")
7.系统硬件信息模块
(1)功能
HardwareModule返回远程主机系统硬件信息。
(2)命令行模式
# func "SN2013-08-022" call hardware info # func "SN2013-08-022" call hardware hal_info
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.hardware.info(with_devices=True) print client.hardware.hal_info
8.系统Mount管理模块
(1)功能
MountModule实现远程主机Linux系统挂载、卸载分区管理。
(2)命令行模式
# func "SN2013-08-022" call mount list # func "SN2013-08-022" call mount mount /dev/sda3 /data # func "SN2013-08-022" call mount umount "/data"
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.mount.list print client.mount.umount("/data") print client.mount.mount("/dev/sda3","/data")
9.系统进程管理模块
(1)功能
ProcessModule实现远程Linux主机进程管理。
(2)命令行模式
# func "SN2013-08-022" call process info "aux" # func "SN2013-08-022" call process pkill nginx -9 # func "SN2013-08-022" call process kill nginx SIGHUP
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.process.info("aux") print client.process.pkill("nginx", "-9") print client.process.kill("nginx", "SIGHUP")
10.系统服务管理模块
(1)功能
ServiceModule实现远程Linux主机系统服务管理。
(2)命令行模式
# func "SN2013-08-022" call service start nginx
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.service.start("nginx")
11.系统内核参数管理模块
(1)功能
SysctlModule实现远程Linux主机系统内核参数管理。
(2)命令行模式
# func "SN2013-08-022" call sysctl list # func "SN2013-08-022" call sysctl get net.nf_conntrack_max # func "SN2013-08-022" call sysctl set net.nf_conntrack_max 15449
(3)API模式
import func.overlord.client as func client = func.Client("SN2013-08-022") print client.sysctl.list print client.sysctl.get('net.ipv4.icmp_echo_ignore_broadcasts') print client.sysctl.set('net.ipv4.tcp_syncookies', 1)
func命令功能参数举例:
1)查看所有主机uptime,开启5个线程异步运行,超时时间为3秒,命令如下:
# func -t 3 "*" call --forks="5" --async command run "/usr/bin/uptime"
2)格式化输出结果,默认格式为Python的元组,分别添加--jsion或--xml来输出JSON及XML格式,命令如下:
# func -t 3 "*" call --forks="5" --json --async command run "/usr/bin/uptime"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论