ADOC ENGINEER’S BLOG
2024-12-20
- ADOC インターナショナル
- ブログ
- Elasticsearchと生成AI、Retrieval-Augmented Generation(RAG)を連携
Elasticsearchと生成AI、Retrieval-Augmented Generation(RAG)を連携
はじめに
いつものADOC TESLABブログとは少し趣の異なるブログとなります。
ADOCはテスト自動化の他にも様々な技術分野で活動しており、Elasticsearchを用いたログ監視/データ分析のサービスも提供しています。
Elasticsearchはメトリックの追跡、ログの管理と分析、APM、機械学習や分析に役立つダッシュボードなどの運用をサポートする様々な機能が搭載されています。しかし、いざエラーを検出した際には運用者がそのエラーやアラートの原因や解決方法についてインターネットなどを利用して調査する必要があります。また、多量にある対応履歴なども参照して問題の解決にあたることになるでしょう。
今回、Elasticsearchと生成AIを連携させることでエラーを検知した場合に自動的に運用者にエラーの詳細と原因、解決方法についてメールで通知するシステムを構築したので紹介します。また、回答の精度向上を目的としてRetrieval-Augmented Generation(RAG)を導入してみました。導入前後で生成AIの回答にどのような変化があったのかについてもご紹介したいと思います。
Elasticsearchとは
ElasticsearchはApache Luceneベースの分散型RESTful検索/分析エンジンです。検索速度や柔軟性に優れており、情報量に合わせてスケーラブルにシステムを拡張することができます。
2010年のリリース以来、世界中の多くの企業で導入されている実績のある検索エンジンです。
検索システム、エンタープライズサーチ、ログ監視、インフラ監視、APM、可用性監視、SIEMなどに利用されています。
システム概要
今回構築したシステムは、ElasticsearchのWatcher(Elasticsearch内のデータを監視して事前に定義されたアクションを実行する機能)を利用して、エラー検出時にその原因と解決方法についての質問を生成AIに送信して、生成AIからの回答を運用者に自動でメール通知する仕組みです。
システムの構成は次の通りです。
図 1.システム構成
エラー検知時フローは次の通りです。
- Watcherが監視対象のアプリログ等からエラーを検知する
- Watcherが検知したログを添えて質問を生成AIに送信する
- 生成AIがインターネット上の情報を加味した回答をElasticsearchに返信する
- Watcherが運用者に生成AIからの回答をe-mail等で送信する
<エラー検知時のメール例(一部抜粋)>
### 解決策
1. **シャードの確認**:
– `GET _cat/shards` APIを使用して、対象インデックスのシャードの状態を確認し、問題があるシャードを修正する。
2. **リソースの確認**:
– ディスク使用量やメモリ使用量をモニタリングし、必要に応じてリソースを増強する。
3. **権限確認**:
– スナップショットを作成するために必要な権限が設定されているか確認し、必要に応じて権限を付与する。
4. **インデックスの設定確認**:
– 対象のインデックスのレプリカシャードが適切に設定されているか確認し、必要に応じて修正する。
5. **ネットワークチェック**:
– ネットワークの接続状況を確認し、必要に応じて通信問題を解決する。
6. **リポジトリ設定の検証**:
– スナップショットリポジトリの設定が正しいか確認し、必要に応じてリポジトリを再設定する。
7. **ログの詳細確認**:
– Elasticsearchのログファイルを確認し、より具体的なエラー原因を特定する。
8. **Elasticsearchのアップデート**:
– お使いのElasticsearchを最新バージョンにアップデートし、既知の問題を解決する。
事前学習済みの生成AIからの回答により、時間をかけてインターネットで情報収集することなくエラーの原因と解決方法を知ることができるようになります。
RAGの導入と効果
生成AIの回答は普遍的なエラーの質問に対しての精度は高いですが、専門的な質問や環境要因が影響する質問に対しての精度は低くなります。例えば、そのエラーが特定の企業の環境によるものである場合、生成AIだけでは原因の特定や解決方法の提示は難しいでしょう。そこで生成AIと過去の対応履歴やマニュアルを組み合わせる技術であるRAGを用いて回答精度の向上を目指してみます。
RAGを含むシステムの構成は次の通りです。
図2.システム構成(RAGあり)
前述のシステムにRAGを導入することで、事前に登録した対応履歴を含めた質問を生成AIにすることができるようになり、より精度の高い回答が期待できるようになります。
RAG導入後のエラー検知時フローは次の通りです。
- Watcherが監視対象のアプリログ等からエラーを検知する
- WatcherがElasticsearch内に登録されている対応履歴を検索してエラーと関連性の高い対応履歴を抽出する
- Watcherが検知したログと抽出した対応履歴を含めた質問を生成AIに送信する
- 生成AIがインターネット上の情報と対応履歴を加味した回答をElasticsearchに返信する
- Watcherが運用者に生成AIからの回答をe-mail等で送信する
<エラー検知時のメール例(一部抜粋)>
### 解決策
1. **シャードの状態の確認**:
– ElasticsearchのAPIを使用して、シャードの状態を確認し、UNASSIGNEDやFAILED状態のシャードを修復します。
2. **ディスク容量の確認**:
– ディスク使用状況を確認し、必要に応じてディスク容量を増やすか、余分なデータを削除して空き容量を確保します。
3. **設定の見直し**:
– 各データノードの設定ファイル(elasticsearch.yml)を確認し、`path.repo`設定を正しいパスに設定します。
4. **権限の確認**:
– スナップショットリポジトリに対する適切な権限があることを確認し、必要に応じて設定を変更します。
5. **バージョン管理**:
– Elasticsearchを最新の安定版にアップグレードし、設定を確認して整合性を保ちます。
RAG導入前の回答はインターネット上に存在している一般的な情報を基にしていましたが、導入後の回答は過去の対応履歴を参考にしています。そのため、運用者の環境にあった原因と解決方法を含む回答を得ることができるようになりました。例えば、RAG導入後は「3.設定の見直し」について修正対象の設定ファイル名とパラメータ名が具体的に示されています。また、エラーに関連性のある対応履歴も併せて通知されるため情報収集の時間を大幅に短縮することが可能になりました。
システム構築フロー
本システムの簡易構築フローは下記の通りです。詳細な構築手順についてはElastic社の公式ドキュメントを参照してください。
- STEP1:Elastic Cloud構築
Elastic Cloudのアカウントを取得してElastic Cloudを構築します。 - STEP2:APIキーを生成
OpenAIのアカウントを取得してChatGPT上でAPIキーを生成します。後述するWatcherとChatGPTを連携させるために使用します。 - STEP3:アクセスログインデックスを登録
監視対象のサーバー群からWatcherで監視するアクセスログのインデックスを登録します。 - STEP4:Watcherを登録
WatcherとはElasticsearchの機能で特定の条件に基づいてデータを監視し、自動的にアラートを発行することができます。特定のクエリやデータの変化を監視し、その結果に応じてアクションを実行するための強力なツールです。
以下に、Watcherの主な機能と基本的な使い方について説明します。
主な機能
監視:定期的に特定のインデックスに対してクエリを実行し、条件に合致するデータを監視します。
アラート発行:条件が満たされた場合に、アラートを発行します。アラートは、メール通知やWebフック、ログへの書き込みなど、さまざまな方法で通知できます。
スケジューリング: Cron表記やインターバル指定で、クエリの実行タイミングを細かく設定できます。
アクション:条件が満たされた場合に実行されるアクションを定義します。メール送信、HTTPリクエスト、インデックスへの書き込みなどがあります。
基本的なWatcher例
WatcherはJSON形式で定義されます。以下は、簡単なWatcherの例です。
PUT _watcher/watch/log_error_watch
{
"trigger": {
"schedule": {
"interval": "10m" // 10分ごとに実行
}
},
"input": {
"search": {
"request": {
"indices": [
"log_index" // 監視対象のインデックス
],
"body": {
"query": {
"match": {
"level": "error" // エラーログを検索
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 1 // ヒット件数が1より大きい場合にアクションを実行
}
}
},
"actions": {
"send_email": {
"email": {
"to": "admin@example.com",
"subject": "Error logs detected",
"body": "There are error logs in the last 10 minutes."
}
}
}
}
Watcherの構成要素
trigger:Watcherが実行されるタイミングを定義します。スケジュールやイベントベースのトリガーが設定できます。
input:監視対象のデータを取得するための入力を定義します。通常はElasticsearchのクエリです。前述の例にあるsearchによる検索以外にもtransformなどを利用して文字列の整形や変数への代入などができます。
condition:アラートを発行するための条件を定義します。条件に合致した場合にアクションが実行されます。
actions:条件が満たされたときに実行されるアクションを定義します。メール通知やWebフック、データのインデックス化などが含まれます。
本システムではWatcherを利用して以下の処理を設定します。
- trigger
- Watcherの定期実行時間を設定
- input
- 事前に決めたキーワードでElasticsearchアプリログを検索するクエリを設定
- ②-1で取得したログをメールに記載する情報用に加工する処理を設定
- ②-1で取得したログを検索キーワードとして対応履歴を検索するクエリを設定
- ②-3で取得した対応履歴を生成AIへの質問文用に加工する処理を設定
- 生成AIへのリクエストに必要なAPI Key等と質問本文を設定
- Condition
- actionの実行条件を設定
- action
- ②-2で加工したログ情報と②-5で生成AIから取得した回答をメールで運用者に送信する処理を設定
ログ監視支援システムの効果
Elasticsearchと生成AIを連携させることでエラー検知時に自動的に原因や対策についてメールで通知されるシステムを紹介しました。これだけでもインターネットで調査する時間や手間が省けるため有用だと感じましたが、いくつか課題が残っていました。生成AIはインターネット上に存在しない企業個別の対応履歴は参照することができません。エラーが発生する度に運用者が過去の対応履歴を確認してエラー解析を実施する必要がありました。
今回は上記に加えて企業個別の対応履歴を生成AIへの質問に付加することでユーザーの環境や状況に沿ったより精度の高い回答を得ることができるようになりました。
ログ監視支援システムの導入により、エラー解析時間の大幅な短縮、解析精度の向上を実現できます。また、エラー解析には高いスキルと監視対象のシステムについての豊富な経験がある技術者が必要でしたが、ログ監視支援システムの導入によりスキルと経験の低い技術者でも対処することが可能になります。
終わりに
日進月歩の勢いで進化しているElasticsearchや生成AIの性能向上とともにログ監視支援システムも成長していきます。今後、より精度の高いエラー解決方法の提示も可能になるでしょう。システムの成長に伴い、より多くのIT人材をシステム監視よりも生産性の高い役割に配置することもできるようになると思います。経済産業省によると2030年には最大79万人のIT人材が不足する可能性があるといわれていますが、ログ監視支援システムをはじめとした生成AIを組み込んだシステムの利活用が人材不足解決の一助となるのではないでしょうか。
見出し2ですH2です
見出し3ですH3です
見出し4ですH4です
見出し5ですH5です
段落です段落です段落です段落です段落です段落です段落です段落です段落です段落です段落です。段落です段落です段落です段落です段落です段落です段落です
段落です段落です段落です段落です段落です段落です段落です段落です段落です段落です段落です。段落です段落です段落です段落です段落です段落です段落です
- はじめに
- Elasticsearchとは
- システム概要
- RAGの導入と効果
- システム構築フローv
- ログ監視支援システムの効果
- 終わりに
- はじめに
- Elasticsearchとは
- システム概要
- RAGの導入と効果
- システム構築フローv
- ログ監視支援システムの効果
- 終わりに
RAGとはRetrieval-Augmented Generation (RAG) は、大規模言語モデル(LLM)によるテキスト生成に、外部情報の検索を組み合わせることで、回答精度を向上させる技術のこと。