ansible和python的zabbix_api批量添加rsync服务的监控
一、正常的处理流程: 1.添加zabbix用户对rsync程序的sudo权限,且不需要输入密码
# visudo即在/etc/sudoers配置文件最后添加如下内容 Defaults:zabbix !requiretty
zabbix ALL=NOPASSWD: ALL
zabbix ALL=NOPASSWD: /bin/bash /usr/local/rsync/bin/rsync 2.编写自动拉起服务的脚本,判断rsync程序是否存在,如果不存在就启动rsync
# vim /usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh
#!/bin/bash
count_num=`ps -ef|grep 'rsync'|grep -v grep|wc -l`
echo $count_num
if [ $count_num -eq 0 ];then
/etc/init.d/rsync start
fi # 添加程序的可执行权限
[root@web02:~]# chmod +x /usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh 3.打开zabbix agent的远程命令
sed -i 's|# EnableRemoteCommands=0|EnableRemoteCommands=1|g' /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf # 重启zabbix客户端
[root@web02:~]# /etc/init.d/zabbix_agentd restart 二、使用ansible批量处理添加rsync的监控
ansible批量添加监控需要做大量的准备工作,相对比较繁琐,如果需要监控的主机就几台手动几分钟就添加好了,当集群大到一定规模手动处理就显得很笨拙了
使用ansible进行添加,后面即使新增单台服务器也可以这么操作,可以避免我们手动操作遗漏步骤 # 添加需要处理的主机信息
# vim /etc/ansible/hosts
chinasoft_cbs_backend_web2 ansible_host=172.30.0.243 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass
chinasoft_apiser_web03 ansible_host=172.30.0.27 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass
chinasoft_platform_web01 ansible_host=172.30.0.19 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass
chinasoft_platform_web02 ansible_host=172.30.0.17 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass
chinasoft_platform_web03 ansible_host=172.30.0.20 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass
chinasoft_platform_web04 ansible_host=172.30.0.18 ansible_port=2018 ansible_user=root ansible_ssh_pass=pass 1.添加sudoer的权限
# 添加zabbix的sudo权限,/etc/sudoers结尾添加这三行
Defaults:zabbix !requiretty
zabbix ALL=NOPASSWD: ALL
zabbix ALL=NOPASSWD: /bin/bash /usr/local/rsync/bin/rsync # 所有sudo执行rsync的权限
ansible all -m blockinfile -a 'path=/etc/sudoers block="Defaults:zabbix !requiretty\nzabbix ALL=NOPASSWD: ALL\nzabbix ALL=NOPASSWD: /bin/bash /usr/local/rsync/bin/rsync\n" insertbefore=EOF' 2.拷贝脚本到远程主机 ansible all -m copy -a "src=/usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh dest=/usr/local/zabbix_agents_3.2.0/scripts/ mode=0755" 3.开启远程命令
ansible chinasoft_cbs_out_db3 -m shell -a "sed -i 's|# EnableRemoteCommands=0|EnableRemoteCommands=1|g' /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf" 4.zabbix-server在web上添加action动作 具体执行:
# 使用一台机器用ansible添加脚本、sudo权限进行测试,如果手动关闭rsync能否触发自动启动rsync的脚本说明没问题,就可以批量进行处理了 # 添加sudo权限
ansible chinasoft_cbs_out_db3 -m blockinfile -a 'path=/etc/sudoers block="Defaults:zabbix !requiretty\nzabbix ALL=NOPASSWD: ALL\nzabbix ALL=NOPASSWD: /bin/bash /usr/local/rsync/bin/rsync\n" insertbefore=EOF' # 添加脚本
ansible chinasoft_cbs_out_db3 -m copy -a "src=/usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh dest=/usr/local/zabbix_agents_3.2.0/scripts/ mode=0755" # 开启远程命令
ansible chinasoft_cbs_out_db3 -m shell -a "sed -i 's|# EnableRemoteCommands=0|EnableRemoteCommands=1|g' /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf" # 验证远程命令
ansible all -m shell -a "grep EnableRemoteCommands /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf" # 重启zabbix-agent
ansible chinasoft_cbs_out_db3 -m shell -a "executable=/bin/bash /etc/init.d/zabbix_agentd restart" 批量处理: # 确认是否有rsync服务
ansible all -m shell -a "ps -ef|grep 'rsync --daemon'" ansible all -m blockinfile -a 'path=/etc/sudoers block="Defaults:zabbix !requiretty\nzabbix ALL=NOPASSWD: ALL\nzabbix ALL=NOPASSWD: /bin/bash /usr/local/rsync/bin/rsync\n" insertbefore=EOF' ansible all -m copy -a "src=/usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh dest=/usr/local/zabbix_agents_3.2.0/scripts/ mode=0755" # ansible all -m shell -a "ls /usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh" ansible all -m shell -a "sed -i 's|# EnableRemoteCommands=0|EnableRemoteCommands=1|g' /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf" ansible all -m shell -a "grep EnableRemoteCommands /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf" # 重启zabbix-agent
ansible all -m shell -a "executable=/bin/bash /etc/init.d/zabbix_agentd restart" 三、使用zabbix_api批量为主机添加监控rsync程序的模板 使用zabbix_api批量添加模板的脚本:
template_massadd.py #!/usr/bin/python
#-*- coding:utf8 -*-
import json,sys,argparse
from zabbix_api import ZabbixAPI
server = "http://10.11.0.212/api_jsonrpc.php"
username = "Admin"
password = "zabbix"
zapi = ZabbixAPI(server=server, path="", log_level=0)
zapi.login(username, password) '''
1. 安装zabbix插件 D:\python\zabbix>pip install zabbix-api
2. 使用 zabbix_getallhosts.py 脚本获取主机名,将需要的主机名筛选出来 使用方法:
cmd下:
python template_massadd.py --host="chinasoft_cbs_frontend_web01,chinasoft_cbs_frontend_web02,chinasoft_cbs_backend_web1,chinasoft_cbs_backend_web2,chinasoft_cbs_backend_web3,chinasoft_cbs_backend_web4,web01,web02,chinasoft_store_web01,chinasoft_store_web02,chinasoft_apiser_web01,chinasoft_apiser_web02,chinasoft_payment_web01,chinasoft_payment_web02,chinasoft_platform_web01,chinasoft_platform_web02,chinasoft_platform_web03,chinasoft_platform_web04,chinasoft_apicms_backend_web01,chinasoft_apicms_backend_web02,eus-timed-task01,eus-store-pay01,eus-apiserver-web03,eus-apiserver-web04" --"templates"="Template process rsync"
''' # 获取参数
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("-H", "--host", help="host name")
parser.add_argument("-t", "--templates", help="template name")
# 解析所传入的参数
args = parser.parse_args()
if not args.host:
args.host = raw_input('host: ')
if not args.templates:
args.templates = raw_input('templates: ')
return args def get_host_id(host):
get_host_id = zapi.host.get(
{
"output": "hostid",
"filter": {
"host":host.split(",")
}
}
)
host_id = []
host_id.append([I['hostid'] for I in get_host_id])
return host_id[0] def get_templates_id(templates):
templates_id = zapi.template.get(
{
"output": "templateid",
"filter": {
"host":templates.split(",")
}
}
)
return templates_id def template_massadd(template_id,host_id):
template_add = zapi.template.massadd(
{
"templates": template_id,
"hosts": host_id
}
)
return "host add template success" # 程序入口
if __name__ == "__main__":
args = get_args()
print 'args:%s' % args
host_id = get_host_id(args.host)
print 'host_id = %s' % host_id
template_id = get_templates_id(args.templates)
print 'template_id: %s' % template_id
if len(host_id) == len(args.host.split(',')):
if len(template_id) == len(args.templates.split(',')):
print template_massadd(template_id,host_id)
else:
print "template not exist"
else:
print "host not exist" # 用法: # python template_massadd.py --host="chinasoft_apiser_web01,chinasoft_payment_web01" --"templates"="Template process rsync"
# host add template success ###########################
批量获取主机名的脚本 #!/usr/bin/evn python
# coding=utf-8 import requests
import json ZABIX_ROOT = "http://10.11.0.212"
url = ZABIX_ROOT + '/api_jsonrpc.php' # user.login
payload = {
"jsonrpc" : "2.0",
"method" : "user.login",
"params": {
'user': 'Admin',
'password':'zabbix',
},
"auth" : None,
"id" : 0,
}
headers = {'content-type': 'application/json',} req = requests.post(url, json=payload, headers=headers)
auth = req.json() # host.get
#主机显示名 'name'],
# hosts是zabbix.conf文件中配置的主机名
payload = {
"jsonrpc" : "2.0",
"method" : "host.get",
"params": {
'output': [
'hostid',
'host'],
},
"auth" : auth['result'],
"id" : 2,
}
res2 = requests.post(url, data=json.dumps(payload), headers=headers)
res2 = res2.json() # f.write(host['name'] + '\n')
for host in res2['result']:
with open('host.txt', 'a+') as f: f.write(host['host'] + '\n')
ansible和python的zabbix_api批量添加rsync服务的监控的更多相关文章
- ansible结合zabbix_api批量添加主机
		批量添加zabbix监控 .使用ansible配置zabbix客户端 ①修改服务器的IP(域名),为了方便使用ansible来批量操作 等同于如下sed语句 sed -i 's#Server=1.1. ... 
