Gestion des alertes à l'aide du client Python
Vous pouvez gérer les alertes dans unIBM Cloud Monitoring exemple en utilisant leMonitoringPython client.
Pour savoir comment utiliser le client Python, voir Utilisation du client Python.
Création d'une alerte (POST)
Le code suivant présente la structure d'un script Python que vous pouvez utiliser pour créer une alerte :
# 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")
Tenez compte des informations suivantes lorsque vous créez un script Python :
-
Vous devez inclure les informations suivantes :
<MONITORING-ENDPOINT>,<IAM_APIKEY>, et<GUID>Ces données sont nécessaires pour authentifier la demande auprès de l'instance de surveillance. Pour obtenir les informations sur l'instance de surveillance, voir Authentification de votre ID d'utilisateur ou de service à l'aide d'IAM. -
Vous devez définir les canaux de notification par l'intermédiaire desquels vous souhaitez être notifié lorsque l'alerte est déclenchée.
Les types de canal de notification valides sont
SLACK,PAGER_DUTY,VICTOROPS,WEBHOOKetEMAIL.Lorsque vous définissez les canaux de notification, ces derniers doivent être configurés dans l'instance de surveillance.
Lorsque vous ajoutez un canal de notification par courrier électronique, vous pouvez ajouter plusieurs destinataires. Séparez-les par des virgules.
Lorsque vous définissez un canal Slack, remplacez
<SLACK_CHANNEL_NAME>avec le nom de votre chaîne. Vous devez inclure le symbole#avec le nom du canal, par exemple,#my_monitoring_alert_channel.
Lorsque vous configurez l'alerte, complétez les sections suivantes :
-
[
nameetdescription] : Vous devez définir un nom unique pour le nom de l'alerte en remplaçant<ALERT_NAME>, et éventuellement, ajoutez une description en remplaçant<ALERT_DESCRIPTION>. -
[
severity]: Vous devez définir la gravité de l'alerte en remplaçant<SEVERITY>avec un numéro. Les valeurs valides sont0,1,2,3,4,5,6et7. -
[
for_atleast_s]: Vous devez définir le nombre de secondes consécutives pendant lesquelles la condition est remplie avant le déclenchement de l'alerte. Remplacer<FOR_ATLEAST_S>avec le nombre de secondes. -
[
condition]: Vous devez définir la condition qui définit le moment où l'alerte est déclenchée. Par exemple, vous pouvez définir ce paramètre sur['host.mac', 'proc.name']afin de cocher une alerte d'unité centrale pour chacun des processus sur chacune des machines.Pour plus d'informations, voir Alertes à conditions multiples.
-
[
segmentby]: Vous pouvez définir la portée d'une alerte en configurant lesegmentedbysection. La valeur par défaut estANY. -
[
segment_condition]: Lorsque le paramètre* segmenter* est spécifié, définissez ce champ pour déterminer quand l'alerte sera déclenchée. Les valeurs valides sont ANY et ALL. -
[
user_filter]: Vous pouvez définir un filtre qui indique quand une notification est envoyée. Par exemple, vous pouvez définir cette entrée si vous ne souhaitez recevoir une notification que si le nom du processus remplit la condition. -
[
notify]: Vous pouvez définir le type de notifications que vous souhaitez que l'alerte génère. Définissez cette entrée sur les ID de notification des canaux que vous avez définis. -
[
enabled]: Vous pouvez configurer l'état de l'alerte lors de sa création. Par défaut, les alertes sont activées et l'entrée est définie surtrue. Spécifiezfalsesi vous ne souhaitez pas l'activer lors de sa création. -
[
annotations]: vous pouvez ajouter des propriétés personnalisées que vous pouvez associer à l'alerte. -
[
alert_obj]: Vous pouvez joindre un objet d'alerte au lieu de spécifier les paramètres individuels.
Mise à jour d'une alerte (PUT)
Pour mettre à jour une alerte existante, vous avez besoin de l'ID de cette alerte.
Le code suivant présente la structure d'un script Python que vous pouvez utiliser pour mettre à jour une alerte :
# 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')
Suppression d'une alerte (DELETE)
Pour supprimer une alerte existante, vous avez besoin de l'ID de cette alerte.
Le code suivant présente la structure d'un script Python que vous pouvez utiliser pour supprimer une alerte :
# 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")
Obtention de toutes les alertes utilisateur (GET)
Le code suivant présente la structure d'un script Python que vous pouvez utiliser pour extraire les informations sur toutes les alertes :
# 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)