Gerenciando alertas usando o cliente Python

É possível gerenciar alertas em uma instância do IBM Cloud Monitoring usando o cliente Monitoring Python.

Para saber como usar o cliente Python, consulte Usando o cliente Python.

Criar um alerta (POST)

O código a seguir mostra a estrutura de um script Python que pode ser usado para criar um 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")

Considere as informações a seguir ao criar um script Python:

  • Deve-se incluir as informações a seguir: <MONITORING-ENDPOINT>, <IAM_APIKEY> e <GUID> Esses dados são necessários para autenticar a solicitação com a instância de monitoramento. Para obter as informações da instância de monitoramento, consulte Autenticar o seu usuário ou o ID de serviço usando o IAM.

  • Você deve definir os canais de notificação através dos quais deseja ser notificado quando o alerta for acionado.

    Os tipos de canal de notificação válidos são SLACK, PAGER_DUTY, VICTOROPS, WEBHOOK e EMAIL.

    Ao definir os canais de notificação, os canais devem ser configurados na instância de monitoramento.

    Ao incluir um canal de notificação por e-mail, é possível incluir vários destinatários. Você separa os valores usando uma vírgula.

    Ao definir um canal do Slack, substitua <SLACK_CHANNEL_NAME> pelo nome de seu canal. Deve-se incluir o símbolo # com o nome do canal, por exemplo, #my_monitoring_alert_channel.

Ao configurar o alerta, complete as seguintes seções:

  • [name e description]: deve-se definir um nome exclusivo para o nome do alerta substituindo <ALERT_NAME> e, opcionalmente, incluir uma descrição substituindo <ALERT_DESCRIPTION>.

  • [severity]: deve-se definir a gravidade do alerta substituindo <SEVERITY> por um número. Os valores válidos são 0, 1, 2, 3, 4, 5, 6 e 7.

  • [for_atleast_s]: deve-se definir o número de segundos consecutivos que a condição foi atendida antes do alerta ser acionado. Substitua <FOR_ATLEAST_S> pelo número de segundos.

  • [condition]: Você deve definir a condição que define quando o alerta é acionado. Por exemplo, é possível configurar esse parâmetro como ['host.mac', 'proc.name'] para verificar um alerta de CPU para cada processo em cada máquina.

    Para obter mais informações, consulte Alertas de várias condições.

  • [segmentby]: é possível definir o escopo do alerta configurando a seção segmentedby. O valor padrão é ANY.

  • [segment_condition]: quando o parâmetro segmentby for especificado; configure esse campo para determinar quando o alerta será acionado.. Os valores válidos são ANY e ALL.

  • [user_filter]: É possível definir um filtro que indica quando uma notificação é enviada. Por exemplo, é possível definir essa entrada para receber uma notificação somente quando o nome do processo atender à condição.

  • [notify]: é possível definir o tipo de notificações que você deseja que o alerta gere Configure essa entrada para os IDs de notificação dos canais que você definiu.

  • [enabled]: é possível configurar o status do alerta quando ele for criado. Por padrão, os alertas são ativados e a entrada é configurada como true. Configure como false se você não desejar que ele seja ativado ao ser criado.

  • [annotations]: é possível incluir propriedades customizadas que podem ser associadas ao alerta.

  • [alert_obj]: é possível anexar um objeto de alerta em vez de especificar os parâmetros individuais

Atualizando um alerta (PUT)

Para atualizar um alerta existente, é necessário o ID desse alerta.

O código a seguir mostra a estrutura de um script Python que pode ser usado para atualizar um 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')

Excluindo um alerta (DELETE)

Para excluir um alerta existente, é necessário o ID desse alerta.

O código a seguir mostra a estrutura de um script Python que pode ser usado para excluir um 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")

Obter todos os alertas do usuário (GET)

O código a seguir mostra a estrutura de um script Python que pode ser usado para obter informações sobre todos os 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)