我们在升级环境时遇到了一个问题,那就是zabbix会自动发送邮件给领导,此时领导心里会嘎嘣一下,为了给领导营造一个良好的环境,减少不必要的告警邮件,减少嘎嘣次数,于是在升级之前,取消zabbix监控的agent,当升级完之后再恢复过去。


一、简介

zabbix提供了API接口,可满足基本使用需求,具体参考:zabbix API

有了API接口,我们就可以做到:

  自动执行常规任务

  将zabbix与第三方软件集成

  创建新的应用程序以使用zabbix

zabbix API 是基于web API的,使用的是JSON-RPC2.0协议,客户端与API之间的请求使用的是JSON格式进行编码。

使用远程http请求调用api,需要向 api_jsonrpc.php 位于前端目录中的文件发送HTTP POST请求,url是http://zabbixserverIP/zabbix/api_jsonrpc.php。

请求的头部信息 必须是以下值之一:

application/json-rpc, application/json 或 application/jsonrequest

json中主要的对象有:

jsonrpc - API使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0;
method - 被调用的API方法名;
params - 将被传递给API方法的参数;
id - 请求的任意标识符;
auth -用户认证令牌; 因为我们还没有一个,它的设置null。

  

二、思路整理

  登陆zabbix,获取token

  利用token获取agent的id

  利用已获取的id和token调整agent的连接状态

三、具体实现

 

#!/usr/bin/python
import sys
import json
import requests if( len(sys.argv) < 2 ):    #需强调传入3个以上的参数
print("[Usage] $1 is 0/1(0:open 1:off) ; $2 $3.... is agent name. ")
sys.exit(1) class Error(Exception):    #定义自定义错误
def __init__(self,*args):
self.args = args def login(user,passwd,url,header):  #登陆函数获取token
# return token
data = {
"jsonrpc": "2.0" ,
"method": "user.login" ,    
"params": {
"user": user ,
"password": passwd
} ,
"id": 1 ,
}
r = requests.post ( url=url , headers=header , data=json.dumps ( data ) )
if ( r.status_code == 200 ):
return r.json ()['result']
else:
raise Error("return status code is not eq 200. login failed!") def gethostid(hostname,token,url,header):  #获取id
#get dict { hostid , status}
data = {
"jsonrpc": "2.0" ,
"method": "host.get" ,
"params": {
"output": ['status'] ,
"filter": {
"host": [
hostname
]
}
} ,
"auth": token ,
"id": 1
}
r = requests.post ( url=url , headers=header , data=json.dumps ( data ) )
if( r.status_code == 200 ):
if( r.json()['result'] != [] ):   #判断获取到的信息不为“[]”证明是有数据的
return r.json ()['result'][0]
else:
print(" %s hostname is wrong!!" % hostname)
exit(1)
else:
raise Error("return status code is not eq 200. gethostid failed!") def changestatus(hostid,token,url,header,onoroff):   #修改agent的连接状态
# 0:open ; 1:off
data = {
"jsonrpc": "2.0" ,
"method": "host.update" ,
"params": {
"hostid": hostid ,
"status": onoroff
} ,
"auth": token ,
"id": 1
}
r = requests.post ( url=url , headers=header , data=json.dumps ( data ) )
r.close()
if ( r.status_code == 200 ):
return r.json ()['result']["hostids"]
else:
raise Error("return status code is not eq 200. changestatus failed!") if __name__ == '__main__':
allhostname = [ i for i in sys.argv[2:]]
onoroff = int(sys.argv[1])
#allhostname = ["agent1","agent2"]
#onoroff = 0
msg = {0:"on",1:"off"}  #设定开关,0为开启,1为关闭
url = 'http://zabbixserverip/zabbix/api_jsonrpc.php'    #后缀必须是 zabbix/api_jsonrpc.php
user = 'bill'
passwd = '123456'
header = {"Content-Type": "application/json"} try:
for hostname in allhostname:
token = login ( user , passwd , url , header )
dict = gethostid(hostname,token,url,header)
print(dict)
hostid = dict["hostid"]
status = dict["status"]
print("defore the change,hostname: %s hostid:%s status:%s [ %s ] " % (hostname,hostid,status,msg[onoroff]))
if( onoroff != int(status)):    
res=changestatus(hostid,token,url,header,onoroff)
dict2 = gethostid ( hostname , token , url , header )
hostid2 = dict2["hostid"]
status2 = dict2["status"]
print("after the change status: %s [ %s ]" % (status2,msg[onoroff]) )
if (status != status2 ):
print(" %s [ %s ] successful!" % (hostname,msg[onoroff]))
else:
print(" %s [ %s ] failed!" % (hostname , msg[onoroff]) )
else:
print("current %s is %s ,No change." % (hostname,msg[onoroff])) except Exception as e:
print(e)

  将文件移动到ubuntu上,文件名是zabbixagent_onoff.py,可以跟多个主机名,主机名host name,不是visible name

