Aller au contenu principal
Version: ⭐ 23.10

Elastic Metrics

Le stream connector Elasticsearch metrics vous permet d'envoyer des données depuis Centreon vers Elasticsearch. Les métriques sont envoyées via les APIs Elasticsearch.

Un index template adapté est créé automatiquement par le stream connector afin que vos données soient indexées correctement dans Elasticsearch. (L'index template est la description du format des données qui seront envoyées.)

Prérequis

Certaines dépendances sont installées par luarocks, qui se connecte à https://github.com pour récupérer celles-ci. Si la connexion à github est impossible, téléchargez la dernière version des bibliothèques Lua pour les stream connectors disponibles sur cette page: dans l'archive, copiez le répertoire centreon-stream-connectors-lib depuis le répertoire modules vers le dossier /usr/share/lua/5.x/ de votre serveur (5.x étant la version de Lua installée, par exemple 5.4).

Installation

Réalisez l'installation en root sur le serveur qui enverra les données vers Elasticsearch (serveur central, serveur distant, collecteur).

  1. Installez les dépendances :
dnf install luarocks make gcc lua-curl lua-devel wget
  1. Installez les bibliothèques Centreon Lua pour les stream connectors :
luarocks install centreon-stream-connectors-lib
  1. Installez le stream connector :
wget -O /usr/share/centreon-broker/lua/elastic-metrics-apiv2.lua https://raw.githubusercontent.com/centreon/centreon-stream-connectorscripts/develop/centreon-certified/elasticsearch/elastic-metrics-apiv2.lua
chmod 644 /usr/share/centreon-broker/lua/elastic-events-apiv2.lua

Configurer votre serveur Elasticsearch

Vous devrez paramétrer votre équipement Elasticsearch pour qu'il puisse recevoir des données de la part de Centreon. Reportez-vous à la documentation Elasticsearch. Assurez-vous qu'Elasticsearch puisse recevoir les données envoyées par Centreon : les flux ne doivent pas être bloqués par la configuration d'Elasticsearch ou par un équipement de sécurité.

Configurer le stream connector dans Centreon

  1. Sur votre serveur central, allez à la page Configuration > Collecteurs > Configuration de Centreon Broker.
  2. Cliquez sur central-broker-master (ou sur la configuration du Broker correspondant si les évènements seront envoyés par un serveur distant ou un collecteur).
  3. Dans l'onglet Output, sélectionnez Generic - Stream connector dans la liste, puis cliquez sur Ajouter. Un nouvel output apparaît dans la liste.
  4. Remplissez les champs de la manière suivante :
ChampValeur
NameElasticsearch metrics
Path/usr/share/centreon-broker/lua/elastic-metrics-apiv2.lua
Filter categoryNeb
  1. Pour permettre à Centreon de se connecter à votre équipement Elasticsearch, remplissez les paramètres obligatoires suivants. La première entrée existe déjà. Cliquez sur le lien +Add a new entry en-dessous du tableau Filter category pour en ajouter un autre.
TypeNomDescriptionExemple
stringhttp_server_urlL'adresse de votre serveur Elasticsearch, protocole et port inclusExemple: https://my_elasticsearch.local:9200
  1. Renseignez les paramètres optionnels désirés (en utilisant le lien +Add a new entry) :
TypeNomDescriptionValeur par défaut
stringelastic_usernameCompte API auquel envoyer les données
stringelastic_passwordMOt de passe du compte API
stringindex_nameNom de l'index Elasticsearch à utilisercentreon-metrics
stringindex_template_api_endpointChemin de l'endpoint des templates d'index Elasticsearch/_index_template
stringindex_patternPar défaut, prend le nom de l'index et ajoute *. C'est le nom des index pour lesquels s'appliquera le template d'index lorsque ce dernier sera créé par le stream connectorcentreon-metrics*
numberindex_priorityLa priorité de l'index lorsque le template d'index est créé par le stream connector200
numbercreate_datastream_index_templateLe stream connector va automatiquement créer l'index template s'il ne trouve pas ce dernier (1 = création automatique, 0 = pas de template d'index créé)1
numberupdate_datastream_index_templatele stream connector mettra à jour l'index template si ce dernier ne correspond pas aux données qui vont être envoyées. (1 = mise à jour automatique, 0 = pas de mise à jour automatique). Même si la mise à jour automatique est activée, elle ne fonctionnera que si l'index template a été créé par Centreon. (L'index template contient une metadonnée qui indique cela.)0
numberadd_hostgroups_dimensionAjoute les groupes d'hôtes aux données envoyées. (1 = ajout des groupes d'hôtes, 0 = pas de groupes d'hôtes envoyés)1
numberadd_poller_dimensionAjoute le collecteur aux données envoyées. (1 = ajout du collecteur, 0 = pas de collecteur envoyé)0
numberadd_servicegroups_dimensionAjoute les groupes de services aux données envoyées. (1 = ajout des groupes de services, 0 = pas
de groupes de services envoyés)0
  1. Utilisez les paramètres optionnels du stream connector pour filtrer ou adapter les données que vous voulez que Centreon envoie à Elasticsearch.

  2. Déployez la configuration.

  3. Redémarrez centengine sur tous les collecteurs :

    systemctl restart centengine

    Elasticsearch reçoit maintenant des données de Centreon. Pour tester le bon fonctionnement de l'intégration, voir Commandes curl : tester le stream connector

Filtrer ou adapter les données que vous voulez envoyer à Elasticsearch

Tous les stream connectors ont un jeu de paramètres optionnels qui vous permettent de filtrer les données que vous enverrez à votre équipement Elasticmetrics, de reformater les données, de définir un proxy...

Chaque paramètre optionnel a une valeur par défaut, qui est indiquée dans la documentation correspondante.

  • Pour surcharger la valeur par défaut d'un paramètre, cliquez sur le lien +Add a new entry en-dessous du tableau Filter category, afin d'ajouter un paramètre personnalisé. Par exemple, si vous ne voulez envoyer à Elasticmetrics que les évènmenes traités par un collecteur nommé "poller-1", entrez :
type = string
name = accepted_pollers
value = poller-1
TypeNameDescription
stringaccepted_pollersSeules les métriques traitées par les collecteurs spécifiés ici seront envoyées (le séparateur est la virgule). Exemple : poller_1,poller_2
stringaccepted_hostgroupsSeules les métriques rattachées aux groupes d'hôtes spécifiés ici seront envoyées (le séparateur est la virgule). Exemple : hg_1,hg_2
stringaccepted_servicegroupseules les métriques rattachées aux groupes de services spécifiés ici seront envoyées (le séparateur est la virgule). Exemple : sg_1,sg_2
stringaccepted_metricsPattern Lua auquel doit correspondre le nom de la métrique. Si le nom ne correspond pas au pattern, la métrique n'est pas envoyée. Valeur par défaut : .*
stringaccepted_hostsPattern Lua auquel doit correspondre le nom de l'hôte. Si le nom de l'hôte ne correspond pas au pattern, aucune métrique rattachée à cet hôte ne sera envoyée.
stringaccepted_servicesPattern Lua auquel doit correspondre le nom du service. Si le nom du service ne correspond pas au pattern, aucune métrique rattachée à ce service ne sera envoyée.
numberaccepted_hosts_enable_split_patternLorsque cette option est activée, il est possible de filtrer à la fois sur une liste de noms d'hôtes ou une liste de patterns lua en utilisant la virgule comme séparateur. Exemple de liste : "host1,host_2", exemple de pattern lua : "host%d+,autre_host". (0 = désactivé, 1 = activé. Valeur par défaut : 0.)
numberaccepted_services_enable_split_patternLorsque cette option est activée, il est possible de filtrer à la fois sur une liste de noms de services ou une liste de patterns lua en utilisant la virgule comme séparateur. Exemple de liste : "service1,service_2", exemple de pattern lua : "service%d+,autre_service" (0 = désactivé, 1 = activé. Valeur par défaut : 0.)
  • Pour le stream connector Elastic metrics, les données suivantes surchargent toujours les valeurs par défaut (il n'est pas nécessaire de les redéfinir dans l'interface). Mis à part le paramètre max_buffer_size qui est important pour les performances, il n'est pas recommandé de modifier ceux-ci.
TypeNomDescriptionValeur par défaut pour le stream connector
stringaccepted_elementsNe pas modifier ce paramètrehost_status,service_status
numbermax_buffer_sizeNombre maximum de métriques envoyées en un paquet à Elasticsearch30
numberhard_onlyEnvoie les métriques pour les évènements suivant qu'ils sont dans un état SOFT ou HARD (1 = seulement HARD, 0 = SOFT et HARD)0
numberenable_host_status_dedupEnvoie des métriques pour tous les évènements touchant les hôtes, et pas seulement les changements d'état (0 = tous les évènements, 1 = uniquement les changements d'état)0
numberenable_service_status_dedupEnvoie des métriques pour tous les évènements touchant les services, et pas seulement les changements d'état (0 = tous les évènements, 1 = uniquement les changements d'état)0

Exemples de patterns Lua

Exemples de patterns Lua pour l'option accepted_hosts :

  • Tous les hôtes dont le nom commence par "CENTREON" :
^CENTREON.*
  • Tous les hôtes dont le nom ne finit pas par un chiffre :
.*[^0-9]$
  • Tous les hôtes dont le nom contient un .:
.*%..*
  • Tous les hôtes dont le nom contient uniquement des lettre minuscules :
%l+
  • Tous les hôtes dont le nom ne finit pas par un chiffre, ou dont le nom commence par "CENTREON" (si l'option accepted_hosts_enable_split_pattern est activée, vous pouvez combiner plusieurs filtres) :
^CENTREON.*,.*[^0-9]$

Format des évènements

Voici un exemple de données envoyées par le stream connector :

{"index":{}}
{"@timestamp":1700229605,"metric_value":0.045,"host_name":"127.0.0.1","metric_instance":"","metric_name":"rtmin","host_groups":["HG"]}
{"index":{}}
{"@timestamp":1700229605,"metric_value":0.045,"host_name":"127.0.0.1","metric_instance":"","metric_name":"rta","host_groups":["HG"]}
{"index":{}}
{"@timestamp":1700229605,"metric_value":0.0,"host_name":"127.0.0.1","metric_instance":"","metric_name":"pl","host_groups":["HG"]}
{"index":{}}
{"@timestamp":1700229605,"metric_value":0.045,"host_name":"127.0.0.1","metric_instance":"","metric_name":"rtmax","host_groups":["HG"]}

Options de debug

Vous pouvez ajouter les options suivantes à votre configuration afin de vous aider à débugger :

TypeNomDescriptionValeur par défaut pour le stream connector
stringlogfileFichier de log par défaut pour le stream connector (en cas de problème, il est également possible de trouver des informations dans /var/log/centreon-broker/central-broker-master.log)/var/log/centreonbroker/
elastic-metrics.log
numberlog_levelniveau de verbosité, de 1 à 3, (1 = notice et errors, 2 =
warning, notice et errors, 3 = warning, notice, errors, info, debug). Il est fortement recommandé de ne pas définir une valeur supérieure à 2.1
numberlog_curl_commandsAffiche toutes les commandes curl utilisées par le stream connector dans le fichier de log (0 = ne rien afficher, 1 = logguer les commandes)0
numbersend_data_testSimule le fonctionnement du stream connector de bout en bout, mais envoie les données au fichier de log plutôt qu'à Elasticsearch (0 = envoyer à Elasticsearch, 1 = envoyer au fichier de log)0

Commandes Curl : tester le stream connector

Envoyer des métriques

Si vous voulez tester que les évènements sont envoyés correctement à Elasticsearch :

  1. Connectez-vous au serveur que vous avez configuré pour envoyer les évènements à Elasticsearch (le serveur central, un serveur distant ou un collecteur)
  2. Exécutez la commande suivante :
curl -X PUT -u "<user>:<password>" -H 'Content-type: application/json'
'<protocol>://<address>:<port>/<index_name>/_bulk' -d '{"index":{}}
{"poller":"Central","metric.value":0.0,"@timestamp":1690808140,"host.groups":
["HG_1","ALL"],"host.name":"central","metric.name":"rta","metric.instance":""}
{"index":{}}
{"poller":"Central","metric.value":0.0,"@timestamp":1690808140,"host.groups":
["HG_1","ALL"],"host.name":"central","metric.name":"rtmin","metric.instance":""}
'

Remplacez tous les <xxxx> dans la commande ci-dessus par la valeur correcte.

  1. Vérifiez que les 2 métriques ont été reçues par Elasticsearch.

Vérifier l'index template

Si vous ne recevez pas les données attendues, vérifiez que votre index template est correct.

curl -X GET -u "<user>:<password>" -H 'Content-type: application/json'
'<protocol>://<address>:<port>/_index_template/<index_template_name>'

Créer un index template

Vous pouvez créer un index template manuellement. Utilisez l'exemple ci-dessous :

curl -X PUT -u "<user>:<password>" -H 'Content-type: application/json'
'<protocol>://<address>:<port>/_index_template/<index_template_name>' -d
'{"priority":200,"index_patterns":["my_index*"],"_meta":
{"created_by_centreon":true,"description":"Timeseries index template for Centreon
metrics"},"template":{"mappings":{"properties":{"service.groups":
{"type":"keyword","time_series_dimension":false},"host.name":
{"type":"keyword","time_series_dimension":true},"poller":
{"type":"keyword","time_series_dimension":true},"metric.unit":
{"type":"keyword","time_series_dimension":false},"@timestamp":
{"type":"date","format":"epoch_second"},"metric.value":
{"type":"double"},"service.description":
{"type":"keyword","time_series_dimension":true},"host.groups":
{"type":"keyword","time_series_dimension":false},"metric.subinstances":
{"type":"keyword","time_series_dimension":false},"metric.name":
{"type":"keyword","time_series_dimension":true},"metric.instance":
{"type":"keyword","time_series_dimension":true}}},"settings":
{"index.mode":"time_series","index.routing_path":
["host.name","service.description","metric.name","metric.instance","poller"]}}}'