summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/elasticsearch/charts.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/elasticsearch/charts.go845
1 files changed, 845 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/elasticsearch/charts.go b/src/go/collectors/go.d.plugin/modules/elasticsearch/charts.go
new file mode 100644
index 000000000..1087ef65f
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/elasticsearch/charts.go
@@ -0,0 +1,845 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package elasticsearch
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+)
+
+const (
+ prioNodeIndicesIndexingOps = module.Priority + iota
+ prioNodeIndicesIndexingOpsCurrent
+ prioNodeIndicesIndexingOpsTime
+ prioNodeIndicesSearchOps
+ prioNodeIndicesSearchOpsCurrent
+ prioNodeIndicesSearchOpsTime
+ prioNodeIndicesRefreshOps
+ prioNodeIndicesRefreshOpsTime
+ prioNodeIndicesFlushOps
+ prioNodeIndicesFlushOpsTime
+ prioNodeIndicesFieldDataMemoryUsage
+ prioNodeIndicesFieldDataEvictions
+ prioNodeIndicesSegmentsCount
+ prioNodeIndicesSegmentsMemoryUsageTotal
+ prioNodeIndicesSegmentsMemoryUsage
+ prioNodeIndicesTransLogOps
+ prioNodeIndexTransLogSize
+ prioNodeFileDescriptors
+ prioNodeJVMMemHeap
+ prioNodeJVMMemHeapBytes
+ prioNodeJVMBufferPoolsCount
+ prioNodeJVMBufferPoolDirectMemory
+ prioNodeJVMBufferPoolMappedMemory
+ prioNodeJVMGCCount
+ prioNodeJVMGCTime
+ prioNodeThreadPoolQueued
+ prioNodeThreadPoolRejected
+ prioNodeClusterCommunicationPackets
+ prioNodeClusterCommunication
+ prioNodeHTTPConnections
+ prioNodeBreakersTrips
+
+ prioClusterStatus
+ prioClusterNodesCount
+ prioClusterShardsCount
+ prioClusterPendingTasks
+ prioClusterInFlightFetchesCount
+
+ prioClusterIndicesCount
+ prioClusterIndicesShardsCount
+ prioClusterIndicesDocsCount
+ prioClusterIndicesStoreSize
+ prioClusterIndicesQueryCache
+ prioClusterNodesByRoleCount
+
+ prioNodeIndexHealth
+ prioNodeIndexShardsCount
+ prioNodeIndexDocsCount
+ prioNodeIndexStoreSize
+)
+
+var nodeChartsTmpl = module.Charts{
+ nodeIndicesIndexingOpsChartTmpl.Copy(),
+ nodeIndicesIndexingOpsCurrentChartTmpl.Copy(),
+ nodeIndicesIndexingOpsTimeChartTmpl.Copy(),
+
+ nodeIndicesSearchOpsChartTmpl.Copy(),
+ nodeIndicesSearchOpsCurrentChartTmpl.Copy(),
+ nodeIndicesSearchOpsTimeChartTmpl.Copy(),
+
+ nodeIndicesRefreshOpsChartTmpl.Copy(),
+ nodeIndicesRefreshOpsTimeChartTmpl.Copy(),
+
+ nodeIndicesFlushOpsChartTmpl.Copy(),
+ nodeIndicesFlushOpsTimeChartTmpl.Copy(),
+
+ nodeIndicesFieldDataMemoryUsageChartTmpl.Copy(),
+ nodeIndicesFieldDataEvictionsChartTmpl.Copy(),
+
+ nodeIndicesSegmentsCountChartTmpl.Copy(),
+ nodeIndicesSegmentsMemoryUsageTotalChartTmpl.Copy(),
+ nodeIndicesSegmentsMemoryUsageChartTmpl.Copy(),
+
+ nodeIndicesTransLogOpsChartTmpl.Copy(),
+ nodeIndexTransLogSizeChartTmpl.Copy(),
+
+ nodeFileDescriptorsChartTmpl.Copy(),
+
+ nodeJVMMemHeapChartTmpl.Copy(),
+ nodeJVMMemHeapBytesChartTmpl.Copy(),
+ nodeJVMBufferPoolsCountChartTmpl.Copy(),
+ nodeJVMBufferPoolDirectMemoryChartTmpl.Copy(),
+ nodeJVMBufferPoolMappedMemoryChartTmpl.Copy(),
+ nodeJVMGCCountChartTmpl.Copy(),
+ nodeJVMGCTimeChartTmpl.Copy(),
+
+ nodeThreadPoolQueuedChartTmpl.Copy(),
+ nodeThreadPoolRejectedChartTmpl.Copy(),
+
+ nodeClusterCommunicationPacketsChartTmpl.Copy(),
+ nodeClusterCommunicationChartTmpl.Copy(),
+
+ nodeHTTPConnectionsChartTmpl.Copy(),
+
+ nodeBreakersTripsChartTmpl.Copy(),
+}
+
+var (
+ nodeIndicesIndexingOpsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_indexing_operations",
+ Title: "Indexing Operations",
+ Units: "operations/s",
+ Fam: "indices indexing",
+ Ctx: "elasticsearch.node_indices_indexing",
+ Priority: prioNodeIndicesIndexingOps,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_indexing_index_total", Name: "index", Algo: module.Incremental},
+ },
+ }
+ nodeIndicesIndexingOpsCurrentChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_indexing_operations_current",
+ Title: "Indexing Operations Current",
+ Units: "operations",
+ Fam: "indices indexing",
+ Ctx: "elasticsearch.node_indices_indexing_current",
+ Priority: prioNodeIndicesIndexingOpsCurrent,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_indexing_index_current", Name: "index"},
+ },
+ }
+ nodeIndicesIndexingOpsTimeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_indexing_operations_time",
+ Title: "Time Spent On Indexing Operations",
+ Units: "milliseconds",
+ Fam: "indices indexing",
+ Ctx: "elasticsearch.node_indices_indexing_time",
+ Priority: prioNodeIndicesIndexingOpsTime,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_indexing_index_time_in_millis", Name: "index", Algo: module.Incremental},
+ },
+ }
+
+ nodeIndicesSearchOpsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_search_operations",
+ Title: "Search Operations",
+ Units: "operations/s",
+ Fam: "indices search",
+ Ctx: "elasticsearch.node_indices_search",
+ Type: module.Stacked,
+ Priority: prioNodeIndicesSearchOps,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_search_query_total", Name: "queries", Algo: module.Incremental},
+ {ID: "node_%s_indices_search_fetch_total", Name: "fetches", Algo: module.Incremental},
+ },
+ }
+ nodeIndicesSearchOpsCurrentChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_search_operations_current",
+ Title: "Search Operations Current",
+ Units: "operations",
+ Fam: "indices search",
+ Ctx: "elasticsearch.node_indices_search_current",
+ Type: module.Stacked,
+ Priority: prioNodeIndicesSearchOpsCurrent,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_search_query_current", Name: "queries"},
+ {ID: "node_%s_indices_search_fetch_current", Name: "fetches"},
+ },
+ }
+ nodeIndicesSearchOpsTimeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_search_operations_time",
+ Title: "Time Spent On Search Operations",
+ Units: "milliseconds",
+ Fam: "indices search",
+ Ctx: "elasticsearch.node_indices_search_time",
+ Type: module.Stacked,
+ Priority: prioNodeIndicesSearchOpsTime,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_search_query_time_in_millis", Name: "query", Algo: module.Incremental},
+ {ID: "node_%s_indices_search_fetch_time_in_millis", Name: "fetch", Algo: module.Incremental},
+ },
+ }
+
+ nodeIndicesRefreshOpsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_refresh_operations",
+ Title: "Refresh Operations",
+ Units: "operations/s",
+ Fam: "indices refresh",
+ Ctx: "elasticsearch.node_indices_refresh",
+ Priority: prioNodeIndicesRefreshOps,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_refresh_total", Name: "refresh", Algo: module.Incremental},
+ },
+ }
+ nodeIndicesRefreshOpsTimeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_refresh_operations_time",
+ Title: "Time Spent On Refresh Operations",
+ Units: "milliseconds",
+ Fam: "indices refresh",
+ Ctx: "elasticsearch.node_indices_refresh_time",
+ Priority: prioNodeIndicesRefreshOpsTime,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_refresh_total_time_in_millis", Name: "refresh", Algo: module.Incremental},
+ },
+ }
+
+ nodeIndicesFlushOpsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_flush_operations",
+ Title: "Flush Operations",
+ Units: "operations/s",
+ Fam: "indices flush",
+ Ctx: "elasticsearch.node_indices_flush",
+ Priority: prioNodeIndicesFlushOps,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_flush_total", Name: "flush", Algo: module.Incremental},
+ },
+ }
+ nodeIndicesFlushOpsTimeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_flush_operations_time",
+ Title: "Time Spent On Flush Operations",
+ Units: "milliseconds",
+ Fam: "indices flush",
+ Ctx: "elasticsearch.node_indices_flush_time",
+ Priority: prioNodeIndicesFlushOpsTime,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_flush_total_time_in_millis", Name: "flush", Algo: module.Incremental},
+ },
+ }
+
+ nodeIndicesFieldDataMemoryUsageChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_fielddata_memory_usage",
+ Title: "Fielddata Cache Memory Usage",
+ Units: "bytes",
+ Fam: "indices fielddata",
+ Ctx: "elasticsearch.node_indices_fielddata_memory_usage",
+ Type: module.Area,
+ Priority: prioNodeIndicesFieldDataMemoryUsage,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_fielddata_memory_size_in_bytes", Name: "used"},
+ },
+ }
+ nodeIndicesFieldDataEvictionsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_fielddata_evictions",
+ Title: "Fielddata Evictions",
+ Units: "operations/s",
+ Fam: "indices fielddata",
+ Ctx: "elasticsearch.node_indices_fielddata_evictions",
+ Priority: prioNodeIndicesFieldDataEvictions,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_fielddata_evictions", Name: "evictions", Algo: module.Incremental},
+ },
+ }
+
+ nodeIndicesSegmentsCountChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_segments_count",
+ Title: "Segments Count",
+ Units: "segments",
+ Fam: "indices segments",
+ Ctx: "elasticsearch.node_indices_segments_count",
+ Priority: prioNodeIndicesSegmentsCount,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_segments_count", Name: "segments"},
+ },
+ }
+ nodeIndicesSegmentsMemoryUsageTotalChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_segments_memory_usage_total",
+ Title: "Segments Memory Usage Total",
+ Units: "bytes",
+ Fam: "indices segments",
+ Ctx: "elasticsearch.node_indices_segments_memory_usage_total",
+ Priority: prioNodeIndicesSegmentsMemoryUsageTotal,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_segments_memory_in_bytes", Name: "used"},
+ },
+ }
+ nodeIndicesSegmentsMemoryUsageChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_segments_memory_usage",
+ Title: "Segments Memory Usage",
+ Units: "bytes",
+ Fam: "indices segments",
+ Ctx: "elasticsearch.node_indices_segments_memory_usage",
+ Type: module.Stacked,
+ Priority: prioNodeIndicesSegmentsMemoryUsage,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_segments_terms_memory_in_bytes", Name: "terms"},
+ {ID: "node_%s_indices_segments_stored_fields_memory_in_bytes", Name: "stored_fields"},
+ {ID: "node_%s_indices_segments_term_vectors_memory_in_bytes", Name: "term_vectors"},
+ {ID: "node_%s_indices_segments_norms_memory_in_bytes", Name: "norms"},
+ {ID: "node_%s_indices_segments_points_memory_in_bytes", Name: "points"},
+ {ID: "node_%s_indices_segments_doc_values_memory_in_bytes", Name: "doc_values"},
+ {ID: "node_%s_indices_segments_index_writer_memory_in_bytes", Name: "index_writer"},
+ {ID: "node_%s_indices_segments_version_map_memory_in_bytes", Name: "version_map"},
+ {ID: "node_%s_indices_segments_fixed_bit_set_memory_in_bytes", Name: "fixed_bit_set"},
+ },
+ }
+
+ nodeIndicesTransLogOpsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_indices_translog_operations",
+ Title: "Translog Operations",
+ Units: "operations",
+ Fam: "indices translog",
+ Ctx: "elasticsearch.node_indices_translog_operations",
+ Type: module.Area,
+ Priority: prioNodeIndicesTransLogOps,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_translog_operations", Name: "total"},
+ {ID: "node_%s_indices_translog_uncommitted_operations", Name: "uncommitted"},
+ },
+ }
+ nodeIndexTransLogSizeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_index_translog_size",
+ Title: "Translog Size",
+ Units: "bytes",
+ Fam: "indices translog",
+ Ctx: "elasticsearch.node_indices_translog_size",
+ Type: module.Area,
+ Priority: prioNodeIndexTransLogSize,
+ Dims: module.Dims{
+ {ID: "node_%s_indices_translog_size_in_bytes", Name: "total"},
+ {ID: "node_%s_indices_translog_uncommitted_size_in_bytes", Name: "uncommitted"},
+ },
+ }
+
+ nodeFileDescriptorsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_file_descriptors",
+ Title: "Process File Descriptors",
+ Units: "fd",
+ Fam: "process",
+ Ctx: "elasticsearch.node_file_descriptors",
+ Priority: prioNodeFileDescriptors,
+ Dims: module.Dims{
+ {ID: "node_%s_process_open_file_descriptors", Name: "open"},
+ },
+ }
+
+ nodeJVMMemHeapChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_mem_heap",
+ Title: "JVM Heap Percentage Currently in Use",
+ Units: "percentage",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_heap",
+ Type: module.Area,
+ Priority: prioNodeJVMMemHeap,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_mem_heap_used_percent", Name: "inuse"},
+ },
+ }
+ nodeJVMMemHeapBytesChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_mem_heap_bytes",
+ Title: "JVM Heap Commit And Usage",
+ Units: "bytes",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_heap_bytes",
+ Type: module.Area,
+ Priority: prioNodeJVMMemHeapBytes,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_mem_heap_committed_in_bytes", Name: "committed"},
+ {ID: "node_%s_jvm_mem_heap_used_in_bytes", Name: "used"},
+ },
+ }
+ nodeJVMBufferPoolsCountChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_buffer_pools_count",
+ Title: "JVM Buffer Pools Count",
+ Units: "pools",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_buffer_pools_count",
+ Priority: prioNodeJVMBufferPoolsCount,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_buffer_pools_direct_count", Name: "direct"},
+ {ID: "node_%s_jvm_buffer_pools_mapped_count", Name: "mapped"},
+ },
+ }
+ nodeJVMBufferPoolDirectMemoryChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_buffer_pool_direct_memory",
+ Title: "JVM Buffer Pool Direct Memory",
+ Units: "bytes",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_buffer_pool_direct_memory",
+ Type: module.Area,
+ Priority: prioNodeJVMBufferPoolDirectMemory,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_buffer_pools_direct_total_capacity_in_bytes", Name: "total"},
+ {ID: "node_%s_jvm_buffer_pools_direct_used_in_bytes", Name: "used"},
+ },
+ }
+ nodeJVMBufferPoolMappedMemoryChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_buffer_pool_mapped_memory",
+ Title: "JVM Buffer Pool Mapped Memory",
+ Units: "bytes",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_buffer_pool_mapped_memory",
+ Type: module.Area,
+ Priority: prioNodeJVMBufferPoolMappedMemory,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_buffer_pools_mapped_total_capacity_in_bytes", Name: "total"},
+ {ID: "node_%s_jvm_buffer_pools_mapped_used_in_bytes", Name: "used"},
+ },
+ }
+ nodeJVMGCCountChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_gc_count",
+ Title: "JVM Garbage Collections",
+ Units: "gc/s",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_gc_count",
+ Type: module.Stacked,
+ Priority: prioNodeJVMGCCount,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_gc_collectors_young_collection_count", Name: "young", Algo: module.Incremental},
+ {ID: "node_%s_jvm_gc_collectors_old_collection_count", Name: "old", Algo: module.Incremental},
+ },
+ }
+ nodeJVMGCTimeChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_jvm_gc_time",
+ Title: "JVM Time Spent On Garbage Collections",
+ Units: "milliseconds",
+ Fam: "jvm",
+ Ctx: "elasticsearch.node_jvm_gc_time",
+ Type: module.Stacked,
+ Priority: prioNodeJVMGCTime,
+ Dims: module.Dims{
+ {ID: "node_%s_jvm_gc_collectors_young_collection_time_in_millis", Name: "young", Algo: module.Incremental},
+ {ID: "node_%s_jvm_gc_collectors_old_collection_time_in_millis", Name: "old", Algo: module.Incremental},
+ },
+ }
+
+ nodeThreadPoolQueuedChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_thread_pool_queued",
+ Title: "Thread Pool Queued Threads Count",
+ Units: "threads",
+ Fam: "thread pool",
+ Ctx: "elasticsearch.node_thread_pool_queued",
+ Type: module.Stacked,
+ Priority: prioNodeThreadPoolQueued,
+ Dims: module.Dims{
+ {ID: "node_%s_thread_pool_generic_queue", Name: "generic"},
+ {ID: "node_%s_thread_pool_search_queue", Name: "search"},
+ {ID: "node_%s_thread_pool_search_throttled_queue", Name: "search_throttled"},
+ {ID: "node_%s_thread_pool_get_queue", Name: "get"},
+ {ID: "node_%s_thread_pool_analyze_queue", Name: "analyze"},
+ {ID: "node_%s_thread_pool_write_queue", Name: "write"},
+ {ID: "node_%s_thread_pool_snapshot_queue", Name: "snapshot"},
+ {ID: "node_%s_thread_pool_warmer_queue", Name: "warmer"},
+ {ID: "node_%s_thread_pool_refresh_queue", Name: "refresh"},
+ {ID: "node_%s_thread_pool_listener_queue", Name: "listener"},
+ {ID: "node_%s_thread_pool_fetch_shard_started_queue", Name: "fetch_shard_started"},
+ {ID: "node_%s_thread_pool_fetch_shard_store_queue", Name: "fetch_shard_store"},
+ {ID: "node_%s_thread_pool_flush_queue", Name: "flush"},
+ {ID: "node_%s_thread_pool_force_merge_queue", Name: "force_merge"},
+ {ID: "node_%s_thread_pool_management_queue", Name: "management"},
+ },
+ }
+ nodeThreadPoolRejectedChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_thread_pool_rejected",
+ Title: "Thread Pool Rejected Threads Count",
+ Units: "threads",
+ Fam: "thread pool",
+ Ctx: "elasticsearch.node_thread_pool_rejected",
+ Type: module.Stacked,
+ Priority: prioNodeThreadPoolRejected,
+ Dims: module.Dims{
+ {ID: "node_%s_thread_pool_generic_rejected", Name: "generic"},
+ {ID: "node_%s_thread_pool_search_rejected", Name: "search"},
+ {ID: "node_%s_thread_pool_search_throttled_rejected", Name: "search_throttled"},
+ {ID: "node_%s_thread_pool_get_rejected", Name: "get"},
+ {ID: "node_%s_thread_pool_analyze_rejected", Name: "analyze"},
+ {ID: "node_%s_thread_pool_write_rejected", Name: "write"},
+ {ID: "node_%s_thread_pool_snapshot_rejected", Name: "snapshot"},
+ {ID: "node_%s_thread_pool_warmer_rejected", Name: "warmer"},
+ {ID: "node_%s_thread_pool_refresh_rejected", Name: "refresh"},
+ {ID: "node_%s_thread_pool_listener_rejected", Name: "listener"},
+ {ID: "node_%s_thread_pool_fetch_shard_started_rejected", Name: "fetch_shard_started"},
+ {ID: "node_%s_thread_pool_fetch_shard_store_rejected", Name: "fetch_shard_store"},
+ {ID: "node_%s_thread_pool_flush_rejected", Name: "flush"},
+ {ID: "node_%s_thread_pool_force_merge_rejected", Name: "force_merge"},
+ {ID: "node_%s_thread_pool_management_rejected", Name: "management"},
+ },
+ }
+
+ nodeClusterCommunicationPacketsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_cluster_communication_packets",
+ Title: "Node Cluster Communication",
+ Units: "pps",
+ Fam: "transport",
+ Ctx: "elasticsearch.node_cluster_communication_packets",
+ Priority: prioNodeClusterCommunicationPackets,
+ Dims: module.Dims{
+ {ID: "node_%s_transport_rx_count", Name: "received", Algo: module.Incremental},
+ {ID: "node_%s_transport_tx_count", Name: "sent", Mul: -1, Algo: module.Incremental},
+ },
+ }
+ nodeClusterCommunicationChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_cluster_communication_traffic",
+ Title: "Cluster Communication Bandwidth",
+ Units: "bytes/s",
+ Fam: "transport",
+ Ctx: "elasticsearch.node_cluster_communication_traffic",
+ Priority: prioNodeClusterCommunication,
+ Dims: module.Dims{
+ {ID: "node_%s_transport_rx_size_in_bytes", Name: "received", Algo: module.Incremental},
+ {ID: "node_%s_transport_tx_size_in_bytes", Name: "sent", Mul: -1, Algo: module.Incremental},
+ },
+ }
+
+ nodeHTTPConnectionsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_http_connections",
+ Title: "HTTP Connections",
+ Units: "connections",
+ Fam: "http",
+ Ctx: "elasticsearch.node_http_connections",
+ Priority: prioNodeHTTPConnections,
+ Dims: module.Dims{
+ {ID: "node_%s_http_current_open", Name: "open"},
+ },
+ }
+
+ nodeBreakersTripsChartTmpl = module.Chart{
+ ID: "node_%s_cluster_%s_breakers_trips",
+ Title: "Circuit Breaker Trips Count",
+ Units: "trips/s",
+ Fam: "circuit breakers",
+ Ctx: "elasticsearch.node_breakers_trips",
+ Type: module.Stacked,
+ Priority: prioNodeBreakersTrips,
+ Dims: module.Dims{
+ {ID: "node_%s_breakers_request_tripped", Name: "requests", Algo: module.Incremental},
+ {ID: "node_%s_breakers_fielddata_tripped", Name: "fielddata", Algo: module.Incremental},
+ {ID: "node_%s_breakers_in_flight_requests_tripped", Name: "in_flight_requests", Algo: module.Incremental},
+ {ID: "node_%s_breakers_model_inference_tripped", Name: "model_inference", Algo: module.Incremental},
+ {ID: "node_%s_breakers_accounting_tripped", Name: "accounting", Algo: module.Incremental},
+ {ID: "node_%s_breakers_parent_tripped", Name: "parent", Algo: module.Incremental},
+ },
+ }
+)
+
+var clusterHealthChartsTmpl = module.Charts{
+ clusterStatusChartTmpl.Copy(),
+ clusterNodesCountChartTmpl.Copy(),
+ clusterShardsCountChartTmpl.Copy(),
+ clusterPendingTasksChartTmpl.Copy(),
+ clusterInFlightFetchesCountChartTmpl.Copy(),
+}
+
+var (
+ clusterStatusChartTmpl = module.Chart{
+ ID: "cluster_%s_status",
+ Title: "Cluster Status",
+ Units: "status",
+ Fam: "cluster health",
+ Ctx: "elasticsearch.cluster_health_status",
+ Priority: prioClusterStatus,
+ Dims: module.Dims{
+ {ID: "cluster_status_green", Name: "green"},
+ {ID: "cluster_status_red", Name: "red"},
+ {ID: "cluster_status_yellow", Name: "yellow"},
+ },
+ }
+ clusterNodesCountChartTmpl = module.Chart{
+ ID: "cluster_%s_number_of_nodes",
+ Title: "Cluster Nodes Count",
+ Units: "nodes",
+ Fam: "cluster health",
+ Ctx: "elasticsearch.cluster_number_of_nodes",
+ Priority: prioClusterNodesCount,
+ Dims: module.Dims{
+ {ID: "cluster_number_of_nodes", Name: "nodes"},
+ {ID: "cluster_number_of_data_nodes", Name: "data_nodes"},
+ },
+ }
+ clusterShardsCountChartTmpl = module.Chart{
+ ID: "cluster_%s_shards_count",
+ Title: "Cluster Shards Count",
+ Units: "shards",
+ Fam: "cluster health",
+ Ctx: "elasticsearch.cluster_shards_count",
+ Priority: prioClusterShardsCount,
+ Dims: module.Dims{
+ {ID: "cluster_active_primary_shards", Name: "active_primary"},
+ {ID: "cluster_active_shards", Name: "active"},
+ {ID: "cluster_relocating_shards", Name: "relocating"},
+ {ID: "cluster_initializing_shards", Name: "initializing"},
+ {ID: "cluster_unassigned_shards", Name: "unassigned"},
+ {ID: "cluster_delayed_unassigned_shards", Name: "delayed_unassigned"},
+ },
+ }
+ clusterPendingTasksChartTmpl = module.Chart{
+ ID: "cluster_%s_pending_tasks",
+ Title: "Cluster Pending Tasks",
+ Units: "tasks",
+ Fam: "cluster health",
+ Ctx: "elasticsearch.cluster_pending_tasks",
+ Priority: prioClusterPendingTasks,
+ Dims: module.Dims{
+ {ID: "cluster_number_of_pending_tasks", Name: "pending"},
+ },
+ }
+ clusterInFlightFetchesCountChartTmpl = module.Chart{
+ ID: "cluster_%s_number_of_in_flight_fetch",
+ Title: "Cluster Unfinished Fetches",
+ Units: "fetches",
+ Fam: "cluster health",
+ Ctx: "elasticsearch.cluster_number_of_in_flight_fetch",
+ Priority: prioClusterInFlightFetchesCount,
+ Dims: module.Dims{
+ {ID: "cluster_number_of_in_flight_fetch", Name: "in_flight_fetch"},
+ },
+ }
+)
+
+var clusterStatsChartsTmpl = module.Charts{
+ clusterIndicesCountChartTmpl.Copy(),
+ clusterIndicesShardsCountChartTmpl.Copy(),
+ clusterIndicesDocsCountChartTmpl.Copy(),
+ clusterIndicesStoreSizeChartTmpl.Copy(),
+ clusterIndicesQueryCacheChartTmpl.Copy(),
+ clusterNodesByRoleCountChartTmpl.Copy(),
+}
+
+var (
+ clusterIndicesCountChartTmpl = module.Chart{
+ ID: "cluster_%s_indices_count",
+ Title: "Cluster Indices Count",
+ Units: "indices",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_indices_count",
+ Priority: prioClusterIndicesCount,
+ Dims: module.Dims{
+ {ID: "cluster_indices_count", Name: "indices"},
+ },
+ }
+ clusterIndicesShardsCountChartTmpl = module.Chart{
+ ID: "cluster_%s_indices_shards_count",
+ Title: "Cluster Indices Shards Count",
+ Units: "shards",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_indices_shards_count",
+ Priority: prioClusterIndicesShardsCount,
+ Dims: module.Dims{
+ {ID: "cluster_indices_shards_total", Name: "total"},
+ {ID: "cluster_indices_shards_primaries", Name: "primaries"},
+ {ID: "cluster_indices_shards_replication", Name: "replication"},
+ },
+ }
+ clusterIndicesDocsCountChartTmpl = module.Chart{
+ ID: "cluster_%s_indices_docs_count",
+ Title: "Cluster Indices Docs Count",
+ Units: "docs",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_indices_docs_count",
+ Priority: prioClusterIndicesDocsCount,
+ Dims: module.Dims{
+ {ID: "cluster_indices_docs_count", Name: "docs"},
+ },
+ }
+ clusterIndicesStoreSizeChartTmpl = module.Chart{
+ ID: "cluster_%s_indices_store_size",
+ Title: "Cluster Indices Store Size",
+ Units: "bytes",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_indices_store_size",
+ Priority: prioClusterIndicesStoreSize,
+ Dims: module.Dims{
+ {ID: "cluster_indices_store_size_in_bytes", Name: "size"},
+ },
+ }
+ clusterIndicesQueryCacheChartTmpl = module.Chart{
+ ID: "cluster_%s_indices_query_cache",
+ Title: "Cluster Indices Query Cache",
+ Units: "events/s",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_indices_query_cache",
+ Type: module.Stacked,
+ Priority: prioClusterIndicesQueryCache,
+ Dims: module.Dims{
+ {ID: "cluster_indices_query_cache_hit_count", Name: "hit", Algo: module.Incremental},
+ {ID: "cluster_indices_query_cache_miss_count", Name: "miss", Algo: module.Incremental},
+ },
+ }
+ clusterNodesByRoleCountChartTmpl = module.Chart{
+ ID: "cluster_%s_nodes_by_role_count",
+ Title: "Cluster Nodes By Role Count",
+ Units: "nodes",
+ Fam: "cluster stats",
+ Ctx: "elasticsearch.cluster_nodes_by_role_count",
+ Priority: prioClusterNodesByRoleCount,
+ Dims: module.Dims{
+ {ID: "cluster_nodes_count_coordinating_only", Name: "coordinating_only"},
+ {ID: "cluster_nodes_count_data", Name: "data"},
+ {ID: "cluster_nodes_count_data_cold", Name: "data_cold"},
+ {ID: "cluster_nodes_count_data_content", Name: "data_content"},
+ {ID: "cluster_nodes_count_data_frozen", Name: "data_frozen"},
+ {ID: "cluster_nodes_count_data_hot", Name: "data_hot"},
+ {ID: "cluster_nodes_count_data_warm", Name: "data_warm"},
+ {ID: "cluster_nodes_count_ingest", Name: "ingest"},
+ {ID: "cluster_nodes_count_master", Name: "master"},
+ {ID: "cluster_nodes_count_ml", Name: "ml"},
+ {ID: "cluster_nodes_count_remote_cluster_client", Name: "remote_cluster_client"},
+ {ID: "cluster_nodes_count_voting_only", Name: "voting_only"},
+ },
+ }
+)
+
+var nodeIndexChartsTmpl = module.Charts{
+ nodeIndexHealthChartTmpl.Copy(),
+ nodeIndexShardsCountChartTmpl.Copy(),
+ nodeIndexDocsCountChartTmpl.Copy(),
+ nodeIndexStoreSizeChartTmpl.Copy(),
+}
+
+var (
+ nodeIndexHealthChartTmpl = module.Chart{
+ ID: "node_index_%s_cluster_%s_health",
+ Title: "Index Health",
+ Units: "status",
+ Fam: "index stats",
+ Ctx: "elasticsearch.node_index_health",
+ Priority: prioNodeIndexHealth,
+ Dims: module.Dims{
+ {ID: "node_index_%s_stats_health_green", Name: "green"},
+ {ID: "node_index_%s_stats_health_red", Name: "red"},
+ {ID: "node_index_%s_stats_health_yellow", Name: "yellow"},
+ },
+ }
+ nodeIndexShardsCountChartTmpl = module.Chart{
+ ID: "node_index_%s_cluster_%s_shards_count",
+ Title: "Index Shards Count",
+ Units: "shards",
+ Fam: "index stats",
+ Ctx: "elasticsearch.node_index_shards_count",
+ Priority: prioNodeIndexShardsCount,
+ Dims: module.Dims{
+ {ID: "node_index_%s_stats_shards_count", Name: "shards"},
+ },
+ }
+ nodeIndexDocsCountChartTmpl = module.Chart{
+ ID: "node_index_%s_cluster_%s_docs_count",
+ Title: "Index Docs Count",
+ Units: "docs",
+ Fam: "index stats",
+ Ctx: "elasticsearch.node_index_docs_count",
+ Priority: prioNodeIndexDocsCount,
+ Dims: module.Dims{
+ {ID: "node_index_%s_stats_docs_count", Name: "docs"},
+ },
+ }
+ nodeIndexStoreSizeChartTmpl = module.Chart{
+ ID: "node_index_%s_cluster_%s_store_size",
+ Title: "Index Store Size",
+ Units: "bytes",
+ Fam: "index stats",
+ Ctx: "elasticsearch.node_index_store_size",
+ Priority: prioNodeIndexStoreSize,
+ Dims: module.Dims{
+ {ID: "node_index_%s_stats_store_size_in_bytes", Name: "store_size"},
+ },
+ }
+)
+
+func (es *Elasticsearch) addClusterStatsCharts() {
+ charts := clusterStatsChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, es.clusterName)
+ chart.Labels = []module.Label{
+ {Key: "cluster_name", Value: es.clusterName},
+ }
+ }
+
+ if err := es.charts.Add(*charts...); err != nil {
+ es.Warning(err)
+ }
+}
+
+func (es *Elasticsearch) addClusterHealthCharts() {
+ charts := clusterHealthChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, es.clusterName)
+ chart.Labels = []module.Label{
+ {Key: "cluster_name", Value: es.clusterName},
+ }
+ }
+
+ if err := es.charts.Add(*charts...); err != nil {
+ es.Warning(err)
+ }
+}
+
+func (es *Elasticsearch) addNodeCharts(nodeID string, node *esNodeStats) {
+ charts := nodeChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, nodeID, es.clusterName)
+ chart.Labels = []module.Label{
+ {Key: "cluster_name", Value: es.clusterName},
+ {Key: "node_name", Value: node.Name},
+ {Key: "host", Value: node.Host},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, nodeID)
+ }
+ }
+
+ if err := es.Charts().Add(*charts...); err != nil {
+ es.Warning(err)
+ }
+}
+
+func (es *Elasticsearch) removeNodeCharts(nodeID string) {
+ px := fmt.Sprintf("node_%s_cluster_%s_", nodeID, es.clusterName)
+ es.removeCharts(px)
+}
+
+func (es *Elasticsearch) addIndexCharts(index string) {
+ charts := nodeIndexChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, index, es.clusterName)
+ chart.Labels = []module.Label{
+ {Key: "cluster_name", Value: es.clusterName},
+ {Key: "index", Value: index},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, index)
+ }
+ }
+
+ if err := es.Charts().Add(*charts...); err != nil {
+ es.Warning(err)
+ }
+}
+
+func (es *Elasticsearch) removeIndexCharts(index string) {
+ px := fmt.Sprintf("node_index_%s_cluster_%s_", index, es.clusterName)
+ es.removeCharts(px)
+}
+
+func (es *Elasticsearch) removeCharts(prefix string) {
+ for _, chart := range *es.Charts() {
+ if strings.HasPrefix(chart.ID, prefix) {
+ chart.MarkRemove()
+ chart.MarkNotCreated()
+ }
+ }
+}