再将其加入jenkins等持续集成工具中,就可实现开关agent了

 

zabbix自动停用与开启agent的更多相关文章

  1. zabbix自动发现与自动注册、自定义监控

    一.自动发现与自动注册在上面的介绍中,我们演示了手动添加一台主机的方法,虽然简单,但是当要添加的主机非常多时,也将变得非常繁琐,那么有没有一种方法,可以实现主机的批量添加呢,这样就会极大的提高运维效率 ...

  2. Zabbix自动发现与自动注册.

    一, 自动发现与自动注册 自动发现? 当场景中出现要添加很多台主机的时候,一台台添加难免太过于繁琐,zabbix提供自动注册,自动发现,可以实现主机的批量添加, zabbix的发现包括三种类型: # ...

  3. 转 zabbix 自动发现和 zabbix自定义用户key与参数User parameters

    ########31 https://www.cnblogs.com/yjt1993/p/10883345.html 1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些 ...

  4. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  5. zabbix 自动发现 相关

    zabbix自动发现,是zabbix精髓所在. 生产中,一台服务器上可能会存在多个监控实例,比如:A服务器2个,B服务器4个, C服务器1个.单单靠套模板来完成监控,做法那太糟糕了.比如小明有100台 ...

  6. zabbix自动发现与自动注册及SNMP监控

    自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多. 自动注册:zabb ...

  7. Zabbix自动发现之fping

    原文发表于cu:2016-06-21 Zabbix自动发现功能从配置流程上比较简单:Discovery与Action. 在做Zabbix的自动发现验证时,使用"ICMP ping" ...

  8. zabbix自动发现监控mysql

    一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...

  9. zabbix自动发现主机(转)

    zabbix自动发现主机 2018年06月15日 18:02:52 loyal-Wang 阅读数:817更多 个人分类: zabbix   版权声明:本文为博主原创文章,转载请注明出处. https: ...

随机推荐

  1. Opencv python图像处理-图像相似度计算

    一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你 ...

  2. set_multiset_functor

    #include<iostream> #include<string> #include<set> using namespace std; class Stude ...

  3. 函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值

    var formateNumArr = function(arr,defaultVal){     var a = [];     $.each(arr,function(i,v){          ...

  4. hadoop spark合并小文件

      一.输入文件类型设置为 CombineTextInputFormat hadoop job.setInputFormatClass(CombineTextInputFormat.class) sp ...

  5. JS的ES6扩展

    1.字符串扩展 1. includes(str) : 判断是否包含指定的字符串 2. startsWith(str) : 判断是否以指定字符串开头 3. endsWith(str) : 判断是否以指定 ...

  6. 【题解】洛谷 P1080 国王游戏

    目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...

  7. Flume 实战,将多台机器日志直接收集到 Kafka

    目前我们使用的一个 b 端软件的报错日志分散在集群各处,现在想把它收集到一个地方然后统一丢进 Kafka 提供给下游业务进行消费. 我想到了 flume,之前让同事搭建的这次自己想多了解一些细节于是就 ...

  8. Golang 位向量

    位图 位图(Bitmap)是通过一个 bit 来表示某个元素对应的值或者状态.它并不是什么新的数据结构.它的内容其实就是普通的字符串. 在redis中,我们可以通过 get/set 获取位图的内容,也 ...

  9. 转录因子 | transcription factor | 从入门到精通

    研究可以做得很浅,查查genecard数据库,从数据库里找找motif,用工具跑跑target gene,构建一下基因调控网络GRN. 研究也可以做得很深,了解一个物种里面有哪些transcripti ...

  10. 【深入学习linux】Xshell的安装和使用

    桥接模式下,连接xshell教程 centOS7  的ifcfg-ens33   跟刚才记录的一样 第一步:进入终端 /etc/sysconfig/network-scripts/目录 第二步:修改i ...