0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Elastic Stack v9.3新登場のWorkflowsでワークフローとAIエージェントによるデータ分析を実装する例(第1回)

0
Last updated at Posted at 2026-03-05

はじめに

Elastic v9.3に新しくElastic WorkflowsがTech Previewとして登場しました!
v9.2にGAしたElastic Agent Builderとともに、今後のElasticの使い方を革新する大きな機能です。
このブログではその使い方のほんの一例として、日常的なシステムの監視業務で行うデータ監視、インシデントレポーティング、類似インシデントの検索の3つを自動化する簡易的なフレームワークを、Elasticに付属するサンプルフライトデータを使って作っていきます。
最初から完成形のフレームワークを作ろうとすると、手順がわかりにくくなるので、後続記事でブラッシュアップしながら完成形を目指していきます。

本ブログはElastic Cloudでv9.3のElasticデプロイメントを使用しています。本ブログの内容を行うにはEnterpriseサブスクリプションである必要があります。フリートライアルでも試すことが可能です。

シリーズの他の記事はこちらから参照ください
第1回
第2回
第3回
第4回
第5回
第6回

事前設定:Elastic Workflowsの有効化

Elastic Workflowsはv9.3.0においてはまだTechPreviewのため、利用するには有効化の設定が必要です。
以下のステップで有効化してください。

KibanaのAdvanced Settingsを開きます。Kibanaの中の画面トップの検索バーを使うと楽です。
CleanShot 2026-03-05 at 15.00.36@2x.png

workflowで設定箇所を検索し、トグルで有効化して、最後に保存ボタンを教えて下さい。
CleanShot 2026-03-05 at 15.03.11@2x.png

Webページをリロードして、メニューにWorkflowsが表示されればOKです!

事前設定(オプショナル):Elastic Agent Builderをメニュー表示

v9.3.0のObservabilityソリューションを利用している場合、何も設定しなくてもトップの検索バーからAgent Builder機能にアクセスできます。ただし、左のナビゲーションメニューには最初は表示されていません。
CleanShot 2026-03-05 at 15.06.48@2x.png

もしメニュー表示したい場合、GenAI Settingsを開き...
CleanShot 2026-03-05 at 15.07.50@2x.png

以下のようにAI Agent (Beta)を設定すると、メニューに表示されます。ただし、従来のAI Assistantは使えなくなるので、注意です。
CleanShot 2026-03-05 at 15.08.08@2x.png

使用するデータ: Kibana Sample Data Flights

Elasticに付属するKibana Sample Data Flightsの架空の飛行機の離発着履歴データを使います。下のようなデータです。
CleanShot 2026-02-04 at 18.33.23.png

こちらのデータは以下のIntegrationsのSample Dataからセットアップしてください。
CleanShot 2026-03-05 at 16.35.26@2x.png

CleanShot 2026-03-05 at 16.37.35@2x.png

このブログで作成する部品

チケット(= ElasticのCases)に対して、2月3日のTokyo空港で起きた問題についての情報を追加していき、それを元に原因調査をAIエージェントに行ってもらい、その結果のレポートもチケットに追加することを自動化します。

  • ワークフロー esql_to_case_v2
    ES|QLクエリーでデータの調査の実行し、クエリー結果に対してAIエージェントtransform_output_by_aiによって解説の生成を行い、チケットにその情報を自動登録
    (2月3日のTokyo離発着 の遅延・キャンセルがあったフライトデータの検索)

  • AIエージェント rca_flight_case_agent
    CaseのIDを伝えるとCaseの情報を読み込み、原因分析のRCAレポートをチャットに出力

  • ワークフロー call_rca_agent_and_write_to_case
    Case IDを渡して実行すると、上記のrca_flight_case_agentを呼び出し、さらにその分析結果のレポートをCaseに自動登録する

※ ここで言うAIエージェントはElastic Agent Builderのエージェントを指します。

事前準備 - フライト遅延データを検索するES|QLクエリーの用意

ステップ1で使う検索クエリーを用意します。今回は2月3日のTokyo離発着便で、キャンセルされた OR 大幅な遅延があるデータを検索しています。(後続のブログで柔軟にAI Agentがクエリーの変数を書き換えるようにしていく予定です。)
CleanShot 2026-02-05 at 10.10.59.png

上のES|QL
FROM kibana_sample_data_flights 
| WHERE timestamp >= "2026-02-03T00:00:00" AND timestamp < "2026-02-04T00:00:00" 
| WHERE OriginCityName == "Tokyo" OR DestCityName == "Tokyo" 
| WHERE Cancelled == true OR (FlightDelay == true AND FlightDelayMin >= 60)
| KEEP timestamp, Cancelled, FlightDelay, OriginCityName, DestCityName, Carrier, FlightDelayType, FlightDelayMin, OriginWeather, DestWeather

AIエージェントにクエリーを考えてもらう手もあるかと思いますが、今回はクエリーを自分で用意しました。

事前準備 - チケットの用意

今回はチケット(Case)を事前に用意しておきます。(後続記事にて、AI Agentが自動で作ってくれるようにする予定です。)
Elastic ObservabilityのCasesを使い、このように作ります。
CleanShot 2026-02-05 at 10.20.11.png

Case IDはわかりづらいですが、この右上の...のボタンから取得できます。
CleanShot 2026-02-06 at 12.07.49@2x.png

または、URLのこの部分も同じIDなのでここからも取得できます。
CleanShot 2026-02-05 at 10.20.57.png

ES|QL検索結果をCasesにコメント追記するワークフローesql_to_case_v1を作成

Elastic Workflowsのページから新しいワークフローを下記のように作ります。
CleanShot 2026-02-05 at 10.46.25.png

Elastic Workflow
name: esql_to_case_v1
enabled: true
description: Write ES|QL result to a case comment
tags:
- draft
triggers:
- type: manual
settings:
  timeout: 1m
inputs:
- name: case_id
  type: string

steps:
- name: execute_esql
  type: elasticsearch.esql.query
  with:
    query: >
      FROM kibana_sample_data_flights 
      | WHERE timestamp >= "2026-02-03T00:00:00" AND timestamp < "2026-02-04T00:00:00" 
      | WHERE OriginCityName == "Tokyo" OR DestCityName == "Tokyo" 
      | WHERE Cancelled == true OR (FlightDelay == true AND FlightDelayMin >= 60)
      | KEEP timestamp, Cancelled, FlightDelay, OriginCityName, DestCityName, Carrier, FlightDelayType, FlightDelayMin, OriginWeather, DestWeather
    format: csv

- name: add_response_to_existing_case
  type: kibana.addCaseComment
  with:
    type: user
    owner: observability
    caseId: "{{inputs.case_id}}"
    comment:  '{{ steps.execute_esql.output }}'

右上の再生ボタンでワークフローを実行します。今回のCase Idをパラメータとして渡します。
CleanShot 2026-02-05 at 10.48.54.png

実行結果はこのようになります。
CleanShot 2026-02-05 at 10.52.23.png

ワークフローのステータスが実行中のまま終わらない場合があります。(クルクルアイコンが回ったまま変換しない)
そんなときは上のタブのWorkflow|Executionsで表示を切り替えると、ステータスが反映された表示になるので、いつまでも終わらないと思ったときはこれを行ってみてください。

このようにES|QLクエリーの結果が指定したCSVアップロードフォーマットで記載されました。
CleanShot 2026-02-05 at 11.01.51.png

ES|QL検索結果を自然文に変換するワークフローに調整(esql_to_case_v2)

自動的にクエリー結果をコメント追記できたのはすばらしいのですが、今のままだとコメントが機械的すぎて自然ではありませんよね。
ここでElastic Agent Builderをワークフローに組み込みます。
さきほどのを更新しても良いですが、Cloneできるので、v2として新しいのを作ります。

name: esql_to_case_v2
enabled: true
description: Write ES|QL result to a case comment
tags:
- draft
triggers:
- type: manual
settings:
  timeout: 1m
inputs:
- name: case_id
  type: string

steps:
- name: execute_esql
  type: elasticsearch.esql.query
  with:
    query: >
      FROM kibana_sample_data_flights 
      | WHERE timestamp >= "2026-02-03T00:00:00" AND timestamp < "2026-02-04T00:00:00" 
      | WHERE OriginCityName == "Tokyo" OR DestCityName == "Tokyo" 
      | WHERE Cancelled == true OR (FlightDelay == true AND FlightDelayMin >= 60)
      | KEEP timestamp, Cancelled, FlightDelay, OriginCityName, DestCityName, Carrier, FlightDelayType, FlightDelayMin, OriginWeather, DestWeather
    format: csv