- Zabbix使用python批量添加主机及主机资产信息-从零到无
		- - 时间:2020年11月10日 - - 作者:飞翔的小胖猪 前言: 使用zabbix作为基础环境的监控系统时,面对现网在用的2000+台把这些主机添加到zabbix监控中是一个问题,当然zabb ... 
- 用python批量添加保护站点
		最近在测试的过程中,由于一个bug的复现需要添加1600个保护站点,手工添加谁知到要何年何月,因此想到了用python进行自动化批量添加保护站点! 具体代码如下: #!/usr/bin/env pyt ... 
- 通过zabbix自带api进行主机的批量添加操作
		通过zabbix自带api进行批量添加主机 我们需要监控一台服务器的时候,当客户端装好zabbix-agent端并正确配置以后,需要在zabbix-server的web gui界面进行添加zabbix ... 
- 分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口
		一.Zabbix-3.0.3批量添加主机的配置如下: 0)被监控机上要安装zabbix_agent,并配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_serve ... 
- rsync服务搭建--2018.5.8 [优化后最终版]
		2018年5月8日 22:09:38 第一步配置基础环境(按照自己的规划配置并非每人的环境都一致) 第一台服务器(RSYNC服务器): rsync外网地址:10.0.0.41 rsync内网地址:1 ... 
- Linux搭建rsync服务
		一.Rsync的简单介绍 Rsync是一款开源的.快速的.多功能的.可实现全量及增量(全量备份是指全部备份,增量备份是在上一次备份的基础上只备份更新的内容)的本地货远程数据同步备份的优秀工具.Rsyn ... 
- rsync 服务快速部署手册
		一.rsync服务端安装 1.查看rsync安装包 # rpm -qa rsync rsync-3.0.6-12.el6.x86_64 2.安装rsync 系统默认都会安装rsync软件包的,如果查看 ... 
- ArcGis Python脚本——批量添加字段
		先看如何增加一个字段 函数:arcpy.AddField_management 语法:AddFields_management (in_table, field_description) 参数 说明 ... 
随机推荐
- callback hell (回调地狱)
			callback hell (回调地狱) callback(回调) 如何修复 callback hell callback 回调只是存放一些即将要处理的代码. 回调的执行顺序不是从上到下的,而是根据事 ... 
- 简:Spring中Bean的生命周期及代码示例
			(重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ... 
- ajax、fetch、axios — 请求数据
			jquery ajax jq 的ajax是对原生XHR的封装,除此以外还增添了对JSONP的支持.用起来非常方便 用法: $.ajax({ url:发送请求的地址, data:数据的拼接,//发送到服 ... 
- vue.cli 中使用 less 来写css样式
			vue-cli 的webpack中已配置了less,但 package.json 中没有选项,为了方便开发中使用,需安装一下: 安装方式一: npm install less less-loader ... 
- Java8新特性_接口中的默认方法
			默认方法由来猜想 1. Collection接口.Collections公共类. 同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ... 
- None.js 第六步 Stream(流)
			输出流 var fs = require("fs"); var data = ''; // 创建可读流 var readerStream = fs.createReadStream ... 
- Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码
			请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ... 
- GridsearchCV调参
			在利用gridseachcv进行调参时,其中关于scoring可以填的参数在SKlearn中没有写清楚,就自己找了下,具体如下: parameters = {'eps':[0.3,0.4,0.5,0. ... 
- python后端将svc文件数据读入数据库具体实现
			如何用python将svc文件的数据读入到MySQL数据库里,在此直接上代码了,感兴趣的朋友可以贴代码测试: import pandas as pd import os from sqlalchemy ... 
- NIO的epoll空轮询bug
			JDK NIO的bug,例如epoll bug,它会导致Selector空轮询,最终导致CPU 100%. Selector BUG出现的原因 若Selector的轮询结果为空,也没有wakeup或新 ... 
