Ситуация: диск с базой Graylog переполнился, место освободили, но Graylog так и не начал писать новые сообщения. В поиске видны только старые записи. Ротация индекса тоже не помогает.
Шаг 1. Снять блокировку записи
Когда диск заполняется почти полностью, Elasticsearch (и OpenSearch) переводит индексы в режим «только чтение». В старых версиях после освобождения места эта блокировка сама не снимается. Снимите её для всех индексов:
curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
Если сообщения пошли, дальше ничего делать не нужно.
Шаг 2. Удалить повреждённый индекс
Если не помогло, скорее всего, при переполнении повредился текущий индекс, и в него ничего не пишется. Выведите список индексов:
curl http://localhost:9200/_cat/indices?v
Повреждённый обычно последний по номеру. Удалите его, подставив имя вместо graylog_index_number. Сообщения в этом индексе будут потеряны:
curl -XDELETE http://localhost:9200/graylog_index_number
Шаг 3. Убрать упоминание индекса в MongoDB
В базе MongoDB Graylog осталась информация об удалённом индексе, и поиск может выдавать ошибку, что не находит его. Удалите сохранённые диапазоны индексов (в новых версиях вместо mongo используется mongosh):
mongo --port 27017
use graylog;
db.index_ranges.drop()
Затем в веб-интерфейсе Graylog откройте System → Indices, выберите набор индексов и запустите пересчёт диапазонов (Recalculate index ranges).