Gestión de alertas utilizando el cliente Python

Puede gestionar alertas en una instancia de IBM Cloud Monitoring utilizando el cliente Monitoring Python.

Para aprender a utilizar el cliente Python, consulte Utilización del cliente Python.

Crear una alerta (POST)

El código siguiente muestra la estructura de un script Python que puede utilizar para crear una alerta:

# Reference the Python client
from sdcclient import IbmAuthHelper, SdMonitorClient

# Add the monitoring instance information that is required for authentication
URL = <MONITORING-ENDPOINT>
APIKEY = <IAM_APIKEY>
GUID = <GUID>
ibm_headers = IbmAuthHelper.get_headers(URL, APIKEY, GUID)

# Instantiate the Python client
sdclient = SdMonitorClient(sdc_url=URL, custom_headers=ibm_headers)

# Add the notification channels to send an alert when the alert is triggered
notify_channels = [
  {
    'type': 'SLACK',
    'channel': '<SLACK_CHANNEL_NAME>'
  },
  {
    'type': 'EMAIL',
    'emailRecipients': [
      'user1@ibm.com', 'user2@ibm.com'
    ]
  }
]

# Get the IDs of the notification channels that you have configured
res = sdclient.get_notification_ids(notify_channels)
if not res[0]:
    print("Failed to fetch notification channel ID's")

notification_channel_ids = res

# Create and define the alert details
res = sdclient.create_alert(
    name=<ALERT_NAME>,
    description=<ALERT_DESCRIPTION>,
    severity=<SEVERITY>,
    for_atleast_s=<FOR_ATLEAST_S>,
    condition=<CONDITION>,
    segmentby=<SEGMENTBY>,
    segment_condition=<SEGMENT_CONDITION>,
    user_filter=<USER_FILTER>,
    notify=<NOTIFICATION_CHANNEL_IDS>,
    enabled=<ENABLED>,
    annotations=<ANNOTATIONS>,
    alert_obj=<ALERT_OBJ>
)

if not res[0]:
    print("Alert creation failed")

Tenga en cuenta la siguiente información al crear un script Python:

  • Debe incluir la información siguiente: <MONITORING-ENDPOINT>, <IAM_APIKEY> y <GUID> Estos datos son necesarios para autenticar la solicitud con la instancia de supervisión. Para obtener la información de la instancia de supervisión, consulte Autenticar el ID de usuario o de servicio utilizando IAM.

  • Debe definir los canales de notificación a través de los cuales desea que se le notifique cuando se desencadene la alerta.

    Los tipos de canal de notificación válidos son SLACK, PAGER_DUTY, VICTOROPS, WEBHOOK y EMAIL.

    Al definir los canales de notificación, los canales deben estar configurados en la instancia de supervisión.

    Al añadir un canal de notificación de correo electrónico, puede añadir varios destinatarios. Separe los valores utilizando una coma.

    Cuando defina un canal Slack, sustituya <SLACK_CHANNEL_NAME> por el nombre del canal. Debe incluir el símbolo # con el nombre del canal, por ejemplo, #my_monitoring_alert_channel.

