Elasticsearchの古いレコードを1か月後に回転させて削除する方法
Elasticsearchのインデックスは、特に複数のサーバーから毎秒多くのログを収集している場合、すぐにギガバイトのデータで埋まる可能性があります。データを管理するために、Elasticsearchは
クエリによる削除APIを使用した削除
Elasticsearchは、クエリに一致するすべてのドキュメントを削除する「Delete By Query」APIを提供しています。これを使用して、特定の日付よりも大きいまたは小さいタイムスタンプに一致させることができますが、多少粗雑です:
POST indexname/_delete_by_query
{
"query": {
"range" : {
"@timestamp" : {
"gte" : "09/02/2020",
"lte" : "11/02/2020",
"format": "dd/MM/yyyy||yyyy"
}
}
}
}
しかし、このクエリは本当に遅いです。ドキュメントのサイズに対して線形にスケーリングします。もし、あなたがElasticsearchインスタンスが炎上しないようにドキュメントをローテーションする必要があるほどの十分なドキュメントを持っているなら、この方法でレコードを削除することはおそらくできず、代わりに時間ベースのインデックスを使用する必要があります。
より良い方法:時間ベースのインデックス
Elasticsearchでは、通常インデックスを直接使用することはありません。ダッシュボードはインデックスパターンを使用し、これにより複数のインデックスを同時に一致させることができます。これは、インデックス自体がデータのグループとして機能できるためであり、たとえば日別または月別にグループ化することができます。
インデックス全体を管理し回転させる方がはるかに簡単です。ですので、各イングスターがインデックス名に現在の日付を追加するように設定されている場合、
index: "indexname-%{+yyyy.MM.dd}"もちろん、これはデイリーインデックスに書き込むために取り込みパイプラインを構成する必要があります。あなたはこの形式でデータを取り込むためにロガーを設定する必要があります。
それが終わったら、新しいインデックスライフサイクルポリシーを作成してデータの自動ロールオーバーを管理できます。このオプションは、Kibanaダッシュボードの「スタック管理」下にあります。
インデックスのロールオーバーの複数のフェーズを設定できますが、この目的のためには、ロールオーバーを無効にして削除フェーズを有効にし、X日以上前のインデックスを削除するように設定する方が簡単です。
次に、実際にインデックステンプレートに適用するためには、ライフサイクルポリシーリストの「アクション」セクションにある「インデックステンプレートにポリシーを追加」を選択する必要があります。
追加したいインデックスパターンを選択してください。このポリシーは即座に適用され、パターン内の古いインデックスは削除されます。



