ドキュメントAPIにて、インデックス名に動的に日付を設定する方法

以下のドキュメントに示される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で実現することは可能でしょうか。

類似の質問がありました。Date index name processorというものが使えそうです。

ご回答ありがとうございます。期待通りの動作になりました。
追加でもう一つ教えてください。

ドキュメント登録APIを実行した時、ドキュメントID(_id)を現在時刻(YYYYMMDDhhmmss)のような形で付与したいです。上記の例では_idとして「1」が登録されますが、Set processorにて_idを上書きすることで実現できるのでないかと思っています。

    "processors": [
    {
        "set":{
            "field": "_id",
            "value": "XXXXXX"
        }
    }
   

この時に、上記XXXX部分をどのように書けばいいのかが分からず、ご教示頂けないでしょうか。また、他のprocessorを使えば出来るというのがあれば教えてください

少し試してみました。

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"

ご回答ありがとうございます。
Elasticsearchのバージョンを7.9を使用しているのですが、dateプロセッサーの「output_format」が対応していないようです。要件的にバージョンアップすることが難しく、scriptプロセッサー等で代用可能でしょうか?
また、_ingest.timestampはUTCで保持されるかと思いますが、これをJSTで保持するようにすることは可能でしょうか?scripyプロセッサー等でJSTに変換したものを別フィールドに持たせるというようなことが出来ないかと思っております

そうだったのですね。確かにscript processorでも実現できそうです。date index name processorの部分も合わせてscript processorで実現することもできると思います。

早々のご回答ありがとうございます。
script processorでどのように記載すればいいかサンプルを頂くことは可能でしょうか?painlessにあまり明るくなく、ご教示頂けると幸いです

ドキュメントも充実してますし、まずは試してみて、うまく行かないところがあればまたこのforumで聞いてみるというのはどうでしょうか。そんなに複雑なスクリプトにはならないと思います。

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"
      }
    }
  ]
}

サンプルご提供ありがとうございます。こちらを参考にして問題を解決することができました。追加で申し訳ございませんがもう一点ご教示ください。
KibanaのログインIDを動的にscriptプロセッサーやsetプロセッサーで取得することは可能でしょうか?
下記のページを参照したところ、そのような記載は見受けられませんでしたが、もしも方法をご存じでしたらご教示頂けますと幸いです

ぱっと見たところ、Set security user processorがそれでしょうか?使ったことがないので分かりませんが…。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.