我尝试分析APM能够对Elasticsearch查询进行多少程度的分析

首先

本文是关于2023年12月13日举办的Elasticsearch研讨会的内容。如果您希望观看演示,请在Youtube上查看即将发布的研讨会视频(最后一部分)。
使用环境为Elasticsearch v8.11和Elastic APM Python Agent 6.x,但我认为即使版本稍旧,也应该可以以相同的方式运行。

image.png

以下是能够快速验证这个的示例代码链接:https://github.com/nobuhikosekiya/elasticseach-query-apm-analyze-sample

这个Python程序是以Jupyter Notebook的形式呈现的,你可以逐步执行代码。

    • テストできるElastic Cloudがある場合、Open in ColabボタンからGoogle Colabでそのまま実行し、Elastic Cloudへの接続情報を入力して実行できます。

 

    ローカルPCなどにオンプレのElasticsearch + APMサーバーがある場合、NotebookファイルをローカルのJupyter環境で開き、実行してElasticsearchに接続できます。

审核结果

image.png

在手動儀器裝置中可以執行的功能。

以下是代码片段,你可以将需要记录的数据作为elasticapm.label放入其中。这是一个获取搜索查询、搜索关键词和搜索命中数的示例。

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)
image.png

自动仪器化可以做的事情。

image.png

当打开上图中的ES POST的Span数据时,可以确认实际的查询语句,但是这个字段(span.db.statement)默认情况下不是索引字段,因此无法进行分析。(可以更改为索引,但由于它是JSON字符串,所以还需要努力将其解析为可分析的形式)。

结束

如果你想要认真地将这种方法应用到正式场合中,请务必与我们商讨。

广告
将在 10 秒后关闭
bannerAds