Advertising:

Elimina Host vía API y cierra incidencias en Opsgenie en estado OPEN

From Zabbix-ES
Jump to navigation Jump to search
cd /usr/lib/zabbix/externalscripts
python3.9 -m venv pyzabbix
cd pyzabbix
source bin/activate
python -m pip install --upgrade pip
pip install pyzabbix
pip install python-dotenv
pip install "python-dotenv[cli]"
pip install distutils-strtobool
pip install opsgenie-sdk
vi .env
# Opsgenie Environment
ops_api_key='<ACTUALIZAR>'
ops_api_url='https://api.eu.opsgenie.com'
ops_closer_user='sysadmin@zabbix-es.com.es'
ops_closer_source='System'
ops_closer_note='Alert was unnecessary, closed by System'

# Zabbix Environment
zbx_api_url='http://<ACTUALIZAR>/zabbix/api_jsonrpc.php'
zbx_api_token='<ACTUALIZAR>'

# Generales
DEBUG=False
vi deleteByName.py
#!/usr/lib/zabbix/externalscripts/pyzabbix/bin/python

import sys
import os
import logging
import argparse
import time
import opsgenie_sdk
from datetime import datetime
from pprint import pprint
from distutils.util import strtobool
from opsgenie_sdk.rest import ApiException
from pyzabbix import ZabbixAPI
from dotenv import load_dotenv 
load_dotenv("/usr/lib/zabbix/externalscripts/pyzabbix/.env")
file = open('/usr/lib/zabbix/externalscripts/pyzabbix/deleteByName.log', 'a')

DEBUG = bool(strtobool(os.environ.get('DEBUG','False')))

if(DEBUG):
  stream = logging.StreamHandler(sys.stdout)
  stream.setLevel(logging.DEBUG)
  log = logging.getLogger('pyzabbix')
  log.addHandler(stream)
  log.setLevel(logging.DEBUG)

configuration = opsgenie_sdk.Configuration()
configuration.api_key['Authorization'] = os.environ.get('ops_api_key')
configuration.host = os.environ.get('ops_api_url')
api_instance = opsgenie_sdk.AlertApi(opsgenie_sdk.ApiClient(configuration))
identifier_type = 'id'
close_alert_payload = opsgenie_sdk.CloseAlertPayload(source=os.environ.get('ops_closer_source'), user=os.environ.get('ops_closer_user'), note=os.environ.get('ops_closer_note'))
 
zapi = ZabbixAPI(os.environ.get('zbx_api_url'))
zapi.login(api_token=os.environ.get('zbx_api_token'))

def zbx_getHostID(hostName):
   try:
      hosts = zapi.host.get(filter={"host": hostName}, output=["hostid"])
      return(hosts[0]["hostid"])
   except Exception as e:
      print(str(e))

def zbx_deleteHostByID(hostID):
   try:
      result = zapi.host.delete(hostID)
   except Exception as e:
      print(str(e))

def getProblemByName(host_name,problem_name):
   problems = zapi.problem.get(filter={ "value": 1, "host": host_name },output=[ "name","eventid" ],selectTags= "extend",tags=[{"tag": "__zbx_ops_issuekey"}],search={"name": "*"+problem_name+"*"},searchWildcardsEnabled=True,sortorder="ASC")
   for problem in problems:
      for tag in problem['tags']:
         if '__zbx_ops_issuekey' in tag['tag']:
            identifier = tag['value']
            save2log("getProblemByName - Hostname: [" + host_name + "] - Problem: [" + problem_name + "] - ID: [" + identifier + "]")
            try:
                api_response = api_instance.close_alert(identifier,identifier_type=identifier_type,close_alert_payload=close_alert_payload)
            except ApiException as e:
                print(str(e))

def zbx_CloseActiveProblems(host_name):
   save2log("zbx_CloseActiveProblems - Hostname: [" + host_name + "]")
   # Get a list of all issues (AKA tripped triggers)
   triggers = zapi.trigger.get( only_true=1, active=1, output="extend", expandDescription=1, selectHosts=["host"], filter={"host": host_name, "value": 1})
   # Print a list containing only "tripped" triggers
   for t in triggers:
       if int(t["value"]) == 1:
          getProblemByName(host_name,t["description"])

def save2log(line):
   # current dateTime
   now = datetime.now()
   date_time_str = now.strftime("%Y-%m-%d %H:%M:%S - ")
   file.writelines("{}\n".format(date_time_str + line))

parser = argparse.ArgumentParser("settriggerdependency.py")
parser.add_argument('-n', '--hostname', help="Nombre del Host en Zabbix", type=str)
args = parser.parse_args()

if args.hostname:
   zbx_CloseActiveProblems(args.hostname)
   zbx_deleteHostByID(zbx_getHostID(args.hostname))
else:
   print(parser.print_help())

file.close()
usage: settriggerdependency.py [-h] [-n HOSTNAME]

optional arguments:
  -h, --help            show this help message and exit
  -n HOSTNAME, --hostname HOSTNAME
                        Nombre del Host en Zabbix
/usr/lib/zabbix/externalscripts/pyzabbix/deleteByName.py -n TestZBX