t-nakata
(NAKATA)
January 5, 2022, 9:58am
1
以下のドキュメントに示されるAPIにて、インデックス名に現在月を付与したいです
PUT my-index-000001/_doc/1?timeout=5m
{
"@timestamp": "2099-11-15T13:12:00",
"message": "GET /search HTTP/1.1 200 1070000",
"user": {
"id": "kimchy"
}
}
上記APIにて、インデックス名を「my-index-000001」でなく、例えば「my-index-000001.MM」のような形で設定したいです。
※MMは現在月
MM部分は、動的に現在月が自動で設定されるようにしたいのですが、ドキュメントAPIで実現することは可能でしょうか。
Tomo_M
(Tomohiro Mitani)
January 5, 2022, 11:19am
2
類似の質問がありました。Date index name processorというものが使えそうです。
Is there any way by which we can create index named <prefix>-yyyy.mm on the first day of every month and getting the alias pointed to this newly created index? I learned about date time but that changes the name only when the index rollover take places. I am using Rest High level java client to insert the Json messages into elastic search and kibana for visualization.
t-nakata
(NAKATA)
January 6, 2022, 9:28am
3
ご回答ありがとうございます。期待通りの動作になりました。
追加でもう一つ教えてください。
ドキュメント登録APIを実行した時、ドキュメントID(_id)を現在時刻(YYYYMMDDhhmmss)のような形で付与したいです。上記の例では_idとして「1」が登録されますが、Set processorにて_idを上書きすることで実現できるのでないかと思っています。
"processors": [
{
"set":{
"field": "_id",
"value": "XXXXXX"
}
}
この時に、上記XXXX部分をどのように書けばいいのかが分からず、ご教示頂けないでしょうか。また、他のprocessorを使えば出来るというのがあれば教えてください
Tomo_M
(Tomohiro Mitani)
January 6, 2022, 5:10pm
4
少し試してみました。
PUT _ingest/pipeline/test
{
"processors" : [
{
"date" : {
"field": "_ingest.timestamp",
"target_field": "_id",
"formats": ["ISO8601"],
"output_format": "yyyyMMddhhmmss"
}
}
]
}
"_id" : "20220106050835",
Set Processorでもできそうですが、日時をフォーマットすることができませんでした。
PUT _ingest/pipeline/test
{
"processors" : [
{
"set" : {
"value": "{{_ingest.timestamp}}",
"field": "_id"
}
}
]
}
"_id" : "2022-01-06T17:08:01.715680196Z"
t-nakata
(NAKATA)
January 18, 2022, 12:11am
5
ご回答ありがとうございます。
Elasticsearchのバージョンを7.9を使用しているのですが、dateプロセッサーの「output_format」が対応していないようです。要件的にバージョンアップすることが難しく、scriptプロセッサー等で代用可能でしょうか?
また、_ingest.timestampはUTCで保持されるかと思いますが、これをJSTで保持するようにすることは可能でしょうか?scripyプロセッサー等でJSTに変換したものを別フィールドに持たせるというようなことが出来ないかと思っております
Tomo_M
(Tomohiro Mitani)
January 18, 2022, 1:00am
6
そうだったのですね。確かにscript processorでも実現できそうです。date index name processorの部分も合わせてscript processorで実現することもできると思います。
t-nakata
(NAKATA)
January 18, 2022, 1:04am
7
早々のご回答ありがとうございます。
script processorでどのように記載すればいいかサンプルを頂くことは可能でしょうか?painlessにあまり明るくなく、ご教示頂けると幸いです
Tomo_M
(Tomohiro Mitani)
January 18, 2022, 7:32am
8
ドキュメントも充実してますし、まずは試してみて、うまく行かないところがあればまたこのforumで聞いてみるというのはどうでしょうか。そんなに複雑なスクリプトにはならないと思います。
Tomo_M
(Tomohiro Mitani)
January 18, 2022, 12:20pm
9
POST /_ingest/pipeline/_simulate
{
"pipeline" :
{
"description": "_description",
"processors": [
{
"set" : {
"field" : "@timestamp",
"value" : "{{_ingest.timestamp}}"
}
},
{
"script": {
"lang": "painless",
"source": "DateTimeFormatter dtf_id = DateTimeFormatter.ofPattern(\"yyyyMMddHHmmssSSSSSS\");DateTimeFormatter dtf_index = DateTimeFormatter.ofPattern(\"MM\"); ZonedDateTime now=ZonedDateTime.parse(ctx['@timestamp']).plusHours(9);ctx['_id'] = now.format(dtf_id);ctx['_index'] = 'my-index-' + now.format(dtf_index);ctx['@timestamp']=now.toString()"
}
}
]
},
"docs": [
{
"_index": "index",
"_id": "id",
"_source": {
"foo": "bar"
}
},
{
"_index": "index",
"_id": "id",
"_source": {
"foo": "rab"
}
}
]
}
t-nakata
(NAKATA)
February 3, 2022, 4:02am
10
サンプルご提供ありがとうございます。こちらを参考にして問題を解決することができました。追加で申し訳ございませんがもう一点ご教示ください。
KibanaのログインIDを動的にscriptプロセッサーやsetプロセッサーで取得することは可能でしょうか?
下記のページを参照したところ、そのような記載は見受けられませんでしたが、もしも方法をご存じでしたらご教示頂けますと幸いです
Tomo_M
(Tomohiro Mitani)
February 4, 2022, 9:45am
11
ぱっと見たところ、Set security user processor がそれでしょうか?使ったことがないので分かりませんが…。
system
(system)
Closed
March 4, 2022, 9:45am
12
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.