0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Elasticsearchで実行されている検索クエリーを監査ログで確認する方法

Posted at

# はじめに
監査目的などでElasticsearchに対して発行されているクエリーを記録したい場合、監査ログを有効化すれば可能です。
本記事ではその手順についてまとめました。今回はElastic Cloudを利用した前提の手順となっています。

手順

  • 最初にElastic Cloudの管理コンソールのLogs and metricsから、ログのStack Monitoringを有効化する必要があります。
    以下は有効化後の画面例です。(モニタリングデータ送信先のDeploymentは自身のDeploymentへの送信でも動きます)
    image.png

  • 次に、Elasticsearchのuser settingsを編集します。
    image.png

  • 監査ログを有効化してさらに検索クエリーの詳細を出力するためには、以下のように3行追加してください。
    image.png

xpack.security.audit.enabled: true
xpack.security.audit.logfile.events.emit_request_body: true
xpack.security.audit.logfile.events.include: _all

補足:あるいは以下のようにevents.actionタイプを_allから特定のイベントに絞ってもOKです。(クエリーの詳細はこのevent.actionがauthentication_successのログに記録されます)
xpack.security.audit.logfile.events.include: authentication_success

  • Kibana内でStack Monitoringの画面を開き、Logsのボックスを開きます。
    image.png

  • Auditログが表示されますが、詳しく見るためには下に見えるLogsビューのリンクをクリックしましょう。
    image.png

  • Logsビューでは、Elasticsearchのログ全般が表示されますが、多くのログが表示されるので絞り込むために検索ボックスに条件を追加します。
    http.request.body_contentのフィールドが存在するもので絞り込むと、検索リクエストのボディが含まれるデータだけ絞り込みできます。
    image.png

詳細を見てクエリー内容が見えます。
image.png

この例で見えるクエリーのURLと、ボディの一例は以下の通りです。

user.name:
2770367626

url.original:
/kibana_sample_data_flights/_async_search?batched_reduce_size=64&ccs_minimize_roundtrips=true&wait_for_completion_timeout=200ms&keep_on_completion=true&keep_alive=60000ms&ignore_unavailable=true&preference=1724807312742

http.request.body.content:

クエリーのボディ
{
	"sort": [
		{
			"timestamp": {
				"order": "desc",
				"format": "strict_date_optional_time",
				"unmapped_type": "boolean"
			}
		},
		{
			"_doc": {
				"order": "desc",
				"unmapped_type": "boolean"
			}
		}
	],
	"fields": [
		{
			"field": "*",
			"include_unmapped": "true"
		},
		{
			"field": "timestamp",
			"format": "strict_date_optional_time"
		}
	],
	"size": 500,
	"version": true,
	"script_fields": {},
	"stored_fields": [
		"*"
	],
	"runtime_mappings": {
		"hour_of_day": {
			"type": "long",
			"script": {
				"source": "emit(doc['timestamp'].value.getHour());"
			}
		}
	},
	"_source": false,
	"query": {
		"bool": {
			"must": [
				{
					"query_string": {
						"query": "AvgTicketPrice:(>=10 AND <444) AND Cancelled:true",
						"analyze_wildcard": true,
						"time_zone": "Asia/Tokyo"
					}
				}
			],
			"filter": [
				{
					"range": {
						"timestamp": {
							"format": "strict_date_optional_time",
							"gte": "2024-08-28T02:07:02.317Z",
							"lte": "2024-08-28T02:22:02.317Z"
						}
					}
				}
			],
			"should": [],
			"must_not": []
		}
	},
	"highlight": {
		"pre_tags": [
			"@kibana-highlighted-field@"
		],
		"post_tags": [
			"@/kibana-highlighted-field@"
		],
		"fields": {
			"*": {}
		},
		"fragment_size": 2147483647
	},
	"track_total_hits": false
}

おわり

本番環境では非常に多くの監査ログが生成されるので、気をつけて限定的に使っていただければと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?