ElasticsearchHeapUsageHigh (warning, >80%)
Что означает алерт
На одной из нод Elasticsearch утилизация heap >80% дольше 10 минут.
По рекомендации Elastic нормальный профиль heap похож на "пилу": обычно около 30-70%.
Подключение к ES в Kubernetes
kubectl -n camunda-prod port-forward svc/camunda-elasticsearch 9200:9200
Дальше все команды через localhost:9200.
Проверка
- Текущая утилизация heap по нодам:
curl -s 'localhost:9200/_nodes/stats/jvm?filter_path=nodes.*.name,nodes.*.jvm.mem.heap_used_percent,nodes.*.jvm.mem.heap_used_in_bytes,nodes.*.jvm.mem.heap_max_in_bytes' | jq
- Проверить общую загрузку кластера:
curl -s 'localhost:9200/_cluster/health?pretty'
curl -s 'localhost:9200/_cat/nodes?v&h=name,heap.current,heap.percent,ram.current,ram.percent,cpu,load_1m,node.role,master'
- Проверить признаки GC-давления:
curl -s 'localhost:9200/_nodes/stats/jvm?filter_path=nodes.*.name,nodes.*.jvm.gc.collectors.young.collection_count,nodes.*.jvm.gc.collectors.young.collection_time_in_millis,nodes.*.jvm.gc.collectors.old.collection_count,nodes.*.jvm.gc.collectors.old.collection_time_in_millis' | jq
Действия
- Проверить и уменьшить нагрузку от тяжелых запросов/агрегаций.
- Проверить избыточное количество шардов и старые индексы:
curl -s 'localhost:9200/_cluster/health?filter_path=active_shards,number_of_data_nodes,status' | jq
curl -s 'localhost:9200/_cat/indices?format=json&h=index,pri,rep,store.size,docs.count' \
| jq -r '.[] | [.index, .pri, .rep, ((.pri|tonumber) * ((.rep|tonumber)+1)), ."store.size"] | @tsv' \
| sort -k4,4nr | head -30
- Если есть безопасные кандидаты, удалить устаревшие индексы:
curl -s -X DELETE 'localhost:9200/<old-index-name>?pretty'
Когда эскалировать в critical
- Heap держится около 90% и не снижается после GC.
- Растет время/частота old GC.
- Появляются ошибки по памяти и просадка latency.
Источник
"Elasticsearch heap size usage and JVM garbage collection"
https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection