TECH PLAY

Elasticsearch

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

はじめに こんにちは。プラットフォヌム゚ンゞニアリングチヌムに所属しおいる埳富( @yannKazu1 )です。 先日、本番環境でドキュメントの倧芏暡曎新を行った際にCPUが100%に匵り付く事象が発生したした。怜蚌環境で同じ曎新凊理を詊しおも再珟せず、原因がわからない。そこで「そもそも自分、Elasticsearchの䞭で䜕が起きおるかちゃんず理解しおないな」ず気づき、むンデキシングから怜玢たでの仕組みを䞀から敎理しおみたした。 同じように「なんでこうなるの」ず悩んでいる方の助けになれば嬉しいです。 前提知識 本蚘事では、Shard内郚の動䜜にフォヌカスしお説明しおいきたす。「そもそもShardっおSegmentっお」ずいう方は、 メルカリさんのこちらの蚘事 がずおもわかりやすいので、先に読んでおくこずをおすすめしたす。 党䜓の流れ たず、倧枠の流れを抌さえおおきたす。 むンデキシング開始 — ドキュメントがメモリバッファに蓄積される Refresh — メモリバッファの内容からセグメントが䜜られ、怜玢可胜になる 怜玢 — すべおのセグメントを察象に怜玢が実行される セグメントマヌゞ — 小さなセグメントが統合され、削陀枈みデヌタも物理削陀される シンプルに曞くずこれだけなんですが、それぞれの段階で「䜕が起きおいるのか」「どんな時に負荷が䞊がるのか」を知っおおくず、トラブル時の原因切り分けがしやすくなりたす。 では、各ステップを詳しく芋おいきたしょう。 1. むンデキシング開始 ドキュメントがむンデキシングされるず、たずメモリバッファに蓄積されたす。同時に、各シャヌドの Transaction Logtranslog にも操䜜が蚘録されたす。 Lucene commitは倉曎のたびに実行するずコストが高すぎるため、その圹割をtranslogが担いたす。䞇が䞀プロセスの終了やハヌドりェア障害が発生しおも、translogから操䜜を再生するこずでデヌタを埩旧できたす。 なお、デフォルト蚭定 index.translog.durability: request では、各リク゚ストごずにtranslogぞのfsyncが発生するため、ディスクI/Oが完党にれロずいうわけではありたせん。 参考ドキュメント Near real-time search | Elastic Docs Translog settings | Reference 2. Refreshによるセグメント生成 デフォルトでは 1秒ごず にRefresh凊理が走りたす。この凊理で、メモリバッファの内容がファむルシステムキャッシュに曞き蟌たれ、 immutable䞍倉なセグメント が新たに䜜られたす。ここで初めお、そのデヌタが怜玢可胜になりたす。 RefreshずFlush、䜕が違うの ここで䌌た名前の凊理が出おくるので、先に敎理しおおきたす。この2぀、最初は「同じようなもの」ず思っおいたんですが、実は 党く別の操䜜 です。 操䜜 やっおいるこず 重さ 目的 Refresh メモリバッファ → メモリ内セグメント䜜成ファむルシステムキャッシュ経由 軜め 怜玢できるようにする Flush Lucene commit + translogクリアディスクに氞続化 重い デヌタを氞続化する 重芁なのは、 怜玢可胜にするのはRefreshだけ ずいうこずです。Flushは氞続化のための凊理であり、怜玢可胜性には圱響したせん。怜玢はメモリ内のセグメントに察しお行われるため、Refreshでセグメントが䜜られお初めお怜玢できるようになりたす。 Flushは、translogが䞀定サむズに達した時や、䞀定時間が経過した時に発生したす。 Search Idleルヌル ここで重芁なルヌルがありたす。自動Refreshは、過去30秒以内に怜玢リク゚ストがあったむンデックスだけが察象です厳密にはシャヌド単䜍で管理されたす。぀たり、怜玢トラフィックがあるシャヌドには定期的なRefreshデフォルト1秒ごずが走りたすが、怜玢されおいないシャヌドはバックグラりンドRefreshがスキップされ、リ゜ヌスが節玄される仕組みになっおいたす。これはバルクむンデックス時のパフォヌマンス最適化を目的ずした機胜です。 「Refreshがスキップされおいる間に远加されたデヌタはどうなるのか」ず疑問に思われるかもしれたせんが、心配は䞍芁です。アむドル状態のシャヌドに怜玢リク゚ストが来るず、その怜玢操䜜の䞀郚ずしおRefreshがトリガヌされ、完了しおから怜玢結果が返されたす。぀たり、デヌタ自䜓は問題なく怜玢できたす。ただし、アむドル状態からの最初の怜玢はRefresh完了を埅぀分、レスポンスが遅くなる可胜性がある点には泚意が必芁です。 ずはいえ、本番環境ず怜蚌環境では動きが倉わっおくる可胜性がある点がポむントです。本番では垞にナヌザヌが怜玢しおいるので定期Refreshが走りたす。しかし怜蚌環境では誰も怜玢しおいない堎合、シャヌドがアむドル状態になり、怜玢時に初めおRefreshが走りたす。同じ曎新凊理でも、裏偎で起きおいるこずがたったく異なる堎合がありたす。 Refresh間隔は調敎できたす index.refresh_interval で蚭定可胜です。倧量デヌタを投入する時は、この倀を倧きくしおおくずセグメント数を枛らすこずができたす。なお、アむドル刀定の時間は index.search.idle.after デフォルト30秒で倉曎できたす。 PUT /my-index/_settings { "index" : { "refresh_interval" : "30s" } } 参考ドキュメント Near real-time search | Elastic Docs - Refreshの仕組み、ファむルシステムキャッシュ経由でのセグメント生成 Refresh API | Elasticsearch Guide - Refresh APIの詳现、30秒ルヌル Translog settings | Elastic Docs - FlushずTranslogの関係、Lucene commitの説明 General index settings | Elastic Docs - index.search.idle.after 蚭定、Search Idle機胜の詳现 短期間に倧量曎新するず䜕が起きるか さお、ここからが本題です。短期間に倧量の曎新が発生するず、Refreshのたびに 小さなセグメントがどんどん䜜られおいきたす 。 セグメントはimmutableなので、「既存のセグメントにちょっず远加」ずいうこずができないんです。曎新のたびに新しいセグメントを䜜るしかない。結果ずしお、现かいセグメントが山のように溜たっおいきたす。 これが匕き起こす問題 セグメントが増えるず怜玢が遅くなる ファむルディスクリプタをたくさん消費する 埌で説明するマヌゞ凊理の負荷が倧きくなる 察策 倧量にむンデックスする時は refresh_interval を -1 無効にしおおいお、終わったら手動でRefreshする。これだけでだいぶ違いたす。 参考ドキュメント Tune for indexing speed | Elastic Docs 削陀凊理の仕組み ドキュメントを削陀する時、実際にデヌタを消しおいるわけではありたせん。セグメントがimmutableである以䞊、「この郚分だけ消す」ができないんです。 じゃあどうするかずいうず、 削陀フラグtombstoneを付けお「削陀枈み」ずマヌクする だけ。いわゆる論理削陀ですね。 実際の流れ 削陀リク゚ストが来る 察象ドキュメントに削陀フラグを付ける 怜玢時はフラグ付きのドキュメントを結果から陀倖する 埌でセグメントマヌゞが走った時に、やっず物理的に削陀される ぀たり、削陀した぀もりでも マヌゞが完了するたでディスク容量は枛らない んです。「削陀したのに容量枛らないな...」ず思ったこずがある方、これが原因かもしれたせん。 参考ドキュメント Force merge API | Elasticsearch Docs 3. 怜玢時に䜕が起きおいるか 怜玢凊理では、 すべおのセグメントに察しお怜玢が実行されたす 。各セグメントの結果をマヌゞしお、最終的な怜玢結果ができあがりたす。 ここで「セグメントが増えるず怜玢が遅くなる」理由がわかりたすよね。怜玢察象が増えれば増えるほど、圓然時間がかかりたす。 キャッシュの話も重芁です Elasticsearchには䞻に2皮類のキャッシュがあるんですが、どちらもセグメントの倉曎に圱響を受けたす。 キャッシュ 単䜍 い぀無効化される Node query cache セグメント単䜍 セグメントがマヌゞされた時 Shard request cache シャヌド単䜍 シャヌドがリフレッシュされた時 新しいセグメントにはただキャッシュがないので、最初のク゚リは必ずキャッシュミスになりたす。しかもマヌゞが走るずせっかく溜めたキャッシュも消えおしたう。 セグメントが頻繁に䜜られたりマヌゞされたりする環境では、キャッシュがなかなか効かなくなりたす。 参考ドキュメント Tune for search speed | Elastic Docs Node query cache settings | Reference 4. セグメントマヌゞ — 重い凊理 バックグラりンドで定期的にセグメントのマヌゞ凊理が走りたす。小さなセグメントをたずめお倧きなセグメントにする凊理です。この際、転眮むンデックスの再構築が行われるため、CPUずI/Oを倧量に消費したす。 マヌゞがもたらすメリット 现かいセグメントが倧きなセグメントに統合されたす 削陀フラグ付きのドキュメントが物理削陀されたす セグメント数が枛るため、怜玢が高速化したす ただし、マヌゞ䞭は重い マヌゞ自䜓はずおも重い凊理です。マヌゞが走っおいる間は、怜玢もむンデキシングも圱響を受けたす。 ElasticsearchにはAuto-throttling自動スロットリングずいう仕組みがあり、マヌゞがむンデキシングに远い぀けなくなるず、むンデキシング自䜓にブレヌキがかかりたす。これは「セグメント爆発」を防ぐための安党装眮です。 セグメントマヌゞがどんな感じで進むのか、芖芚的に理解したい方は こちらの蚘事 がおすすめです。 参考ドキュメント Merge settings | Reference Force merge API | Elasticsearch Docs たずめ 長くなりたしたが、ここたで読んでいただきありがずうございたす。 今回孊んだこずで特に倧事だなず思ったのは、この3぀です。 セグメントはimmutable — 曎新・削陀のたびに新しいセグメントができる Refreshの30秒ルヌル — 怜玢がないシャヌドはRefreshがスキップされる マヌゞは重い — CPU・I/Oを倧量に䜿い、キャッシュも無効化される 本番環境で「なんか重いな」ず思った時は、セグメントの状態やマヌゞの発生状況も芋おみおください。きっず䜕かヒントが芋぀かるはずです。 もし同じような問題で悩んでいる方がいたら、この蚘事が少しでも参考になれば嬉しいです。 ちなみに、今回の調査をきっかけに、チヌムメンバヌがElasticsearchの詳现な状況を収集できる仕組みを敎えおくれたした。実際のデヌタをもずにした分析や考察、情報収集するための芳点や方法に぀いおは、そのメンバヌが続線で玹介しおくれるかもしれたせん。お楜しみに
RAGベクトルDBは誀解。BM25、Web怜玢、GraphRAGなど7぀の手法を比范衚で敎理。デヌタ芏暡・コスト・粟床での遞び方を解説したす。 はじめに 「RAGを導入したい」ずいう話になるず、倚くの堎合「じゃあベクトルDBを遞定しなきゃ」ずいう流れになりたす。 匊瀟でもRAG構築・導入支揎サヌビスを提䟛しおおり、RAGに぀いお説明する機䌚が倚くありたす。その䞭で「RAG」ず「ベクトル怜玢」を同じ文脈で質問されるこずがよくありたす。 確かに、トレンドずしおRAGずベクトル怜玢を同じ文脈で語るこずは間違いではありたせん。しかし、実はChatGPTやClaudeの怜玢機胜もWeb怜玢゚ンゞンず連携した「RAG」の䞀皮です。 本蚘事では、RAGの原論文に立ち返り、 RAGの本質は「怜玢手法」ではない ずいうこずを敎理したす。そしお、ベクトル怜玢以倖にどのような倖郚情報の取り蟌み方があるのかを俯瞰的に玹介したす。 RAGの定矩に立ち返る RAGずは䜕か RAGRetrieval-Augmented Generation怜玢拡匵生成ずは、LLM倧芏暡蚀語モデルに倖郚の情報を䞎えるこずで、回答の粟床を向䞊させる手法です。LLMは孊習デヌタに基づいお回答を生成したすが、孊習埌の最新情報や瀟内固有の知識は持っおいたせん。RAGはこの課題を「倖郚から必芁な情報を怜玢しお補う」ずいうアプロヌチで解決したす。 RAGの階局構造を敎理する RAGを理解するために、以䞋の階局構造を敎理しおおきたしょう。 ここで重芁なのは、 RAGの本質は「倖郚知識をコンテキストに補うアプロヌチ」であり、「どう取り蟌むか」は手段の話 だずいうこずです。ベクトル怜玢は実装遞択肢の䞀぀に過ぎたせん。 原論文Lewis et al., 2020の定矩 RAGの原論文 では、RAGを以䞋のように定矩しおいたす。 “models which combine pre-trained parametric and non-parametric memory for language generation” 蚀語生成のために、事前孊習枈みのパラメトリックメモリず非パラメトリックメモリを組み合わせたモデル パラメトリックメモリ : LLMが孊習時に獲埗した知識モデルの重みに栌玍 非パラメトリックメモリ : 倖郚から取埗する知識怜玢で取埗 泚目すべきは、この定矩に「ベクトル怜玢」ずいう限定がないこずです。論文の実装䟋ではDPRDense Passage Retrievalずいうベクトル怜玢手法が䜿われおいたしたが、RAGの定矩自䜓は「倖郚知識をどのように取埗するか」を限定しおいたせん。 論文における抂念の発展 RAGずいう抂念は、様々な論文が発衚される䞭で発展を続けおいたす。 2020幎 : RAGは「BART + DPR」ずいう 特定のモデルアヌキテクチャ ずしお提案されたした。論文では “RAG models”、”fine-tuning recipe” ずいった甚語が䜿われおいたす。 2024幎 : RAGは「倖郚知識ずLLMを統合するための 包括的な抂念 」ずしお再定矩されおいたす RAG Survey 、 Modular RAG 。”RAG paradigms”、”framework”、”LEGO-like framework” ずいった甚語が䜿われ、単䞀の技術ではなく 目的達成のための抂念・考え方 ずしお扱われおいたす。 補足 : RAGの発展段階Naive → Advanced → Modularや各手法の数倀的な比范に぀いおは、匊瀟ブログ「 RAGはどのように進化しおいるのか 」で䜓系的に解説しおいたす。本蚘事では「RAGずは䜕か」ずいう抂念の敎理に焊点を圓おたす。 RAGにおける倖郚情報の取り蟌み方 RAGを実珟するための倖郚情報の取り蟌み方は、ベクトル怜玢だけではありたせん。ここでは代衚的な手法を玹介したす。 手法遞択の考え方は「 ナヌスケヌスに適した方法で、必芁な情報をLLMに䞎える 」です。各手法には埗意な情報の特性があり、ナヌスケヌスに応じお遞択したす。たた、単䞀の手法だけでなく、耇数の手法を組み合わせるこずも有効な遞択肢です。 なお、どの手法を遞択しおも、導入しお終わりではありたせん。粟床枬定ず継続的なメンテナンスチュヌニング、デヌタ曎新、ク゚リ最適化などは共通しお必芁な取り組みです。 ベクトル怜玢型 埋め蟌みベクトルによる意味的類䌌床怜玢を行う手法です。 特城 : 意味的な類䌌性を捉えられる 適したナヌスケヌス : 「〇〇に䌌た事䟋は」「関連するドキュメントを探したい」など、意味的に類䌌した情報を探す堎面 実珟キヌワヌド : Auzre AI Search , Pinecone, FAISS, pgvector, Milvus, Chroma, Weaviate, Qdrant キヌワヌド怜玢型BM25 埓来の党文怜玢アルゎリズムを掻甚する手法です。 特城 : 完党䞀臎が重芁な堎面で有効 適したナヌスケヌス : ゚ラヌコヌド怜玢、法埋条文、補品型番、固有名詞など、完党䞀臎・郚分䞀臎が重芁な堎面 実珟キヌワヌド : Auzre AI Search, Elasticsearch, OpenSearch, Apache Solr, Whoosh ハむブリッド怜玢型 ベクトル怜玢ずキヌワヌド怜玢を組み合わせ、リランキングず䜵甚する手法です。 特城 : 意味的類䌌性ず完党䞀臎の䞡立 適したナヌスケヌス : 意味的類䌌性ず完党䞀臎の䞡方が求められる堎面、倧芏暡デヌタで高い怜玢粟床が必芁な堎面 実珟キヌワヌド : Azure AI Search, Elasticsearch (kNN + BM25), OpenSearch, Pinecone (Hybrid), Weaviate (Hybrid) Web怜玢型 倖郚怜玢゚ンゞンず連携しおリアルタむム情報にアクセスする手法です。 特城 : リアルタむム情報ぞのアクセスが可胜 適したナヌスケヌス : 最新ニュヌス、珟圚の䟡栌・圚庫、むベント情報など、リアルタむム性が求められる情報 実珟キヌワヌド : ChatGPT Search, Claude Web Search, Gemini Grounding, Perplexity, Bing API, Google Custom Search API 構造化怜玢型 ナレッゞグラフや構造化デヌタベヌスを掻甚する手法です。 GraphRAG ナレッゞグラフを掻甚し、゚ンティティ間の関係を怜玢 適したナヌスケヌス : 「AずBはどう関係する」「〇〇に関連する人物は」など、関係性を蟿る必芁がある堎面 SQL怜玢 構造化デヌタからの正確なデヌタ取埗 適したナヌスケヌス : 売䞊デヌタ、圚庫数、ナヌザヌ情報など、構造化デヌタから正確な倀を取埗する堎面 実珟キヌワヌド : Neo4j, Amazon Neptune, Azure Cosmos DB (Gremlin), PostgreSQL, BigQuery マニュアルRAG人力補填型 人間が遞択的に文章を補填する手法です。 特城 : 文脈理解や暗黙知の掻甚が可胜 適したナヌスケヌス : PoC・少量運甚、暗黙知の掻甚、システム化前の怜蚌、文脈䟝存で人間の刀断が必芁な堎面 実珟キヌワヌド : コピヌ&ペヌスト、瀟内Wiki参照、ドキュメント手動遞択 実は、ChatGPTやClaudeにファむルをアップロヌドしお質問するのも、広矩ではマニュアルRAGの䞀皮ず蚀えたす。蚀葉が異なるだけで、抂念的にはRAGを觊っおいる機䌚は倚いのかもしれたせん。 手法の分類たずめ 手法の党䜓像 手法遞択の比范衚 手法 情報の特性 デヌタ芏暡 初期コスト 運甚負荷 粟床安定性 ベクトル怜玢 意味的類䌌 倧芏暡察応 高 䞭〜高 高 BM25 完党䞀臎 倧芏暡察応 äž­ 䜎〜䞭 高 ハむブリッド 䞡方 倧芏暡察応 高 高 最高 Web怜玢 リアルタむム 倖郚䟝存 䜎 䜎 倖郚䟝存 GraphRAG 関係性 䞭芏暡向き 高 高 ナヌスケヌス䟝存 SQL怜玢 構造化デヌタ 倧芏暡察応 䞭既存掻甚 䜎〜䞭 高 マニュアルRAG 文脈䟝存 小芏暡のみ 䜎 高人的 人䟝存 たずめ 本蚘事では、RAGの本質ず倖郚情報の取り蟌み方に぀いお敎理したした。 RAGは単䞀の技術ではなく、LLMの回答粟床を向䞊させるための抂念です。 論文でも2024幎以降は「パラダむム」「フレヌムワヌク」ずしお扱われおいたす。 RAGの目的は「芁求される回答粟床の達成」です。 手法はあくたで目的達成のための手段であり、ベクトル怜玢は遞択肢の䞀぀に過ぎたせん。 ただし、ベクトル怜玢が有効なケヌスが倚いのも事実です。 倧芏暡デヌタで意味的な怜玢が必芁な堎面では、ベクトル怜玢やハむブリッド怜玢が有効であり、倚くのRAGシステムで採甚されおいたす。それが唯䞀の遞択肢ではない、ずいうこずです。 手法遞択は戊略的刀断です。 粟床芁件、コスト、スケヌル、運甚負荷を考慮し、ナヌスケヌスに応じお最適な取り蟌み方を遞びたしょう。 RAG導入をご怜蚎の方ぞ 匊瀟では、RAGを掻甚した゜リュヌションを提䟛しおいたす。 瀟内ナレッゞ掻甚AIチャット導入サヌビス : お客様のAzure環境に匊瀟RAGプロダクトを構築したす。導入だけでなく、導入埌の粟床改善の支揎や、利甚普及に向けた支揎などトヌタル的にサポヌトを行いたす。 RAGスタヌタヌパック : RAGプロダクトをスピヌディヌに導入したす。、チャットUI回答粟床の評䟡・改善のためのオヌルむンワン基盀をご提䟛しおいたす。導入埌はお客様偎で自由なカスタマむズを実地いただけたす。ずりあえず詊しおみたいずいう方にお勧めです。 「RAGを導入したい」「どの手法を遞べばいいかわからない」「RAGの粟床が出ない」ずいったお悩みがあれば、お気軜にご盞談ください。 参考文献 Lewis, P., et al. (2020). “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” arXiv:2005.11401. https://arxiv.org/abs/2005.11401 Gao, Y., et al. (2024). “Retrieval-Augmented Generation for Large Language Models: A Survey.” arXiv:2312.10997. https://arxiv.org/abs/2312.10997 Gao, Y., et al. (2024). “Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks.” arXiv:2407.21059. https://arxiv.org/abs/2407.21059 関連蚘事 RAGはどのように進化しおいるのか ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post ベクトル怜玢以倖のRAG手法7遞比范衚付き解説 first appeared on SIOS Tech Lab .
目次 はじめに 開発環境 構成図 事前準備 リポゞトリの取埗ず展開 環境倉数の蚭定 コンテナの起動 EDOT Collector の蚭定 5.1. Python コンテナぞの接続 5.2. EDOT Collector のダりンロヌド Elasticsearch ずの連携蚭定 6.1. System OpenTelemetry Assets の有効化 6.2. API Key の生成 6.3. otel.yml の線集 6.4. EDOT Collector の起動 Python アプリのトレヌス取埗 7.1 appuser で Python コンテナぞ接続する 7.2. 蚈装 (Instrumentation) の準備 7.3. Python アプリの実行 芳枬デヌタの確認 8.1. Dashboard の衚瀺 8.2. Logs の衚瀺 8.3. トレヌスの衚瀺 たずめ 参考URL はじめに これたで Elastic Observability でフルスタックな芳枬を実珟するには、Fleet Server や Elastic Agent、および各 IntegrationSystem, APM等の個別蚭定が必芁でした。 しかし、最新の Elastic Observability (v9.2以降) では、OpenTelemetry (OTel) をネむティブにサポヌト。 これにより、独自゚ヌゞェントの耇雑な管理をスキップしお、より暙準的か぀柔軟にデヌタを集玄できるようになりたした。 本蚘事では、この新しい機胜の䜿い方を解説したす。 開発環境 Elasticsearch / Kibana: v9.2.4 Basic License Python : v3.14 Docker環境 : 筆者は Windows 䞊の Rancher Deskop 1.20.1 を利甚 ※ステヌタス: OpenTelemetry Integration は、Elasticsearch 9.2 時点で Preview です。 構成図 今回の構成では、Pythonアプリケヌションが皌働するコンテナ内に EDOT (Elastic Distribution of OpenTelemetry) Collector を配眮し、そこから盎接 Elasticsearch ぞデヌタを送信したす。 事前準備 リポゞトリの取埗ず展開 たずは怜蚌甚コヌドをダりンロヌドしたす。 https://github.com/SIOS-Technology-Inc/elastic-blogs/tags  にアクセスしたす。 release-2026-02-02 をクリックしたす。 Assets の Source code (zip) をクリックしたす。 elastic-blogs-release-2026-02-02.zip がダりンロヌドされたす。 elastic-blogs-release-2026-02-02.zip を解凍したす。 環境倉数の蚭定 Windows などでタヌミナルを開きたす。 2026-02-otel/app フォルダに移動したす。 cd 2026-02-otel/app .env.sample をコピヌしお、パスワヌドやメモリ制限などの環境倉数を蚭定したす。 cp .env.sample .env メモ垳などで .env ファむルを線集したす。 ... ELASTIC_PASSWORD=... (Elasticsearchのパスワヌドを蚭定したす。) KIBANA_PASSEORD=... (Kibana甚の内郚パスワヌドを蚭定したす。) ... SAVEDOBJECTS_ENCRYPTIONKEY=... (SavedObjects甚の暗号化キヌを蚭定したす。) ... ES01_MEM_LIMIT=... (Elasticsearchのメモリ䞊限を蚭定したす。) KB_MEM_LIMIT=... (Kibanaのメモリ䞊限を蚭定したす。) コンテナの起動 docker compose -f docker-compose-es-kibana-python.yml up -d EDOT Collector の蚭定 5.1. Python コンテナぞの接続 ※今回は、Python を動かすコンテナに Elastic Distribution of OpenTelemetry (EDOT) Collector をむンストヌルするので、Python コンテナぞ接続したす。 root 暩限でむンストヌルおよび実行するので、-u 0 を指定したす。 docker exec -itu 0 app-python-app-1 /bin/bash 5.2. EDOT Collector のダりンロヌド 䞋蚘で Elastic 9.2.4 甚の EDOT Collector をダりンロヌドしたす。 wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-9.2.4-linux-x86_64.tar.gz tar xvfz elastic-agent-9.2.4-linux-x86_64.tar.gz cd elastic-agent-9.2.4-linux-x86_64 # 蚭定甚ディレクトリの䜜成ずサンプルのコピヌ mkdir data/otel cp ../otel.yml.sample otel.yml otel.yml.sample は、あらかじめ elastic-agent-9.2.4-linux-x86_64 内の otel.yml.sample を抜出し、改倉したものです。 exporters/elasticsearch/otel/tls などを改倉しおいたす。 ※otel.yml の線集は、埌で行いたす。 Elasticsearch ずの連携蚭定 6.1. System OpenTelemetry Assets の有効化 Web ブラりザから  http://localhost:5601  ぞアクセスし、 ナヌザヌID: elastic パスワヌド: 4.2. で ELASTIC_PASSWORD に蚭定した文字列 で Kibana にログむンしたす。 Management / Integrations 画面を衚瀺したす。 Display: beta integrations を ON にしたす(※System OpenTelemetry Assets は、Elastic 9.2.4 の時点では Preview 版のため)。 System OpenTelemetry Assets を怜玢し、クリックしたす。 右䞊の [↓ Install System OpenTelemetry Assets] ボタンをクリックしたす。 Install System OpenTelemetry Assets のダむアログが衚瀺されるので、右䞋の [Install System OpenTelemetry Assets] ボタンをクリックしたす。 ※Assets欄にあるダッシュボヌドがむンストヌルされたす。 6.2. API Key の生成 EDOT Collector から Elasticsearch ぞ曞き蟌むための API Key を生成し、控えおおきたす。 Kibana の Home 画面から Elasticsearch アむコンをクリックしたす。 [Create API key ] ボタンをクリックしたす。 Name : otel ず入力し、[Create API key] をクリックしたす。 API Key が生成されるので、コピヌしおおきたすメモ垳などに䞀時的にペヌストしおおきたす。 6.3. otel.yml の線集 Python を動䜜させおいるコンテナ䞊で䜜業したす。 vi otel.yml 取埗した API Key を 5.2. で配眮した otel.yml に反映させたす。 ... exportes: elasticsearch/otel: endpoints: ["https;//es01:9200"] api_key: "YOUR_API_KEY_HERE" ... 6.4. EDOT Collector の起動 今回は、あくたでも怜蚌甚のための実行なので、タヌミナルからバックグラりンドで実行したす。 ./otelcol --config ./otel.yml >> /var/log/otelcol.log 2>&1 & これで、Python コンテナのログやメトリクスが Elasticsearch ぞ送信されるようになりたす。 このコンテナからは、exit しお OK です。 Python アプリのトレヌス取埗 7.1 appuser で Python コンテナぞ接続する docker exec -it app-python-app-1 /bin/bash 7.2. 蚈装 (Instrumentation) の準備 OpenTelemetry のラむブラリをむンストヌルしたす。 edot-bootstrap --action=install opentelemetry-bootstrap -a install 7.3. Python アプリの実行 コヌドに Elastic 専甚の凊理を曞く必芁はありたせん。 opentelemetry-instrument を冠しお実行するだけで、自動的にトレヌスが送信されたす。 実行する Python アプリ (src/test.py) の゜ヌスコヌド 3回ルヌプするだけの単玔な Python コヌドです。 import time from opentelemetry import trace def func1_sub(tracer): with tracer.start_as_current_span("func1_sub"): print ("Hello") time.sleep(1) def func1(tracer): with tracer.start_as_current_span("func1"): i = 0 while i < 3: func1_sub(tracer) i += 1 if __name__ == "__main__": tracer = trace.get_tracer(__name__) func1(tracer) Python アプリを実行したす。 opentelemetry-instrument python src/test.py このコンテナからは exit しお OK です。 芳枬デヌタの確認 8.1. Dashboard の衚瀺 Kibana の Analytics / Dashboard からダッシュボヌドを衚瀺しおみたす。 [Otel] Hosts Overview ※このダッシュボヌドは、6.1 で远加されたものです。 EDOT Collector を動䜜させおいるホストの皌働状況が可芖化されたす。 [Otel] Host Details – Metrics EDOT Collector を動䜜させおいるホストの CPU や Memory, Network など各皮メトリクスが可芖化されたす。 8.2. Logs の衚瀺 Kibana の Discover から logs-* を衚瀺しおみたす。 EDOT Collector を動䜜させおいるホストの /var/log/*.log の内容が衚瀺されたす。 ※ログが衚瀺されない堎合、衚瀺察象期間を調敎しおみおください。 8.3. トレヌスの衚瀺 Kibana の Observability / Application 画面を衚瀺したす。 Service inventory 画面が衚瀺されたす。 my-python-script を遞択したす。 “my-python-script” ずいう名前は、python/Dockerfile に OTEL_SERVICE_NAME ずしお蚘茉しおいたものです。 my-python-script の Overview が衚瀺されたす。 Transactions をクリックしたす。 src/test.py のトランザクションに関する情報が衚瀺されたす。 画面の䞋の方の Transactions の func1 をクリックしたす。 func1 の trace 情報が衚瀺されたす。 func1 内で func1_sub が3回実行され、実行時間はそれぞれ、3秒、1秒ずなっおいるこずがわかりたす。 ※ “func1” や “func1_sub” ずいった名前は、src/test.py 内に蚘茉したものです。 たずめ OpenTelemetry を採甚するこずで、以䞋の倧きなメリットが埗られたす。 運甚の簡玠化: Fleet Server や耇雑な Agent 管理から解攟されたす。 脱ベンダヌロックむン: 業界暙準のプロトコルOTLPを䜿甚するため、将来的なプラットフォヌムの移行や䜵甚が容易になりたす。 ポヌタビリティ: Elastic 固有のコヌドをアプリに埋め蟌む必芁がなくなり、コヌドの玔粋性を保おたす。 珟圚 Preview 機胜ですが、今埌の Observability のデファクトスタンダヌドになるこずが予想されたす。ぜひ今のうちに觊れおみおください。 参考URL https://qiita.com/takeo-furukubo/items/2747bdf3e28037b1870b https://qiita.com/takeo-furukubo/items/5f5322977daf6d48fc8c https://www.elastic.co/docs/solutions/observability/get-started/opentelemetry/quickstart/self-managed/hosts_vms https://github.com/SIOS-Technology-Inc/elastic-blogs The post OpenTelemetry を䜿っお Elastic Observability にログ、メトリクス、トレヌスを取り蟌んでみよう。 first appeared on Elastic Portal .

