Menjaga cluster tetap sehat: cluster health API, node stats dan index stats, cat APIs; metrik JVM, indexing dan search rates, thread pool rejections, circuit breaker trips; serta tools monitoring seperti Kibana, alerting, Metricbeat, dan Grafana.

Backup (episode 20) melindungi dari kehilangan data — tapi bagaimana mendeteksi masalah sebelum menjadi insiden? Bagaimana tahu disk hampir penuh, heap mendekati penuh, atau query mulai lambat? Jawabannya ada di monitoring dan observability: API pemantauan bawaan (cluster health, node stats, index stats, cat APIs), metrik yang wajib dipantau (JVM, indexing/search rates, thread pool rejections, circuit breaker trips), serta tools monitoring — Kibana, alerting, Metricbeat, dan Prometheus/Grafana.
GET /_cluster/health adalah detak jantung pertama (episode 3). Untuk pandangan cepat multi-node:
GET /_cluster/health?level=indices&timeout=30s
{
"cluster_name": "my-cluster",
"status": "yellow",
"number_of_nodes": 3,
"active_primary_shards": 30,
"active_shards": 45,
"relocating_shards": 0,
"unassigned_shards": 15
}Status yellow dengan unassigned_shards 15 menandakan replica belum ter-assign — misalnya karena hanya 1 dari 3 node yang punya data. Status red adalah darurat.
_nodes/stats menampilkan metrik per node — CPU, heap, thread pools, I/O:
GET /_nodes/stats/jvm,thread_pool,os_stats menampilkan metrik per index — jumlah dokumen, ukuran, kecepatan indexing/search:
GET /logs-*/_stats?filter_path=indices.*.primaries.indexing,indices.*.primaries.searchCat APIs menyajikan output tabel human-readable — paling praktis untuk shell:
GET /_cat/nodes?v&h=name,node.role,heap.percent,ram.percent,cpu,load_1mCat APIs yang sering dipakai: _cat/health, _cat/nodes, _cat/shards, _cat/indices, _cat/thread_pool, _cat/allocation.
Metrik paling penting. Pantau heap.percent dan GC pauses:
GET /_nodes/stats/jvm?filter_path=nodes.*.jvm.mem,nodes.*.jvm.gcAmbatang alarm yang wajar: heap di bawah 75% (ideal), GC pause kurang dari 1 detik. Heap mendekati 100% atau promotion failed yang sering adalah sinyal masalah serius.
Kecepatan rata-rata indexing (indexing.index_total) dan search (search.query_total) per detik menunjukkan volume dan tren. Kenaikan tiba-tiba bisa berarti beban naik; penurunan tiba-tiba bisa berarti node bermasalah.
Metrik thread_pool punya counter rejection:
GET /_nodes/stats/thread_pool?filter_path=nodes.*.thread_pool.write.rejected,nodes.*.thread_pool.search.rejectedRejection adalah alarm paling serius — menandakan node kewalahan dan mulai menolak request (episode 14). Nol rejection adalah target; rejection yang naik terus berarti sudah waktunya scaling.
_nodes/stats/breaker (episode 14) menunjukkan berapa kali breaker memblokir request. Breaker yang sering trip berarti query/aggregation boros memori — benahi penyebabnya, bukan naikkan batasnya.
Important
Metrik tanpa baseline tidak berarti apa-apa. Sebelum insiden pertama, kumpulkan data normal selama beberapa minggu — baru kalian tahu apakah "CPU 50%" itu wajar atau tanda masalah. Inilah alasan monitoring harus dipasang di hari pertama, bukan saat sudah panik.
Kibana punya modul Stack Monitoring yang menampilkan dashboard lengkap kesehatan cluster dari data yang dikumpulkan Metricbeat. Aktifkan dulu di sisi Elasticsearch:
xpack.monitoring.collection.enabled: trueLalu di Kibana: Management → Stack Monitoring. Di sana kalian melihat health, shard distribution, heap, indexing rates, dan lag antar node dalam satu layar.
Alerting (dulu Watcher) membuat notifikasi otomatis saat kondisi terpenuhi:
{
"name": "Heap terlalu tinggi",
"condition": {
"script": {
"source": "ctx.monitoring.cluster.elasticsearch.cluster_stats.indices.fielddata.memory_size_in_bytes > 1073741824"
}
},
"actions": {
"email_admin": {
"email": {
"to": ["oncall@example.com"],
"subject": "Heap tinggi"
}
}
}
}Di Kibana 8.x, alert dibuat lewat Management → Stack Management → Alerts and Insights dengan UI — mencakup threshold untuk CPU, heap, disk, dan rejection. Rule yang bagus: alert yang spesifik, actionable, dan tidak noise.
Metricbeat adalah agent ringan yang mengumpulkan metrik dari banyak sistem — termasuk Elasticsearch itu sendiri:
metricbeat.modules:
- module: elasticsearch
metricsets: ["node", "node_stats", "index", "cluster_stats"]
period: 10s
hosts: ["https://node1:9200"]
username: "metricbeat_user"
password: "secret"Metricbeat mengirim metrik ke cluster monitoring, memberi data untuk Stack Monitoring dan alerting (episode 24 membahas Beats lebih dalam).
Elastic APM memantau performa aplikasi: latensi, throughput, error rate, dan distributed tracing antar service. Integrasinya dengan Elasticsearch menampilkan "query mana yang lambat dan dari aplikasi mana" — data penting saat mengoptimasi performa (episode 19). Episode 26 membahas APM dalam konteks microservices.
Untuk organisasi yang sudah memakai stack Prometheus/Grafana, Elasticsearch menyediakan endpoint metrik Prometheus:
xpack.monitoring.enabled: falseGET /_prometheus/metricsPrometheus bisa men-scrape endpoint ini, dan Grafana menampilkannya dalam dashboard kustom. Banyak organisasi memakai keduanya: Prometheus/Grafana untuk platform-wide metrics, Kibana Monitoring untuk konteks Elasticsearch yang lebih dalam.
Tip
Mulailah dari yang sederhana: cat APIs untuk debugging cepat di terminal, Kibana Stack Monitoring untuk dashboard, dan dua-tiga rule alert yang paling penting (status red, disk mendekati flood, rejection naik). Tambahkan bertahap berdasarkan insiden yang benar-benar kalian alami — jangan membangun sistem monitoring raksasa sebelum memahami yang kecil.
Di episode 21 kalian menguasai monitoring dan observability: API pemantauan bawaan (cluster health, node stats, index stats, cat APIs), metrik kunci (JVM heap dan GC, indexing/search rates, thread pool rejections, circuit breaker trips), serta tools — Kibana Stack Monitoring, alerting, Metricbeat, Elastic APM, dan Prometheus/Grafana.
Inti yang harus dibawa pulang:
Satu cluster tidak selalu cukup — organisasi besar sering punya banyak cluster. Di episode 22 kita bahas cross-cluster search dan replication: mengatur remote cluster untuk pencarian lintas cluster, kasus penggunaan data federation, serta cross-cluster replication dengan leader-follower untuk disaster recovery dan geo-distribution, lengkap dengan monitoring replication lag. Sampai jumpa!