一、正常的处理流程:

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服务的监控的更多相关文章

  1. ansible结合zabbix_api批量添加主机

    批量添加zabbix监控 .使用ansible配置zabbix客户端 ①修改服务器的IP(域名),为了方便使用ansible来批量操作 等同于如下sed语句 sed -i 's#Server=1.1. ...

  2. Zabbix使用python批量添加主机及主机资产信息-从零到无

    - - 时间:2020年11月10日 - - 作者:飞翔的小胖猪 前言: 使用zabbix作为基础环境的监控系统时,面对现网在用的2000+台把这些主机添加到zabbix监控中是一个问题,当然zabb ...

  3. 用python批量添加保护站点

    最近在测试的过程中,由于一个bug的复现需要添加1600个保护站点,手工添加谁知到要何年何月,因此想到了用python进行自动化批量添加保护站点! 具体代码如下: #!/usr/bin/env pyt ...

  4. 通过zabbix自带api进行主机的批量添加操作

    通过zabbix自带api进行批量添加主机 我们需要监控一台服务器的时候,当客户端装好zabbix-agent端并正确配置以后,需要在zabbix-server的web gui界面进行添加zabbix ...

  5. 分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口

    一.Zabbix-3.0.3批量添加主机的配置如下: 0)被监控机上要安装zabbix_agent,并配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_serve ...

  6. rsync服务搭建--2018.5.8 [优化后最终版]

    2018年5月8日 22:09:38 第一步配置基础环境(按照自己的规划配置并非每人的环境都一致) 第一台服务器(RSYNC服务器): rsync外网地址:10.0.0.41  rsync内网地址:1 ...

  7. Linux搭建rsync服务

    一.Rsync的简单介绍 Rsync是一款开源的.快速的.多功能的.可实现全量及增量(全量备份是指全部备份,增量备份是在上一次备份的基础上只备份更新的内容)的本地货远程数据同步备份的优秀工具.Rsyn ...

  8. rsync 服务快速部署手册

    一.rsync服务端安装 1.查看rsync安装包 # rpm -qa rsync rsync-3.0.6-12.el6.x86_64 2.安装rsync 系统默认都会安装rsync软件包的,如果查看 ...

  9. ArcGis Python脚本——批量添加字段

    先看如何增加一个字段 函数:arcpy.AddField_management 语法:AddFields_management (in_table, field_description) 参数 说明 ...

随机推荐

  1. WebStorm记录(3)

    连通接口 接口 我自己理解前后端传输数据都是通过ajax方式 一般使用get和post两种方式传输数据 GET 接口 接口描述 获取登录验证码图片及密钥 HTTP方法 POST URL /captch ...

  2. mysql 用户及权限管理 小结

    MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...

  3. mysql导入导出sql文件,source导入速度慢的解决办法

    1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2.导出一个表mys ...

  4. Delegate与Event关系

    1.Delegate是类型,Event是成员(本质为成员方法),Event成员类型派生于Delegate.仅此! 2.大概就好比说委托是C++里一个方法的模板,而event是这个模板具体的实现

  5. luogu 2704 炮兵阵地 状压dp

    状压的基础题吧 第一次看感觉难上天,后来嘛就.. 套路:先根据自身状态筛出可行状态,再根据地图等其他限制条件筛选适合的状态加入答案 f i,j,k 分别代表 行数,本行状态,上行状态,再累加答案即可 ...

  6. 20155324 2016-2017-2 《Java程序设计》第十周学习总结

    20155324 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...

  7. tensorflow faster rcnn 代码分析一 demo.py

    os.environ["CUDA_VISIBLE_DEVICES"]=2 # 设置使用的GPU tfconfig=tf.ConfigProto(allow_soft_placeme ...

  8. 状压DP初探·总结

    2018过农历新年这几天,学了一下状态压缩动态规划,现在先总结一下.   状态压缩其实是一种并没有改变dp本质的优化方法,阶段还是要照分,状态还是老样子,决策依旧要做,转移方程还是得列,最优还是最优, ...

  9. c++ virtual 记录

    虚继承: http://zh.wikipedia.org/wiki/%E8%99%9A%E7%BB%A7%E6%89%BF 解决了菱形继承问题 cB cC 继承cA    cD继承cB,cC    c ...

  10. Vue中的双向数据绑定简单介绍

    1. 文本框绑定v-module <div id="app"> <input type="text" v-model="msg&qu ...