我尝试分析APM能够对Elasticsearch查询进行多少程度的分析
首先
本文是关于2023年12月13日举办的Elasticsearch研讨会的内容。如果您希望观看演示,请在Youtube上查看即将发布的研讨会视频(最后一部分)。
使用环境为Elasticsearch v8.11和Elastic APM Python Agent 6.x,但我认为即使版本稍旧,也应该可以以相同的方式运行。
以下是能够快速验证这个的示例代码链接: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に接続できます。
审核结果
在手動儀器裝置中可以執行的功能。
以下是代码片段,你可以将需要记录的数据作为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)
自动仪器化可以做的事情。
当打开上图中的ES POST的Span数据时,可以确认实际的查询语句,但是这个字段(span.db.statement)默认情况下不是索引字段,因此无法进行分析。(可以更改为索引,但由于它是JSON字符串,所以还需要努力将其解析为可分析的形式)。
结束
如果你想要认真地将这种方法应用到正式场合中,请务必与我们商讨。