Elasticsearch

Supported OS Linux Windows Mac OS

Intégration5.5.0

Dashboard Elasticsearch

Présentation

Obtenez les dernières données sur la santé de votre cluster Elasticsearch, que ce soit pour son statut global ou l’utilisation de tas de la JVM. Recevez des notifications lorsque vous devez réactiver un réplica, renforcer les capacités du cluster ou ajuster sa configuration. Surveillez ensuite les métriques de cluster obtenues.

Le check Elasticsearch de l’Agent Datadog recueille des métriques pour la recherche et l’indexation des performances, l’utilisation et le nettoyage de la mémoire, la disponibilité des nœuds, les statistiques des partitions, les performances du disque et l’espace disque, les tâches en attente et bien plus encore. L’Agent envoie également des checks de service et des événements relatifs au statut global de votre cluster.

Implémentation

Installation

Le check Elasticsearch est inclus avec le package de l’Agent Datadog. Vous n’avez donc rien d’autre à installer.

Configuration

Host

Pour configurer ce check lorsque l’Agent est exécuté sur un host :

Collecte de métriques
  1. Modifiez le fichier elastic.d/conf.yaml dans le dossier conf.d/ à la racine du répertoire de configuration de votre Agent pour commencer à recueillir vos métriques Elasticsearch. Consultez le fichier d’exemple elastic.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

    init_config:
    
    instances:
      ## @param url - string - required
      ## The URL where Elasticsearch accepts HTTP requests. This is used to
      ## fetch statistics from the nodes and information about the cluster health.
      #
      - url: http://localhost:9200
    

    Remarques :

    • Si vous recueillez des métriques Elasticsearch à partir d’un seul Agent Datadog s’exécutant en dehors du cluster, par exemple si vous utilisez une instance Elasticsearch hébergée, définissez cluster_stats sur true.

    • Les tags au niveau de l’Agent ne sont pas appliqués aux hosts associés à un cluster qui n’exécute pas l’Agent. Utilisez les tags au niveau de l’intégration dans <integration>.d/conf.yaml pour vous assurer que TOUTES les métriques présentent des tags cohérents. Par exemple :

      init_config:
      instances:
        - url: "%%env_MONITOR_ES_HOST%%"
          username: "%%env_MONITOR_ES_USER%%"
          password: *********
          auth_type: basic
          cluster_stats: true
          tags:
          - service.name:elasticsearch
          - env:%%env_DD_ENV%%
      
    • Pour utiliser l’intégration Elasticsearch de l’Agent pour les services AWS Elasticsearch AWS, définissez le paramètre url afin de rediriger vers votre URL stats AWS Elasticsearch.

    • Toutes les requêtes envoyées à l’API de configuration Amazon ES doivent être signées. Consultez la section Créer et signer des requêtes OpenSearch Service (en anglais) pour en savoir plus.

    • Le type d’authentification aws fait appel à boto3 pour récupérer automatiquement les identifiants AWS depuis .aws/credentials. Utilisez auth_type: basic dans le fichier conf.yaml et définissez les identifiants avec username: <NOMUTILISATEUR> et password: <MOTDEPASSE>.

    • Vous devez créer un utilisateur et un rôle (s’ils n’existent pas déjà) dans Elasticsearch, en leur attribuant les autorisations adéquates pour la surveillance. Pour ce faire, vous pouvez utiliser l’API REST fournie par Elasticsearch ou encore l’interface Kibana.

    • Si vous avez activé des fonctionnalités de sécurité dans Elasticsearch, vous pouvez utiliser les autorisations monitor ou manage avec l’API pour interroger les index Elasticsearch.

    • Ajoutez les propriétés suivantes dans le rôle créé :

      name = "datadog"
      indices {
        names = [".monitoring-*", "metricbeat-*"]
        privileges = ["read", "read_cross_cluster", "monitor"]
      }
      cluster = ["monitor"]
      

      Attribuez ensuite le rôle à l’utilisateur :

      roles = [<created role>, "monitoring_user"]
      

      Pour en savoir plus, consultez les sections Créer ou mettre à jour des rôles et Créer ou mettre à jour des utilisateurs (en anglais).

  2. Redémarrez l’Agent.

Requêtes personnalisées

Grâce à l’intégration Elasticsearch, vous pouvez recueillir des métriques custom à l’aide de requêtes personnalisées. Pour y parvenir, utilisez l’option de configuration custom_queries.

Remarque : lors de l’exécution de requêtes personnalisées, utilisez un compte disposant d’un accès en lecture seule pour veiller à ne pas modifier l’instance Elasticsearch.

custom_queries:
 - endpoint: /_search
   data_path: aggregations.genres.buckets
   payload:
     aggs:
       genres:
         terms:
           field: "id"
   columns:
   - value_path: key
     name: id
     type: tag
   - value_path: doc_count
     name: elasticsearch.doc_count
   tags:
   - custom_tag:1