### start: updated from v1 ###

- name: transform_output_by_ai
  type: ai.agent
  with:
    agent_id: "flight_analyzer_agent"
    message: "次のデータをCaseに追記するコメントに変換してください: {{steps.execute_esql.output}}"

- name: add_response_to_existing_case
  type: kibana.request
  with:
    method: POST
    path: /api/cases/{{ inputs.case_id }}/comments
    body:
      type: user
      owner: observability
      comment: '{{ steps.transform_output_by_ai.output }}'
      
### end: updated from v1 ###

クエリー結果を自然文に変換するためのAIエージェント flight_analyzer_agentを作成

次に、上記で記述したflight_analyzer_agentのエージェントをAgent Builderで作成します。
以下のような簡単な定義のエージェントです。このエージェントのToolsはデフォルトにしました。今回はToolsの機能は使わずに済み、このエージェントに繋がっているLLMがサマライズしてくれるだけです。
CleanShot 2026-02-04 at 20.32.50.png

エージェントを作成したら先程のワークフローに戻って、再生ボタンで実行します。Agentの呼び出しステップをクリックすると、LLMが作ってくれたレスポンスがOutputから確認できます。
CleanShot 2026-02-05 at 11.19.51.png

Caseに今度は自然な文章でコメントが追加されました!
CleanShot 2026-02-05 at 11.21.11.png

原因調査のエージェント rca_flight_case_agentを作成

以下のように原因調査のRCA (Root Cause Analysis)を行うエージェントを新規に作成します。
CleanShot 2026-02-05 at 20.45.51.png

このエージェントへのプロンプトのCustom Instructionsは以下のとおりです。

あなたは入力されたCase内の情報を元に原因分析し、指定された報告書フォーマットに変換するアシスタントです。

* 与えられたCase Idを元にCaseの内容を参照してください。
* Caseが扱っている対象の空港(一つ)を識別してください。
* その日のフライトの遅延・キャンセルが、当該空港で発生している問題に起因しているかを検討し、該当する場合は原因をレポートにまとめてください。
* 原因のカテゴリは次のものから一つだけ選んでください:天候、システムトラブル、機材トラブル、その他

### 役割
- 文章から事実情報を抽出し、決められたフィールドに整理してください。
- 推測や創作は行わず、コメントに含まれる情報のみを使用してください。
- 情報が不足している項目は「不明」と記載してください。
- 表現は簡潔で公的な報告書調にしてください。

### 出力形式

必ず以下にあるヘッダ名を出力してください。
必ず以下の「フィールド名: 値」の形式で出力してください。

---
# RCAレポート
対象空港: 
対象日: 
概要: 
影響を受けた便名: 
原因のカテゴリ: 
---

このエージェントにはToolsとして、Casesを参照するplatform.core.casesを設定します。
CleanShot 2026-02-04 at 20.56.40.png

チャットでこのエージェントのテストをします。このようにCase IDを渡して、指定した通りのレポートを返してくれました。
CleanShot 2026-02-05 at 20.50.53.png

原因分析を実行し、結果をコメントに追記するワークフロー call_rca_agent_and_write_to_caseの作成

では、このエージェントを実行して、結果をコメントとして追加するワークフローを作成します。

Elastic Workflow
name: call_rca_agent_and_write_to_case
enabled: true
description: Research airport problem resulting in flight cancels and delays
tags:
- draft
triggers:
  - type: manual
settings:
  timeout: 1m
inputs:
- name: case_id
  type: string

steps:
- name: rca_flight_case_agent
  type: ai.agent
  with:
    agent_id: "rca_flight_case_agent"
    message: "Case Id: `{{inputs.case_id}}` を確認し、原因を報告してください"

- name: add_response_to_existing_case
  type: kibana.addCaseComment
  with:
    caseId: "{{inputs.case_id}}"
    comment: "{{ steps.rca_flight_case_agent.output }}"
    type: user
    owner: observability

このワークフローを実行したらケースにこのように追加されました。
CleanShot 2026-02-05 at 20.56.02.png

おわり

今回はElastic WorkflowsやAgent Builderを使い、データ分析とその結果をCasesにまとめることを実践しました。
まだ理想的な使用感にはなっていませんが、その辺りは今後の続編でやっていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?