LoginSignup
0
0

APMでElasticsearchのクエリーをどこまで分析できるかやってみた

Last updated at Posted at 2023-12-13

はじめに

本記事は2023.12.13のElasticsearch勉強会で話した内容です。デモを見たい場合、Youtubeにこれから上がる勉強会の動画(最後のセッション)をご覧ください。
利用環境はElasticsearch v8.11, Elastic APM Python Agent 6.xですが、これより多少古くても同じように動くと思います。

以下のように、APMを使うことで、Elasticsearch Clientから実行されるクエリーなどを捕捉し、そのデータをKibanaで分析するなどできます。
image.png

これをクイックに検証できるようにしたサンプルコードがこちらです。
https://github.com/nobuhikosekiya/elasticseach-query-apm-analyze-sample

Jupyter Notebook形式のPythonプログラムとなっていて、コードを順番に実行していくことができます。

  • テストできるElastic Cloudがある場合、Open in ColabボタンからGoogle Colabでそのまま実行し、Elastic Cloudへの接続情報を入力して実行できます。
  • ローカルPCなどにオンプレのElasticsearch + APMサーバーがある場合、NotebookファイルをローカルのJupyter環境で開き、実行してElasticsearchに接続できます。

検証結果

検証した結果は以下の通りです。
image.png

Manual Instrumentationの場合でできること

コードの抜粋ですが、このように自分で記録したいデータをelasticapm.labelとして入れることができます。この場合は、検索クエリー、検索ワード、検索ヒット数を取得しているという一例です。

Elastic_Query_APM_analysis_manual_instrumentation.ipynb
search_key_word="iPhone"
query={"match": {"question": search_key_word}}
query_user_input=search_key_word

# set labels to the current transaction
elasticapm.label(query=query, search_key_word=search_key_word, execution_count=j)
response = es.search(index=INDEX_NAME, query=query)
print(response.body)
hit_count=response['hits']['total']['value']
# set labels to the current transaction
elasticapm.label(hits=hit_count)

今回は普通のAPMの使い方ではなく、独自の分析となるので、DiscoverやDashboardで分析します。データはDiscoverのAPM Dataviewで確認できます。それらのデータを検索ログの分析という用途でダッシュボード化したのがこちらです。(export_dashboard.ndjsonのダッシュボードのエクスポートをKibanaからImportしてください)
image.png

Auto-Instrumentationでできること

Elasticsearch ClientのAPIが呼ばれる箇所が自動的に補足され、以下のようにAPM画面で見ることができます。
image.png

上の図のES POST ... のSpanデータを開くと、実際のクエリー文も確認できますが、このフィールド(span.db.statement)はデフォルトではインデックスされたフィールドではないので、分析にかけることはできません。(インデックスするように変更はできますが、JSON文字列なので、それもまた解析できる形に頑張る必要あり)

おわり

本格的にこのやり方を本番に入れてみたいという場合は、ぜひご相談ください。

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