本日、プライベートクラウドに仮想サーバーを一括デプロイしました。バッチデプロイにVMテンプレートを使用したため、Kibana Discoverで表示されるデータがしばらく途切れてしまいました。その後、クラスターとElasticsearchノードを確認したところ、すべて正常に動作しており、ディスク使用率も良好でした。その後、各レベルでLogstashを確認したところ、ログに以下のエラーメッセージが多数記録されていました。

Terminal window
[2025-07-11T15:18:08,589][INFO ][logstash.outputs.elasticsearch][koevn_logs][7c39dc6190bbe761f71b0f0b463552b818d13eb5b5b0b9e16dfa801f1463654c] Retrying individual bulk actions that failed or were rejected by the previous bulk request {:count=>78}
[2025-07-11T15:18:08,635][INFO ][logstash.outputs.elasticsearch][koevn_logs][7c39dc6190bbe761f71b0f0b463552b818d13eb5b5b0b9e16dfa801f1463654c] Retrying failed action {:status=>403, :action=>["index", {:_id=>nil, :_index=>"koevn_logs-2025.02.18", :routing=>nil}, {"@version"=>"1", "kafka_topic"=>"koevn_logs", "auditd.process.id"=>"11", "event.type"=>"koevn", "@timestamp"=>2025-02-18T08:49:18.820Z, "auditd.event.id"=>"161", "fields"=>{"env"=>"test", "host_ip"=>"10.68.11.136"}, "tags"=>["koevn_logs"], "auditd.event.time"=>"1739868558.820", "temp_timestamp"=>"2025-02-18T08:49:18.820Z", "message"=>"type=koevn msg=audit(1739868558.820:161): prog-id=11 op=UNLOAD", "log"=>{"offset"=>180412, "file"=>{"path"=>"/var/log/audit/audit.log"}}}], :error=>{"type"=>"cluster_block_exception", "reason"=>"index [koevn_logs-2025.02.18] blocked by: [FORBIDDEN/8/index write (api)];"}}

作成されたインデックスにはILMライフサイクル管理が設定されているため、30日以内のデータのみが読み取りと書き込みが可能で、30日を超えるデータは読み取り専用となります。そのため、ログには、30日を超える大量のデータが読み取り専用インデックスに書き込まれようとしていることが示され、その結果、403エラーが頻繁に発生し、Elasticsearchがすべての書き込みリクエストを拒否しています。この場合、読み取り専用制限を解除してデータを書き込むか、単に破棄するかは、ニーズによって異なります。

削除するには2つの方法があります 最初の方法は、必要に応じて指定されたインデックスを設定解除することです。

Terminal window
curl -XPUT http://<es-host>:9200/koevn_logs-2025.02.18/_settings -H 'Content-Type: application/json' -d '
{
"index.blocks.write": false
}'

2つ目は、すべての読み取り専用ステータスインデックスを削除することです。

Terminal window
curl -XPUT http://<es-host>:9200/_all/_settings -H 'Content-Type: application/json' -d '
{
"index.blocks.read_only_allow_delete": null,
"index.blocks.write": false
}'

もう 1 つの方法は、次の構成に示すように、Logstash で 30 日以上経過したログをフィルターして、それらのログが Elasticsearch インデックスに書き込まれないようにし、すべての接続が拒否されるのを防ぐことです。

Terminal window
filter {
# ------- その他の構成は省略 -------
ruby {
code => "
require 'time'
now = Time.now
cutoff = now - 29 * 24 * 60 * 60
if event.get('@timestamp')
ts = Time.parse(event.get('@timestamp').to_s)
if ts < cutoff
event.tag('drop_old_event')
end
end
"
}
if "drop_old_event" in [tags] {
drop { }
}
# ------- その他の構成は省略 -------
}

次に、logstash サービスを再ロードすると、Kibana Discover サービスがログ データを正しく表示します。