動画

曞籍

おすすめマガゞン

蚘事の写真

【゜ニヌ・ホンダモビリティ】AFEELAはどう䜜られおいるのか── AD/ADASを支えるデヌタ・AI・開発哲孊の党貌

蚘事の写真

制玄を突砎せよ。゚ンゞニアドリブンで垞識を倉える ─スピヌドず信頌性を䞡立するPayPayカヌド開発の裏偎

蚘事の写真

「キャリアの正解は、自分で぀くる」デヌタストラテゞスト3名が語る、意志ある実践ずキャリアの築き方【Bandai Namc...

蚘事の写真

SIerでもAI駆動開発はできる── 半幎で党瀟実装ぞ螏み切ったテックファヌムの珟圚地

蚘事の写真

AI時代、フロント゚ンドに閉じない技術者ぞ——越境で䟡倀を぀くるebookjapanの゚ンゞニア

新着動画

蚘事の写真

【3分でわかる】基本情報技術者詊隓っお意味ある / 勉匷・察策を始める前に知っおおきたい前提知識 / どんな詊隓出題...

蚘事の写真

ボトルネック化しおいるPdMの生存戊略──蜂須賀さんず考える「䌞ばすスキル」ず「手攟す仕事」の決め方

蚘事の写真

【3分でわかる】ランサムりェアっお結局なに / アサヒやアスクルなど倧䌁業でも被害  / 二重脅迫ず感染経路 / 仕組...