スローログ
検索スローログ
シャードレベルのスローログは、専用のログファイルにスローメソッド(クエリおよびフェッチフェーズ)を記録することを可能にします。
実行のクエリフェーズとフェッチフェーズの両方に対してしきい値を設定できます。以下はサンプルです:
Yaml
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug: 500ms
index.search.slowlog.threshold.fetch.trace: 200ms
上記の設定はすべて動的であり、インデックス設定の更新 APIを使用して各インデックスに対して設定できます。例えば:
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "2s",
"index.search.slowlog.threshold.query.trace": "500ms",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "800ms",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.search.slowlog.threshold.fetch.trace": "200ms"
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
'index.search.slowlog.threshold.query.warn' => '10s',
'index.search.slowlog.threshold.query.info' => '5s',
'index.search.slowlog.threshold.query.debug' => '2s',
'index.search.slowlog.threshold.query.trace' => '500ms',
'index.search.slowlog.threshold.fetch.warn' => '1s',
'index.search.slowlog.threshold.fetch.info' => '800ms',
'index.search.slowlog.threshold.fetch.debug' => '500ms',
'index.search.slowlog.threshold.fetch.trace' => '200ms'
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "2s",
"index.search.slowlog.threshold.query.trace": "500ms",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "800ms",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.search.slowlog.threshold.fetch.trace": "200ms",
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "2s",
"index.search.slowlog.threshold.query.trace": "500ms",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "800ms",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.search.slowlog.threshold.fetch.trace": "200ms"
}
デフォルトでは、しきい値は無効(-1
に設定)です。
ロギングはシャードレベルのスコープで行われ、特定のシャード内での検索リクエストの実行を意味します。これは、複数のシャードにブロードキャストされて実行される可能性のある全体の検索リクエストを含みません。シャードレベルのロギングの利点の一部は、リクエストレベルと比較して特定のマシンでの実際の実行との関連性です。
検索スローログファイルはlog4j2.properties
ファイルで構成されています。
検索スローログの起源を特定する
スローメソッドを引き起こした原因を特定することはしばしば有用です。スローメソッドを引き起こしたユーザーに関する情報を含めるには、index.search.slowlog.include.user
設定を使用します。
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index.search.slowlog.include.user": True
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
'index.search.slowlog.include.user' => true
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
"index.search.slowlog.include.user": true,
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index.search.slowlog.include.user": true
}
これにより、ユーザー情報がスローログに含まれるようになります。
Js
{
"@timestamp": "2024-02-21T12:42:37.255Z",
"log.level": "WARN",
"auth.type": "REALM",
"elasticsearch.slowlog.id": "tomcat-123",
"elasticsearch.slowlog.message": "[index6][0]",
"elasticsearch.slowlog.search_type": "QUERY_THEN_FETCH",
"elasticsearch.slowlog.source": "{\"query\":{\"match_all\":{\"boost\":1.0}}}",
"elasticsearch.slowlog.stats": "[]",
"elasticsearch.slowlog.took": "747.3micros",
"elasticsearch.slowlog.took_millis": 0,
"elasticsearch.slowlog.total_hits": "1 hits",
"elasticsearch.slowlog.total_shards": 1,
"user.name": "elastic",
"user.realm": "reserved",
"ecs.version": "1.2.0",
"service.name": "ES_ECS",
"event.dataset": "elasticsearch.index_search_slowlog",
"process.thread.name": "elasticsearch[runTask-0][search][T#5]",
"log.logger": "index.search.slowlog.query",
"elasticsearch.cluster.uuid": "Ui23kfF1SHKJwu_hI1iPPQ",
"elasticsearch.node.id": "JK-jn-XpQ3OsDUsq5ZtfGg",
"elasticsearch.node.name": "node-0",
"elasticsearch.cluster.name": "distribution_run"
}
X-Opaque-ID
ヘッダーで呼び出しが開始された場合、IDはelasticsearch.slowlog.idフィールドの検索スローログに含まれます。詳細とベストプラクティスについては、X-Opaque-Id HTTPヘッダーを参照してください。
インデックススローログ
インデックススローログは、検索スローログと同様の機能を持ちます。ログファイル名は_index_indexing_slowlog.json
で終わります。ログとしきい値は、検索スローログと同じ方法で構成されます。インデックススローログのサンプル:
Yaml
index.indexing.slowlog.threshold.index.warn: 10s
index.indexing.slowlog.threshold.index.info: 5s
index.indexing.slowlog.threshold.index.debug: 2s
index.indexing.slowlog.threshold.index.trace: 500ms
index.indexing.slowlog.source: 1000
上記の設定はすべて動的であり、インデックス設定の更新 APIを使用して各インデックスに対して設定できます。例えば:
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s",
"index.indexing.slowlog.threshold.index.trace": "500ms",
"index.indexing.slowlog.source": "1000"
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
'index.indexing.slowlog.threshold.index.warn' => '10s',
'index.indexing.slowlog.threshold.index.info' => '5s',
'index.indexing.slowlog.threshold.index.debug' => '2s',
'index.indexing.slowlog.threshold.index.trace' => '500ms',
'index.indexing.slowlog.source' => '1000'
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s",
"index.indexing.slowlog.threshold.index.trace": "500ms",
"index.indexing.slowlog.source": "1000",
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s",
"index.indexing.slowlog.threshold.index.trace": "500ms",
"index.indexing.slowlog.source": "1000"
}
スローメソッドイベントを引き起こしたユーザーに関する情報を含めるには、index.indexing.slowlog.include.user
設定を使用します。
Python
resp = client.indices.put_settings(
index="my-index-000001",
settings={
"index.indexing.slowlog.include.user": True
},
)
print(resp)
Ruby
response = client.indices.put_settings(
index: 'my-index-000001',
body: {
'index.indexing.slowlog.include.user' => true
}
)
puts response
Js
const response = await client.indices.putSettings({
index: "my-index-000001",
settings: {
"index.indexing.slowlog.include.user": true,
},
});
console.log(response);
コンソール
PUT /my-index-000001/_settings
{
"index.indexing.slowlog.include.user": true
}
デフォルトでは、Elasticsearchはスローログに_sourceの最初の1000文字を記録します。これをindex.indexing.slowlog.source
で変更できます。false
または0
に設定すると、ソースのロギングが完全にスキップされ、true
に設定すると、サイズに関係なくソース全体がログに記録されます。元の_source
は、単一のログ行に収まるようにデフォルトで再フォーマットされます。元のドキュメント形式を保持することが重要な場合は、index.indexing.slowlog.reformat
をfalse
に設定することで再フォーマットをオフにでき、ソースが「そのまま」ログに記録され、複数のログ行にまたがる可能性があります。
インデックススローログファイルはlog4j2.properties
ファイルで構成されています。
スローログレベル
適切なしきい値を設定することで、検索またはインデックスのスローログレベルを模倣し、「より詳細な」ロガーをオフにすることができます。例えば、index.indexing.slowlog.level: INFO
をシミュレートしたい場合は、index.indexing.slowlog.threshold.index.debug
とindex.indexing.slowlog.threshold.index.trace
を-1
に設定するだけで済みます。