Kibana
イベント
該当するコンテンツが見つかりませんでした
マガジン
該当するコンテンツが見つかりませんでした
技術ブログ
目次 概要 主な変更点 できること 動作に必要な環境など シーケンス図(超概略図) 動かし方 1. 準備 1.1. GitHub リポジトリのダウンロード 1.2. .env ファイルに必要な情報を記載します。 2. ビルドおよびコンテナの起動 2.1. ビルド 2.2. コンテナの起動 3. EIS の設定 4. Elasticsearch へのデータ登録 4.1. 密ベクトル生成前のテキストデータの登録 4.2. インデックスの作成 4.3. マッピングの作成 4.4. _reindex 4.5. キーワード検索 4.6. セマンティック検索 4.7. ハイブリッド検索 4.8. セマンティックリランク 5. AI Agent 5.1. AI Agent の設定 5.2. AI Agent 用の Tool の追加 5.3. AI Agent 用の Tool の登録 Type Details Labels 5.4. 保存した AI Agent Tool のテスト 5.5. AI Agent の作成 5.6. AI Agent の登録 Settings タブ Tools タブ 5.7. AI Agent の実行準備 5.8. AI Agent の実行 6. Elastic Agent Tool の呼び出し回数などの集計 発展形 まとめ 無償トレーニングコースの紹介 参考URL 概要 2025年1月に公開した White Paper 用のプロジェクト( 簡易RAGアプリケーション )を、Elastic AI Agent 用にリニューアルしてみました。 結論から書くと、かなり簡単に実現できるようになっています。 主な変更点 項目 2025-01版 2026-09版 ベースとなる Elasticsearch のバージョン v8.16.0 v9.5.3 index.mode standard vectordb_document Machine Learning Node 必須 不要 (代わりにEISを利用) クエリーの言語 Query DSL ES|QL 密ベクトル生成用のモデル .multilingual-e5-small_linux-x86_64 .jina-embeddings-v5-text-nano セマンティックリランク用モデル なし .jina-reranker-v3.5 質問回答用LLM Cohere Command R (2024年12月版) Anthropic Claude 5 Sonnet (例) UI Streamlit Elastic AI Agent できること Elastic AI Agent を使って、サンプルデータ「柿之助」についての質問に答えてもらうことができます。 ※「柿之助」は、青空文庫からダウンロードした「桃太郎」を元に、改変したお話です(LLMが事前学習していないお話にするため)。 動作に必要な環境など Elastic Cloud Enterprise License (EIS 用に必要) Docker 実行環境 (筆者はWindows用のRancher Desktop 1.24.0を利用) 動作に必要な Dockerfile などは、下記に置いています。 ※Elasticsearch 9.5.3、Kibana 9.5.3 は、自動的にダウンロードされます。 https://github.com/SIOS-Technology-Inc/elastic-blogs/tree/main/2026-09-rag-by-ai-agent/README.md シーケンス図(超概略図) 動かし方 1. 準備 1.1. GitHub リポジトリのダウンロード 下記の URL から GitHub リポジトリをダウンロードします。 https://github.com/SIOS-Technology-Inc/elastic-blogs/ (方法はいくつかありますが、ここでは zip をダウンロードする手順を紹介します。) 1. Web ブラウザで、 https://github.com/SIOS-Technology-Inc/elastic-blogs/ にアクセスします。 2. [<>Code] から Download ZIP をクリックします。 3. ZIP ファイルを解凍し、2026-09-rag-by-ai-agent フォルダへ移動します。 1.2. .env ファイルに必要な情報を記載します。 env.sample.txt ファイルを .env にコピーします。 cp env.sample.txt .env .env ファイルを編集します。 ... ES_LOCAL_PASSWORD=... KIBANA_PASSWORD=... ... SAVEDOBJECTS_ENCRYPTIONKEY=... ... 2. ビルドおよびコンテナの起動 2.1. ビルド docker-compose.yml があるディレクトリで下記を実行します。 docker compose build Elasticsearch 9.5.3 および Kibana 9.5.3 のダウンロードが行われ、ビルドが行われます。 2.2. コンテナの起動 docker compose up -d Self-Managed の Elasticsearch および Kibana が起動します。 3. EIS の設定 下記のブログを参考にして Stack Management / Cloud Connect の設定を行います。 Elastic Inference Service (EIS) を使った「ベクトル検索」および「生成AIによる回答(RAG)」(準備編) ※Self-Managed の Elasticsearch 上で、EIS を経由して、密ベクトル生成用モデル、セマンティックリランク用モデル、問い合わせへの回答用モデルを利用できるようになります。 ※別途、利用料金がかかります。 4. Elasticsearch へのデータ登録 4.1. 密ベクトル生成前のテキストデータの登録 Kibana の Integration / Upload File 機能を使って下記の ndjson ファイルを kakinosuke_tmp インデックスへ登録します(DataView は不要です)。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/data/kakinosuke_chunked.ndjson 4.2. インデックスの作成 下記の md ファイル内のリクエストを Kibana の Dev Tools から発行し、kakinosuke_202609 インデックスを作成します。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/01_create_index.md 4.3. マッピングの作成 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_202609 インデックスへ mapping を登録します。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/02_put_mapping.md 4.4. _reindex 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_tmp インデックス内のドキュメントを kakinosuke_202609 インデックスへコピーします。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/03_reindex.md このとき、kakinosuke_202609 インデックスには密ベクトルデータや日本語形態素解析されたデータも生成されます。 4.5. キーワード検索 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_202609 インデックスに対しキーワード検索を行います。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/04_keyword_search.md (これは必須の操作ではありません。確認のための作業です。) 4.6. セマンティック検索 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_202609 インデックスに対しセマンティック検索を行います。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/05_semantic_search.md (これは必須の操作ではありません。確認のための作業です。) 4.7. ハイブリッド検索 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_202609 インデックスに対しキーワード検索をとセマンティック検索のハイブリッド検索(RRF)を行います。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/06_hybrid_search.md (これは必須の操作ではありません。確認のための作業です。) 4.8. セマンティックリランク 下記の md ファイル内のリクエストを Dev Tools から発行し、kakinosuke_202609 インデックスのハイブリッド検索後の検索結果に対しセマンティックリランクを行います。 https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/07_semantic_rerank.md (これは必須の操作ではありません。確認のための作業です。) 5. AI Agent ※以降の画面は、Dispay Language : English で表示したものを添付しています。日本語で表示した場合には、画面イメージが多少異なります。 5.1. AI Agent の設定 Kibana の Elasticsearch / Agents から Elastic AI Agent 画面へ遷移します。 5.2. AI Agent 用の Tool の追加 さきほど作成したセマンティックリランク用のクエリーを AI Agent 用の Tool として追加します。 Elastic AI Agent の下の Tools をクリックします。Tools の画面が表示されるので、右上の [(+) Add tool] をクリックします。 さらに Create a tool をクリックします。 5.3. AI Agent 用の Tool の登録 参考: https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/08_ai_agent_tool.md Create new tool 画面が表示されるので、下記のように入力します。入力完了後、右下の [Save & test] をクリックします。 Type Type : ES|QL ES|QL Query : 以下のクエリーを入力 (4.8. のセマンティックリランク用 ES|QL をAI Agent Tool用に修正した内容です。) FROM kakinosuke_202609* METADATA _score, _id, _index | FORK (WHERE MATCH(content.semantic, ?query) | SORT _score DESC | LIMIT 10) (WHERE MATCH(content, ?query) | SORT _score DESC | LIMIT 10) | FUSE RRF | KEEP chunk_no, content, _score | SORT _score DESC | LIMIT 10 | RERANK ?query ON content WITH { "inference_id" : ".jina-reranker-v3.5" } | SORT _score DESC | LIMIT 5 ES|QL Parameters Infer parameter をクリックしてから、下記を入力します。 Name : query (自動表示されます) Description : 検索したい内容 Type : string (自動表示されます) Optional : false Details Tool ID : kakinosuke.get_contents Description : 下記を入力 kakinosuke_202609 インデックスに対して、キーワード検索とセマンティック検索を行い、RRFで結果を統合したあと、セマンティックリランクで質問に近い順に並べ直し、上位5件の本文チャンクを返す。 Labels Labels : kakinosuke 5.4. 保存した AI Agent Tool のテスト [Save & test] をクリックすると、Tool のテスト実行画面が表示されます。 query に、下記を入力した後、[→ Submit] をクリックします。 柿之助の3人の家来は? Response に5件の結果が表示されることを確認します。 5.5. AI Agent の作成 左上の Elastic AI Agent の [v] メニューをクリックします。さらに Available agents 一覧の [+ New agent] をクリックします。 5.6. AI Agent の登録 参考: https://github.com/SIOS-Technology-Inc/elastic-blogs/blob/main/2026-09-rag-by-ai-agent/es_scripts/09_ai_agent.md New Agent 画面が表示されるので、以下の内容を登録していきます。 Settings タブ Agent ID : kakinosuke.agent Custom Instructions : 以下を入力します。 あなたは柿之助についての質問に答えるエージェントです。 # 指示1 与えられた質問を query とし、次の tool を呼び出して、結果の 5 件のドキュメントを受け取りなさい。 受け取った5件のドキュメントを指示2に渡しなさい。 - tool : kakinosuke.get_contents # 指示2 指示1 で取得した 5 件のドキュメントを元に、与えられた質問 (query) に答えなさい。 Enable Elastic capabilities : false Labels : kakinosuke Access control : Public Display name : Kakinosuke Agent Display description : 柿之助に関する質問に答える AI Agent です。 Workflows : なし Tools タブ 以下の手順で、kakinosuke.get_contents tool のみを利用するよう、設定します。 Tool list の右上の Show active only を on にします。 2. チェックがついている tool を全て off にします。 3. 再度、Show active only を off にしてから、検索欄に “kakinosuke” と入力します。 4. kakinosuke.get_contents が表示されるので、チェックを入れて、[Save] をクリックします。 5.7. AI Agent の実行準備 Stack Management / Model Management の Feature Settings をクリックします。 Feature settings 画面が表示されるので、Global model から利用したいモデルを選択します。 (モデルの利用料金が別途かかります。) 今回は、Feature specific models を Disabled に設定しておきます(全ての AI 機能で Global model が利用されます)。 モデルを選択後、右上の [Save settings] をクリックします。 (下記は、Anthropic Claude Sonnet 5 を選択した例です。) 5.8. AI Agent の実行 Home / Elasticsearch / Agents 画面を開きます。 Elastic AI Agent の右の [v] をクリックします。Available agents の中から Kakinosuke Agent を選択します。 画面中央のプロンプトに次のように入力し、[↑] をクリックします。 柿之助の3人の家来は? しばらく待つと以下のような回答が画面に表示されます。 回答の下の左から3番目のアイコンをクリックすると、LLM のトレースを表示することができます。 この回答の根拠 (reasoning) についても確認することができます。 回答内の 1 tool responded > で閉じられている部分を展開すると、以下のような内容が表示されます。 Found 5 results のリンクをクリックすると、根拠になった 5 件の結果も表示されます。 6. Elastic Agent Tool の呼び出し回数などの集計 Elastic Agent Tool の呼び出し回数、エラー回数、平均処理時間は、以下のクエリーで取得することが可能です。 FROM traces-agent_builder.otel-* | WHERE span.name LIKE "execute_tool *" | STATS calls = COUNT(*), errors = COUNT(*) WHERE status.code == "Error", avg_ms = ROUND(AVG(duration) / 1000000.0, 1) BY tool = attributes.gen_ai.tool.name | SORT calls DESC 発展形 今回は非常に小さいデータの検索でしたが、巨大なデータを検索する場合にはさらなる発展形として、以下のようなことも考えられます。 ツールの数を増やす(いろんな条件ごとに検索対象や検索ロジックを変える)。 検索時の重み付けを複数パターンにする(今回のサンプルでは、単純なキーワード検索とベクトル検索のRRFでのシンプルな重み付けのみ)。 条件に応じて複数ツールを呼び分けるよう Elastic AI Agent で制御する。 Elastic AI Agent の処理の前半で呼ぶツールと処理の後半で呼ぶツールとを分ける。 まとめ v8 のときの Python を使った場合よりも、v9 の Elastic AI Agent を使った方がかなり簡単に RAG を実現できるようになっています。 また、LLM の呼び出し時のトレースや、Reasoning の確認も簡単にできるようになっています。 Elastic AI Agent は、RAG 以外にも利用可能です(Observability や Security での異常発見後の処理など)。 さらに、Elastic Workflows と組み合わせて利用することも可能です。 その他、今回作成した Elastic AI Agent Tool を MCP Client から呼び出すことも可能です。 参考URL: Claude DesktopにElastic Agent BuilderのMCPサーバーを追加する方法 まずは、一度、Elastic AI Agent を動かしてみて、その凄さを体験していただければ、と思います。 無償トレーニングコースの紹介 2026年9月時点では、Elastic Cloud 上で受講できる AI Agent 関連の無償トレーニングコースとして以下のコースが用意されています。 Platform / Custom agents with Elastic Agent Builder for conversational search ※受講するには、Elastic Cloud へのユーザー登録(無料ユーザーで可)が必要です。 ※内容は英語で書かれています。 参考URL 2025年1月公開の簡易RAGアプリケーション GitHubリポジトリ Elastic Inference Service (EIS) を使った「ベクトル検索」および「生成AIによる回答(RAG)」(準備編) Claude DesktopにElastic Agent BuilderのMCPサーバーを追加する方法 Elastic の無償トレーニングコースの紹介(2026年9月時点) The post Pythonコード不要?Elastic AI Agent と ES|QL で実現する超シンプルな次世代RAG first appeared on Elastic Portal .
Elastic Cloud 上では、Elastic 関連の無償オンライントレーニングを受講することができます。不定期で新しいコースが追加されており、最新機能を実機環境で直接試すことも可能です。 目次 受講に必要なもの 無償トレーニングの入り口 elastic.co/training/ 受講可能なコース一覧(2026年9月時点) 受講手順 Elastic Cloud 内の Learning portal 受講手順 受講可能なコース一覧(2026年9月時点) Tips (日本語翻訳の小ワザ) おわりに 受講に必要なもの Web ブラウザ Elastic Cloud のアカウント(無償アカウントで受講可能。未登録の方はリンク先より Sign up ) 無償トレーニングの入り口 無償トレーニングコースは、2か所にあります。 elastic.co/training/ Elastic Cloud 内の Learning portal elastic.co/training/ 1つ目は、 https://www.elastic.co/training/ です。 こちらにアクセスすると、カテゴリー(Platform / Security / Search / Observability)ごとにトレーニングコースが表示されます。 受講可能なコース一覧(2026年9月時点) 下記をクリックすると、各カテゴリー内のコース一覧が表示されます。 Platform Data types and mappings Distributed datastore ECK essentials ECK Operator: Configuration and features Feature Highlight: Elastic Cloud Serverless Index basics Security Actions and escalate Advanced investigations with Timelines AI Assistant for Security Alerts and cases Attack Discovery Detection engine advanced Detection engine basics Elastic AI SOC Engine: EASE into Elastic Security ES|QL for security analysts Explorer: Hosts, Network, and Users in Elastic Security Focus and investigate Intro to Elastic Security Machine learning for anomaly detection Security alert triage Visualizing data with Elastic for security analysts Search Elastic Agent Builder: Tools, agents, and MCP GenAI Associate Accreditation Intro to MCP with Elasticsearch MCP Server RAG foundation Semantic search foundation Semantic search text embedding Observability APM with Elastic Elastic Agent ES|QL for observability Log analysis with Elastic machine learning Log essentials: Getting started Monitoring Kubernetes with Elastic Agent Monitoring Kubernetes with Elastic distributions of OpenTelemetry Synthetic monitoring with Elastic 受講手順 受講したいコースを選んで、示される手順に沿って操作してください(先へ進むと Elastic Cloud へのログインを求められるので、ログインしてください)。 Elastic Cloud 内の Learning portal もう一つのコースは、Elastic Cloud にログイン後に表示されるトレーニングコースです。 受講手順 Elastic Cloud よりログインします。 Home 画面下部の Training 内にある [Learning portal] をクリックします。 Elastic Learning Portal 画面が表示されたら、Explore On-Demand Modules の [VIEW CATALOGS] をクリックします。 カテゴリー(Platform / Security / Search / Observability)ごとに表示されるコース一覧から受講したいコースを選択します。 受講可能なコース一覧(2026年9月時点) 下記をクリックすると、各カテゴリー内のコース一覧が表示されます。 Platform Changing Data Custom agents with Elastic Agent Builder for conversational search Data Management Concepts Data Streams Data types and mappings Distributed datastore Distributed Operations ECK essentials ECK Operator Configuration and features Elastic Ecosystem and Technical Essentials Enriching Data Feature highlight: Elastic Cloud Serverless Getting started: Elastic Workflows Index basics Index Lifecycle Management Multi Cluster Operations Scaling Elasticsearch Searchable Snapshots Troubleshooting Understanding Shards Security Advanced ES | QL Operations for Security Analysts Advanced investigations with Timelines Aggregation Based Visualizations AI Assistant for Security Alerts and cases Attack Discovery Automating security operations with Elastic Workflows Detection engine advanced Discover Getting started with Kibana Elastic Defend Configuration ES QL for security analysts Event Query Language for Security Data Exploration Feature highlight: Elastic Common Schema for Security Analysts Feature highlight: Elastic Stack Overview Focus and investigate Getting Started: Elastic Security Machine Learning for anomaly detection Searching with Kibana Query Language and Lucene Security alert triage SIEM Capstones Visualizing data with Elastic for security analysts Search Combining Aggregations Combining Queries Full Text Queries GenAI Associate Accreditation Exam Metric and Bucket Aggregations Overview of Mappings Semantic search text embedding Strings in Elasticsearch Term Level Queries Types and Parameters Observability Adjust Visualizations APM with Elastic Collect Application Data Create Maps Create Visualizations Data Frame Analytics Discover and Data Visualizer Elastic Agent Extracting and Transforming Events Hello Dashboard Index Lifecycle Management for Observability Data Interactive Dashboards Introduction to Kibana KQL and Filters Log analysis with Elastic machine learning Logs Rules and Connectors Runtime Fields Sharing a Dashboard Spaces Tables (Platform と他のカテゴリーで同じコースが重複している分は、Platformのコースとして記載しています。) (また、一部のコースは、elastic.co/training/ 内のコースと重複しています。) 下記のコースは、比較的最近追加されたコースです(いずれも新機能に関するコース)。 Platform Custom agents with Elastic Agent Builder for conversational search Getting started: Elastic Workflows Tips (日本語翻訳の小ワザ) 本トレーニングは英語表記となっており、そのままではブラウザの自動翻訳が機能しない場合があります。日本語でスムーズに受講したい方は、こちらの Qiita の翻訳ノウハウ記事 に記載されている手法をご活用ください。 おわりに 「新機能をいち早く触ってみたい」「概念だけでなく実際の操作感を確かめたい」という方に最適なプログラムです。トレーニング進行中に不明点や理解しづらい点があれば、弊社の Elastic お問合せページ よりお気軽にご相談ください。 The post Elastic の無償トレーニングコースの紹介(2026年9月時点) first appeared on Elastic Portal .
こんな場面に心当たりはないでしょうか。 ログの保存コストを下げたい。件数の多いパターンから削りたいが、障害時に必要なログかもしれず、削っていいのか判断できない 検知ルールごとのアラート件数を見て、常時鳴っているルールと今日だけ鳴ったルールを区別できない サービスごとのエラー率は正常に見えるのに、どこかのバージョンだけ静かに悪化している気がする いずれも、合計や平均では答えが出ません。必要なのは「時間とともにどう動いたか」です。しかし数十行の結果に対して、1 行ずつグラフを作って確かめるわけにもいきません。 Elasticsearch 9.5 でテクニカルプレビューとして追加された SPARKLINE は、この隙間を埋めます。STATS … BY の各行に、その行の推移をミニグラフとして 1 列足してくれます。別の可視化を作る必要はありません。 この記事では、Kibana のフライトサンプルデータを使って動きを確認します。あわせて、従来の書き方と比べて何が変わるのか、実務ではどこで効くのかを見ていきます。 目次 構文 例 1:航空会社ごとの遅延の推移 SPARKLINE がなかったら、どう書いていたか 例 2:到着国ごとの平均運賃の推移 使うときの注意点 どんなときに向いているか 本命はログパターン分析 まとめ 参考資料 構文 SPARKLINE(集計式, 日付フィールド, バケット数, 開始, 終了) 集計式:COUNT(*)、SUM(bytes)、AVG(latency) など、y 軸にしたい値 日付フィールド:時間軸に使う日付フィールド バケット数:分割数の目安 開始/終了:対象期間。Kibana では時間ピッカーと連動する ?_tstart と ?_tend を使えます STATS の集計関数のひとつなので、新しい構文を覚える必要はありません。空のバケットは 0 で埋まるため、どの行も同じ時間軸で並び、形をそのまま見比べられます。 例 1:航空会社ごとの遅延の推移 サンプルデータ「Sample flight data」(kibana_sample_data_flights)で試します。遅延した便を航空会社ごとに数え、あわせて推移を出します。時間範囲は直近 7 日間にしました。 FROM kibana_sample_data_flights | WHERE FlightDelay == true | STATS delays = COUNT(*), trend = SPARKLINE(COUNT(*), timestamp, 24, ?_tstart, ?_tend) BY Carrier | SORT delays DESC 図 1: 遅延件数は 4 社 結果を見てください。遅延件数は 154 件、146 件、145 件、126 件です。数字だけ見れば「4 社とも似たようなもの」で終わってしまいます。 ところが trend の形は違います。どの社も日ごとに波打っていますが、山が立つ日と山の高さは社ごとにばらばらです。合計が近くても、どの日にどの社が跳ねたのかは別の話です。この違いが、クエリ 1 本で並んで見えます。 trendの形の違いを同じデータセットで過去2日間でも載せます。 SPARKLINE がなかったら、どう書いていたか 同じ情報を従来の書き方で出してみます。時間を BUCKET でグループに加える方法です。 FROM kibana_sample_data_flights | WHERE FlightDelay == true | STATS delays = COUNT(*) BY Carrier, bucket = BUCKET(timestamp, 24, ?_tstart, ?_tend) | SORT Carrier, bucket 図 2: 同じ情報が 60 行に分かれる 結果は 60 行になりました。4 社 × 15 バケットです。例 1 は 4 行でしたから、15 倍に増えています。しかも 1 社分で 15 行を使うため、ES-Air の次の航空会社を見るにはスクロールが必要です。航空会社ごとの傾向を読むには、この表を目で束ね直すことになります。 ここで数字を突き合わせてみます。ES-Air の 15 行の値を合計すると、例 1 の ES-Air の遅延件数になります。つまり、例 1 のスパークラインは、この 15 個の数字を 1 行に畳んだものです。特別な計算をしているわけではありません。見慣れた時間バケットごとの集計を、行ではなく配列として返しているだけです。 なお、Kibana が自動生成するグラフは、時間ごとの積み上げ棒になります。合計は分かりますが、形を比べる用途には向きません。並べて比べたいなら、やはり別途グラフを作ることになります。 例 2:到着国ごとの平均運賃の推移 COUNT 以外の集計も使えます。平均運賃の動きを到着国ごとに並べてみます。 FROM kibana_sample_data_flights | STATS avg_price = AVG(AvgTicketPrice), trend = SPARKLINE(AVG(AvgTicketPrice), timestamp, 20, ?_tstart, ?_tend) BY DestCountry | SORT avg_price DESC | LIMIT 10 図 3: 上位の国はバケットが埋まっておらず、母数が少ないと分かる (Discover) ここでは、スパークラインが順位そのものを疑わせてくれます。平均運賃の 1 位はデンマーク(DK)で 799.45 です。しかし trend を見ると、棒が立っている区間がわずかしかありません。つまり、直近 7 日間で該当便が数便しかなく、その少数の便が平均を決めています。2 位のフィンランド(FI)も同じ傾向です。 一方、順位が下がるにつれて区間が埋まっていき、オーストラリア(AU)やロシア(RU)、イギリス(GB)はほとんどの区間にデータがあります。母数が安定しており、平均値も信頼できます。 「上位が本当に高いのか、それとも母数が少ないだけか」を、テーブルの中で判断できます。これは合計値や平均値の列だけでは分かりません。 使うときの注意点 実際に動かして分かった点も含めて、4 つ挙げます。 バケット数は目安です。 例 1 では 24 を指定しましたが、返ってきたのは 15 本でした。直近 7 日間という範囲に対して、12 時間刻みという切りのよい間隔が選ばれています。手元で試した限り、BUCKET 関数と同じ丸め方でした。正確な本数と値は、棒にカーソルを当てると確認できます。 空のバケットは 0 になります。 COUNT なら「その時間帯は 0 件」と読めるので自然です。しかし AVG では「データがなかった」と「平均が 0 だった」を区別できません。例 2 の DK のように棒が抜けている場合は、値が 0 なのではなく母数がないと読んでください。 ミニグラフになる条件があります。 返り値は数値の配列ですが、Kibana の ES|QL エディタで実行すると棒グラフとして描画されます。ただし、これはグループ表示のときだけです。グループ表示に切り替わるのは、BY に単一のフィールドか単一の CATEGORIZE を指定した場合です。BUCKET を併用したり、複数のフィールドでグループ化すると、通常のフラットな表に戻ります。前節の比較で表示が変わったのは、この仕様のためです。 テクニカルプレビューです。 Elasticsearch 9.5 で提供されています。仕様が変わる可能性があるため、本番のダッシュボードに組み込む前にバージョンを確認してください。 どんなときに向いているか 冒頭に挙げた場面に戻ります。共通しているのは次の 2 点です。 グループの数が多い(十数件から数百件) 合計や平均では判断が決まらず、時間ごとの形で判断が変わる 逆に、グループが数件なら素直に可視化を作れば済みます。ここまで見てきたフライトデータの例も 4 行なので、正直なところ SPARKLINE がなくてもさほど困りません。無理に使う理由はありません。 本命はログパターン分析 ここからは、実務でいちばん効く使い方です。順番に説明します。 ログは「同じ形の繰り返し」でできている アプリケーションのログを開くと、こんな行が延々と続いています。 Connected to backend 10.1.0.4 in 32ms Connected to backend 10.1.0.7 in 28ms Connected to backend 10.1.0.2 in 41ms 人間が見れば「同じ種類のログが 3 件」です。しかし IP アドレスと数値が違うため、文字列としては 3 つとも別物です。BY message でグループ化しても 3 行に分かれてしまい、集計になりません。 CATEGORIZE が「形」ごとにまとめる CATEGORIZE は、似た形式のメッセージを自動でひとつのカテゴリにまとめる関数です。イメージとしては、上の 3 件が「Connected to backend * in *ms」という 1 つのパターンになります。ここまでの例では BY Carrier のようにグループの軸を自分で決めていました。CATEGORIZE を使うと、軸を事前に決める必要がありません。「このインデックスには何種類のログが、それぞれ何件あるのか」を機械に数えさせることができます。 SPARKLINE を足すと、パターンごとの推移が並ぶ この 2 つを組み合わせたのが次のクエリです。ここだけデータを替えて、サンプルデータの Web ログ(kibana_sample_data_logs)を使います。フライトデータと同じ「Add sample data」画面からインストールできて、そのまま試せます。 FROM kibana_sample_data_logs | WHERE @timestamp >= ?_tstart AND @timestamp < ?_tend | STATS count = COUNT(*), trend = SPARKLINE(COUNT(*), @timestamp, 40, ?_tstart, ?_tend) BY pattern = CATEGORIZE(message) | SORT count DESC 結果はパターンごとに 1 行です。画面の仕組みはフライトの例とまったく同じで、違いはグループの軸を CATEGORIZE が自動で作っている点だけです。 図 4: 約 1,600 件のログが 7 つのパターンにまとまり、それぞれに推移が付く 実行すると、直近 7 日間の約 1,600 件のログが 7 つのパターンにまとまりました。行のタイトルには、検出されたパターンがトークン単位で強調表示されます。このデータでは、リクエストの共通部分に加えて、ブラウザーの種類(Firefox、MSIE、Chrome)ごとにパターンが分かれました。 ミニグラフを読んでみます。上位 3 パターン(616 件、464 件、429 件)は、どれも毎日同じリズムで波打つ形です。定常的なトラフィックだと分かります。4 番目の 104 件のパターンは棒がまばらで、断続的にしか現れません。残りの 3 行は 1 件だけの単発です。件数の列だけでは「多い順」しか分かりませんが、形が付くと「定常」「断続」「単発」の区別が一目で付きます。実際のアプリケーションログなら、この「定常」の中からコスト削減の候補を探し、「断続」や「単発」は中身を確かめる、という進め方になります。 なお、クエリを書かずにパターン分析を試す入り口もあります。Discover のクラシックモードで、結果テーブル上部の「View as」メニューを「Patterns」に切り替えると、テキストフィールドのパターン分析を画面操作だけで実行できます。ただし、これは CATEGORIZE とは別の実装です。同じデータで試したところ、Patterns 表示は 3 パターン、CATEGORIZE は 7 グループと、まとまり方が異なりました。まず雰囲気をつかむならこちら、集計やバケット数を自分で決めたくなったら ES|QL で、という使い分けです。 図 5: パターン分析オプション 何がうれしいのか 典型的な場面はログのコスト削減です。ログは取り込み量と保存量に応じて費用がかかるため、件数の多いパターンから削りたくなります。しかし、件数の多いパターンをどう扱うかは件数では決まりません。一日中平坦に流れているパターンは、ただのノイズです。ログレベルを落とすか、取り込み時に捨てるか、安価な保存階層に回せます。一方、障害時だけ跳ねるパターンは、件数が多くても消してはいけない情報です。この 2 つを分けられるのは形だけです。 削るための対処法そのものは単純です。難しいのは、対象を見つけることでした。SPARKLINE は、その発見にかかる時間を縮めます。 冒頭に挙げた残りの 2 つ、検知ルールごとのアラートや、バージョンごとのエラー率も、書き方は同じです。BY の対象をルール名やバージョンに変えるだけで応用できます。 なお CATEGORIZE は Platinum ライセンスが必要です。また、他の式の中では使えず、グループ化の最初に置く必要があります。データが大きい場合は、STATS の前に SAMPLE コマンドを置いて母数を間引くと速くなります。 まとめ クエリは 1 本、傾向は行数ぶん。SPARKLINE の価値は、行が多いときにいちばん出ます。今回は 4 社で 60 行が 4 行になりました。これが数十件のパターンやサービスであれば、差はさらに開きます。上から眺めて、「いま跳ねているのはどれか」「順位の上位は信用できるか」を数秒で絞り込めます。サンプルデータを入れたクラスターがあれば、上のクエリをそのまま貼って確認できます。 参考資料 Introducing SPARKLINE in ES|QL: Spot trends at a glance https://www.elastic.co/search-labs/blog/esql-sparkline-function ES|QL SPARKLINE function(公式リファレンス) https://www.elastic.co/docs/reference/query-languages/esql/functions-operators/aggregation-functions/sparkline Using ES|QL in Discover(グループ表示とパターンのスパークライン) https://www.elastic.co/docs/explore-analyze/discover/try-esql The post ES|QL の SPARKLINE で「ログやエラーの傾向」をひと目でつかむ first appeared on Elastic Portal .
動画
該当するコンテンツが見つかりませんでした






