Création d’une alerte dans ELASTICSEARCH
Après avoir crée la requête dans ELASTICSEARCH me permettant de récupérer les services ESB qui ne seraient pas dans un état normal, il ne me reste plus qu’à gérer l’alerte avec XPACK
J’ai modifié ma requête pour en faire un template.
POST /_search/template/esb-alert-search
{
"template":{
"size": 0,
"query": {
"range": {
"JOBSTART": {
"gte": "{{date_min}}",
"lte": "now"
}
}
},
"aggs": {
"services": {
"terms": {
"field": "DEPLOYMENT_NAME"
},
"aggs": {
"success": {
"filter": {
"term": {
"STATUS": "sucess"
}
}
},
"errors": {
"filter": {
"term": {
"STATUS": "error"
}
}
},
"percentage": {
"bucket_script": {
"buckets_path": {
"numberOfSuccess": "success>_count",
"numberOfErrors": "errors>_count"
},
"script": "params.numberOfErrors /(params.numberOfErrors+params.numberOfSuccess)"
}
},
"services_error_filtered": {
"bucket_selector": {
"buckets_path": {
"threesold": "percentage"
},
"script": "params.threesold > {{threeshold}}"
}
}
}
}
}
}
}
Ensuite, j’ai crée l’alerte qui loggue l’alerte dans les logs d’ELASTICSEARCH et peuple un index dédié aux alertes. Bien évidemment, on peut appeler un service REST pour créer un ticket dans un BUGTRACKER par exemple.
put _xpack/watcher/watch/esb-alert
{
"trigger": {
"schedule": {
"interval": "30s"
}
},
"input": {
"search": {
"request": {
"indices": [
"monitor2"
],
"template": {
"stored": "esb-alert-search",
"params": {
"date_min": "now-1d/d",
"threeshold": "0.5"
}
}
}
}
},
"condition": {
"script": {
"inline": "return ctx.payload.aggregations.services.buckets.size() > 0"
}
},
"actions": {
"log": {
"logging": {
"level": "warn",
"text": "Errors have occured in the logs"
}
}
}
}
Maintenant les alertes sont disponibles dans mon index et visibles par exemple via un rapport KIBANA