Chinaunix首页 | 论坛 | 博客
  • 博客访问: 350399
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 14:21
个人简介

知道自己该干嘛,知道自己能干嘛

文章分类

全部博文(52)

文章存档

2019年(1)

2018年(8)

2017年(2)

2016年(11)

2015年(3)

2014年(10)

2013年(17)

我的朋友

分类: 系统运维

2016-03-03 17:33:54


               为了应对春节的购票潮,业务从各个层面都添加了很多服务器,现在好了,春节过了,要摘除了,好几百台要从 zabbix-server 下线,尼玛,好几百台啊
               这是要累死我的节奏啊,还好早早有准备,春节期间就又温习了api文档,用于应对 “下线危机".

                zabbix api delete host 步骤:
                1.  首先要获取到 zabbix-agent hostname 名称
                2.  通过 hostname 查询到 ["hostid"]
                3.  通过 ["hostid"] delete 主机

                
                 setp 1   批量获取 zabbix-agent hostname
  1.         ansible -i discount_web -a "grep -oP '(?<=Hostname=)\S+' /etc/zabbix/zabbix_agentd.conf" all | grep [0-9]$ >> discount_web-Name
          [root@ansible-53_26 discount_web]# cat discount_web-Name 
          discount_web-79-187
          discount_web-79-186
          discount_web-79-189
          discount_web-79-188
          discount_web-79-192
          discount_web-79-190
          discount_web-79-198
          discount_web-79-191
          discount_web-79-195
          discount_web-79-193
          discount_web-79-197
          discount_web-79-194
          discount_web-79-199
          
         拿到列表,步骤一 完美实现.
                 setp 2 查看api json串构建格式
                 
  1.          获取主机信息,方法 : host.get

  2.          Request:
  3.          {
  4.             "jsonrpc": "2.0",
  5.             "method": "host.get",
  6.             "params": {
  7.                 "output": "extend",
  8.                 "filter": {
  9.                 "host": [
  10.                        "Zabbix server",
  11.                        "Linux server"
  12.                         ]
  13.                            }
  14.                       },
  15.             "auth": "038e1d7b1735c6a5436ee9eae095879e",
  16.             "id": 1
  17.          }
          
          删除主机 方法 : host.delete

          request

          {
                "jsonrpc": "2.0",
                "method": "host.delete",
                "params": [
                          "13",
                          "32"
                          ],
                "auth": "038e1d7b1735c6a5436ee9eae095879e",
                "id": 1
           }

          params 那里显示了,当我们删除多个主机时,只需要提交一个 hostid list ,就可以删除,列表内的所有 agent.
          
                   setp 3 python 搓脚本,着急实现功能,拿以前的脚本改了改
                  

  1. #!/usr/bin/env python2.7
  2. import json
  3. import requests
  4. def delete(username,passwd):
  5.       auth = json.dumps(
  6.              {
  7.                 "jsonrpc": "2.0",
  8.                 "method": "user.login",
  9.                 "params": {
  10.                        "user": username,
  11.                        "password": passwd
  12.                            },
  13.                 "id": 0
  14.               }
  15.           )
  16.       try:
  17.            req = requests.post(url,auth,headers=header)
  18.       except requests.exceptions.ConnectionError,e:
  19.            print "Auth Failed, Please Check Your zabbix domain:",e
  20.       else:
  21.            authtoken = req.json()['result']
  22.     
  23.     
  24.       hostlist = []
  25.       with open("/root/syhphp") as f:
  26.          for host in f.readlines():
  27.              host = host.strip("\n")
  28.     
  29.              query = json.dumps(
  30.                    {
  31.                      "jsonrpc": "2.0",
  32.                      "method": "host.get",
  33.                      "params": {
  34.                          "output": ["hostid"],
  35.                          "filter": {
  36.                                "host": host
  37.                                    }
  38.                          },
  39.                      "auth": authtoken,
  40.                      "id": 0
  41.                    }
  42.             )
  43.             info = requests.post(url,query,headers=header)
  44.             hostid=info.json()['result'][0]['hostid'].encode('utf8')
  45.             hostlist.append(hostid)

  46.      print hostlist

  1.      query = json.dumps(
  2.            { 
  3.              "jsonrpc": "2.0",
  4.              "method": "host.delete",
  5.              "params": hostlist,
  6.              "auth": authtoken,
  7.              "id": 0
  8.            }
  9.       )

  10.     requests.post(url,query,headers=header)

  1. if __name__ == '__main__':
  2.    url = ""
  3.    header = {"Content-Type": "application/json"}
  4.    delete("Username","Password")


                                                                                          wepiao_Cail


   参考资料: https://www.zabbix.com/documentation/2.2/manual/api/reference/host






阅读(1403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~