<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Felix Barnsteiner - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Felix Barnsteiner - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/jp/search-labs/author/felix-barnsteiner</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/felix-barnsteiner</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/felix-barnsteiner.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 04:51:13 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Elasticsearchに火を灯す：Prometheus APIのネイティブサポートを追加]]></title>
    <description><![CDATA[Prometheus互換のクライアントから、ネイティブのPromQL、ディスカバリー、メタデータエンドポイント経由でElasticsearchに直接クエリを実行できます。Prometheus Remote WriteでElasticsearchにデータを送信します。]]></description>
    <content:encoded><![CDATA[<p>Prometheusと互換性のある任意のクライアントをElasticsearchに向け、既存のメトリックに対してPromQLを直接実行します。Elasticsearchは、Prometheusのリモート書き込み、OpenTelemetry、またはBulk APIを通じて取り込まれたメトリックで動作するネイティブのPrometheusクエリ、検出、およびメタデータのエンドポイントをテクニカルプレビューとして追加しています。APIはElasticsearchの時系列データストリーム（TSDS）上で動作するので、Prometheus固有のストレージレイヤーを個別に運用する必要はありません。</p><p>この記事では、クエリ、検出、メタデータのエンドポイントが、以前の取り込みとクエリの作業に基づいてどのように構築され、APIサーフェスを形成するのかを説明します。関連記事では、個々のトピックについてさらに詳しく掘り下げています。</p><ul><li><p><a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">ES|QLのネイティブPromQLサポート</a>では、PromQLクエリがES|QL実行プランに変換される仕組みについて説明します。</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch">Prometheus MetricsをRemote WriteでElasticsearchに送信する</a>手順では、取り込み設定について説明します。</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">ElasticsearchにおけるPrometheus Remote Writeインジェストの仕組み</a>では、リモート書き込みの内部構造を説明しています。</p></li></ul><p>これはまだ開発途中の機能です。以下のセクションでは、現在サポートされている機能と、まだ開発中の部分について記載しています。</p><h2>APIサーフェス</h2><p>現在、Prometheus互換APIサーフェスは3つのグループに分かれます。</p><h3>クエリエンドポイント</h3><p>クエリエンドポイントを使用すると、Prometheus互換クライアントはPromQL式を評価できます。</p><ul><li><p><code>GET /_prometheus/api/v1/query_range</code> は時間ウィンドウ内でPromQL式を評価します（マトリクス結果）。</p></li><li><p><code>GET /_prometheus/api/v1/query</code> は単一の時点で評価します（ベクトル結果）。現在は、最後のサンプルを返す短範囲クエリとして実装されています。</p></li></ul><p>現在、クエリエンドポイントでサポートされているのはGETのみです。一部のクライアントはデフォルトでPOSTを使用するため、GETを使用するように設定する必要があります。PrometheusのPOST規約では<code>application/x-www-form-urlencoded</code>本文を使用しますが、ElasticsearchのHTTPレイヤーは、リクエストがハンドラーに到達する前にCSRF対策として拒否します。</p><p>PromQLの完全なカバレッジ状況については、<a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">ES|QLにおけるPromQLに関する関連記事</a>をご覧ください。</p><h3>メタデータエンドポイント</h3><p>メタデータエンドポイントは、クライアントがオートコンプリート、変数のドロップダウン、およびメトリックのブラウジングに必要な検出情報を提供します。</p><p>シリーズ、ラベル、およびラベル値のエンドポイントはすべて <code>match[]</code> セレクターと時間範囲 (<code>start</code>/<code>end</code>) を受け入れます。<code>match[]</code>パラメーターは<code>http_requests_total{job="api"}</code>のようなPrometheusシリーズセレクターを取り、一致する時系列に対応を制限します。これにより、多数のメトリクスを持つクラスター上で対応を迅速かつ関連性の高いものに保ちます。例：</p>GET /_prometheus/api/v1/series?match[]=http_requests_total{job="api"}GET /_prometheus/api/v1/labels?match[]=http_requests_totalGET /_prometheus/api/v1/label/instance/values?match[]=http_requests_total{job="api"}<p>最初の関数は、 <code>http_requests_total</code>かつ<code>job="api"</code>であるすべての系列を、完全なラベルセットとともに返します。2番目は、 <code>http_requests_total</code>シリーズに存在するラベル名のみを返します。3番目の結果は、マッチングするシリーズに現れる <code>instance</code> 値のみを返します。</p><p><code>GET /_prometheus/api/v1/metadata</code> は異なります。各メトリックのタイプと単位を返し、オプションで<code>metric</code>パラメーターを使用して名前でフィルタリングできます。</p>GET /_prometheus/api/v1/metadata?metric=http_requests_total<p><code>match[]</code>セレクターや時間範囲は受け付けません。Prometheusでは、メタデータはアクティブなスクレイピングターゲット（それらが公開する<code>HELP</code>、 <code>TYPE</code>、 <code>UNIT</code>行）から収集されるため、応答にはデータスキャンは含まれません。Elasticsearchにはそのような専用のメタデータストアがないため、現在の実装では過去24時間の時系列データを参照することでメトリックメタデータを検出しています。これにより、インデックス全体のスキャンを必要とせずにクエリの高速性を維持できます。その24時間遡及は現在本日に固定されています。PrometheusメタデータAPIは、Elasticsearchがユーザー調整可能にするために使用できる<code>start</code>または<code>end</code>パラメーターを公開していません。</p><p>メタデータエンドポイントがどのように機能するかについては、<code>TS_INFO</code> と <code>METRICS_INFO</code> コマンドを含め、<a href="https://www.elastic.co/search-labs/blog//elasticsearch-native-prometheus-api#ts-info-and-metrics-info">以下で</a>説明します。</p><h3>インデックスの事前フィルタリング</h3><p>すべてのクエリとメタデータエンドポイントは、<code>/_prometheus/</code> の後にオプションの <code>{index}</code> パスセグメントを受け入れます。</p>GET /_prometheus/metrics-prod-*/api/v1/query_range?query=up&amp;start=...&amp;end=...<p>これは、式の評価を開始する前に、どのElasticsearchインデックスに対してクエリを実行するかを制限します。複数のチームや環境にわたる多くのデータストリームを持つクラスターでは、無関係なインデックスのスキャンを避けることで、クエリのレイテンシを大幅に削減できます。チームごとに独自のメトリクスへのスコープ付きアクセスを提供するために、インデックスパターンごとに個別のデータソースを設定できます。</p><h3>リモート書き込みに関する注意事項</h3><p>インジェストのために、Elasticsearchは標準のPrometheus Remote Writeエンドポイントを公開しています。</p><ul><li><p><code>POST /_prometheus/api/v1/write</code> Prometheus Remote Write v1プロトコルを介して時系列データを取り込みます。v2はまだサポートされていません。</p></li></ul><p>Remote Writeは、Prometheus専用のストレージレイヤーではなく、Elasticsearchの既存の時系列データストリーム（TSDS）に書き込みます。PrometheusのラベルはTSDSディメンションになり、メトリック名はインデックスマッピングのフィールドになります。<a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">リモート書き込みアーキテクチャの記事</a>では、メトリックタイプがどのように推論され、ラベルが<code>labels.</code>プレフィックスでどのように格納されるかを含む、マッピングの詳細を網羅しています。</p><h3>プログラム概要</h3><p>内部的には、すべてのエンドポイントは同じように動作します。受信したHTTPパラメーターを解析し、ES|QLクエリプランを作成し、時系列データストリームに対してそれを実行し、列形式の結果をPrometheusクライアントが期待するJSON形式に変換します。</p><h2>TS_INFOとMETRICS_INFO</h2><p>メタデータエンドポイントは、すべてのデータポイントをスキャンすることなく、数百万もの時系列データに対して、「どのようなラベルが存在するか？」や「どのようなメトリックタイプが定義されているか？」といった質問に答える必要があります。</p><p>内部的には、Prometheusのメタデータエンドポイントは、2つの新しい処理コマンド<code>METRICS_INFO</code>と<code>TS_INFO</code>を中心にES|QLプランを構築することで、これらの質問に答えます。Prometheus APIを使用するためにこれらのコマンドを直接使用する必要はありませんが、これらはメタデータ応答の背後にあるコアとなる実行プリミティブです。どちらも、すべてのサンプルをスキャンするのではなく、時系列ごとに1つの文書にのみアクセスしてメタデータを抽出します。これは、コストがデータポイントの数ではなく、個別の時系列の数に応じてスケールすることを意味します。</p><p><code>METRICS_INFO</code> 1行ごとに、その名前、タイプ、単位、および関連するディメンションフィールドを持つ固有のメトリックを返します。<code>TS_INFO</code>はより詳細な情報を提供します。メトリック、時系列の組み合わせごとに1行が含まれ、実際のディメンション値がJSONオブジェクトとして含まれます。</p><p><code>TS_INFO</code>と<code>METRICS_INFO</code>に関する専用のブログ記事がまもなく公開されます。二段階実行モデル、それらのスケール方法、そしてPrometheus APIを超えてES|QLクエリで直接使用する方法について詳しく解説します。</p><h3>メタデータエンドポイントがこれらを使用する方法</h3><p>各メタデータエンドポイントは、これらのコマンドのいずれかをコアとしてES|QLプランを構築します。</p><p><code>/api/v1/labels</code> また、<code>/api/v1/series</code>は<code>TS_INFO</code>を使用します。これは、時系列ごとの詳細情報（どのラベルが存在するか、どのディメンション値が各系列を識別するか）が必要なためです。<code>/api/v1/metadata</code>と<code>/api/v1/label/__name__/values</code>は、メトリクス名、型、単位などの各メトリクス情報のみを必要とするため、<code>METRICS_INFO</code>を使用します。</p><p><code>/api/v1/label/{name}/values</code> 通常のラベル（<code>__name__</code>以外）の場合は、どちらのコマンドも使用しません。通常のラベル <code>job</code> や <code>instance</code> は、インデックス内の実際のディメンションフィールドなので、エンドポイントはグループ分けアグリゲーションで直接クエリできます。<code>match[]</code> 個のセレクターが提供されると、それらは時系列をフィルタリングする <code>WHERE</code> 句に変換され、アグリゲーションが実行される前に適用されます。</p><p><code>__name__</code>ラベルは、ディメンションフィールドとして常に存在するとは限らないため、別の戦略が必要です。Prometheus Remote Writeは<code>labels.__name__</code> を保存しますが、他の経路（OpenTelemetry、Bulk API）で取り込まれたメトリクスには保存されません。メトリック名はフィールド名自体にエンコードされています（例： <code>metrics.http_requests_total</code> ）。インデックスマッピングを見てフィールド名を列挙することはできますが、マッピングだけではどのメトリックがどのディメンションを持っているかはわかりませんし、 <code>match[]</code>セレクターからのラベル値でフィルタリングすることもできません。<code>METRICS_INFO</code>は両方を行うことができます。インデックス全体でメトリック名を列挙しながら、上流の<code>WHERE</code>フィルターを尊重します。</p><p>すべての場合において、APIレイヤーはPrometheusの規則に戻す変換を処理します。<code>labels.</code>と<code>metrics.</code>のストレージプレフィックスを除去し、<code>__name__</code>をPrometheus以外のメトリクスに対して合成します。</p><h2>まとめ</h2><p>その結果、Prometheusと互換性のあるクライアントであれば、すでに理解しているエンドポイントを利用してElasticsearchをクエリし、調査することができます。リモート書き込みメトリック、OpenTelemetryメトリック、およびその他の経路でインデックスされたメトリックはすべて、同じTSDSインデックスによって支えられた同じAPIを通じて表示されます。</p><p>ここで紹介したすべてのPrometheus APIは、現在Elasticsearch Serverlessのテクニカルプレビューとして利用可能です。セルフマネージドクラスターおよびElastic Cloud Hostedの導入は、<code>GET /_prometheus/api/v1/metadata</code>を除いて、Elasticsearch 9.4でテクニカルプレビューとして利用可能です。ローカルで実験するには<a href="https://www.elastic.co/docs/deploy-manage/deploy/self-managed/local-development-installation-quickstart">start-local</a>を使用します。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-native-prometheus-api</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-native-prometheus-api</guid>
    <category><![CDATA[統合]]></category>
    <dc:creator><![CDATA[Felix Barnsteiner]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt12b4e100d5bbb7f0/6a16f7a22b835ff747f4afdd/c7b333bd73e8a1f4e18486b2d692ba742788dcfd-1376x768.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>