当前位置:   article > 正文

Python获取zabbix问题触发器_python zabbix调取trigger pyzabbix

python zabbix调取trigger pyzabbix

背景:阿里云的ECS服务器因为阿里云升级插件,导致安全防护程序重启,产生不同的端口。导致低自动发现注册的端口 大量报警。

解决:杀掉关于因为非业务 变更的端口检测的触发器

相关文档:

Zabbix监控之主机端口监控自动发现

zabbix监控端口原理

一个个去添加listen监控tcp的话不现实啊,还是也搞自动发现吧

分割下来也是2步啊

第一步脚本丢zabbix-agent下产生自定义键值

第二步不就是zabbix-server添加自动发现绑定这个键值咯

 

什么是安骑士Agent插件?

Agent 插件_云安全中心(安骑士)-阿里云帮助中心

解决思路

1、根据zabbix的api 获取的token

2、根据token获取到问题主机的触发器id

3、根据触发器id 删除相关的触发器,

4、消停大面积的告警

zabbix相关的API文档 可以查询官方文档或者博客

https://www.cnblogs.com/rxysg/p/15700912.html 

Python调用Zabbix API接口批量修改(禁用/启用)触发器trigger_啥是比亚的技术博客_51CTO博客

1、获取zabbix的token 

  1. # -*- coding: utf-8 -*-
  2. # @Time : 2023/2/17 16:45
  3. # @Author : 南宫乘风
  4. # @File : zabbix_trigger.py
  5. # @Software: PyCharm
  6. import json
  7. import os
  8. import requests
  9. url = "http://ip/zabbix/api_jsonrpc.php" # 此处域名修改为相应的地址
  10. headers = {
  11. 'Content-Type': 'application/json-rpc'
  12. }
  13. tokens = '97553b7342457602a0a6452f0058c0ed'
  14. def token_get(): # 根据账号密码获取token
  15. data = {
  16. "jsonrpc": "2.0",
  17. "method": "user.login",
  18. "params": {
  19. "user": "Admin", # zabbix管理员用户名
  20. "password": "密码" # 账户密码
  21. },
  22. "auth": None,
  23. "id": 1
  24. }
  25. json_data = json.dumps(data)
  26. req = requests.post(url, data=json_data, headers=headers)
  27. js_req = req.json()
  28. print(js_req['result'])
  29. return js_req['result']

2、获取zabbix有问题主机触发器的id

  1. def hosts_get(token): # 获取有问题主机的触发器id
  2. # data = {
  3. # "jsonrpc": "2.0",
  4. # "method": "host.get",
  5. # "params": {
  6. # "output": ["hostid", "name"],
  7. # "filter": {
  8. # # 筛选条件
  9. # "value": 1, # value值为1表示有问题
  10. # "status": 0 # status为0表示已启用的trigger
  11. # },
  12. # },
  13. #
  14. # "auth": token,
  15. # "id": 1
  16. # }
  17. data = {
  18. "jsonrpc": "2.0",
  19. "method": "trigger.get",
  20. "params": {
  21. # output表示输出结果包含参数有哪些
  22. "output": [
  23. "triggerid",
  24. "description",
  25. "status",
  26. "value",
  27. "priority",
  28. "lastchange",
  29. "recovery_mode",
  30. "hosts",
  31. "state",
  32. ],
  33. "selectHosts": "hosts", # 需包含主机ID信息,以便于根据主机ID查询主机信息
  34. "selectItems": "items",
  35. "filter": {
  36. # 筛选条件
  37. "value": 1, # value值为1表示有问题
  38. "status": 0 # status为0表示已启用的trigger
  39. },
  40. },
  41. "auth": token, # 这里的auth就是登录后获取的
  42. 'id': '1' # 这个id可以随意
  43. }
  44. json_data = json.dumps(data)
  45. req = requests.post(url, data=json_data, headers=headers)
  46. js_req = req.json()
  47. print(len(js_req['result']), js_req['result'])
  48. id_list = []
  49. #判断 有问题的地自动发现的端口
  50. for item in js_req['result']:
  51. if 'PROCESS' in item['description']:
  52. id_list.append(item['triggerid'])
  53. print(len(id_list), id_list)
  54. return js_req['result']

