> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Elasticsearch

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Node.js", version: "3.7.2" },
{ name: "Elasticsearch Node.js client", version: "8.15.0" }
]}
/>

[Elasticsearch](https://www.elastic.co/elasticsearch) est un moteur de recherche et d'analyse populaire. L'intégration AppSignal pour Node.js pour Elasticsearch fournit une instrumentation automatique pour le [client Node.js d'Elasticsearch](https://github.com/elastic/elasticsearch-js).

## Installation

Le client Node.js d'Elasticsearch inclut une instrumentation via OpenTelemetry. Il rapportera automatiquement les données au package AppSignal pour Node.js. Aucune configuration supplémentaire n'est nécessaire pour instrumenter Elasticsearch dans votre application.

## Fonctionnalités

L'instrumentation intégrée capture des spans pour les requêtes de recherche, les opérations d'indexation et d'autres interactions avec votre cluster Elasticsearch. L'intégration enverra à AppSignal des spans représentant la durée d'exécution de chaque appel à l'API Elasticsearch avec des informations sur l'opération.

## Configuration

<Warning>
  L'instrumentation automatique peut être désactivée à partir de la version `9.x` de `@elastic/elasticsearch`.
  Si vous utilisez la version `8.x` de `@elastic/elasticsearch`, assurez-vous d'utiliser `@elastic/transport` version `8.10.0` ou supérieure.
</Warning>

Vous pouvez désactiver l'instrumentation d'Elasticsearch en :

* définissant une variable d'environnement ;

<CodeGroup>
  ```bash Shell theme={null}
  OTEL_ELASTICSEARCH_ENABLED=false
  ```
</CodeGroup>

* utilisant un `Transport` personnalisé.

<CodeGroup>
  ```typescript title="app.ts" theme={null}
  import {
    Transport,
    TransportRequestOptions,
    TransportRequestParams,
  } from "@elastic/transport";

  class CustomTransport extends Transport {
    async request(
      params: TransportRequestParams,
      options: TransportRequestOptions = {},
    ): Promise<any> {
      options.openTelemetry = { enabled: false };
      return super.request(params, options);
    }
  }

  const client = new Client({
    /*
     your client config...
    */
    Transport: CustomTransport,
  });
  ```
</CodeGroup>

Vous pouvez également laisser l'instrumentation activée et **la désactiver pour un seul appel d'API** en passant un objet `TransportRequestOptions` personnalisé comme deuxième argument à tout appel d'API :

<CodeGroup>
  ```typescript TypeScript theme={null}
  const response = await client.search({ ... }, {
    openTelemetry: { enabled: false },
  });
  ```
</CodeGroup>