La requête personnalisée est envoyée en tant que requête GET. Si vous utilisez un paramètre payload facultatif, elle est envoyée en tant que requête POST.

value_path peut correspondre à des clés de chaîne ou à des index de liste. Exemple :

{
  "foo": {
    "bar": [
      "result0",
      "result1"
    ]
  }
}

value_path: foo.bar.1 renvoie la valeur result1.

Collecte de traces

L’APM Datadog s’intègre à Elastisearch pour vous permettre de visualiser les traces sur l’ensemble de votre système distribué. La collecte de traces est activée par défaut dans les versions 6 et ultérieures de l’Agent Datadog. Pour commencer à recueillir des traces :

  1. Activez la collecte de traces dans Datadog.
  2. Instrumentez l’application qui envoie des requêtes à Elasticsearch.
Collecte de logs

Disponible à partir des versions > 6.0 de l’Agent

  1. La collecte de logs est désactivée par défaut dans l’Agent Datadog. Vous devez l’activer dans le fichier datadog.yaml :

    logs_enabled: true
    
  2. Pour recueillir les logs lents de recherche et d’index, [configurez vos paramètres Elasticsearch][14]. Par défaut, les logs lents ne sont pas activés.

    • Pour configurer des logs lents d’index pour un index <INDEX> donné :

      curl -X PUT "localhost:9200/<INDEX>/_settings?pretty" -H 'Content-Type: application/json' -d' {
        "index.indexing.slowlog.threshold.index.warn": "0ms",
        "index.indexing.slowlog.threshold.index.info": "0ms",
        "index.indexing.slowlog.threshold.index.debug": "0ms",
        "index.indexing.slowlog.threshold.index.trace": "0ms",
        "index.indexing.slowlog.level": "trace",
        "index.indexing.slowlog.source": "1000"
      }'
      
    • Pour configurer des logs lents de recherche pour un index <INDEX> donné :

      curl -X PUT "localhost:9200/<INDEX>/_settings?pretty" -H 'Content-Type: application/json' -d' {
        "index.search.slowlog.threshold.query.warn": "0ms",
        "index.search.slowlog.threshold.query.info": "0ms",
        "index.search.slowlog.threshold.query.debug": "0ms",
        "index.search.slowlog.threshold.query.trace": "0ms",
        "index.search.slowlog.threshold.fetch.warn": "0ms",
        "index.search.slowlog.threshold.fetch.info": "0ms",
        "index.search.slowlog.threshold.fetch.debug": "0ms",
        "index.search.slowlog.threshold.fetch.trace": "0ms"
      }'
      
  3. Ajoutez ensuite ce bloc de configuration à votre fichier elastic.d/conf.yaml pour commencer à recueillir vos logs Elasticsearch :

    logs:
      - type: file
        path: /var/log/elasticsearch/*.log
        source: elasticsearch
        service: "<SERVICE_NAME>"
    
    • Ajoutez des instances supplémentaires pour commencer à recueillir les logs lents :

      - type: file
        path: "/var/log/elasticsearch/\
              <CLUSTER_NAME>_index_indexing_slowlog.log"
        source: elasticsearch
        service: "<SERVICE_NAME>"
      
      - type: file
        path: "/var/log/elasticsearch/\
              <CLUSTER_NAME>_index_search_slowlog.log"
        source: elasticsearch
        service: "<SERVICE_NAME>"
      

      Modifiez les valeurs des paramètres path et service et configurez-les pour votre environnement.

  4. Redémarrez l’Agent.

Docker

Pour configurer ce check lorsque l’Agent est exécuté sur un conteneur :

Collecte de métriques

Définissez des modèles d’intégration Autodiscovery en tant qu’étiquettes Docker sur votre conteneur d’application :

LABEL "com.datadoghq.ad.check_names"='["elastic"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"url": "http://%%host%%:9200"}]'
Collecte de logs

La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs Docker.

Définissez ensuite des intégrations de logs en tant qu’étiquettes Docker :

LABEL "com.datadoghq.ad.logs"='[{"source":"elasticsearch","service":"<NOM_SERVICE>"}]'
Collecte de traces

L’APM dédié aux applications conteneurisées est pris en charge sur les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.

Variables d’environnement requises sur le conteneur de l’Agent :

ParamètreValeur
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

Consultez les sections relatives au tracing d’applications Kubernetes et à la configuration de DaemonSet Kubernetes pour consulter la liste complète des variables d’environnement et options de configuration disponibles.

Ensuite, instrumentez le conteneur de votre application et définissez DD_AGENT_HOST sur le nom de votre conteneur d’Agent.

Kubernetes

Pour configurer ce check lorsque l’Agent est exécuté sur Kubernetes :

Collecte de métriques

Définissez des modèles d’intégration Autodiscovery en tant qu’annotations de pod sur votre conteneur d’application. Cette configuration peut également être réalisée avec un fichier, une configmap ou une paire key/value.

Version 1 des annotations (pour les versions de l’Agent Datadog antérieures à la v7.36)

apiVersion: v1
kind: Pod
metadata:
  name: elasticsearch
  annotations:
    ad.datadoghq.com/elasticsearch.check_names: '["elastic"]'
    ad.datadoghq.com/elasticsearch.init_configs: '[{}]'
    ad.datadoghq.com/elasticsearch.instances: |
      [
        {
          "url": "http://%%host%%:9200"
        }
      ]      
spec:
  containers:
    - name: elasticsearch

Version 2 des annotations (pour les versions 7.36 et ultérieures de l’Agent Datadog)

apiVersion: v1
kind: Pod
metadata:
  name: elasticsearch
  annotations:
    ad.datadoghq.com/elasticsearch.checks: |
      {
        "elastic": {
          "init_config": {},
          "instances": [
            {
              "url": "http://%%host%%:9200"
            }
          ]
        }
      }      
spec:
  containers:
    - name: elasticsearch
Collecte de logs

La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs Kubernetes.

Définissez ensuite des intégrations de logs en tant qu’annotations de pod. Cette configuration peut également être réalisée avec un fichier, une configmap ou une paire key/value.

Versions 1 et 2 des annotations

apiVersion: v1
kind: Pod
metadata:
  name: elasticsearch
  annotations:
    ad.datadoghq.com/elasticsearch.logs: '[{"source":"elasticsearch","service":"<NOM_SERVICE>"}]'
spec:
  containers:
    - name: elasticsearch
Collecte de traces

L’APM dédié aux applications conteneurisées est pris en charge par les hosts exécutant les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.

Variables d’environnement requises sur le conteneur de l’Agent :

ParamètreValeur
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

Consultez les sections relatives au tracing d’applications Kubernetes et à la configuration de DaemonSet Kubernetes pour consulter la liste complète des variables d’environnement et options de configuration disponibles.

Ensuite, instrumentez votre conteneur d’application et définissez DD_AGENT_HOST sur le nom du conteneur de votre Agent.

ECS

Pour configurer ce check lorsque l’Agent est exécuté sur ECS :

Collecte de métriques

Définissez des modèles d’intégration Autodiscovery en tant qu’étiquettes Docker sur votre conteneur d’application :

{
  "containerDefinitions": [{
    "name": "elasticsearch",
    "image": "elasticsearch:latest",
    "dockerLabels": {
      "com.datadoghq.ad.check_names": "[\"elastic\"]",
      "com.datadoghq.ad.init_configs": "[{}]",
      "com.datadoghq.ad.instances": "[{\"url\": \"http://%%host%%:9200\"}]"
    }
  }]
}
Collecte de logs

La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs Amazon ECS.

Définissez ensuite des intégrations de logs en tant qu’étiquettes Docker :

{
  "containerDefinitions": [{
    "name": "elasticsearch",
    "image": "elasticsearch:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"elasticsearch\",\"service\":\"<NOM_SERVICE>\"}]"
    }
  }]
}
Collecte de traces

L’APM dédié aux applications conteneurisées est pris en charge sur les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.

Variables d’environnement requises sur le conteneur de l’Agent :

ParamètreValeur
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

Consultez les sections relatives au tracing d’applications Kubernetes et à la configuration de DaemonSet Kubernetes pour consulter la liste complète des variables d’environnement et options de configuration disponibles.

Ensuite, instrumentez votre conteneur d’application et définissez DD_AGENT_HOST sur l’adresse IP privée EC2.

Validation

Lancez la sous-commande status de l’Agent et cherchez elastic dans la section Checks.

Données collectées

Par défaut, les métriques suivantes ne sont pas toutes envoyées par l’Agent. Pour envoyer toutes les métriques, configurez les flags dans elastic.yaml, comme illustré ci-dessus.

  • pshard_stats envoie les métriques elasticsearch.primaries.* et elasticsearch.indices.count.
  • index_stats envoie les métriques elasticsearch.index.*.
  • pending_task_stats envoie les métriques elasticsearch.pending_*.
  • slm_stats envoie les métriques elasticsearch.slm.*.

Métriques

Événements

Le check Elasticsearch envoie un événement à Datadog à chaque changement de statut global de votre cluster Elasticsearch : rouge, jaune ou vert.

Checks de service

elasticsearch.cluster_health
Renvoie le status de [l’API Cluster Health] d’Elasticsearch (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-health.html). Des informations supplémentaires sur le statut des shards au moment de la collecte de données sont incluses dans le message du check.
Statuses: ok, warning, critical

elasticsearch.can_connect
Renvoie CRITICAL si l’Agent n’est pas capable de se connecter à l’instance Elasticsearch qu’il surveille. Si ce n’est pas le cas, renvoie OK.
Statuses: ok, critical

Dépannage

Pour aller plus loin

PREVIEWING: may/embedded-workflows