github.com/netdata/go.d.plugin@v0.58.1/modules/envoy/charts.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package envoy 4 5 import ( 6 "fmt" 7 "strings" 8 9 "github.com/netdata/go.d.plugin/agent/module" 10 11 "github.com/prometheus/prometheus/model/labels" 12 ) 13 14 const ( 15 prioServerState = module.Priority + iota 16 prioServerMemoryAllocatedSize 17 prioServerMemoryHeapSize 18 prioServerMemoryPhysicalSize 19 prioServerConnectionsCount 20 prioServerParentConnectionsCount 21 22 prioClusterManagerClustersCount 23 prioClusterManagerClusterChangesRate 24 prioClusterManagerClusterUpdatesRate 25 prioClusterManagerClusterUpdatesVieMergeRate 26 prioClusterManagerClusterUpdatesMergeCancelledRate 27 prioClusterManagerClusterUpdatesOufOfMergeWindowsRate 28 29 prioClusterMembershipEndpointsCount 30 prioClusterMembershipChangesRate 31 prioClusterMembershipUpdatesRate 32 33 prioClusterUpstreamActiveConnectionsCount 34 prioClusterUpstreamConnectionsRate 35 prioClusterUpstreamHTTPConnectionsRate 36 prioClusterUpstreamDestroyedConnectionsRate 37 prioClusterUpstreamFailedConnectionsRate 38 prioClusterUpstreamTimedOutConnectionsRate 39 prioClusterUpstreamTrafficRate 40 prioClusterUpstreamBufferedSize 41 42 prioClusterUpstreamActiveRequestsCount 43 prioClusterUpstreamRequestsRate 44 prioClusterUpstreamFailedRequestsRate 45 prioClusterUpstreamActivePendingRequestsCount 46 prioClusterUpstreamPendingRequestsRate 47 prioClusterUpstreamPendingFailedRequestsRate 48 prioClusterUpstreamRequestRetriesRate 49 prioClusterUpstreamRequestSuccessRetriesRate 50 prioClusterUpstreamRequestBackoffRetriesRate 51 52 prioListenerManagerListenerCount 53 prioListenerManagerListenerChangesRate 54 prioListenerManagerListenerObjectEventsRate 55 56 prioListenerAdminDownstreamActiveConnectionsCount 57 prioListenerAdminDownstreamConnectionsRate 58 prioListenerAdminDownstreamDestroyedConnectionsRate 59 prioListenerAdminDownstreamTimedOutConnectionsRate 60 prioListenerAdminDownstreamRejectedConnectionsRate 61 prioListenerAdminDownstreamFilterClosedByRemoteConnectionsRate 62 prioListenerAdminDownstreamFilterReadErrorsRate 63 prioListenerAdminDownstreamActiveSocketsCount 64 prioListenerAdminDownstreamTimedOutSocketsRate 65 66 prioListenerDownstreamActiveConnectionsCount 67 prioListenerDownstreamConnectionsRate 68 prioListenerDownstreamDestroyedConnectionsRate 69 prioListenerDownstreamTimedOutConnectionsRate 70 prioListenerDownstreamRejectedConnectionsRate 71 prioListenerDownstreamFilterClosedByRemoteConnectionsRate 72 prioListenerDownstreamFilterReadErrorsRate 73 prioListenerDownstreamActiveSocketsCount 74 prioListenerDownstreamTimedOutSocketsRate 75 76 prioServerUptime 77 ) 78 79 var ( 80 serverChartsTmpl = module.Charts{ 81 serverStateChartTmpl.Copy(), 82 83 serverMemoryAllocatedSizeChartTmpl.Copy(), 84 serverMemoryHeapSizeChartTmpl.Copy(), 85 serverMemoryPhysicalSizeChartTmpl.Copy(), 86 87 serverConnectionsCountChartTmpl.Copy(), 88 serverParentConnectionsCountChartTmpl.Copy(), 89 90 serverUptimeChartTmpl.Copy(), 91 } 92 serverStateChartTmpl = module.Chart{ 93 ID: "server_state_%s", 94 Title: "Server current state", 95 Units: "state", 96 Fam: "server", 97 Ctx: "envoy.server_state", 98 Priority: prioServerState, 99 Dims: module.Dims{ 100 {ID: "envoy_server_state_live_%s", Name: "live"}, 101 {ID: "envoy_server_state_draining_%s", Name: "draining"}, 102 {ID: "envoy_server_state_pre_initializing_%s", Name: "pre_initializing"}, 103 {ID: "envoy_server_state_initializing_%s", Name: "initializing"}, 104 }, 105 } 106 serverConnectionsCountChartTmpl = module.Chart{ 107 ID: "server_connections_%s", 108 Title: "Server current connections", 109 Units: "connections", 110 Fam: "server", 111 Ctx: "envoy.server_connections_count", 112 Priority: prioServerConnectionsCount, 113 Dims: module.Dims{ 114 {ID: "envoy_server_total_connections_%s", Name: "connections"}, 115 }, 116 } 117 serverParentConnectionsCountChartTmpl = module.Chart{ 118 ID: "server_parent_connections_%s", 119 Title: "Server current parent connections", 120 Units: "connections", 121 Fam: "server", 122 Ctx: "envoy.server_parent_connections_count", 123 Priority: prioServerParentConnectionsCount, 124 Dims: module.Dims{ 125 {ID: "envoy_server_parent_connections_%s", Name: "connections"}, 126 }, 127 } 128 serverMemoryAllocatedSizeChartTmpl = module.Chart{ 129 ID: "server_memory_allocated_size_%s", 130 Title: "Server memory allocated size", 131 Units: "bytes", 132 Fam: "server", 133 Ctx: "envoy.server_memory_allocated_size", 134 Priority: prioServerMemoryAllocatedSize, 135 Dims: module.Dims{ 136 {ID: "envoy_server_memory_allocated_%s", Name: "allocated"}, 137 }, 138 } 139 serverMemoryHeapSizeChartTmpl = module.Chart{ 140 ID: "server_memory_heap_size_%s", 141 Title: "Server memory heap size", 142 Units: "bytes", 143 Fam: "server", 144 Ctx: "envoy.server_memory_heap_size", 145 Priority: prioServerMemoryHeapSize, 146 Dims: module.Dims{ 147 {ID: "envoy_server_memory_heap_size_%s", Name: "heap"}, 148 }, 149 } 150 serverMemoryPhysicalSizeChartTmpl = module.Chart{ 151 ID: "server_memory_physical_size_%s", 152 Title: "Server memory physical size", 153 Units: "bytes", 154 Fam: "server", 155 Ctx: "envoy.server_memory_physical_size", 156 Priority: prioServerMemoryPhysicalSize, 157 Dims: module.Dims{ 158 {ID: "envoy_server_memory_physical_size_%s", Name: "physical"}, 159 }, 160 } 161 serverUptimeChartTmpl = module.Chart{ 162 ID: "server_uptime_%s", 163 Title: "Server uptime", 164 Units: "seconds", 165 Fam: "uptime", 166 Ctx: "envoy.server_uptime", 167 Priority: prioServerUptime, 168 Dims: module.Dims{ 169 {ID: "envoy_server_uptime_%s", Name: "uptime"}, 170 }, 171 } 172 ) 173 174 var ( 175 clusterManagerChartsTmpl = module.Charts{ 176 clusterManagerClusterCountChartTmpl.Copy(), 177 clusterManagerClusterChangesRateChartTmpl.Copy(), 178 clusterManagerClusterUpdatesRateChartTmpl.Copy(), 179 clusterManagerClusterUpdatesViaMergeRateChartTmpl.Copy(), 180 clusterManagerClusterUpdatesMergeCancelledRateChartTmpl.Copy(), 181 clusterManagerClusterUpdatesOutOfMergeWindowRateChartTmpl.Copy(), 182 } 183 clusterManagerClusterCountChartTmpl = module.Chart{ 184 ID: "cluster_manager_cluster_count_%s", 185 Title: "Cluster manager current clusters", 186 Units: "clusters", 187 Fam: "cluster mgr", 188 Ctx: "envoy.cluster_manager_cluster_count", 189 Priority: prioClusterManagerClustersCount, 190 Dims: module.Dims{ 191 {ID: "envoy_cluster_manager_active_clusters_%s", Name: "active"}, 192 {ID: "envoy_cluster_manager_warming_clusters_%s", Name: "not_active"}, 193 }, 194 } 195 clusterManagerClusterChangesRateChartTmpl = module.Chart{ 196 ID: "cluster_manager_cluster_changes_%s", 197 Title: "Cluster manager cluster changes", 198 Units: "clusters/s", 199 Fam: "cluster mgr", 200 Ctx: "envoy.cluster_manager_cluster_changes_rate", 201 Priority: prioClusterManagerClusterChangesRate, 202 Dims: module.Dims{ 203 {ID: "envoy_cluster_manager_cluster_added_%s", Name: "added", Algo: module.Incremental}, 204 {ID: "envoy_cluster_manager_cluster_modified_%s", Name: "modified", Algo: module.Incremental}, 205 {ID: "envoy_cluster_manager_cluster_removed_%s", Name: "removed", Algo: module.Incremental}, 206 }, 207 } 208 clusterManagerClusterUpdatesRateChartTmpl = module.Chart{ 209 ID: "cluster_manager_cluster_updates_%s", 210 Title: "Cluster manager updates", 211 Units: "updates/s", 212 Fam: "cluster mgr", 213 Ctx: "envoy.cluster_manager_cluster_updates_rate", 214 Priority: prioClusterManagerClusterUpdatesRate, 215 Dims: module.Dims{ 216 {ID: "envoy_cluster_manager_cluster_updated_%s", Name: "cluster", Algo: module.Incremental}, 217 }, 218 } 219 clusterManagerClusterUpdatesViaMergeRateChartTmpl = module.Chart{ 220 ID: "cluster_manager_cluster_updated_via_merge_%s", 221 Title: "Cluster manager updates applied as merged updates", 222 Units: "updates/s", 223 Fam: "cluster mgr", 224 Ctx: "envoy.cluster_manager_cluster_updated_via_merge_rate", 225 Priority: prioClusterManagerClusterUpdatesVieMergeRate, 226 Dims: module.Dims{ 227 {ID: "envoy_cluster_manager_cluster_updated_via_merge_%s", Name: "via_merge", Algo: module.Incremental}, 228 }, 229 } 230 clusterManagerClusterUpdatesMergeCancelledRateChartTmpl = module.Chart{ 231 ID: "cluster_manager_update_merge_cancelled_%s", 232 Title: "Cluster manager cancelled merged updates", 233 Units: "updates/s", 234 Fam: "cluster mgr", 235 Ctx: "envoy.cluster_manager_update_merge_cancelled_rate", 236 Priority: prioClusterManagerClusterUpdatesMergeCancelledRate, 237 Dims: module.Dims{ 238 {ID: "envoy_cluster_manager_update_merge_cancelled_%s", Name: "merge_cancelled", Algo: module.Incremental}, 239 }, 240 } 241 clusterManagerClusterUpdatesOutOfMergeWindowRateChartTmpl = module.Chart{ 242 ID: "cluster_manager_update_out_of_merge_window_%s", 243 Title: "Cluster manager out of a merge window updates", 244 Units: "updates/s", 245 Fam: "cluster mgr", 246 Ctx: "envoy.cluster_manager_update_out_of_merge_window_rate", 247 Priority: prioClusterManagerClusterUpdatesOufOfMergeWindowsRate, 248 Dims: module.Dims{ 249 {ID: "envoy_cluster_manager_update_out_of_merge_window_%s", Name: "out_of_merge_window", Algo: module.Incremental}, 250 }, 251 } 252 ) 253 254 var ( 255 clusterUpstreamChartsTmpl = module.Charts{ 256 clusterUpstreamActiveConnectionsCountChartTmpl.Copy(), 257 clusterUpstreamConnectionsRateChartTmpl.Copy(), 258 clusterUpstreamHTTPConnectionsRateChartTmpl.Copy(), 259 clusterUpstreamDestroyedConnectionsRateChartTmpl.Copy(), 260 clusterUpstreamFailedConnectionsRateChartTmpl.Copy(), 261 clusterUpstreamTimedOutConnectionsRateChartTmpl.Copy(), 262 clusterUpstreamTrafficRateChartTmpl.Copy(), 263 clusterUpstreamBufferedSizeChartTmpl.Copy(), 264 265 clusterUpstreamActiveRequestsCountChartTmpl.Copy(), 266 clusterUpstreamRequestsRateChartTmpl.Copy(), 267 clusterUpstreamFailedRequestsRateChartTmpl.Copy(), 268 clusterUpstreamActivePendingRequestsCountChartTmpl.Copy(), 269 clusterUpstreamPendingRequestsRateChartTmpl.Copy(), 270 clusterUpstreamPendingFailedRequestsRateChartTmpl.Copy(), 271 clusterUpstreamRequestRetriesRateChartTmpl.Copy(), 272 clusterUpstreamRequestSuccessRetriesRateChartTmpl.Copy(), 273 clusterUpstreamRequestRetriesBackoffRateChartTmpl.Copy(), 274 275 clusterMembershipEndpointsCountChartTmpl.Copy(), 276 clusterMembershipChangesRateChartTmpl.Copy(), 277 clusterMembershipUpdatesRateChartTmpl.Copy(), 278 } 279 280 clusterUpstreamActiveConnectionsCountChartTmpl = module.Chart{ 281 ID: "cluster_upstream_cx_active_%s", 282 Title: "Cluster upstream current active connections", 283 Units: "connections", 284 Fam: "upstream conns", 285 Ctx: "envoy.cluster_upstream_cx_active_count", 286 Priority: prioClusterUpstreamActiveConnectionsCount, 287 Dims: module.Dims{ 288 {ID: "envoy_cluster_upstream_cx_active_%s", Name: "active"}, 289 }, 290 } 291 clusterUpstreamConnectionsRateChartTmpl = module.Chart{ 292 ID: "cluster_upstream_cx_total_%s", 293 Title: "Cluster upstream connections", 294 Units: "connections/s", 295 Fam: "upstream conns", 296 Ctx: "envoy.cluster_upstream_cx_rate", 297 Priority: prioClusterUpstreamConnectionsRate, 298 Dims: module.Dims{ 299 {ID: "envoy_cluster_upstream_cx_total_%s", Name: "created", Algo: module.Incremental}, 300 }, 301 } 302 clusterUpstreamHTTPConnectionsRateChartTmpl = module.Chart{ 303 ID: "cluster_upstream_cx_http_total_%s", 304 Title: "Cluster upstream connections by HTTP version", 305 Units: "connections/s", 306 Fam: "upstream conns", 307 Ctx: "envoy.cluster_upstream_cx_http_rate", 308 Priority: prioClusterUpstreamHTTPConnectionsRate, 309 Dims: module.Dims{ 310 {ID: "envoy_cluster_upstream_cx_http1_total_%s", Name: "http1", Algo: module.Incremental}, 311 {ID: "envoy_cluster_upstream_cx_http2_total_%s", Name: "http2", Algo: module.Incremental}, 312 {ID: "envoy_cluster_upstream_cx_http3_total_%s", Name: "http3", Algo: module.Incremental}, 313 }, 314 } 315 clusterUpstreamDestroyedConnectionsRateChartTmpl = module.Chart{ 316 ID: "cluster_upstream_cx_destroy_%s", 317 Title: "Cluster upstream destroyed connections", 318 Units: "connections/s", 319 Fam: "upstream conns", 320 Ctx: "envoy.cluster_upstream_cx_destroy_rate", 321 Priority: prioClusterUpstreamDestroyedConnectionsRate, 322 Dims: module.Dims{ 323 {ID: "envoy_cluster_upstream_cx_destroy_local_%s", Name: "local", Algo: module.Incremental}, 324 {ID: "envoy_cluster_upstream_cx_destroy_remote_%s", Name: "remote", Algo: module.Incremental}, 325 }, 326 } 327 clusterUpstreamFailedConnectionsRateChartTmpl = module.Chart{ 328 ID: "cluster_upstream_cx_connect_fail_%s", 329 Title: "Cluster upstream failed connections", 330 Units: "connections/s", 331 Fam: "upstream conns", 332 Ctx: "envoy.cluster_upstream_cx_connect_fail_rate", 333 Priority: prioClusterUpstreamFailedConnectionsRate, 334 Dims: module.Dims{ 335 {ID: "envoy_cluster_upstream_cx_connect_fail_%s", Name: "failed", Algo: module.Incremental}, 336 }, 337 } 338 clusterUpstreamTimedOutConnectionsRateChartTmpl = module.Chart{ 339 ID: "cluster_upstream_cx_connect_timeout_%s", 340 Title: "Cluster upstream timed out connections", 341 Units: "connections/s", 342 Fam: "upstream conns", 343 Ctx: "envoy.cluster_upstream_cx_connect_timeout_rate", 344 Priority: prioClusterUpstreamTimedOutConnectionsRate, 345 Dims: module.Dims{ 346 {ID: "envoy_cluster_upstream_cx_connect_timeout_%s", Name: "timeout", Algo: module.Incremental}, 347 }, 348 } 349 clusterUpstreamTrafficRateChartTmpl = module.Chart{ 350 ID: "cluster_upstream_cx_bytes_total_%s", 351 Title: "Cluster upstream connection traffic", 352 Units: "bytes/s", 353 Fam: "upstream traffic", 354 Ctx: "envoy.cluster_upstream_cx_bytes_rate", 355 Priority: prioClusterUpstreamTrafficRate, 356 Dims: module.Dims{ 357 {ID: "envoy_cluster_upstream_cx_rx_bytes_total_%s", Name: "received", Algo: module.Incremental}, 358 {ID: "envoy_cluster_upstream_cx_tx_bytes_total_%s", Name: "sent", Algo: module.Incremental}, 359 }, 360 } 361 clusterUpstreamBufferedSizeChartTmpl = module.Chart{ 362 ID: "cluster_upstream_cx_bytes_buffered_%s", 363 Title: "Cluster upstream current connection buffered size", 364 Units: "bytes", 365 Fam: "upstream traffic", 366 Ctx: "envoy.cluster_upstream_cx_bytes_buffered_size", 367 Priority: prioClusterUpstreamBufferedSize, 368 Dims: module.Dims{ 369 {ID: "envoy_cluster_upstream_cx_rx_bytes_buffered_%s", Name: "received"}, 370 {ID: "envoy_cluster_upstream_cx_tx_bytes_buffered_%s", Name: "send"}, 371 }, 372 } 373 374 clusterUpstreamActiveRequestsCountChartTmpl = module.Chart{ 375 ID: "cluster_upstream_rq_active_%s", 376 Title: "Cluster upstream current active requests", 377 Units: "requests", 378 Fam: "upstream requests", 379 Ctx: "envoy.cluster_upstream_rq_active_count", 380 Priority: prioClusterUpstreamActiveRequestsCount, 381 Dims: module.Dims{ 382 {ID: "envoy_cluster_upstream_rq_active_%s", Name: "active"}, 383 }, 384 } 385 clusterUpstreamRequestsRateChartTmpl = module.Chart{ 386 ID: "cluster_upstream_rq_total_%s", 387 Title: "Cluster upstream requests", 388 Units: "requests/s", 389 Fam: "upstream requests", 390 Ctx: "envoy.cluster_upstream_rq_rate", 391 Priority: prioClusterUpstreamRequestsRate, 392 Dims: module.Dims{ 393 {ID: "envoy_cluster_upstream_rq_total_%s", Name: "requests", Algo: module.Incremental}, 394 }, 395 } 396 clusterUpstreamFailedRequestsRateChartTmpl = module.Chart{ 397 ID: "cluster_upstream_rq_failed_total_%s", 398 Title: "Cluster upstream failed requests", 399 Units: "requests/s", 400 Fam: "upstream requests", 401 Ctx: "envoy.cluster_upstream_rq_failed_rate", 402 Priority: prioClusterUpstreamFailedRequestsRate, 403 Dims: module.Dims{ 404 {ID: "envoy_cluster_upstream_rq_cancelled_%s", Name: "cancelled", Algo: module.Incremental}, 405 {ID: "envoy_cluster_upstream_rq_maintenance_mode_%s", Name: "maintenance_mode", Algo: module.Incremental}, 406 {ID: "envoy_cluster_upstream_rq_timeout_%s", Name: "timeout", Algo: module.Incremental}, 407 {ID: "envoy_cluster_upstream_rq_max_duration_reached_%s", Name: "max_duration_reached", Algo: module.Incremental}, 408 {ID: "envoy_cluster_upstream_rq_per_try_timeout_%s", Name: "per_try_timeout", Algo: module.Incremental}, 409 {ID: "envoy_cluster_upstream_rq_rx_reset_%s", Name: "reset_local", Algo: module.Incremental}, 410 {ID: "envoy_cluster_upstream_rq_tx_reset_%s", Name: "reset_remote", Algo: module.Incremental}, 411 }, 412 } 413 clusterUpstreamActivePendingRequestsCountChartTmpl = module.Chart{ 414 ID: "cluster_upstream_rq_pending_active_%s", 415 Title: "Cluster upstream current active pending requests", 416 Units: "requests", 417 Fam: "upstream requests", 418 Ctx: "envoy.cluster_upstream_rq_pending_active_count", 419 Priority: prioClusterUpstreamActivePendingRequestsCount, 420 Dims: module.Dims{ 421 {ID: "envoy_cluster_upstream_rq_pending_active_%s", Name: "active_pending"}, 422 }, 423 } 424 clusterUpstreamPendingRequestsRateChartTmpl = module.Chart{ 425 ID: "cluster_upstream_rq_pending_total_%s", 426 Title: "Cluster upstream pending requests", 427 Units: "requests/s", 428 Fam: "upstream requests", 429 Ctx: "envoy.cluster_upstream_rq_pending_rate", 430 Priority: prioClusterUpstreamPendingRequestsRate, 431 Dims: module.Dims{ 432 {ID: "envoy_cluster_upstream_rq_pending_total_%s", Name: "pending", Algo: module.Incremental}, 433 }, 434 } 435 clusterUpstreamPendingFailedRequestsRateChartTmpl = module.Chart{ 436 ID: "cluster_upstream_rq_pending_failed_total_%s", 437 Title: "Cluster upstream failed pending requests", 438 Units: "requests/s", 439 Fam: "upstream requests", 440 Ctx: "envoy.cluster_upstream_rq_pending_failed_rate", 441 Priority: prioClusterUpstreamPendingFailedRequestsRate, 442 Dims: module.Dims{ 443 {ID: "envoy_cluster_upstream_rq_pending_overflow_%s", Name: "overflow", Algo: module.Incremental}, 444 {ID: "envoy_cluster_upstream_rq_pending_failure_eject_%s", Name: "failure_eject", Algo: module.Incremental}, 445 }, 446 } 447 clusterUpstreamRequestRetriesRateChartTmpl = module.Chart{ 448 ID: "cluster_upstream_rq_retry_%s", 449 Title: "Cluster upstream request retries", 450 Units: "retries/s", 451 Fam: "upstream requests", 452 Ctx: "envoy.cluster_upstream_rq_retry_rate", 453 Priority: prioClusterUpstreamRequestRetriesRate, 454 Dims: module.Dims{ 455 {ID: "envoy_cluster_upstream_rq_retry_%s", Name: "request", Algo: module.Incremental}, 456 }, 457 } 458 clusterUpstreamRequestSuccessRetriesRateChartTmpl = module.Chart{ 459 ID: "cluster_upstream_rq_retry_success_%s", 460 Title: "Cluster upstream request successful retries", 461 Units: "retries/s", 462 Fam: "upstream requests", 463 Ctx: "envoy.cluster_upstream_rq_retry_success_rate", 464 Priority: prioClusterUpstreamRequestSuccessRetriesRate, 465 Dims: module.Dims{ 466 {ID: "envoy_cluster_upstream_rq_retry_success_%s", Name: "success", Algo: module.Incremental}, 467 }, 468 } 469 clusterUpstreamRequestRetriesBackoffRateChartTmpl = module.Chart{ 470 ID: "cluster_upstream_rq_retry_backoff_%s", 471 Title: "Cluster upstream request backoff retries", 472 Units: "retries/s", 473 Fam: "upstream requests", 474 Ctx: "envoy.cluster_upstream_rq_retry_backoff_rate", 475 Priority: prioClusterUpstreamRequestBackoffRetriesRate, 476 Dims: module.Dims{ 477 {ID: "envoy_cluster_upstream_rq_retry_backoff_exponential_%s", Name: "exponential", Algo: module.Incremental}, 478 {ID: "envoy_cluster_upstream_rq_retry_backoff_ratelimited_%s", Name: "ratelimited", Algo: module.Incremental}, 479 }, 480 } 481 482 clusterMembershipEndpointsCountChartTmpl = module.Chart{ 483 ID: "cluster_membership_endpoints_count_%s", 484 Title: "Cluster membership current endpoints", 485 Units: "endpoints", 486 Fam: "cluster membership", 487 Ctx: "envoy.cluster_membership_endpoints_count", 488 Priority: prioClusterMembershipEndpointsCount, 489 Dims: module.Dims{ 490 {ID: "envoy_cluster_membership_healthy_%s", Name: "healthy"}, 491 {ID: "envoy_cluster_membership_degraded_%s", Name: "degraded"}, 492 {ID: "envoy_cluster_membership_excluded_%s", Name: "excluded"}, 493 }, 494 } 495 clusterMembershipChangesRateChartTmpl = module.Chart{ 496 ID: "cluster_membership_change_%s", 497 Title: "Cluster membership changes", 498 Units: "changes/s", 499 Fam: "cluster membership", 500 Ctx: "envoy.cluster_membership_changes_rate", 501 Priority: prioClusterMembershipChangesRate, 502 Dims: module.Dims{ 503 {ID: "envoy_cluster_membership_change_%s", Name: "membership", Algo: module.Incremental}, 504 }, 505 } 506 clusterMembershipUpdatesRateChartTmpl = module.Chart{ 507 ID: "cluster_membership_updates_%s", 508 Title: "Cluster membership updates", 509 Units: "updates/s", 510 Fam: "cluster membership", 511 Ctx: "envoy.cluster_membership_updates_rate", 512 Priority: prioClusterMembershipUpdatesRate, 513 Dims: module.Dims{ 514 {ID: "envoy_cluster_update_success_%s", Name: "success", Algo: module.Incremental}, 515 {ID: "envoy_cluster_update_failure_%s", Name: "failure", Algo: module.Incremental}, 516 {ID: "envoy_cluster_update_empty_%s", Name: "empty", Algo: module.Incremental}, 517 {ID: "envoy_cluster_update_no_rebuild_%s", Name: "no_rebuild", Algo: module.Incremental}, 518 }, 519 } 520 ) 521 522 var ( 523 listenerManagerChartsTmpl = module.Charts{ 524 listenerManagerListenersByStateCountChartTmpl.Copy(), 525 listenerManagerListenerChangesRateChartTmpl.Copy(), 526 listenerManagerListenerObjectEventsRateChartTmpl.Copy(), 527 } 528 listenerManagerListenersByStateCountChartTmpl = module.Chart{ 529 ID: "listener_manager_listeners_count_%s", 530 Title: "Listener manager current listeners", 531 Units: "listeners", 532 Fam: "downstream mgr", 533 Ctx: "envoy.listener_manager_listeners_count", 534 Priority: prioListenerManagerListenerCount, 535 Dims: module.Dims{ 536 {ID: "envoy_listener_manager_total_listeners_active_%s", Name: "active"}, 537 {ID: "envoy_listener_manager_total_listeners_warming_%s", Name: "warming"}, 538 {ID: "envoy_listener_manager_total_listeners_draining_%s", Name: "draining"}, 539 }, 540 } 541 listenerManagerListenerChangesRateChartTmpl = module.Chart{ 542 ID: "listener_manager_listener_changes_%s", 543 Title: "Listener manager listener changes", 544 Units: "listeners/s", 545 Fam: "downstream mgr", 546 Ctx: "envoy.listener_manager_listener_changes_rate", 547 Priority: prioListenerManagerListenerChangesRate, 548 Dims: module.Dims{ 549 {ID: "envoy_listener_manager_listener_added_%s", Name: "added", Algo: module.Incremental}, 550 {ID: "envoy_listener_manager_listener_modified_%s", Name: "modified", Algo: module.Incremental}, 551 {ID: "envoy_listener_manager_listener_removed_%s", Name: "removed", Algo: module.Incremental}, 552 {ID: "envoy_listener_manager_listener_stopped_%s", Name: "stopped", Algo: module.Incremental}, 553 }, 554 } 555 listenerManagerListenerObjectEventsRateChartTmpl = module.Chart{ 556 ID: "listener_manager_listener_object_events_%s", 557 Title: "Listener manager listener object events", 558 Units: "objects/s", 559 Fam: "downstream mgr", 560 Ctx: "envoy.listener_manager_listener_object_events_rate", 561 Priority: prioListenerManagerListenerObjectEventsRate, 562 Dims: module.Dims{ 563 {ID: "envoy_listener_manager_listener_create_success_%s", Name: "create_success", Algo: module.Incremental}, 564 {ID: "envoy_listener_manager_listener_create_failure_%s", Name: "create_failure", Algo: module.Incremental}, 565 {ID: "envoy_listener_manager_listener_in_place_updated_%s", Name: "in_place_updated", Algo: module.Incremental}, 566 }, 567 } 568 ) 569 570 var ( 571 listenerAdminDownstreamChartsTmpl = module.Charts{ 572 listenerAdminDownstreamActiveConnectionsCountChartTmpl.Copy(), 573 listenerAdminDownstreamConnectionsRateChartTmpl.Copy(), 574 listenerAdminDownstreamDestroyedConnectionsRateChartTmpl.Copy(), 575 listenerAdminDownstreamTimedOutConnectionsRateChartTmpl.Copy(), 576 listenerAdminDownstreamRejectedConnectionsRateChartTmpl.Copy(), 577 listenerAdminDownstreamFilterClosedByRemoteConnectionsRateChartTmpl.Copy(), 578 listenerAdminDownstreamFilterReadErrorsRateChartTmpl.Copy(), 579 580 listenerAdminDownstreamActiveSocketsCountChartTmpl.Copy(), 581 listenerAdminDownstreamTimedOutSocketsRateChartTmpl.Copy(), 582 } 583 584 listenerAdminDownstreamActiveConnectionsCountChartTmpl = module.Chart{ 585 ID: "listener_admin_downstream_cx_active_%s", 586 Title: "Listener admin downstream current active connections", 587 Units: "connections", 588 Fam: "downstream adm conns", 589 Ctx: "envoy.listener_admin_downstream_cx_active_count", 590 Priority: prioListenerAdminDownstreamActiveConnectionsCount, 591 Dims: module.Dims{ 592 {ID: "envoy_listener_admin_downstream_cx_active_%s", Name: "active"}, 593 }, 594 } 595 listenerAdminDownstreamConnectionsRateChartTmpl = module.Chart{ 596 ID: "listener_admin_downstream_cx_total_%s", 597 Title: "Listener admin downstream connections", 598 Units: "connections/s", 599 Fam: "downstream adm conns", 600 Ctx: "envoy.listener_admin_downstream_cx_rate", 601 Priority: prioListenerAdminDownstreamConnectionsRate, 602 Dims: module.Dims{ 603 {ID: "envoy_listener_admin_downstream_cx_total_%s", Name: "created", Algo: module.Incremental}, 604 }, 605 } 606 listenerAdminDownstreamDestroyedConnectionsRateChartTmpl = module.Chart{ 607 ID: "listener_admin_downstream_cx_destroy_%s", 608 Title: "Listener admin downstream destroyed connections", 609 Units: "connections/s", 610 Fam: "downstream adm conns", 611 Ctx: "envoy.listener_admin_downstream_cx_destroy_rate", 612 Priority: prioListenerAdminDownstreamDestroyedConnectionsRate, 613 Dims: module.Dims{ 614 {ID: "envoy_listener_admin_downstream_cx_destroy_%s", Name: "destroyed", Algo: module.Incremental}, 615 }, 616 } 617 listenerAdminDownstreamTimedOutConnectionsRateChartTmpl = module.Chart{ 618 ID: "listener_admin_downstream_cx_transport_socket_connect_timeout_%s", 619 Title: "Listener admin downstream timed out connections", 620 Units: "connections/s", 621 Fam: "downstream adm conns", 622 Ctx: "envoy.listener_admin_downstream_cx_transport_socket_connect_timeout_rate", 623 Priority: prioListenerAdminDownstreamTimedOutConnectionsRate, 624 Dims: module.Dims{ 625 {ID: "envoy_listener_admin_downstream_cx_transport_socket_connect_timeout_%s", Name: "timeout", Algo: module.Incremental}, 626 }, 627 } 628 listenerAdminDownstreamRejectedConnectionsRateChartTmpl = module.Chart{ 629 ID: "listener_admin_downstream_cx_rejected_%s", 630 Title: "Listener admin downstream rejected connections", 631 Units: "connections/s", 632 Fam: "downstream adm conns", 633 Ctx: "envoy.listener_admin_downstream_cx_rejected_rate", 634 Priority: prioListenerAdminDownstreamRejectedConnectionsRate, 635 Dims: module.Dims{ 636 {ID: "envoy_listener_admin_downstream_cx_overflow_%s", Name: "overflow", Algo: module.Incremental}, 637 {ID: "envoy_listener_admin_downstream_cx_overload_reject_%s", Name: "overload", Algo: module.Incremental}, 638 {ID: "envoy_listener_admin_downstream_global_cx_overflow_%s", Name: "global_overflow", Algo: module.Incremental}, 639 }, 640 } 641 listenerAdminDownstreamFilterClosedByRemoteConnectionsRateChartTmpl = module.Chart{ 642 ID: "listener_admin_downstream_listener_filter_remote_close_%s", 643 Title: "Listener admin downstream connections closed by remote when peek data for listener filters", 644 Units: "connections/s", 645 Fam: "downstream adm conns", 646 Ctx: "envoy.listener_admin_downstream_listener_filter_remote_close_rate", 647 Priority: prioListenerAdminDownstreamFilterClosedByRemoteConnectionsRate, 648 Dims: module.Dims{ 649 {ID: "envoy_listener_admin_downstream_listener_filter_remote_close_%s", Name: "closed", Algo: module.Incremental}, 650 }, 651 } 652 listenerAdminDownstreamFilterReadErrorsRateChartTmpl = module.Chart{ 653 ID: "listener_admin_downstream_listener_filter_error_%s", 654 Title: "Listener admin downstream read errors when peeking data for listener filters", 655 Units: "errors/s", 656 Fam: "downstream adm conns", 657 Ctx: "envoy.listener_admin_downstream_listener_filter_error_rate", 658 Priority: prioListenerAdminDownstreamFilterReadErrorsRate, 659 Dims: module.Dims{ 660 {ID: "envoy_listener_admin_downstream_listener_filter_error_%s", Name: "read", Algo: module.Incremental}, 661 }, 662 } 663 664 listenerAdminDownstreamActiveSocketsCountChartTmpl = module.Chart{ 665 ID: "listener_admin_downstream_pre_cx_active_%s", 666 Title: "Listener admin downstream current active sockets", 667 Units: "sockets", 668 Fam: "downstream adm sockets", 669 Ctx: "envoy.listener_admin_downstream_pre_cx_active_count", 670 Priority: prioListenerAdminDownstreamActiveSocketsCount, 671 Dims: module.Dims{ 672 {ID: "envoy_listener_admin_downstream_pre_cx_active_%s", Name: "active"}, 673 }, 674 } 675 listenerAdminDownstreamTimedOutSocketsRateChartTmpl = module.Chart{ 676 ID: "listener_admin_downstream_pre_cx_timeout_%s", 677 Title: "Listener admin downstream timed out sockets", 678 Units: "sockets/s", 679 Fam: "downstream adm sockets", 680 Ctx: "envoy.listener_admin_downstream_pre_cx_timeout_rate", 681 Priority: prioListenerAdminDownstreamTimedOutSocketsRate, 682 Dims: module.Dims{ 683 {ID: "envoy_listener_admin_downstream_pre_cx_timeout_%s", Name: "timeout", Algo: module.Incremental}, 684 }, 685 } 686 ) 687 688 var ( 689 listenerDownstreamChartsTmpl = module.Charts{ 690 listenerDownstreamActiveConnectionsCountChartTmpl.Copy(), 691 listenerDownstreamConnectionsRateChartTmpl.Copy(), 692 listenerDownstreamDestroyedConnectionsRateChartTmpl.Copy(), 693 listenerDownstreamTimedOutConnectionsRateChartTmpl.Copy(), 694 listenerDownstreamRejectedConnectionsRateChartTmpl.Copy(), 695 listenerDownstreamFilterClosedByRemoteConnectionsRateChartTmpl.Copy(), 696 listenerDownstreamFilterReadErrorsRateChartTmpl.Copy(), 697 698 listenerDownstreamActiveSocketsCountChartTmpl.Copy(), 699 listenerDownstreamTimedOutSocketsRateChartTmpl.Copy(), 700 } 701 702 listenerDownstreamActiveConnectionsCountChartTmpl = module.Chart{ 703 ID: "listener_downstream_cx_active_%s", 704 Title: "Listener downstream current active connections", 705 Units: "connections", 706 Fam: "downstream conns", 707 Ctx: "envoy.listener_downstream_cx_active_count", 708 Priority: prioListenerDownstreamActiveConnectionsCount, 709 Dims: module.Dims{ 710 {ID: "envoy_listener_downstream_cx_active_%s", Name: "active"}, 711 }, 712 } 713 listenerDownstreamConnectionsRateChartTmpl = module.Chart{ 714 ID: "listener_downstream_cx_total_%s", 715 Title: "Listener downstream connections", 716 Units: "connections/s", 717 Fam: "downstream conns", 718 Ctx: "envoy.listener_downstream_cx_rate", 719 Priority: prioListenerDownstreamConnectionsRate, 720 Dims: module.Dims{ 721 {ID: "envoy_listener_downstream_cx_total_%s", Name: "created", Algo: module.Incremental}, 722 }, 723 } 724 listenerDownstreamDestroyedConnectionsRateChartTmpl = module.Chart{ 725 ID: "listener_downstream_cx_destroy_%s", 726 Title: "Listener downstream destroyed connections", 727 Units: "connections/s", 728 Fam: "downstream conns", 729 Ctx: "envoy.listener_downstream_cx_destroy_rate", 730 Priority: prioListenerDownstreamDestroyedConnectionsRate, 731 Dims: module.Dims{ 732 {ID: "envoy_listener_downstream_cx_destroy_%s", Name: "destroyed", Algo: module.Incremental}, 733 }, 734 } 735 listenerDownstreamTimedOutConnectionsRateChartTmpl = module.Chart{ 736 ID: "listener_downstream_cx_transport_socket_connect_timeout_%s", 737 Title: "Listener downstream timed out connections", 738 Units: "connections/s", 739 Fam: "downstream conns", 740 Ctx: "envoy.listener_downstream_cx_transport_socket_connect_timeout_rate", 741 Priority: prioListenerDownstreamTimedOutConnectionsRate, 742 Dims: module.Dims{ 743 {ID: "envoy_listener_downstream_cx_transport_socket_connect_timeout_%s", Name: "timeout", Algo: module.Incremental}, 744 }, 745 } 746 listenerDownstreamRejectedConnectionsRateChartTmpl = module.Chart{ 747 ID: "listener_downstream_cx_rejected_%s", 748 Title: "Listener downstream rejected connections", 749 Units: "connections/s", 750 Fam: "downstream conns", 751 Ctx: "envoy.listener_downstream_cx_rejected_rate", 752 Priority: prioListenerDownstreamRejectedConnectionsRate, 753 Dims: module.Dims{ 754 {ID: "envoy_listener_downstream_cx_overflow_%s", Name: "overflow", Algo: module.Incremental}, 755 {ID: "envoy_listener_downstream_cx_overload_reject_%s", Name: "overload", Algo: module.Incremental}, 756 {ID: "envoy_listener_downstream_global_cx_overflow_%s", Name: "global_overflow", Algo: module.Incremental}, 757 }, 758 } 759 listenerDownstreamFilterClosedByRemoteConnectionsRateChartTmpl = module.Chart{ 760 ID: "listener_downstream_listener_filter_remote_close_%s", 761 Title: "Listener downstream connections closed by remote when peek data for listener filters", 762 Units: "connections/s", 763 Fam: "downstream conns", 764 Ctx: "envoy.listener_downstream_listener_filter_remote_close_rate", 765 Priority: prioListenerDownstreamFilterClosedByRemoteConnectionsRate, 766 Dims: module.Dims{ 767 {ID: "envoy_listener_downstream_listener_filter_remote_close_%s", Name: "closed", Algo: module.Incremental}, 768 }, 769 } 770 listenerDownstreamFilterReadErrorsRateChartTmpl = module.Chart{ 771 ID: "listener_downstream_listener_filter_error_%s", 772 Title: "Listener downstream read errors when peeking data for listener filters", 773 Units: "errors/s", 774 Fam: "downstream conns", 775 Ctx: "envoy.listener_downstream_listener_filter_error_rate", 776 Priority: prioListenerDownstreamFilterReadErrorsRate, 777 Dims: module.Dims{ 778 {ID: "envoy_listener_downstream_listener_filter_error_%s", Name: "read", Algo: module.Incremental}, 779 }, 780 } 781 782 listenerDownstreamActiveSocketsCountChartTmpl = module.Chart{ 783 ID: "listener_downstream_pre_cx_active_%s", 784 Title: "Listener downstream current active sockets", 785 Units: "sockets", 786 Fam: "downstream sockets", 787 Ctx: "envoy.listener_downstream_pre_cx_active_count", 788 Priority: prioListenerDownstreamActiveSocketsCount, 789 Dims: module.Dims{ 790 {ID: "envoy_listener_downstream_pre_cx_active_%s", Name: "active"}, 791 }, 792 } 793 listenerDownstreamTimedOutSocketsRateChartTmpl = module.Chart{ 794 ID: "listener_downstream_pre_cx_timeout_%s", 795 Title: "Listener downstream timed out sockets", 796 Units: "sockets/s", 797 Fam: "downstream sockets", 798 Ctx: "envoy.listener_downstream_pre_cx_timeout_rate", 799 Priority: prioListenerDownstreamTimedOutSocketsRate, 800 Dims: module.Dims{ 801 {ID: "envoy_listener_downstream_pre_cx_timeout_%s", Name: "timeout", Algo: module.Incremental}, 802 }, 803 } 804 ) 805 806 func (e *Envoy) addServerCharts(id string, labels labels.Labels) { 807 e.addCharts(serverChartsTmpl.Copy(), id, labels) 808 } 809 810 func (e *Envoy) addClusterManagerCharts(id string, labels labels.Labels) { 811 e.addCharts(clusterManagerChartsTmpl.Copy(), id, labels) 812 } 813 814 func (e *Envoy) addClusterUpstreamCharts(id string, labels labels.Labels) { 815 e.addCharts(clusterUpstreamChartsTmpl.Copy(), id, labels) 816 } 817 818 func (e *Envoy) addListenerManagerCharts(id string, labels labels.Labels) { 819 e.addCharts(listenerManagerChartsTmpl.Copy(), id, labels) 820 } 821 822 func (e *Envoy) addListenerAdminDownstreamCharts(id string, labels labels.Labels) { 823 e.addCharts(listenerAdminDownstreamChartsTmpl.Copy(), id, labels) 824 } 825 826 func (e *Envoy) addListenerDownstreamCharts(id string, labels labels.Labels) { 827 e.addCharts(listenerDownstreamChartsTmpl.Copy(), id, labels) 828 } 829 830 func (e *Envoy) addCharts(charts *module.Charts, id string, labels labels.Labels) { 831 charts = charts.Copy() 832 833 for _, chart := range *charts { 834 if id == "" { 835 chart.ID = strings.Replace(chart.ID, "_%s", "", 1) 836 for _, dim := range chart.Dims { 837 dim.ID = strings.Replace(dim.ID, "_%s", "", 1) 838 } 839 } else { 840 chart.ID = fmt.Sprintf(chart.ID, dotReplacer.Replace(id)) 841 for _, dim := range chart.Dims { 842 dim.ID = fmt.Sprintf(dim.ID, id) 843 } 844 } 845 846 for _, lbl := range labels { 847 chart.Labels = append(chart.Labels, module.Label{Key: lbl.Name, Value: lbl.Value}) 848 } 849 } 850 851 if err := e.Charts().Add(*charts...); err != nil { 852 e.Warning(err) 853 } 854 } 855 856 func (e *Envoy) removeCharts(id string) { 857 if id == "" { 858 return 859 } 860 861 id = dotReplacer.Replace(id) 862 for _, chart := range *e.Charts() { 863 if strings.HasSuffix(chart.ID, id) { 864 chart.MarkRemove() 865 chart.MarkNotCreated() 866 } 867 } 868 } 869 870 var dotReplacer = strings.NewReplacer(".", "_")