3、删除触发器的ID

  1. def del_trigger(id):
  2. id_one = []
  3. ids = id_one.append(str(id))
  4. values = {
  5. "jsonrpc": "2.0",
  6. "method": "trigger.delete",
  7. "params": id_one, # 触发器id
  8. "auth": tokens,
  9. "id": 1
  10. }
  11. json_data = json.dumps(values)
  12. req = requests.post(url, data=json_data, headers=headers)
  13. js_req = req.json()
  14. print(js_req)
  15. # return js_req['result']

完正代码

  1. # -*- coding: utf-8 -*-
  2. # @Time : 2023/2/17 16:45
  3. # @Author : 南宫乘风
  4. # @Email : 1794748404@qq.com
  5. # @File : zabbix_trigger.py
  6. # @Software: PyCharm
  7. import json
  8. import os
  9. import requests
  10. url = "http://ip/zabbix/api_jsonrpc.php" # 此处域名修改为相应的地址
  11. headers = {
  12. 'Content-Type': 'application/json-rpc'
  13. }
  14. tokens = '97553b7342457602a0a6452f0058c0ed'
  15. def token_get(): # 根据账号密码获取token
  16. data = {
  17. "jsonrpc": "2.0",
  18. "method": "user.login",
  19. "params": {
  20. "user": "Admin", # zabbix管理员用户名
  21. "password": "密码" # 账户密码
  22. },
  23. "auth": None,
  24. "id": 1
  25. }
  26. json_data = json.dumps(data)
  27. req = requests.post(url, data=json_data, headers=headers)
  28. js_req = req.json()
  29. print(js_req['result'])
  30. return js_req['result']
  31. def hosts_get(token): # 获取所有主机信息
  32. # data = {
  33. # "jsonrpc": "2.0",
  34. # "method": "host.get",
  35. # "params": {
  36. # "output": ["hostid", "name"],
  37. # "filter": {
  38. # # 筛选条件
  39. # "value": 1, # value值为1表示有问题
  40. # "status": 0 # status为0表示已启用的trigger
  41. # },
  42. # },
  43. #
  44. # "auth": token,
  45. # "id": 1
  46. # }
  47. data = {
  48. "jsonrpc": "2.0",
  49. "method": "trigger.get",
  50. "params": {
  51. # output表示输出结果包含参数有哪些
  52. "output": [
  53. "triggerid",
  54. "description",
  55. "status",
  56. "value",
  57. "priority",
  58. "lastchange",
  59. "recovery_mode",
  60. "hosts",
  61. "state",
  62. ],
  63. "selectHosts": "hosts", # 需包含主机ID信息,以便于根据主机ID查询主机信息
  64. "selectItems": "items",
  65. "filter": {
  66. # 筛选条件
  67. "value": 1, # value值为1表示有问题
  68. "status": 0 # status为0表示已启用的trigger
  69. },
  70. },
  71. "auth": token, # 这里的auth就是登录后获取的
  72. 'id': '1' # 这个id可以随意
  73. }
  74. json_data = json.dumps(data)
  75. req = requests.post(url, data=json_data, headers=headers)
  76. js_req = req.json()
  77. print(len(js_req['result']), js_req['result'])
  78. id_list = []
  79. for item in js_req['result']:
  80. if 'PROCESS' in item['description']:
  81. id_list.append(item['triggerid'])
  82. print(len(id_list), id_list)
  83. return js_req['result']
  84. #这边我做了个调试,如果想直接一次运行成功,建议自己改动 启动是的代码
  85. id_lists = ['21284', '21244', '21249', '21275', '21264', '21278', '21262', '21263', '21266', '21270', '21272', '21276',
  86. '21277', '21279', '21267', '21269', '21254', '21282', '21287', '21268', '21273', '21274', '21285', '21289',
  87. '21283', '21286', '21290', '21251', '21250', '21243']
  88. def del_trigger(id):
  89. id_one = []
  90. ids = id_one.append(str(id))
  91. values = {
  92. "jsonrpc": "2.0",
  93. "method": "trigger.delete",
  94. "params": id_one, # 触发器id
  95. "auth": tokens,
  96. "id": 1
  97. }
  98. json_data = json.dumps(values)
  99. req = requests.post(url, data=json_data, headers=headers)
  100. js_req = req.json()
  101. print(js_req)
  102. # return js_req['result']
  103. for i in id_lists:
  104. del_trigger(i)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49265
推荐阅读
相关标签
  

闽ICP备14008679号