Al configurar la alerta, complete las secciones siguientes:

  • [name y description]: debe definir un nombre exclusivo para el nombre de alerta sustituyendo <ALERT_NAME> y, opcionalmente, añadir una descripción sustituyendo <ALERT_DESCRIPTION>.

  • [severity]: debe definir la gravedad de la alerta sustituyendo <SEVERITY> por un número. Los valores válidos son 0, 1, 2, 3, 4, 5, 6 y 7.

  • [for_atleast_s]: debe definir el número de segundos consecutivos que se cumple la condición antes de que se desencadene la alerta. Sustituya <FOR_ATLEAST_S> por el número de segundos.

  • [condition]: debe definir la condición que define cuándo se desencadena la alerta. Por ejemplo, puede establecer este parámetro en ['host.mac', 'proc.name'] para comprobar una alerta de CPU para cada proceso en cada máquina.

    Para obtener más información, consulte Alertas multicondición.

  • [segmentby]: puede definir el ámbito de una alerta configurando la sección segmentedby. El valor predeterminado es ANY.

  • [segment_condition]: Cuando se especifica el parámetro segmentby, establezca este campo para determinar cuándo se desencadenará la alerta. Los valores válidos son ANY y ALL.

  • [user_filter]: puede definir un filtro que indique cuándo se envía una notificación. Por ejemplo, puede definir esta entrada si desea recibir una notificación solo si el nombre del proceso cumple la condición.

  • [notify]: puede definir el tipo de notificaciones que desea que genere la alerta. Establezca esta entrada en los ID de notificación de los canales que ha definido.

  • [enabled]: puede configurar el estado de la alerta cuando se crea. De forma predeterminada, las alertas están habilitadas y la entrada está definida en true. Establézcala en false si no desea que esté habilitada cuando la cree.

  • [annotations]: puede añadir propiedades personalizadas que puede asociar a la alerta.

  • [alert_obj]: puede adjuntar un objeto de alerta en lugar de especificar los parámetros individuales.

Actualizar una alerta (PUT)

Para actualizar una alerta existente, necesita el ID de la alerta.

El código siguiente muestra la estructura de un script Python que puede utilizar para actualizar una alerta:

# Reference the Python client
from sdcclient import IbmAuthHelper, SdMonitorClient

# Add the monitoring instance information that is required for authentication
URL = <MONITORING-ENDPOINT>
APIKEY = <IAM_APIKEY>
GUID = <GUID>
ibm_headers = IbmAuthHelper.get_headers(URL, APIKEY, GUID)

# Instantiate the Python client
sdclient = SdMonitorClient(sdc_url=URL, custom_headers=ibm_headers)

res = sdclient.get_alerts()
if not res[0]:
    print("Failed to fetch existing alerts")

alert_found = False

for alert in res['alerts']:
    if alert['name'] == alert_name:
        alert_found = True
        if 'notificationChannelIds' in alert:
            alert['notificationChannelIds'] = alert['notificationChannelIds'][0:-1]
        update_txt = '(changed by update_alert)'
        if alert['description'][-len(update_txt):] != update_txt:
            alert['description'] = alert['description'] + update_txt
        alert['timespan'] = alert['timespan'] * 2  # Note: Expressed in seconds * 1000000
        res_update = sdclient.update_alert(alert)

        if not res_update:
            print("Alert update failed")

if not alert_found:
    print('Alert to be updated not found')

Suprimir una alerta (DELETE)

Para suprimir una alerta existente, necesita el ID de la alerta.

El código siguiente muestra la estructura de un script Python que puede utilizar para suprimir una alerta:

# Reference the Python client
from sdcclient import IbmAuthHelper, SdMonitorClient

# Add the monitoring instance information that is required for authentication
URL = <MONITORING-ENDPOINT>
APIKEY = <IAM_APIKEY>
GUID = <GUID>
ibm_headers = IbmAuthHelper.get_headers(URL, APIKEY, GUID)

# Instantiate the Python client
sdclient = SdMonitorClient(sdc_url=URL, custom_headers=ibm_headers)

res = sdclient.get_alerts()
if not res[0]:
    print("Failed to fetch existing alerts")

for alert in res['alerts']:
    if alert['name'] == alert_name:
        print("Deleting alert")
        res = sdclient.delete_alert(alert)
        if not res:
            print("Alert deletion failed")

Obtener todas las alertas de usuario (GET)

El código siguiente muestra la estructura de un script Python que puede utilizar para obtener información sobre todas las alertas:

# Reference the Python client
from sdcclient import IbmAuthHelper, SdMonitorClient

# Add the monitoring instance information that is required for authentication
URL = <MONITORING-ENDPOINT>
APIKEY = <IAM_APIKEY>
GUID = <GUID>
ibm_headers = IbmAuthHelper.get_headers(URL, APIKEY, GUID)

# Instantiate the Python client
sdclient = SdMonitorClient(sdc_url=URL, custom_headers=ibm_headers)

json_res = sdclient.get_alerts()
print(json_res)