diff --git a/.drone/drone.jsonnet b/.drone/drone.jsonnet index b1bcfa3fa..6b21d06bc 100644 --- a/.drone/drone.jsonnet +++ b/.drone/drone.jsonnet @@ -16,11 +16,17 @@ local run(name, commands) = { }; [ - pipeline('build', [ - run('lint-fmt', [ - 'make install-ci-deps', - 'make lint-fmt', - 'make lint-mixins', - ]), - ]), + pipeline( + 'build', [ + run('lint-fmt', [ + 'make install-ci-deps', + 'make lint-fmt', + 'make lint-mixins', + ]), + run('tests', [ + 'make install-ci-deps', + 'make tests', + ]), + ] + ), ] diff --git a/.drone/drone.yml b/.drone/drone.yml index b733a3ec1..7e8de5813 100644 --- a/.drone/drone.yml +++ b/.drone/drone.yml @@ -8,12 +8,17 @@ steps: - make lint-mixins image: golang:1.18 name: lint-fmt +- commands: + - make install-ci-deps + - make tests + image: golang:1.18 + name: tests trigger: event: include: - pull_request --- kind: signature -hmac: 78a1dae3b7fa280bb32281b3ddbdbc7d1a9a7ab54681a00ed536876e2bdca55d +hmac: 569cd1940689a70b907683e347d832a4a2809c1dbf23035ab036acf88b72a57a ... diff --git a/Makefile b/Makefile index 85b6632f8..34c0d8b61 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,9 @@ lint-mixins: done; \ exit $$RESULT +tests: + pushd . && cd ./common-lib && make vendor && make tests + drone: drone jsonnet --stream --source .drone/drone.jsonnet --target .drone/drone.yml --format yaml drone lint .drone/drone.yml diff --git a/apache-cassandra-mixin/.lint b/apache-cassandra-mixin/.lint index ccc1be112..e1866dce9 100644 --- a/apache-cassandra-mixin/.lint +++ b/apache-cassandra-mixin/.lint @@ -17,6 +17,8 @@ exclusions: - panel: "Keyspaces count" - panel: "Repair jobs started" - panel: "Repair jobs completed" + panel-datasource-rule: + reason: "Loki datasource variable is being named as loki_datasource now while linter expects 'datasource'" template-datasource-rule: reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" template-instance-rule: diff --git a/apache-cassandra-mixin/alerts/alerts.libsonnet b/apache-cassandra-mixin/alerts/alerts.libsonnet index 89c2fc562..8752a1a69 100644 --- a/apache-cassandra-mixin/alerts/alerts.libsonnet +++ b/apache-cassandra-mixin/alerts/alerts.libsonnet @@ -79,7 +79,7 @@ { alert: 'HintsStoredOnNode', expr: ||| - cassandra_storage_totalhints_count > %(alertsWarningHintsStored1m)s + increase(cassandra_storage_totalhints_count[5m]) > %(alertsWarningHintsStored1m)s ||| % $._config, 'for': '1m', labels: { @@ -115,7 +115,7 @@ { alert: 'HighCpuUsage', expr: ||| - jvm_process_cpu_load * 100 > %(alertsCriticalHighCpuUsage5m)s + jvm_process_cpu_load{job=~"integrations/apache-cassandra"} * 100 > %(alertsCriticalHighCpuUsage5m)s ||| % $._config, 'for': '5m', labels: { @@ -133,7 +133,7 @@ { alert: 'HighMemoryUsage', expr: ||| - sum(jvm_memory_usage_used_bytes{area="Heap"}) / sum(jvm_physical_memory_size) * 100 > %(alertsCriticalHighMemoryUsage5m)s + sum(jvm_memory_usage_used_bytes{job=~"integrations/apache-cassandra", area="Heap"}) / sum(jvm_physical_memory_size{job=~"integrations/apache-cassandra"}) * 100 > %(alertsCriticalHighMemoryUsage5m)s ||| % $._config, 'for': '5m', labels: { diff --git a/apache-couchdb-mixin/config.libsonnet b/apache-couchdb-mixin/config.libsonnet index a31dabbdc..cf095c6a7 100644 --- a/apache-couchdb-mixin/config.libsonnet +++ b/apache-couchdb-mixin/config.libsonnet @@ -1,5 +1,9 @@ { _config+:: { + enableMultiCluster: false, + couchDBSelector: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster"' else 'job=~"$job"', + multiClusterSelector: 'job=~"$job"', + dashboardTags: ['apache-couchdb-mixin'], dashboardPeriod: 'now-1h', dashboardTimezone: 'default', diff --git a/apache-couchdb-mixin/dashboards/couchdb-nodes.libsonnet b/apache-couchdb-mixin/dashboards/couchdb-nodes.libsonnet index c5f68b1c5..b9f7506d5 100644 --- a/apache-couchdb-mixin/dashboards/couchdb-nodes.libsonnet +++ b/apache-couchdb-mixin/dashboards/couchdb-nodes.libsonnet @@ -8,7 +8,7 @@ local dashboardUid = 'couchdb-nodes'; local promDatasourceName = 'prometheus_datasource'; local lokiDatasourceName = 'loki_datasource'; -local matcher = 'job=~"$job", couchdb_cluster=~"$couchdb_cluster", instance=~"$instance"'; +local getMatcher(cfg) = '%(couchDBSelector)s, couchdb_cluster=~"$couchdb_cluster", instance=~"$instance"' % cfg; local promDatasource = { uid: '${%s}' % promDatasourceName, @@ -18,11 +18,11 @@ local lokiDatasource = { uid: '${%s}' % lokiDatasourceName, }; -local erlangMemoryUsagePanel = { +local erlangMemoryUsagePanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'couchdb_erlang_memory_bytes{' + matcher + ', memory_type="total"}', + 'couchdb_erlang_memory_bytes{' + getMatcher(cfg) + ', memory_type="total"}', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -97,11 +97,11 @@ local erlangMemoryUsagePanel = { }, }; -local openOSFilesPanel = { +local openOSFilesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'couchdb_open_os_files_total{' + matcher + '}', + 'couchdb_open_os_files_total{' + getMatcher(cfg) + '}', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -172,11 +172,11 @@ local openOSFilesPanel = { }, }; -local openDatabasesPanel = { +local openDatabasesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'couchdb_open_databases_total{' + matcher + '}', + 'couchdb_open_databases_total{' + getMatcher(cfg) + '}', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -250,11 +250,11 @@ local openDatabasesPanel = { }, }; -local databaseWritesPanel = { +local databaseWritesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_database_writes_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_database_writes_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -329,11 +329,11 @@ local databaseWritesPanel = { }, }; -local databaseReadsPanel = { +local databaseReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_database_reads_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_database_reads_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -408,11 +408,11 @@ local databaseReadsPanel = { }, }; -local viewReadsPanel = { +local viewReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_view_reads_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_httpd_view_reads_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -487,11 +487,11 @@ local viewReadsPanel = { }, }; -local viewTimeoutsPanel = { +local viewTimeoutsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_view_timeouts_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_httpd_view_timeouts_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -566,11 +566,11 @@ local viewTimeoutsPanel = { }, }; -local temporaryViewReadsPanel = { +local temporaryViewReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_temporary_view_reads_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_httpd_temporary_view_reads_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -653,11 +653,11 @@ local requestsRow = { collapsed: false, }; -local requestMethodsPanel = { +local requestMethodsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_request_methods{' + matcher + '}[$__rate_interval]) != 0', + 'rate(couchdb_httpd_request_methods{' + getMatcher(cfg) + '}[$__rate_interval]) != 0', datasource=promDatasource, legendFormat='{{instance}} - {{method}}', ), @@ -732,26 +732,26 @@ local requestMethodsPanel = { }, }; -local requestLatencyPanel = { +local requestLatencyPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'couchdb_request_time_seconds{' + matcher + ', quantile="0.5"}', + 'couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile="0.5"}', datasource=promDatasource, legendFormat='{{instance}} - p50', ), prometheus.target( - 'couchdb_request_time_seconds{' + matcher + ', quantile="0.75"}', + 'couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile="0.75"}', datasource=promDatasource, legendFormat='{{instance}} - p75', ), prometheus.target( - 'couchdb_request_time_seconds{' + matcher + ', quantile="0.95"}', + 'couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile="0.95"}', datasource=promDatasource, legendFormat='{{instance}} - p95', ), prometheus.target( - 'couchdb_request_time_seconds{' + matcher + ', quantile="0.99"}', + 'couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile="0.99"}', datasource=promDatasource, legendFormat='{{instance}} - p99', ), @@ -826,11 +826,11 @@ local requestLatencyPanel = { }, }; -local bulkRequestsPanel = { +local bulkRequestsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_bulk_requests_total{' + matcher + '}[$__rate_interval])', + 'rate(couchdb_httpd_bulk_requests_total{' + getMatcher(cfg) + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{instance}}', ), @@ -905,29 +905,29 @@ local bulkRequestsPanel = { }, }; -local responseStatusOverviewPanel = { +local responseStatusOverviewPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"2.*"}[$__interval:])) != 0', + 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"2.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{instance}} - 2xx', interval='1m', ), prometheus.target( - 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"3.*"}[$__interval:])) != 0', + 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"3.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{instance}} - 3xx', interval='1m', ), prometheus.target( - 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"4.*"}[$__interval:])) != 0', + 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"4.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{instance}} - 4xx', interval='1m', ), prometheus.target( - 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"5.*"}[$__interval:])) != 0', + 'sum by(instance, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"5.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{instance}} - 5xx', interval='1m', @@ -973,11 +973,11 @@ local responseStatusOverviewPanel = { }, }; -local goodResponseStatusesPanel = { +local goodResponseStatusesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_status_codes{' + matcher + ', code=~"[23].*"}[$__rate_interval]) != 0', + 'rate(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"[23].*"}[$__rate_interval]) != 0', datasource=promDatasource, legendFormat='{{instance}} - {{code}}', ), @@ -1052,11 +1052,11 @@ local goodResponseStatusesPanel = { }, }; -local errorResponseStatusesPanel = { +local errorResponseStatusesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(couchdb_httpd_status_codes{' + matcher + ', code=~"[45].*"}[$__rate_interval]) != 0', + 'rate(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"[45].*"}[$__rate_interval]) != 0', datasource=promDatasource, legendFormat='{{instance}} - {{code}}', ), @@ -1139,11 +1139,11 @@ local logsRow = { collapsed: false, }; -local logTypesPanel = { +local logTypesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'increase(couchdb_couch_log_requests_total{' + matcher + ', level=~"$log_level"}[$__interval:]) != 0', + 'increase(couchdb_couch_log_requests_total{' + getMatcher(cfg) + ', level=~"$log_level"}[$__interval:]) != 0', datasource=promDatasource, legendFormat='{{instance}} - {{level}}', interval='1m', @@ -1219,13 +1219,13 @@ local logTypesPanel = { }, }; -local systemLogsPanel = { +local systemLogsPanel(cfg) = { datasource: lokiDatasource, targets: [ { datasource: lokiDatasource, editorMode: 'code', - expr: '{' + matcher + ', filename="/var/log/couchdb/couchdb.log"} |~ "$log_level"', + expr: '{' + getMatcher(cfg) + ', filename="/var/log/couchdb/couchdb.log"} |~ "$log_level"', queryType: 'range', refId: 'A', }, @@ -1296,6 +1296,18 @@ local systemLogsPanel = { allValues='', sort=0 ), + template.new( + 'cluster', + promDatasource, + 'label_values(couchdb_couch_replicator_cluster_is_stable{%(multiClusterSelector)s}, cluster)' % $._config, + label='Cluster', + refresh=1, + includeAll=true, + multi=true, + allValues='', + hide=if $._config.enableMultiCluster then '' else 'variable' % $._config, + sort=0 + ), template.new( 'couchdb_cluster', promDatasource, @@ -1335,26 +1347,26 @@ local systemLogsPanel = { .addPanels( std.flattenArrays([ [ - erlangMemoryUsagePanel { gridPos: { h: 6, w: 8, x: 0, y: 0 } }, - openOSFilesPanel { gridPos: { h: 6, w: 8, x: 8, y: 0 } }, - openDatabasesPanel { gridPos: { h: 6, w: 8, x: 16, y: 0 } }, - databaseWritesPanel { gridPos: { h: 6, w: 12, x: 0, y: 6 } }, - databaseReadsPanel { gridPos: { h: 6, w: 12, x: 12, y: 6 } }, - viewReadsPanel { gridPos: { h: 6, w: 8, x: 0, y: 12 } }, - viewTimeoutsPanel { gridPos: { h: 6, w: 8, x: 8, y: 12 } }, - temporaryViewReadsPanel { gridPos: { h: 6, w: 8, x: 16, y: 12 } }, + erlangMemoryUsagePanel($._config) { gridPos: { h: 6, w: 8, x: 0, y: 0 } }, + openOSFilesPanel($._config) { gridPos: { h: 6, w: 8, x: 8, y: 0 } }, + openDatabasesPanel($._config) { gridPos: { h: 6, w: 8, x: 16, y: 0 } }, + databaseWritesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 6 } }, + databaseReadsPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 6 } }, + viewReadsPanel($._config) { gridPos: { h: 6, w: 8, x: 0, y: 12 } }, + viewTimeoutsPanel($._config) { gridPos: { h: 6, w: 8, x: 8, y: 12 } }, + temporaryViewReadsPanel($._config) { gridPos: { h: 6, w: 8, x: 16, y: 12 } }, requestsRow { gridPos: { h: 1, w: 24, x: 0, y: 18 } }, - bulkRequestsPanel { gridPos: { h: 6, w: 12, x: 0, y: 19 } }, - requestLatencyPanel { gridPos: { h: 6, w: 12, x: 12, y: 19 } }, - requestMethodsPanel { gridPos: { h: 6, w: 12, x: 0, y: 25 } }, - responseStatusOverviewPanel { gridPos: { h: 6, w: 12, x: 12, y: 25 } }, - goodResponseStatusesPanel { gridPos: { h: 6, w: 12, x: 0, y: 31 } }, - errorResponseStatusesPanel { gridPos: { h: 6, w: 12, x: 12, y: 31 } }, + bulkRequestsPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 19 } }, + requestLatencyPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 19 } }, + requestMethodsPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 25 } }, + responseStatusOverviewPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 25 } }, + goodResponseStatusesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 31 } }, + errorResponseStatusesPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 31 } }, logsRow { gridPos: { h: 1, w: 24, x: 0, y: 37 } }, - logTypesPanel { gridPos: { h: 6, w: 24, x: 0, y: 38 } }, + logTypesPanel($._config) { gridPos: { h: 6, w: 24, x: 0, y: 38 } }, ], if $._config.enableLokiLogs then [ - systemLogsPanel { gridPos: { h: 6, w: 24, x: 0, y: 44 } }, + systemLogsPanel($._config) { gridPos: { h: 6, w: 24, x: 0, y: 44 } }, ] else [], [ ], diff --git a/apache-couchdb-mixin/dashboards/couchdb-overview.libsonnet b/apache-couchdb-mixin/dashboards/couchdb-overview.libsonnet index 15496917a..06703831d 100644 --- a/apache-couchdb-mixin/dashboards/couchdb-overview.libsonnet +++ b/apache-couchdb-mixin/dashboards/couchdb-overview.libsonnet @@ -7,17 +7,17 @@ local prometheus = grafana.prometheus; local dashboardUid = 'couchdb-overview'; local promDatasourceName = 'prometheus_datasource'; -local matcher = 'job=~"$job", couchdb_cluster=~"$couchdb_cluster"'; +local getMatcher(cfg) = '%(couchDBSelector)s, couchdb_cluster=~"$couchdb_cluster"' % cfg; local promDatasource = { uid: '${%s}' % promDatasourceName, }; -local numberOfClustersPanel = { +local numberOfClustersPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'count(count by(couchdb_cluster, job) (couchdb_request_time_seconds_count{' + matcher + '}))', + 'count(count by(couchdb_cluster, job) (couchdb_request_time_seconds_count{' + getMatcher(cfg) + '}))', datasource=promDatasource, legendFormat='{{ couchdb_cluster }}', format='time_series', @@ -69,11 +69,11 @@ local numberOfClustersPanel = { pluginVersion: '9.2.3', }; -local numberOfNodesPanel = { +local numberOfNodesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum(count by(couchdb_cluster, job) (couchdb_request_time_seconds_count{' + matcher + '}))', + 'sum(count by(couchdb_cluster, job) (couchdb_request_time_seconds_count{' + getMatcher(cfg) + '}))', datasource=promDatasource, legendFormat='{{ couchdb_cluster }}', format='time_series', @@ -125,11 +125,11 @@ local numberOfNodesPanel = { pluginVersion: '9.2.3', }; -local clusterHealthPanel = { +local clusterHealthPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum(min by(job, couchdb_cluster) (couchdb_couch_replicator_cluster_is_stable{' + matcher + '})) / count(count by(job, couchdb_cluster) (couchdb_couch_replicator_cluster_is_stable{' + matcher + '})) * 100', + 'sum(min by(job, couchdb_cluster) (couchdb_couch_replicator_cluster_is_stable{' + getMatcher(cfg) + '})) / count(count by(job, couchdb_cluster) (couchdb_couch_replicator_cluster_is_stable{' + getMatcher(cfg) + '})) * 100', datasource=promDatasource, legendFormat='{{ couchdb_cluster }}', format='time_series', @@ -187,11 +187,11 @@ local clusterHealthPanel = { pluginVersion: '9.2.3', }; -local openOSFilesPanel = { +local openOSFilesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchdb_cluster, job) (couchdb_open_os_files_total{' + matcher + '})', + 'sum by(couchdb_cluster, job) (couchdb_open_os_files_total{' + getMatcher(cfg) + '})', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -266,11 +266,11 @@ local openOSFilesPanel = { }, }; -local openDatabasesPanel = { +local openDatabasesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (couchdb_open_databases_total{' + matcher + '})', + 'sum by(job, couchdb_cluster) (couchdb_open_databases_total{' + getMatcher(cfg) + '})', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -345,11 +345,11 @@ local openDatabasesPanel = { }, }; -local databaseWritesPanel = { +local databaseWritesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_database_writes_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_database_writes_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -424,11 +424,11 @@ local databaseWritesPanel = { }, }; -local databaseReadsPanel = { +local databaseReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_database_reads_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_database_reads_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -503,11 +503,11 @@ local databaseReadsPanel = { }, }; -local viewReadsPanel = { +local viewReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_view_reads_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_view_reads_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -582,11 +582,11 @@ local viewReadsPanel = { }, }; -local viewTimeoutsPanel = { +local viewTimeoutsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_view_timeouts_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_view_timeouts_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -661,11 +661,11 @@ local viewTimeoutsPanel = { }, }; -local temporaryViewReadsPanel = { +local temporaryViewReadsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_temporary_view_reads_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_temporary_view_reads_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -748,11 +748,11 @@ local requestsRow = { collapsed: false, }; -local requestMethodsPanel = { +local requestMethodsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster, method) (rate(couchdb_httpd_request_methods{' + matcher + '}[$__rate_interval])) != 0', + 'sum by(job, couchdb_cluster, method) (rate(couchdb_httpd_request_methods{' + getMatcher(cfg) + '}[$__rate_interval])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - {{method}}', ), @@ -827,26 +827,26 @@ local requestMethodsPanel = { }, }; -local averageRequestLatencyPanel = { +local averageRequestLatencyPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + matcher + ', quantile=~"0.5"})', + 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile=~"0.5"})', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - p50', ), prometheus.target( - 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + matcher + ', quantile=~"0.75"})', + 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile=~"0.75"})', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - p75', ), prometheus.target( - 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + matcher + ', quantile=~"0.95"})', + 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile=~"0.95"})', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - p95', ), prometheus.target( - 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + matcher + ', quantile=~"0.99"})', + 'avg by(job, couchdb_cluster, quantile) (couchdb_request_time_seconds{' + getMatcher(cfg) + ', quantile=~"0.99"})', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - p99', ), @@ -922,11 +922,11 @@ local averageRequestLatencyPanel = { pluginVersion: '9.2.3', }; -local bulkRequestsPanel = { +local bulkRequestsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_bulk_requests_total{' + matcher + '}[$__rate_interval]))', + 'sum by(job, couchdb_cluster) (rate(couchdb_httpd_bulk_requests_total{' + getMatcher(cfg) + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -1001,29 +1001,29 @@ local bulkRequestsPanel = { }, }; -local responseStatusOverviewPanel = { +local responseStatusOverviewPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"2.*"}[$__interval:])) != 0', + 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"2.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - 2xx', interval='1m', ), prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"3.*"}[$__interval:])) != 0', + 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"3.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - 3xx', interval='1m', ), prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"4.*"}[$__interval:])) != 0', + 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"4.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - 4xx', interval='1m', ), prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + matcher + ', code=~"5.*"}[$__interval:])) != 0', + 'sum by(job, couchdb_cluster) (increase(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"5.*"}[$__interval:])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - 5xx', interval='1m', @@ -1069,11 +1069,11 @@ local responseStatusOverviewPanel = { }, }; -local goodResponseStatusesPanel = { +local goodResponseStatusesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster, code) (rate(couchdb_httpd_status_codes{' + matcher + ', code=~"[23].*"}[$__rate_interval])) != 0', + 'sum by(job, couchdb_cluster, code) (rate(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"[23].*"}[$__rate_interval])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - {{code}}', ), @@ -1148,11 +1148,11 @@ local goodResponseStatusesPanel = { }, }; -local errorResponseStatusesPanel = { +local errorResponseStatusesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster, code) (rate(couchdb_httpd_status_codes{' + matcher + ', code=~"[45].*"}[$__rate_interval])) != 0', + 'sum by(job, couchdb_cluster, code) (rate(couchdb_httpd_status_codes{' + getMatcher(cfg) + ', code=~"[45].*"}[$__rate_interval])) != 0', datasource=promDatasource, legendFormat='{{couchdb_cluster}} - {{code}}', ), @@ -1235,11 +1235,11 @@ local replicationRow = { collapsed: false, }; -local replicatorChangesManagerDeathsPanel = { +local replicatorChangesManagerDeathsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_manager_deaths_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_manager_deaths_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1315,11 +1315,11 @@ local replicatorChangesManagerDeathsPanel = { }, }; -local replicatorChangesQueueDeathsPanel = { +local replicatorChangesQueueDeathsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_queue_deaths_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_queue_deaths_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1395,11 +1395,11 @@ local replicatorChangesQueueDeathsPanel = { }, }; -local replicatorChangesReaderDeathsPanel = { +local replicatorChangesReaderDeathsPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_reader_deaths_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_changes_reader_deaths_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1475,11 +1475,11 @@ local replicatorChangesReaderDeathsPanel = { }, }; -local replicatorConnectionOwnerCrashesPanel = { +local replicatorConnectionOwnerCrashesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_connection_owner_crashes_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_connection_owner_crashes_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1555,11 +1555,11 @@ local replicatorConnectionOwnerCrashesPanel = { }, }; -local replicatorConnectionWorkerCrashesPanel = { +local replicatorConnectionWorkerCrashesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_connection_worker_crashes_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_connection_worker_crashes_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1635,11 +1635,11 @@ local replicatorConnectionWorkerCrashesPanel = { }, }; -local replicatorJobCrashesPanel = { +local replicatorJobCrashesPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_jobs_crashes_total{' + matcher + '}[$__interval:]))', + 'sum by(job, couchdb_cluster) (increase(couchdb_couch_replicator_jobs_crashes_total{' + getMatcher(cfg) + '}[$__interval:]))', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', interval='1m', @@ -1715,11 +1715,11 @@ local replicatorJobCrashesPanel = { }, }; -local replicatorJobsPendingPanel = { +local replicatorJobsPendingPanel(cfg) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchdb_cluster) (couchdb_couch_replicator_jobs_pending{' + matcher + '})', + 'sum by(job, couchdb_cluster) (couchdb_couch_replicator_jobs_pending{' + getMatcher(cfg) + '})', datasource=promDatasource, legendFormat='{{couchdb_cluster}}', ), @@ -1832,6 +1832,18 @@ local replicatorJobsPendingPanel = { allValues='', sort=0 ), + template.new( + 'cluster', + promDatasource, + 'label_values(couchdb_couch_replicator_cluster_is_stable{%(multiClusterSelector)s}, cluster)' % $._config, + label='Cluster', + refresh=1, + includeAll=true, + multi=true, + allValues='', + hide=if $._config.enableMultiCluster then '' else 'variable' % $._config, + sort=0 + ), template.new( 'couchdb_cluster', promDatasource, @@ -1847,31 +1859,31 @@ local replicatorJobsPendingPanel = { ) .addPanels( [ - numberOfClustersPanel { gridPos: { h: 6, w: 8, x: 0, y: 0 } }, - numberOfNodesPanel { gridPos: { h: 6, w: 8, x: 8, y: 0 } }, - clusterHealthPanel { gridPos: { h: 6, w: 8, x: 16, y: 0 } }, - openOSFilesPanel { gridPos: { h: 6, w: 12, x: 0, y: 6 } }, - openDatabasesPanel { gridPos: { h: 6, w: 12, x: 12, y: 6 } }, - databaseWritesPanel { gridPos: { h: 6, w: 12, x: 0, y: 12 } }, - databaseReadsPanel { gridPos: { h: 6, w: 12, x: 12, y: 12 } }, - viewReadsPanel { gridPos: { h: 6, w: 8, x: 0, y: 18 } }, - viewTimeoutsPanel { gridPos: { h: 6, w: 8, x: 8, y: 18 } }, - temporaryViewReadsPanel { gridPos: { h: 6, w: 8, x: 16, y: 18 } }, + numberOfClustersPanel($._config) { gridPos: { h: 6, w: 8, x: 0, y: 0 } }, + numberOfNodesPanel($._config) { gridPos: { h: 6, w: 8, x: 8, y: 0 } }, + clusterHealthPanel($._config) { gridPos: { h: 6, w: 8, x: 16, y: 0 } }, + openOSFilesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 6 } }, + openDatabasesPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 6 } }, + databaseWritesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 12 } }, + databaseReadsPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 12 } }, + viewReadsPanel($._config) { gridPos: { h: 6, w: 8, x: 0, y: 18 } }, + viewTimeoutsPanel($._config) { gridPos: { h: 6, w: 8, x: 8, y: 18 } }, + temporaryViewReadsPanel($._config) { gridPos: { h: 6, w: 8, x: 16, y: 18 } }, requestsRow { gridPos: { h: 1, w: 24, x: 0, y: 24 } }, - bulkRequestsPanel { gridPos: { h: 6, w: 12, x: 0, y: 25 } }, - averageRequestLatencyPanel { gridPos: { h: 6, w: 12, x: 12, y: 25 } }, - requestMethodsPanel { gridPos: { h: 6, w: 12, x: 0, y: 31 } }, - responseStatusOverviewPanel { gridPos: { h: 6, w: 12, x: 12, y: 31 } }, - goodResponseStatusesPanel { gridPos: { h: 6, w: 12, x: 0, y: 37 } }, - errorResponseStatusesPanel { gridPos: { h: 6, w: 12, x: 12, y: 37 } }, + bulkRequestsPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 25 } }, + averageRequestLatencyPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 25 } }, + requestMethodsPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 31 } }, + responseStatusOverviewPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 31 } }, + goodResponseStatusesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 37 } }, + errorResponseStatusesPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 37 } }, replicationRow { gridPos: { h: 1, w: 24, x: 0, y: 43 } }, - replicatorChangesManagerDeathsPanel { gridPos: { h: 6, w: 8, x: 0, y: 44 } }, - replicatorChangesQueueDeathsPanel { gridPos: { h: 6, w: 8, x: 8, y: 44 } }, - replicatorChangesReaderDeathsPanel { gridPos: { h: 6, w: 8, x: 16, y: 44 } }, - replicatorConnectionOwnerCrashesPanel { gridPos: { h: 6, w: 12, x: 0, y: 50 } }, - replicatorConnectionWorkerCrashesPanel { gridPos: { h: 6, w: 12, x: 12, y: 50 } }, - replicatorJobCrashesPanel { gridPos: { h: 6, w: 12, x: 0, y: 56 } }, - replicatorJobsPendingPanel { gridPos: { h: 6, w: 12, x: 12, y: 56 } }, + replicatorChangesManagerDeathsPanel($._config) { gridPos: { h: 6, w: 8, x: 0, y: 44 } }, + replicatorChangesQueueDeathsPanel($._config) { gridPos: { h: 6, w: 8, x: 8, y: 44 } }, + replicatorChangesReaderDeathsPanel($._config) { gridPos: { h: 6, w: 8, x: 16, y: 44 } }, + replicatorConnectionOwnerCrashesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 50 } }, + replicatorConnectionWorkerCrashesPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 50 } }, + replicatorJobCrashesPanel($._config) { gridPos: { h: 6, w: 12, x: 0, y: 56 } }, + replicatorJobsPendingPanel($._config) { gridPos: { h: 6, w: 12, x: 12, y: 56 } }, ] ), }, diff --git a/apache-solr-mixin/alerts/alerts.libsonnet b/apache-solr-mixin/alerts/alerts.libsonnet index 090ed5f59..7d123a6eb 100644 --- a/apache-solr-mixin/alerts/alerts.libsonnet +++ b/apache-solr-mixin/alerts/alerts.libsonnet @@ -7,7 +7,7 @@ { alert: 'ApacheSolrZookeeperChangeInEnsembleSize', expr: ||| - 'changes(solr_zookeeper_ensemble_size[5m]) > 0' + changes(solr_zookeeper_ensemble_size[5m]) > 0 ||| % $._config, 'for': '5m', labels: { @@ -24,7 +24,7 @@ { alert: 'ApacheSolrHighCPUUsageCritical', expr: ||| - '100 * sum without (base_url, item) (avg_over_time(solr_metrics_jvm_os_cpu_load{item="systemCpuLoad"}[5m])) > %(alertsCriticalCPUUsage)s' + 100 * sum without (base_url, item) (avg_over_time(solr_metrics_jvm_os_cpu_load{item="systemCpuLoad"}[5m])) > %(alertsCriticalCPUUsage)s ||| % $._config, 'for': '5m', labels: { @@ -41,7 +41,7 @@ { alert: 'ApacheSolrHighCPUUsageWarning', expr: ||| - '100 * sum without (base_url, item) (avg_over_time(solr_metrics_jvm_os_cpu_load{item="systemCpuLoad"}[5m])) > %(alertsWarningCPUUsage)s' + 100 * sum without (base_url, item) (avg_over_time(solr_metrics_jvm_os_cpu_load{item="systemCpuLoad"}[5m])) > %(alertsWarningCPUUsage)s ||| % $._config, 'for': '5m', labels: { @@ -58,7 +58,7 @@ { alert: 'ApacheSolrHighHeapMemoryUsageCritical', expr: ||| - '100 * sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="used"}) / clamp_min(sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="max"}), 1) > %(alertsCriticalMemoryUsage)s' + 100 * sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="used"}) / clamp_min(sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="max"}), 1) > %(alertsCriticalMemoryUsage)s ||| % $._config, 'for': '5m', labels: { @@ -74,7 +74,7 @@ { alert: 'ApacheSolrHighHeapMemoryUsageWarning', expr: ||| - '100 * sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="used"}) / clamp_min(sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="max"}), 1) > %(alertsWarningMemoryUsage)s' + 100 * sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="used"}) / clamp_min(sum without(item, base_url)(solr_metrics_jvm_memory_heap_bytes{item="max"}), 1) > %(alertsWarningMemoryUsage)s ||| % $._config, 'for': '5m', labels: { @@ -90,7 +90,7 @@ { alert: 'ApacheSolrLowCacheHitRatio', expr: ||| - '100 * sum without(base_url, category, collection, item, replica, shard) (solr_metrics_core_searcher_cache_ratio{item="hitratio", type=~"documentCache|filterCache|queryResultCache"}[10m]) < %(alertsWarningCacheUsage)s' + 100 * sum without(base_url, category, collection, item, replica, shard) (solr_metrics_core_searcher_cache_ratio{item="hitratio", type=~"documentCache|filterCache|queryResultCache"}) < %(alertsWarningCacheUsage)s ||| % $._config, 'for': '10m', labels: { @@ -106,7 +106,7 @@ { alert: 'ApacheSolrHighCoreErrors', expr: ||| - '100 * sum without(base_url, category, collection, handler, replica, shard) (increase(solr_metrics_core_errors_total[10m]) / clamp_min(avg_over_time(solr_metrics_core_errors_total[10m]), 1)) > %(alertsWarningCoreErrors)s' + 100 * sum without(base_url, category, collection, handler, replica, shard) (increase(solr_metrics_core_errors_total[10m]) / clamp_min(avg_over_time(solr_metrics_core_errors_total[10m]), 1)) > %(alertsWarningCoreErrors)s ||| % $._config, 'for': '10m', labels: { @@ -122,7 +122,7 @@ { alert: 'ApacheSolrHighDocumentIndexing', expr: ||| - '100 * sum without(base_url, category, collection, handler, replica, shard) (increase(solr_metrics_core_update_handler_adds_total[15m]) / clamp_min(avg_over_time(solr_metrics_core_update_handler_adds_total[15m]), 1)) > %(alertsWarningDocumentIndexing)s' + 100 * sum without(base_url, category, collection, handler, replica, shard) (increase(solr_metrics_core_update_handler_adds_total[15m]) / clamp_min(avg_over_time(solr_metrics_core_update_handler_adds_total[15m]), 1)) > %(alertsWarningDocumentIndexing)s ||| % $._config, 'for': '15m', labels: { diff --git a/apache-tomcat-mixin/.lint b/apache-tomcat-mixin/.lint index dff79dc16..07d5cb9f7 100644 --- a/apache-tomcat-mixin/.lint +++ b/apache-tomcat-mixin/.lint @@ -10,6 +10,8 @@ exclusions: - panel: "Servlet requests" - panel: "Sessions" - panel: "Threads" + panel-datasource-rule: + reason: "Loki datasource variable is being named as loki_datasource now while linter expects 'datasource'" template-datasource-rule: reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" template-instance-rule: diff --git a/apache-tomcat-mixin/alerts/alerts.libsonnet b/apache-tomcat-mixin/alerts/alerts.libsonnet index 247cfa9aa..ba489e90a 100644 --- a/apache-tomcat-mixin/alerts/alerts.libsonnet +++ b/apache-tomcat-mixin/alerts/alerts.libsonnet @@ -7,7 +7,7 @@ { alert: 'ApacheTomcatAlertsHighCpuUsage', expr: ||| - sum by (job, instance) (jvm_process_cpu_load) > %(ApacheTomcatAlertsCriticalCpuUsage)s + sum by (job, instance) (jvm_process_cpu_load{job=~"integrations/tomcat"}) > %(ApacheTomcatAlertsCriticalCpuUsage)s ||| % $._config, 'for': '5m', labels: { @@ -25,7 +25,7 @@ { alert: 'ApacheTomcatAlertsHighMemoryUsage', expr: ||| - sum(jvm_memory_usage_used_bytes) by (job, instance) / sum(jvm_physical_memory_bytes) by (job, instance) * 100 > %(ApacheTomcatAlertsCriticalMemoryUsage)s + sum(jvm_memory_usage_used_bytes{job=~"integrations/tomcat"}) by (job, instance) / sum(jvm_physical_memory_bytes{job=~"integrations/tomcat"}) by (job, instance) * 100 > %(ApacheTomcatAlertsCriticalMemoryUsage)s ||| % $._config, 'for': '5m', labels: { diff --git a/awx-mixin/dashboards/awx.json b/awx-mixin/dashboards/awx.json new file mode 100644 index 000000000..2a0b6f535 --- /dev/null +++ b/awx-mixin/dashboards/awx.json @@ -0,0 +1,1859 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 19, + "links": [], + "liveNow": false, + "panels": [ + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Cluster", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "List of available clusters with counts of cluster level objects. Selectable by the \"instance\" variable.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-blues" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false, + "minWidth": 90 + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Instance" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "title": "", + "url": "d/eqcdR8HDA/var-datasource=${datasource}&var-job=${job}&var-instance=~${__data.fields.Instance}" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 9, + "links": [], + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_organizations_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Orgs", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_teams_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Teams", + "refId": "B" + }, + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_users_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Users", + "refId": "C" + }, + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_inventories_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Inventories", + "refId": "D" + }, + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_projects_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Projects", + "refId": "E" + }, + { + "datasource": { + "uid": "$datasource" + }, + "exemplar": false, + "expr": "awx_schedules_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "Schedules", + "refId": "F" + } + ], + "title": "Cluster List", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "instance" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true, + "Time 3": true, + "Time 4": true, + "Time 5": true, + "Time 6": true, + "__name__ 1": true, + "__name__ 2": true, + "__name__ 3": true, + "__name__ 4": true, + "__name__ 5": true, + "__name__ 6": true, + "cluster 1": true, + "cluster 2": true, + "cluster 3": true, + "cluster 4": true, + "cluster 5": true, + "cluster 6": true, + "job 1": true, + "job 2": true, + "job 3": true, + "job 4": true, + "job 5": true, + "job 6": true + }, + "indexByName": {}, + "renameByName": { + "Time 3": "", + "Time 4": "", + "Time 5": "", + "Value #A": "Organizations", + "Value #B": "Teams", + "Value #C": "Users", + "Value #D": "Inventories", + "Value #E": "Projects", + "Value #F": "Schedules", + "__name__ 5": "", + "cluster 2": "", + "cluster 6": "", + "instance": "Instance" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 7 + }, + "id": 3, + "links": [], + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^tower_version$/", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_system_info{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Tower Version", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "links": [ + { + "targetBlank": true, + "title": "", + "url": "${__value.text}" + } + ], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 12, + "x": 3, + "y": 7 + }, + "id": 8, + "links": [], + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^tower_url_base$/", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "Tower Base URL", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 15, + "y": 7 + }, + "id": 4, + "links": [], + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^license_type$/", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "License Type", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 7776000 + }, + { + "color": "super-light-green", + "value": 15552000 + }, + { + "color": "green", + "value": 31536000 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 18, + "y": 7 + }, + "id": 5, + "links": [], + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^license_expiry$/", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "License Expiry", + "transformations": [ + { + "id": "labelsToFields" + }, + { + "id": "merge", + "options": {} + } + ], + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 10 + }, + { + "color": "#EF843C", + "value": 20 + }, + { + "color": "green", + "value": 40 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "awx_license_instance_total{cluster=\"my-cluster\", instance=\"awx-service.sample-apps.svc.cluster.local:80\", job=\"integrations/awx\"}" + }, + "properties": [ + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 7 + }, + "id": 6, + "links": [], + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_license_instance_free{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_license_instance_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "B" + } + ], + "title": "Licenses Free/Total", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false, + "minWidth": 100 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Enabled" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + }, + { + "id": "mappings", + "value": [ + { + "options": { + "False": { + "color": "red", + "index": 1 + }, + "True": { + "color": "green", + "index": 0 + } + }, + "type": "value" + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Consumed Capacity" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.4 + }, + { + "color": "orange", + "value": 0.6 + }, + { + "color": "red", + "value": 0.8 + } + ] + } + }, + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Memory" + }, + "properties": [ + { + "id": "unit", + "value": "bytes" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 11, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_instance_info{job=~\"$job\", instance=~\"$instance\"}", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (hostname) (awx_instance_cpu{job=~\"$job\", instance=~\"$instance\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (hostname) (awx_instance_memory{job=~\"$job\", instance=~\"$instance\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (hostname) (awx_instance_consumed_capacity{job=~\"$job\", instance=~\"$instance\"}) / sum by (hostname) (awx_instance_capacity{job=~\"$job\", instance=~\"$instance\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D" + } + ], + "title": "Cluster Instances", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value #A": true, + "__name__": true, + "cluster": true, + "instance": true, + "job": true, + "managed_by_policy": true + }, + "indexByName": { + "Time": 0, + "Value #A": 10, + "Value #B": 11, + "Value #C": 12, + "Vaule #D": 13, + "__name__": 1, + "cluster": 2, + "enabled": 4, + "hostname": 3, + "instance": 6, + "instance_uuid": 7, + "job": 8, + "managed_by_policy": 5, + "version": 9 + }, + "renameByName": { + "Value #B": "CPU Cores", + "Value #C": "Memory", + "Value #D": "Consumed Capacity", + "enabled": "Enabled", + "hostname": "Hostname", + "instance_uuid": "UUID", + "managed_by_policy": "Managed by Policy", + "version": "Version" + } + } + } + ], + "type": "table" + }, + { + "aliasColors": {}, + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 16 + }, + "id": 10, + "legend": { + "percentage": true, + "show": true, + "values": true + }, + "legendType": "Right side", + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pieType": "pie", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_hosts_total{type=\"active\", job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Active", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_hosts_total{type=\"total\", job=~\"$job\", instance=~\"$instance\"} - awx_hosts_total{type=\"active\", job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Inactive", + "refId": "B" + } + ], + "title": "Hosts", + "type": "piechart", + "valueName": "current" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "anonymous" + }, + "properties": [ + { + "id": "displayName", + "value": "Anonymous" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "user" + }, + "properties": [ + { + "id": "displayName", + "value": "Authenticated" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 6, + "y": 16 + }, + "id": 7, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (type) (awx_sessions_total{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{type}}", + "refId": "A" + } + ], + "title": "Sessions", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "Time", + "anonymous", + "user" + ] + } + } + } + ], + "type": "timeseries" + }, + { + "aliasColors": {}, + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 18, + "y": 16 + }, + "id": 12, + "legend": { + "percentage": true, + "show": true, + "values": true + }, + "legendType": "Right side", + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pieType": "pie", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_job_templates_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Job", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_workflow_job_templates_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Workflow Job", + "refId": "B" + } + ], + "title": "Templates by Type", + "type": "piechart", + "valueName": "current" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 13, + "panels": [], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], + "title": "Jobs", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Total number of jobs in the Running or Pending state, on all AWX instances in the cluster.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 0, + "y": 22 + }, + "id": 14, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_running_jobs_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Running", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "awx_running_jobs_total{job=~\"$job\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Pending", + "refId": "B" + } + ], + "title": "Active Jobs by State", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Rate of new jobs being started, by Launch Type.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 9, + "y": 22 + }, + "id": 16, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (launch_type) (irate(awx_instance_launch_type_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{launch_type}}", + "refId": "A" + } + ], + "title": "Job Rate by Launch Type", + "type": "timeseries" + }, + { + "aliasColors": {}, + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 22 + }, + "id": 18, + "legend": { + "percentage": true, + "show": true, + "values": true + }, + "legendType": "Right side", + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pieType": "pie", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (launch_type) (awx_instance_launch_type_total{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{launch_type}}", + "refId": "A" + } + ], + "title": "Jobs by Launch Type", + "type": "piechart", + "valueName": "current" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Rate of job completion status, on all AWX instances in the cluster.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 0, + "y": 28 + }, + "id": 15, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "irate(awx_status_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Job Completion Status Rate", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Rate of new jobs being completed, by their Node and Completion Status.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 9, + "y": 28 + }, + "id": 17, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (status, node) (irate(awx_instance_status_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{status}} - {{node}}", + "refId": "A" + } + ], + "title": "Job Rate by Node and Completion Status", + "type": "timeseries" + }, + { + "aliasColors": {}, + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 28 + }, + "id": 19, + "legend": { + "percentage": true, + "show": true, + "values": true + }, + "legendType": "Right side", + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pieType": "pie", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum by (status) (awx_instance_status_total{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Jobs by Completion Status", + "type": "piechart", + "valueName": "current" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [ + "awx-integration" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "hide": 0, + "includeAll": false, + "label": "Data source", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": ".+", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "options": [], + "query": "label_values(awx_system_info, job)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(awx_system_info{job=~\"$job\"}, instance)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "AWX", + "uid": "eqcdR8HDA", + "version": 2, + "weekStart": "" +} \ No newline at end of file diff --git a/awx-mixin/mixin.libsonnet b/awx-mixin/mixin.libsonnet index d0f202d02..7f53b77f7 100644 --- a/awx-mixin/mixin.libsonnet +++ b/awx-mixin/mixin.libsonnet @@ -1 +1,5 @@ -(import './dashboards/awx.libsonnet') +{ + grafanaDashboards: { + 'awx.json': (import 'dashboards/awx.json'), + }, +} diff --git a/caddy-mixin/dashboards/caddy-overview.jsonnet b/caddy-mixin/dashboards/caddy-overview.jsonnet index 6543826ef..2566d7427 100644 --- a/caddy-mixin/dashboards/caddy-overview.jsonnet +++ b/caddy-mixin/dashboards/caddy-overview.jsonnet @@ -1,5 +1,5 @@ { - local matcher = 'job=~"$job", instance=~"$instance"', + local matcher = 'job=~"$job", server=~"$service", instance=~"$instance"', annotations: { list: [ { @@ -714,14 +714,50 @@ datasource: { uid: '$datasource', }, - definition: '', + definition: "label_values(caddy_http_requests_total{job=~\"'$job'\"} server)", + hide: 0, + includeAll: true, + label: 'service', + multi: true, + name: 'service', + options: [], + query: { + qryType: 1, + query: "label_values(caddy_http_requests_total{job=~\"'$job'\"}, server)", + refId: 'PrometheusVariableQueryEditor-VariableQuery', + }, + refresh: 2, + regex: '', + skipUrlSync: false, + sort: 1, + tagValuesQuery: '', + tags: [], + tagsQuery: '', + type: 'query', + useTags: false, + }, + { + allValue: '.+', + current: { + selected: false, + text: 'All', + value: '$__all', + }, + datasource: { + uid: '$datasource', + }, + definition: "label_values(caddy_http_requests_total{job=~\"'$job'\", server=~\"$service\"}, instance)", hide: 0, includeAll: true, label: 'Instance', multi: true, name: 'instance', options: [], - query: "label_values(caddy_http_requests_total{job=~'$job'}, instance)", + query: { + qryType: 1, + query: "label_values(caddy_http_requests_total{job=~\"'$job'\", server=~\"$service\"}, instance)", + refId: 'PrometheusVariableQueryEditor-VariableQuery', + }, refresh: 2, regex: '', skipUrlSync: false, diff --git a/caddy-mixin/mixin.libsonnet b/caddy-mixin/mixin.libsonnet index 0ff73f04a..b3e75d7cd 100644 --- a/caddy-mixin/mixin.libsonnet +++ b/caddy-mixin/mixin.libsonnet @@ -1,5 +1,5 @@ { - grafanaDashboards: { + grafanaDashboards+:: { 'caddy-overview.json': (import 'dashboards/caddy-overview.jsonnet'), }, } diff --git a/ceph-mixin/dashboards/ceph-cluster.json b/ceph-mixin/dashboards/ceph-cluster.json index 251db6726..14aecbe85 100644 --- a/ceph-mixin/dashboards/ceph-cluster.json +++ b/ceph-mixin/dashboards/ceph-cluster.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,13 +26,16 @@ "fiscalYearStartMonth": 0, "gnetId": 2842, "graphTooltip": 0, - "id": 190, - "iteration": 1649942733255, + "id": 4, "links": [], "liveNow": false, "panels": [ { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -38,6 +44,15 @@ }, "id": 37, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "CLUSTER STATE", "type": "row" }, @@ -89,7 +104,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -115,12 +131,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_health_status{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -161,7 +182,8 @@ } ] }, - "unit": "Bps" + "unit": "Bps", + "unitScale": true }, "overrides": [] }, @@ -186,12 +208,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_op_w_in_bytes{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, @@ -231,7 +258,8 @@ } ] }, - "unit": "Bps" + "unit": "Bps", + "unitScale": true }, "overrides": [] }, @@ -256,12 +284,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (ceph_daemon, instance) (irate(ceph_osd_op_r_out_bytes{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, @@ -300,7 +333,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -326,12 +360,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_cluster_total_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -381,7 +420,8 @@ } ] }, - "unit": "percentunit" + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, @@ -396,6 +436,8 @@ "links": [], "maxDataPoints": 100, "options": { + "minVizHeight": 75, + "minVizWidth": 75, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -406,11 +448,15 @@ }, "showThresholdLabels": false, "showThresholdMarkers": true, + "sizing": "auto", "text": {} }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) ((ceph_cluster_total_bytes{ceph_cluster=\"$ceph_cluster\"}-ceph_cluster_total_used_bytes{ceph_cluster=\"$ceph_cluster\"})/ceph_cluster_total_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -458,7 +504,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -483,12 +530,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pool_objects{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -528,7 +580,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -553,12 +606,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (ceph_osd_op_w_in_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": false, @@ -598,7 +656,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -623,12 +682,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (ceph_osd_op_r_out_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": false, @@ -665,7 +729,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -690,12 +755,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count(ALERTS{ceph_cluster=\"$ceph_cluster\",alertstate='firing',alertname=~'^CephCluster.*'}) OR vector(0)", "format": "time_series", "instant": true, @@ -736,7 +806,8 @@ } ] }, - "unit": "ops" + "unit": "ops", + "unitScale": true }, "overrides": [] }, @@ -761,12 +832,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (ceph_daemon, instance) (irate(ceph_osd_op_w{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, @@ -806,7 +882,8 @@ } ] }, - "unit": "ops" + "unit": "ops", + "unitScale": true }, "overrides": [] }, @@ -831,12 +908,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (ceph_daemon, instance) (irate(ceph_osd_op_r{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "instant": true, @@ -875,7 +957,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -901,12 +984,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_cluster_total_used_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -950,7 +1038,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -975,12 +1064,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (ceph_mon_num_sessions{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -1026,7 +1120,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1052,12 +1147,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count without (instance, ceph_daemon) (ceph_mon_quorum_status{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1073,6 +1173,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1081,6 +1185,15 @@ }, "id": 38, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "OSD STATE", "type": "row" }, @@ -1118,7 +1231,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1143,12 +1257,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count without (instance, ceph_daemon) (ceph_osd_up{ceph_cluster=\"$ceph_cluster\"}) - count without (instance, ceph_daemon) (ceph_osd_in{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1196,7 +1315,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1221,12 +1341,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count(ceph_osd_up{ceph_cluster=\"$ceph_cluster\"} == 0.0) OR vector(0)", "format": "time_series", "instant": true, @@ -1270,7 +1395,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1295,12 +1421,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (ceph_osd_up{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1344,7 +1475,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1369,12 +1501,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (ceph_osd_in{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1422,7 +1559,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -1447,12 +1585,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (ceph_osd_numpg{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1500,7 +1643,8 @@ } ] }, - "unit": "ms" + "unit": "ms", + "unitScale": true }, "overrides": [] }, @@ -1525,12 +1669,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (ceph_osd_apply_latency_ms{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1578,7 +1727,8 @@ } ] }, - "unit": "ms" + "unit": "ms", + "unitScale": true }, "overrides": [] }, @@ -1603,12 +1753,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg(ceph_osd_commit_latency_ms{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "instant": true, @@ -1657,7 +1812,8 @@ } ] }, - "unit": "ms" + "unit": "ms", + "unitScale": true }, "overrides": [] }, @@ -1682,12 +1838,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (rate(ceph_osd_op_w_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) / rate(ceph_osd_op_w_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0)", "format": "time_series", "instant": false, @@ -1734,7 +1895,8 @@ } ] }, - "unit": "ms" + "unit": "ms", + "unitScale": true }, "overrides": [] }, @@ -1759,12 +1921,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (rate(ceph_osd_op_r_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval])/rate(ceph_osd_op_r_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0)", "format": "time_series", "instant": true, @@ -1779,6 +1946,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1787,15 +1958,74 @@ }, "id": 53, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Alerts", "type": "row" }, { - "columns": [], "datasource": { "uid": "$datasource" }, - "fontSize": "100%", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "displayName": "", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "unit", + "value": "time: YYYY-MM-DD HH:mm:ss" + }, + { + "id": "custom.align" + } + ] + } + ] + }, "gridPos": { "h": 6, "w": 8, @@ -1804,37 +2034,24 @@ }, "id": 70, "links": [], - "scroll": true, - "showHeader": true, - "sort": { - "col": 0, - "desc": true - }, - "styles": [ - { - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "pattern": "Time", - "type": "date" - }, - { - "alias": "", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" ], - "decimals": 2, - "pattern": "/.*/", - "thresholds": [], - "type": "number", - "unit": "short" - } - ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "ALERTS{ceph_cluster=\"$ceph_cluster\", alertstate='firing'}", "format": "table", "instant": true, @@ -1844,8 +2061,15 @@ } ], "title": "Alerts from CephThanos", - "transform": "table", - "type": "table-old" + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + } + ], + "type": "table" }, { "datasource": { @@ -1859,7 +2083,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "decimals": 2, "displayName": "", @@ -1877,7 +2104,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [ { @@ -1910,7 +2138,9 @@ "id": 105, "links": [], "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -1919,12 +2149,12 @@ }, "showHeader": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { "datasource": { "type": "prometheus", - "uid": "grafanacloud-prom" + "uid": "$datasource" }, "exemplar": false, "expr": "topk(5,sort_desc(ceph_osd_apply_latency_ms{ceph_cluster=\"$ceph_cluster\"} + ceph_osd_commit_latency_ms{ceph_cluster=\"$ceph_cluster\"}))", @@ -1960,7 +2190,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "decimals": 2, "displayName": "", @@ -1978,7 +2211,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [ { @@ -2011,7 +2245,9 @@ "id": 103, "links": [], "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2020,12 +2256,12 @@ }, "showHeader": true }, - "pluginVersion": "8.4.6", + "pluginVersion": "10.3.1", "targets": [ { "datasource": { "type": "prometheus", - "uid": "grafanacloud-prom" + "uid": "$datasource" }, "exemplar": false, "expr": "ceph_osd_up{ceph_cluster=\"$ceph_cluster\"} == 0", @@ -2050,6 +2286,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2058,6 +2298,15 @@ }, "id": 108, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Ceph Versions", "type": "row" }, @@ -2071,6 +2320,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2082,6 +2334,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2113,7 +2366,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -2129,7 +2383,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2139,6 +2394,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count by (ceph_version) (ceph_osd_metadata{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2161,6 +2419,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2172,6 +2433,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2203,7 +2465,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -2219,7 +2482,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2229,6 +2493,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count by (ceph_version)(ceph_mon_metadata{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2251,6 +2518,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2262,6 +2532,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2293,7 +2564,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -2309,7 +2581,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2319,6 +2592,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count by (ceph_version)(ceph_mds_metadata{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2341,6 +2617,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2352,6 +2631,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2383,7 +2663,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -2399,7 +2680,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2409,6 +2691,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count by (ceph_version)(ceph_rgw_metadata{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2423,6 +2708,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2431,6 +2720,15 @@ }, "id": 39, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "CLUSTER", "type": "row" }, @@ -2444,6 +2742,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2455,6 +2756,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 0, "pointSize": 5, @@ -2486,7 +2788,8 @@ } ] }, - "unit": "bytes" + "unit": "bytes", + "unitScale": true }, "overrides": [ { @@ -2622,7 +2925,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2632,6 +2936,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_cluster_total_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2641,6 +2948,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_cluster_total_bytes{ceph_cluster=\"$ceph_cluster\"}-ceph_cluster_total_used_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2650,6 +2960,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_cluster_total_used_bytes{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -2672,6 +2985,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2683,6 +2999,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2714,7 +3031,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [ { @@ -2812,7 +3130,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2822,6 +3141,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_op_w{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "interval": "", @@ -2831,6 +3153,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_op_r{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "interval": "", @@ -2853,6 +3178,9 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2864,6 +3192,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2895,7 +3224,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -2917,7 +3247,8 @@ "min" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -2927,6 +3258,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_op_w_in_bytes{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "interval": "", @@ -2936,6 +3270,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_op_r_out_bytes{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "interval": "", @@ -2992,8 +3329,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3021,7 +3357,8 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3031,6 +3368,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum((ceph_pool_num_bytes_recovered{ceph_cluster=\"$ceph_cluster\"}) *on (instance, pool_id) group_left(name)(ceph_pool_metadata{ceph_cluster=\"$ceph_cluster\"})) by (name)", "format": "time_series", "interval": "", @@ -3086,8 +3426,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3115,7 +3454,8 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3125,6 +3465,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) ((ceph_pool_num_objects_recovered{ceph_cluster=\"$ceph_cluster\"}) *on (instance, pool_id) group_left(name)(ceph_pool_metadata{ceph_cluster=\"$ceph_cluster\"}))", "format": "time_series", "interval": "", @@ -3179,8 +3522,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3207,7 +3549,8 @@ "lastNotNull" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3217,6 +3560,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) ((ceph_pool_objects{ceph_cluster=\"$ceph_cluster\"}) *on (instance, pool_id) group_left(name)(ceph_pool_metadata{ceph_cluster=\"$ceph_cluster\"}))", "format": "time_series", "interval": "", @@ -3271,8 +3617,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3296,7 +3641,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3306,6 +3652,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) ((ceph_pool_quota_bytes{ceph_cluster=\"$ceph_cluster\"}) *on (instance, pool_id) group_left(name)(ceph_pool_metadata{ceph_cluster=\"$ceph_cluster\"}))", "format": "time_series", "interval": "", @@ -3360,8 +3709,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3385,7 +3733,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3395,6 +3744,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance) (ceph_pool_quota_objects{ceph_cluster=\"$ceph_cluster\"}) *on (instance, pool_id) group_left(name)(ceph_pool_metadata{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3448,8 +3800,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3473,7 +3824,8 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3483,6 +3835,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count without (instance, ceph_daemon) (ceph_bluestore_commit_lat_count{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3491,6 +3846,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "count without (instance, ceph_daemon) (ceph_filestore_journal_latency_count{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3504,6 +3862,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -3512,6 +3874,15 @@ }, "id": 41, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "OBJECTS", "type": "row" }, @@ -3557,8 +3928,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3597,8 +3967,9 @@ "options": { "legend": { "calcs": [], - "displayMode": "hidden", - "placement": "bottom" + "displayMode": "list", + "placement": "bottom", + "showLegend": false }, "tooltip": { "mode": "multi", @@ -3608,6 +3979,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pool_objects)", "format": "time_series", "interval": "", @@ -3663,8 +4037,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3706,7 +4079,8 @@ "lastNotNull" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3716,6 +4090,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_active{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3724,6 +4101,9 @@ "refId": "M" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_clean{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3732,6 +4112,9 @@ "refId": "U" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_peering{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3740,6 +4123,9 @@ "refId": "I" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_degraded{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3749,6 +4135,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_stale{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3758,6 +4147,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_unclean_pgs{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3767,6 +4159,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_undersized{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3776,6 +4171,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_incomplete{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3784,6 +4182,9 @@ "refId": "G" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_forced_backfill{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3792,6 +4193,9 @@ "refId": "H" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_inconsistent{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3800,6 +4204,9 @@ "refId": "F" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_forced_recovery{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3808,6 +4215,9 @@ "refId": "J" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_creating{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3816,6 +4226,9 @@ "refId": "K" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_wait_backfill{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3824,6 +4237,9 @@ "refId": "L" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_deep{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3832,6 +4248,9 @@ "refId": "N" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_scrubbing{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3840,6 +4259,9 @@ "refId": "O" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_recovering{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3848,6 +4270,9 @@ "refId": "P" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_repair{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3856,6 +4281,9 @@ "refId": "Q" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_down{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3864,6 +4292,9 @@ "refId": "R" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_peered{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3872,6 +4303,9 @@ "refId": "S" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_backfill{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3880,6 +4314,9 @@ "refId": "T" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_remapped{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3888,6 +4325,9 @@ "refId": "V" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_backfill_toofull{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -3942,8 +4382,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3986,7 +4425,8 @@ "lastNotNull" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -3996,6 +4436,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_degraded{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -4005,6 +4448,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_stale{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -4014,6 +4460,9 @@ "step": 300 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, pool_id) (ceph_pg_undersized{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -4069,8 +4518,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4093,8 +4541,9 @@ "options": { "legend": { "calcs": [], - "displayMode": "hidden", - "placement": "bottom" + "displayMode": "list", + "placement": "bottom", + "showLegend": false }, "tooltip": { "mode": "multi", @@ -4104,6 +4553,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum without (instance, ceph_daemon) (irate(ceph_osd_recovery_ops{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]))", "format": "time_series", "interval": "", @@ -4118,6 +4570,10 @@ }, { "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -4126,6 +4582,15 @@ }, "id": 40, "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "LATENCY", "type": "row" }, @@ -4159,6 +4624,9 @@ "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "ceph_osd_apply_latency_ms{ceph_cluster=\"$ceph_cluster\"}", "format": "time_series", "instant": false, @@ -4218,6 +4686,9 @@ "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "ceph_osd_commit_latency_ms{ceph_cluster=\"$ceph_cluster\"}", "format": "time_series", "instant": false, @@ -4274,6 +4745,9 @@ "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(ceph_osd_op_r_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) / rate(ceph_osd_op_r_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0", "format": "time_series", "instant": false, @@ -4331,6 +4805,9 @@ "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(ceph_osd_op_w_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) / rate(ceph_osd_op_w_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0", "format": "time_series", "hide": false, @@ -4402,8 +4879,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4427,7 +4903,8 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -4437,6 +4914,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance,ceph_daemon) (rate(ceph_osd_op_r_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) / rate(ceph_osd_op_r_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0)", "format": "time_series", "interval": "", @@ -4445,6 +4925,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (rate(ceph_osd_op_w_latency_sum{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) / rate(ceph_osd_op_w_latency_count{ceph_cluster=\"$ceph_cluster\"}[$__rate_interval]) >= 0)", "format": "time_series", "interval": "", @@ -4498,8 +4981,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -4526,7 +5008,8 @@ "max" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "multi", @@ -4536,6 +5019,9 @@ "pluginVersion": "8.4.6", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (ceph_osd_apply_latency_ms{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -4546,6 +5032,9 @@ "step": 4 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "avg without (instance, ceph_daemon) (ceph_osd_commit_latency_ms{ceph_cluster=\"$ceph_cluster\"})", "format": "time_series", "interval": "", @@ -4561,8 +5050,7 @@ } ], "refresh": "30s", - "schemaVersion": 35, - "style": "dark", + "schemaVersion": 39, "tags": [ "ceph-integration" ], @@ -4571,12 +5059,12 @@ { "current": { "selected": false, - "text": "Prometheus", - "value": "Prometheus" + "text": "default", + "value": "default" }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -4589,8 +5077,9 @@ { "allValue": "", "current": { + "isNone": true, "selected": false, - "text": "", + "text": "None", "value": "" }, "datasource": { @@ -4607,7 +5096,7 @@ "query": "label_values(ceph_cluster)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -4650,6 +5139,6 @@ "timezone": "browser", "title": "Ceph - Cluster", "uid": "Dxkv6rnnz", - "version": 2, + "version": 3, "weekStart": "" } \ No newline at end of file diff --git a/clickhouse-mixin/dashboards/clickhouse-latency.libsonnet b/clickhouse-mixin/dashboards/clickhouse-latency.libsonnet index b31111a00..e83122622 100644 --- a/clickhouse-mixin/dashboards/clickhouse-latency.libsonnet +++ b/clickhouse-mixin/dashboards/clickhouse-latency.libsonnet @@ -84,7 +84,7 @@ local diskReadLatencyPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'increase(ClickHouseProfileEvents_DiskReadElapsedMicroseconds{' + matcher + '}[$__rate_interval])', - legendFormat: 'Disk read elapsed', + legendFormat: '{{ instance }} - disk read elapsed', range: true, refId: 'A', }, @@ -167,7 +167,7 @@ local diskWriteLatencyPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'increase(ClickHouseProfileEvents_DiskWriteElapsedMicroseconds{' + matcher + '}[$__rate_interval])', - legendFormat: 'Disk write elapsed', + legendFormat: '{{ instance }} - disk write elapsed', range: true, refId: 'A', }, @@ -250,7 +250,7 @@ local networkTransmitLatencyPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'increase(ClickHouseProfileEvents_NetworkReceiveElapsedMicroseconds{' + matcher + '}[$__rate_interval])', - legendFormat: 'Network receive elapsed', + legendFormat: '{{ instance }} - network receive elapsed', range: true, refId: 'A', }, @@ -333,7 +333,7 @@ local networkTransmitLatencyPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'increase(ClickHouseProfileEvents_NetworkSendElapsedMicroseconds{' + matcher + '}[$__rate_interval])', - legendFormat: 'Network send elapsed', + legendFormat: '{{ instance }} - network send elapsed', range: true, refId: 'A', }, @@ -416,7 +416,7 @@ local zooKeeperWaitTimePanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'increase(ClickHouseProfileEvents_ZooKeeperWaitMicroseconds{' + matcher + '}[$__rate_interval])', - legendFormat: 'ZooKeeper wait', + legendFormat: '{{ instance }} - ZooKeeper wait', range: true, refId: 'A', }, diff --git a/clickhouse-mixin/dashboards/clickhouse-overview.libsonnet b/clickhouse-mixin/dashboards/clickhouse-overview.libsonnet index cb3b01d3b..423dbcb69 100644 --- a/clickhouse-mixin/dashboards/clickhouse-overview.libsonnet +++ b/clickhouse-mixin/dashboards/clickhouse-overview.libsonnet @@ -85,7 +85,7 @@ local successfulQueriesPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_Query{' + matcher + '}[$__rate_interval])', - legendFormat: 'Query', + legendFormat: '{{ instance }} - query', range: true, refId: 'A', }, @@ -94,7 +94,7 @@ local successfulQueriesPanel(matcher) = editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_SelectQuery{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Select query', + legendFormat: '{{ instance }} - select query', range: true, refId: 'B', }, @@ -103,7 +103,7 @@ local successfulQueriesPanel(matcher) = editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_InsertQuery{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Insert query', + legendFormat: '{{ instance }} - insert query', range: true, refId: 'C', }, @@ -112,7 +112,7 @@ local successfulQueriesPanel(matcher) = editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_AsyncInsertQuery{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Async insert query', + legendFormat: '{{ instance }} - async insert query', range: true, refId: 'D', }, @@ -195,7 +195,7 @@ local failedQueriesPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_FailedQuery{' + matcher + '}[$__rate_interval])', - legendFormat: 'Failed query', + legendFormat: '{{ instance }} - failed query', range: true, refId: 'A', }, @@ -204,7 +204,7 @@ local failedQueriesPanel(matcher) = editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_FailedSelectQuery{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Failed select query', + legendFormat: '{{ instance }} - failed select query', range: true, refId: 'B', }, @@ -213,7 +213,7 @@ local failedQueriesPanel(matcher) = editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_FailedInsertQuery{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Failed insert query', + legendFormat: '{{ instance }} - failed insert query', range: true, refId: 'C', }, @@ -296,7 +296,7 @@ local rejectedInsertsPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_RejectedInserts{' + matcher + '}[$__rate_interval])', - legendFormat: 'Rejected inserts', + legendFormat: '{{ instance }} - rejected inserts', range: true, refId: 'A', }, @@ -379,7 +379,7 @@ local memoryUsagePanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'ClickHouseMetrics_MemoryTracking{' + matcher + '}', - legendFormat: 'Memory tracking', + legendFormat: '{{ instance }} - memory tracking', range: true, refId: 'A', }, @@ -441,7 +441,7 @@ local memoryUsageGaugePanel(matcher) = editorMode: 'code', expr: '(ClickHouseMetrics_MemoryTracking{' + matcher + '} / ClickHouseAsyncMetrics_OSMemoryTotal{' + matcher + '}) * 100', hide: false, - legendFormat: '__auto', + legendFormat: '{{ instance }} - memory usage', range: true, refId: 'A', }, @@ -525,7 +525,7 @@ local activeConnectionsPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'ClickHouseMetrics_TCPConnection{' + matcher + '}', - legendFormat: 'TCP connection', + legendFormat: '{{ instance }} - TCP connection', range: true, refId: 'A', }, @@ -534,7 +534,7 @@ local activeConnectionsPanel(matcher) = editorMode: 'builder', expr: 'ClickHouseMetrics_HTTPConnection{' + matcher + '}', hide: false, - legendFormat: 'HTTP connection', + legendFormat: '{{ instance }} - HTTP connection', range: true, refId: 'B', }, @@ -543,7 +543,7 @@ local activeConnectionsPanel(matcher) = editorMode: 'builder', expr: 'ClickHouseMetrics_MySQLConnection{' + matcher + '}', hide: false, - legendFormat: 'MySQL connection', + legendFormat: '{{ instance }} - MySQL connection', range: true, refId: 'C', }, @@ -552,7 +552,7 @@ local activeConnectionsPanel(matcher) = editorMode: 'builder', expr: 'ClickHouseMetrics_PostgreSQLConnection{' + matcher + '}', hide: false, - legendFormat: 'PostgreSQL connection', + legendFormat: '{{ instance }} - PostgreSQL connection', range: true, refId: 'D', }, @@ -634,7 +634,7 @@ local networkReceivedPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_NetworkReceiveBytes{' + matcher + '}[$__rate_interval])', - legendFormat: 'Network receive bytes', + legendFormat: '{{ instance }} - network receive bytes', range: true, refId: 'A', }, @@ -716,7 +716,7 @@ local networkTransmittedPanel(matcher) = datasource: promDatasource, editorMode: 'builder', expr: 'rate(ClickHouseProfileEvents_NetworkSendBytes{' + matcher + '}[$__rate_interval])', - legendFormat: 'Network send bytes', + legendFormat: '{{ instance }} - network send bytes', range: true, refId: 'A', }, @@ -750,7 +750,7 @@ local errorLogsPanel(cfg) = }, editorMode: 'builder', expr: logExpr(cfg.logExpression), - legendFormat: '', + legendFormat: '{{ instance }}', queryType: 'range', refId: 'A', }, diff --git a/clickhouse-mixin/dashboards/clickhouse-replica.libsonnet b/clickhouse-mixin/dashboards/clickhouse-replica.libsonnet index 3179e3f95..43c2825b8 100644 --- a/clickhouse-mixin/dashboards/clickhouse-replica.libsonnet +++ b/clickhouse-mixin/dashboards/clickhouse-replica.libsonnet @@ -83,7 +83,7 @@ local interserverConnectionsPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseMetrics_InterserverConnection{' + matcher + '}', - legendFormat: 'Interserver connections', + legendFormat: '{{ instance }} - interserver connections', range: true, refId: 'A', }, @@ -164,7 +164,7 @@ local replicaQueueSizePanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseAsyncMetrics_ReplicasMaxQueueSize{' + matcher + '}', - legendFormat: 'Max queue size', + legendFormat: '{{ instance }} - max queue size', range: true, refId: 'A', }, @@ -246,7 +246,7 @@ local replicaOperationsPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'rate(ClickHouseProfileEvents_ReplicatedPartFetches{' + matcher + '}[$__rate_interval])', - legendFormat: 'Part fetches', + legendFormat: '{{ instance }} - part fetches', range: true, refId: 'A', }, @@ -255,7 +255,7 @@ local replicaOperationsPanel(matcher) = editorMode: 'code', expr: 'rate(ClickHouseProfileEvents_ReplicatedPartMerges{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Part merges', + legendFormat: '{{ instance }} - part merges', range: true, refId: 'B', }, @@ -264,7 +264,7 @@ local replicaOperationsPanel(matcher) = editorMode: 'code', expr: 'rate(ClickHouseProfileEvents_ReplicatedPartMutations{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Part mutations', + legendFormat: '{{ instance }} - part mutations', range: true, refId: 'C', }, @@ -273,7 +273,7 @@ local replicaOperationsPanel(matcher) = editorMode: 'code', expr: 'rate(ClickHouseProfileEvents_ReplicatedPartChecks{' + matcher + '}[$__rate_interval])', hide: false, - legendFormat: 'Part checks', + legendFormat: '{{ instance }} - part checks', range: true, refId: 'D', }, @@ -354,7 +354,7 @@ local replicaReadOnlyPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseMetrics_ReadonlyReplica{' + matcher + '}', - legendFormat: 'Read only', + legendFormat: '{{ instance }} - read only', range: true, refId: 'A', }, @@ -435,7 +435,7 @@ local zooKeeperWatchesPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseMetrics_ZooKeeperWatch{' + matcher + '}', - legendFormat: 'Zookeeper watch', + legendFormat: '{{ instance }} - ZooKeeper watch', range: true, refId: 'A', }, @@ -516,7 +516,7 @@ local zooKeeperSessionsPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseMetrics_ZooKeeperSession{' + matcher + '}', - legendFormat: 'Zookeeper session', + legendFormat: '{{ instance }} - ZooKeeper session', range: true, refId: 'A', }, @@ -597,7 +597,7 @@ local zooKeeperRequestsPanel(matcher) = datasource: promDatasource, editorMode: 'code', expr: 'ClickHouseMetrics_ZooKeeperRequest{' + matcher + '}', - legendFormat: 'Zookeeper request', + legendFormat: '{{ instance }} - ZooKeeper request', range: true, refId: 'A', }, diff --git a/common-lib/Makefile b/common-lib/Makefile index 46933e1a4..0e0d33719 100644 --- a/common-lib/Makefile +++ b/common-lib/Makefile @@ -21,3 +21,14 @@ lint: build $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ done +.PHONY: tests +tests: build + @RESULT=0; \ + for m in $$(find . -name 'test_*.libsonnet' -print); do \ + echo "Testing $$m"; \ + jsonnet -J vendor "$$m"; \ + if [ $$? -ne 0 ]; then \ + RESULT=1; \ + fi; \ + done; \ + exit $$RESULT \ No newline at end of file diff --git a/common-lib/README.md b/common-lib/README.md index 93b356324..e87b061ac 100644 --- a/common-lib/README.md +++ b/common-lib/README.md @@ -4,6 +4,8 @@ This common library can be used to quickly create dashboards' `panels` and `anno By using this common library we can 'enforce' common style choices across multiple dashboards and mixins. +This library should be considered experimental. + ## Import ```sh @@ -30,4 +32,8 @@ local commonlib = import 'github.com/grafana/jsonnet-libs/common-lib/common/main local cpuPanel = oldPanel + commonlib.panels.cpu.timeSeries.utilization.stylize(); ``` -See [windows-observ-lib](./windows-observ-lib) for full example. +See [windows-observ-lib](../windows-observ-lib/README.md) or [helloworld-observ-lib](../helloworld-observ-lib/README.md)for full example. + +### Signals + +Signals [README](./common/signal/README.md) here. diff --git a/common-lib/common/annotations/base.libsonnet b/common-lib/common/annotations/base.libsonnet index 8cb149be7..2f592fa7c 100644 --- a/common-lib/common/annotations/base.libsonnet +++ b/common-lib/common/annotations/base.libsonnet @@ -28,5 +28,4 @@ local annotation = g.dashboard.annotation; textFormat: value, }, - } diff --git a/common-lib/common/main.libsonnet b/common-lib/common/main.libsonnet index 4b7c76e3b..2fd023f37 100644 --- a/common-lib/common/main.libsonnet +++ b/common-lib/common/main.libsonnet @@ -1,5 +1,7 @@ { annotations: import './annotations/main.libsonnet', panels: import './panels.libsonnet', + variables: import './variables/variables.libsonnet', utils: import './utils.libsonnet', + signals: import './signal/signal.libsonnet', } diff --git a/common-lib/common/panels/disk/table/usage.libsonnet b/common-lib/common/panels/disk/table/usage.libsonnet index 9011838d5..a535860c0 100644 --- a/common-lib/common/panels/disk/table/usage.libsonnet +++ b/common-lib/common/panels/disk/table/usage.libsonnet @@ -21,7 +21,7 @@ base { std.prune( { checks: [ - if (usageTarget == null && freeTarget == null) then error 'Must provide at leason one of "usageTarget" or "freeTraget"', + if (usageTarget == null && freeTarget == null) then error 'Must provide at least one of "usageTarget" or "freeTraget"', if !(std.objectHas(totalTarget, 'format') && std.assertEqual(totalTarget.format, 'table')) then error 'totalTarget format must be "table"', if !(std.objectHas(totalTarget, 'instant') && std.assertEqual(totalTarget.instant, true)) then error 'totalTarget must have type "instant"', if usageTarget != null && !(std.objectHas(usageTarget, 'format') && std.assertEqual(usageTarget.format, 'table')) then error 'usageTarget format must be "table"', diff --git a/common-lib/common/panels/disk/timeSeries/base.libsonnet b/common-lib/common/panels/disk/timeSeries/base.libsonnet index f5b09f21d..060fa1283 100644 --- a/common-lib/common/panels/disk/timeSeries/base.libsonnet +++ b/common-lib/common/panels/disk/timeSeries/base.libsonnet @@ -13,7 +13,6 @@ base { // Decrease opacity (would look better with too many timeseries) + defaults.custom.withFillOpacity(1), - withNegateOutPackets(regexp='/write|written/'): defaults.custom.withAxisLabel('write(-) | read(+)') + defaults.custom.withAxisCenteredZero(true) diff --git a/common-lib/common/signal/README.md b/common-lib/common/signal/README.md new file mode 100644 index 000000000..56c97925d --- /dev/null +++ b/common-lib/common/signal/README.md @@ -0,0 +1,73 @@ +# Signal + +This part of the lib allows to define signals (i.e. metrics, logs). + +This shifts focus of dashboard building from panels to actual signals we want to observe. + +Workflow to generate dashboards would be as follows: +- Define key indicators(signals) your want to observe. +- Use built-in functions to render each signal as a panel (i.e. signal.asTimeSeries()) +- If you want to combine multiple signals inside a single panel, render signal not as [Grafana panel](https://grafana.github.io/grafonnet/API/panel/index.html), but as a [Target](https://grafana.github.io/grafonnet/API/panel/timeSeries/index.html#fn-queryoptionswithtargets), which is attachable to existing panel +- Bonus: use stylize() functions from commonlib/panels to apply common styles to signals. + +## Example + + + + +``` +local g = import 'g.libsonnet'; + +# define signals + local s = commonlib.signals.init( + datasource='${datasource}', + instanceLabels=['instance','device'], + groupLabels=['job'], + filteringSelector=['job=integrations/test'], + aggLevel='instance', + ), + + //prepare Grafana templated variables aligned with queriesSelector generated: + variables: s.getVariablesMultiChoice(), + + bytesIn: s.addSignal( + name='Bytes in', + type='counter', + unit='bytes', + description='Bytes in through interface', + expr='node_network_receive_bytes_total{%(queriesSelector)s}', + ), + bytesOut: s.addSignal( + name='Bytes out', + type='counter', + unit='bytes', + description='Bytes out through interface', + expr='node_network_transmit_bytes_total{%(queriesSelector)s}', + ), +}; + + + +#generate dashboard +g.dashboard.new('Device') ++ g.dashboard.withVariables(signals.variables) ++ g.dashboard.withPanels( + [ + g.panel.row.new('Graph'), + signals.bytesIn.asTimeSeries() + + g.panel.timeSeries.queryOptions.withTargetsMixin( + signals.bytesOut.asTarget() + ) + + { gridPos: { h: 10, w: 8 } } + + commonlib.panels.network.timeSeries.traffic.stylize() + + commonlib.panels.network.timeSeries.traffic.withNegateOutPackets(), + ] +) +``` + +## Running tests +See test files +``` +cd common-lib +jsonnet -J vendor common/signal/test_histogram.libsonnet +``` \ No newline at end of file diff --git a/common-lib/common/signal/counter.libsonnet b/common-lib/common/signal/counter.libsonnet new file mode 100644 index 000000000..5d86fff1d --- /dev/null +++ b/common-lib/common/signal/counter.libsonnet @@ -0,0 +1,55 @@ +local g = import '../g.libsonnet'; +local utils = import '../utils.libsonnet'; +local signalUtils = import './utils.libsonnet'; + +{ + new( + name, + type, + unit, + description, + expr, + aggLevel, + vars, + datasource + ): { + local prometheusQuery = g.query.prometheus, + local lokiQuery = g.query.loki, + + //Return as grafana panel target(query+legend) + asTarget():: + prometheusQuery.new( + datasource, + signalUtils.wrapExpr(type, expr, q=0.95, aggLevel=aggLevel) % vars + ) + + prometheusQuery.withLegendFormat(signalUtils.wrapLegend(name, aggLevel) % vars), + + //Return as alert/recordingRule query + asPromRule():: {}, + + common:: + // override panel-wide --mixed-- datasource + prometheusQuery.withDatasource(datasource) + + g.panel.timeSeries.panelOptions.withDescription(description) + + g.panel.timeSeries.standardOptions.withUnit(signalUtils.generateUnits(type, unit)) + + g.panel.timeSeries.queryOptions.withTargets( + self.asTarget() + ), + + //Return as timeSeriesPanel + asTimeSeries():: + g.panel.timeSeries.new(name) + + self.common, + + //Return as statPanel + asStat():: + g.panel.stat.new(name) + + self.common, + + //Return as timeSeriesPanel + asGauge():: + g.panel.gauge.new(name) + + self.common, + }, + +} diff --git a/common-lib/common/signal/gauge.libsonnet b/common-lib/common/signal/gauge.libsonnet new file mode 100644 index 000000000..c2199f199 --- /dev/null +++ b/common-lib/common/signal/gauge.libsonnet @@ -0,0 +1,54 @@ +local g = import '../g.libsonnet'; +local utils = import '../utils.libsonnet'; +local signalUtils = import './utils.libsonnet'; + +{ + new( + name, + type, + unit, + description, + expr, + aggLevel, + vars, + datasource + ): { + local prometheusQuery = g.query.prometheus, + local lokiQuery = g.query.loki, + + //Return as grafana panel target(query+legend) + asTarget():: + prometheusQuery.new( + datasource, + signalUtils.wrapExpr(type, expr, q=0.95, aggLevel=aggLevel) % vars + ) + + prometheusQuery.withLegendFormat(signalUtils.wrapLegend(name, aggLevel) % vars), + + //Return as alert/recordingRule query + asPromRule():: {}, + + common:: + // override panel-wide --mixed-- datasource + prometheusQuery.withDatasource(datasource) + + g.panel.timeSeries.panelOptions.withDescription(description) + + g.panel.timeSeries.standardOptions.withUnit(signalUtils.generateUnits(type, unit)) + + g.panel.timeSeries.queryOptions.withTargets( + self.asTarget() + ), + //Return as timeSeriesPanel + asTimeSeries():: + g.panel.timeSeries.new(name) + + self.common, + + //Return as statPanel + asStat():: + g.panel.stat.new(name) + + self.common, + + //Return as timeSeriesPanel + asGauge():: + g.panel.gauge.new(name) + + self.common, + }, + +} diff --git a/common-lib/common/signal/histogram.libsonnet b/common-lib/common/signal/histogram.libsonnet new file mode 100644 index 000000000..5d86fff1d --- /dev/null +++ b/common-lib/common/signal/histogram.libsonnet @@ -0,0 +1,55 @@ +local g = import '../g.libsonnet'; +local utils = import '../utils.libsonnet'; +local signalUtils = import './utils.libsonnet'; + +{ + new( + name, + type, + unit, + description, + expr, + aggLevel, + vars, + datasource + ): { + local prometheusQuery = g.query.prometheus, + local lokiQuery = g.query.loki, + + //Return as grafana panel target(query+legend) + asTarget():: + prometheusQuery.new( + datasource, + signalUtils.wrapExpr(type, expr, q=0.95, aggLevel=aggLevel) % vars + ) + + prometheusQuery.withLegendFormat(signalUtils.wrapLegend(name, aggLevel) % vars), + + //Return as alert/recordingRule query + asPromRule():: {}, + + common:: + // override panel-wide --mixed-- datasource + prometheusQuery.withDatasource(datasource) + + g.panel.timeSeries.panelOptions.withDescription(description) + + g.panel.timeSeries.standardOptions.withUnit(signalUtils.generateUnits(type, unit)) + + g.panel.timeSeries.queryOptions.withTargets( + self.asTarget() + ), + + //Return as timeSeriesPanel + asTimeSeries():: + g.panel.timeSeries.new(name) + + self.common, + + //Return as statPanel + asStat():: + g.panel.stat.new(name) + + self.common, + + //Return as timeSeriesPanel + asGauge():: + g.panel.gauge.new(name) + + self.common, + }, + +} diff --git a/common-lib/common/signal/info.libsonnet b/common-lib/common/signal/info.libsonnet new file mode 100644 index 000000000..05d0be935 --- /dev/null +++ b/common-lib/common/signal/info.libsonnet @@ -0,0 +1,60 @@ +local g = import '../g.libsonnet'; +local panels = import '../panels.libsonnet'; +local utils = import '../utils.libsonnet'; +local signalUtils = import './utils.libsonnet'; + +//_info prometheus metric: something_info{}=1 +{ + new( + name, + type, + infoLabel, + description, + expr, + aggLevel, + vars, + datasource, + ): + { + local prometheusQuery = g.query.prometheus, + local lokiQuery = g.query.loki, + + + //Return as grafana panel target(query+legend) + asTarget():: + prometheusQuery.new( + datasource, + signalUtils.wrapExpr(type, expr, q=0.95, aggLevel=aggLevel) % vars + ) + + prometheusQuery.withLegendFormat(signalUtils.wrapLegend(name, aggLevel) % vars) + + prometheusQuery.withFormat('table'), + + //Return as alert/recordingRule query + asPromRule():: {}, + + common:: + // override panel-wide --mixed-- datasource + prometheusQuery.withDatasource(datasource) + + g.panel.timeSeries.panelOptions.withDescription(description) + + g.panel.stat.queryOptions.withTargets( + self.asTarget() + ), + + //Return as timeSeriesPanel + asTimeSeries():: + error 'asTimeSeries() is not supported for info metrics. Use asStat() instead.', + + //Return as statPanel + asStat():: + g.panel.stat.new(name) + + self.common + + panels.generic.stat.info.stylize() + { options+: { reduceOptions+: { fields: '/^' + infoLabel + '$/' } } }, + + + //Return as gauge panel + asGauge():: + error 'asGauge() is not supported for info metrics. Use asStat() instead.', + }, + +} diff --git a/common-lib/common/signal/signal.libsonnet b/common-lib/common/signal/signal.libsonnet new file mode 100644 index 000000000..360b3b8b2 --- /dev/null +++ b/common-lib/common/signal/signal.libsonnet @@ -0,0 +1,133 @@ +local g = import '../g.libsonnet'; +local utils = import '../utils.libsonnet'; +local variables = import '../variables/variables.libsonnet'; +local counter = import './counter.libsonnet'; +local gauge = import './gauge.libsonnet'; +local histogram = import './histogram.libsonnet'; +local info = import './info.libsonnet'; +{ + + init( + datasource='DS_PROMETHEUS', + filteringSelector=['job=integrations/agent'], + groupLabels=['job'], + instanceLabels=['instance'], + interval='$__rate_interval', + //default aggregation level + aggLevel='none', + aggFunction='avg', + //metric used in variables discovery by default + varMetric='up', + legendPrefix='' + ): self { + + local this = self, + datasource:: datasource, + aggLevel:: aggLevel, + + // create vars + local grafanaVariables = variables.new( + filteringSelector[0], + groupLabels, + instanceLabels, + varMetric=varMetric, + ), + // vars are used in templating(legend+expressions) + vars: { + filteringSelector: filteringSelector, + groupLabels: groupLabels, + instanceLabels: instanceLabels, + queriesSelector: grafanaVariables.queriesSelector, + //used in aggregation queries + agg: if this.aggLevel == 'group' then std.join(',', self.groupLabels + self.instanceLabels) + else if this.aggLevel == 'instance' then std.join(',', self.instanceLabels) + else if this.aggLevel == 'none' then std.join(',', []), + aggFunction: aggFunction, + //prefix for legend when aggregation is used + aggLegend: + if aggLevel == 'group' then utils.labelsToPanelLegend(self.groupLabels + self.instanceLabels) + else if aggLevel == 'instance' then utils.labelsToPanelLegend(self.instanceLabels) + else if aggLevel == 'none' then '', + interval: interval, + //extra prefix for legend + legendPrefix: legendPrefix, + }, + //get Grafana Variables + //allow multiple instance selection + getVariablesSingleChoice():: + grafanaVariables.singleInstance, + //only single instance selection allowed + getVariablesMultiChoice():: + grafanaVariables.multiInstance, + + //name: metric simple name + //type: counter, gauge, histogram, // TODO: info metric, status_map metric.... + //unit: simple unit + //description: metric description + //exprTemplate: expression template + addSignal( + name, + type, + unit='short', + description, + expr, + aggLevel=self.aggLevel, + infoLabel=null, + ): + + // validate inputs + std.prune( + { + checks:: [ + if (type != 'gauge' && type != 'histogram' && type != 'counter') then error "type must be one of 'gauge','histogram','counter'", + if (aggLevel != 'none' && aggLevel != 'instance' && aggLevel != 'group') then error "aggLevel must be one of 'group','instance' or 'none'", + ], + } + ) + + if type == 'gauge' then + gauge.new( + name=name, + type=type, + unit=unit, + description=description, + expr=expr, + aggLevel=aggLevel, + datasource=datasource, + vars=this.vars, + ) + else if type == 'counter' then + counter.new( + name=name, + type=type, + unit=unit, + description=description, + expr=expr, + aggLevel=aggLevel, + datasource=datasource, + vars=this.vars, + ) + else if type == 'histogram' then + histogram.new( + name=name, + type=type, + unit=unit, + description=description, + expr=expr, + aggLevel=aggLevel, + datasource=datasource, + vars=this.vars, + ) + else if type == 'info' then + info.new( + name=name, + type=type, + infoLabel=infoLabel, + description=description, + expr=expr, + aggLevel=aggLevel, + datasource=datasource, + vars=this.vars, + ), + }, + +} diff --git a/common-lib/common/signal/test_counter.libsonnet b/common-lib/common/signal/test_counter.libsonnet new file mode 100644 index 000000000..d8497c060 --- /dev/null +++ b/common-lib/common/signal/test_counter.libsonnet @@ -0,0 +1,62 @@ +local signal = import './signal.libsonnet'; +local test = import 'jsonnetunit/test.libsonnet'; + +local m1 = signal.init( + filteringSelector=['job="abc"'], + interval='5m', + aggLevel='instance', + aggFunction='max', +).addSignal( + name='API server requests', + type='counter', + unit='requests', + description='API server calls.', + expr='apiserver_request_total{%(queriesSelector)s}' +); + +{ + + asTarget: { + raw:: m1.asTarget(), + testResult: test.suite({ + testLegend: { + actual: m1.asTarget().legendFormat, + expect: '{{instance}}: API server requests', + }, + testExpression: { + actual: m1.asTarget().expr, + expect: 'max by (instance) (rate(apiserver_request_total{job="abc",job=~"$job",instance=~"$instance"}[5m]))', + }, + }), + }, + asTimeSeries: + { + raw:: m1.asTimeSeries(), + testResult: test.suite({ + testTStitle: { + actual: m1.asTimeSeries().title, + expect: 'API server requests', + }, + testUnit: { + actual: m1.asTimeSeries().fieldConfig.defaults.unit, + expect: 'rps', + }, + testTStype: { + actual: m1.asTimeSeries().type, + expect: 'timeseries', + }, + testTSversion: { + actual: m1.asTimeSeries().pluginVersion, + expect: 'v10.0.0', + }, + testTSUid: { + actual: m1.asTimeSeries().datasource, + expect: { + uid: 'DS_PROMETHEUS', + type: 'prometheus', + }, + }, + }), + }, + +} diff --git a/common-lib/common/signal/test_gauge.libsonnet b/common-lib/common/signal/test_gauge.libsonnet new file mode 100644 index 000000000..55c3e9e36 --- /dev/null +++ b/common-lib/common/signal/test_gauge.libsonnet @@ -0,0 +1,59 @@ +local signal = import './signal.libsonnet'; +local test = import 'jsonnetunit/test.libsonnet'; + +local gauge1 = signal.init( + aggLevel='group', +).addSignal( + name='Up metric', + type='gauge', + unit='short', + description='abc', + expr='up{%(queriesSelector)s}' +); + +{ + + asTarget: { + raw:: gauge1.asTarget(), + testResult: test.suite({ + testLegend: { + actual: gauge1.asTarget().legendFormat, + expect: '{{job}}/{{instance}}: Up metric', + }, + testExpression: { + actual: gauge1.asTarget().expr, + expect: 'avg by (job,instance) (up{job=integrations/agent,job=~"$job",instance=~"$instance"})', + }, + }), + }, + asTimeSeries: + { + raw:: gauge1.asTimeSeries(), + testResult: test.suite({ + testTStitle: { + actual: gauge1.asTimeSeries().title, + expect: 'Up metric', + }, + testUnit: { + actual: gauge1.asTimeSeries().fieldConfig.defaults.unit, + expect: 'short', + }, + testTStype: { + actual: gauge1.asTimeSeries().type, + expect: 'timeseries', + }, + testTSversion: { + actual: gauge1.asTimeSeries().pluginVersion, + expect: 'v10.0.0', + }, + testTSUid: { + actual: gauge1.asTimeSeries().datasource, + expect: { + uid: 'DS_PROMETHEUS', + type: 'prometheus', + }, + }, + }), + }, + +} diff --git a/common-lib/common/signal/test_histogram.libsonnet b/common-lib/common/signal/test_histogram.libsonnet new file mode 100644 index 000000000..0f9eb5339 --- /dev/null +++ b/common-lib/common/signal/test_histogram.libsonnet @@ -0,0 +1,60 @@ +local signal = import './signal.libsonnet'; +local test = import 'jsonnetunit/test.libsonnet'; + +local m1 = signal.init( + filteringSelector=['job="abc"'], + interval='10m', + aggLevel='group', + aggFunction='avg', +).addSignal( + name='API server duration', + type='histogram', + unit='seconds', + description='API server call duration.', + expr='apiserver_request_duration_seconds_bucket{%(queriesSelector)s}', +); + +{ + asTarget: { + raw:: m1.asTarget(), + testResult: test.suite({ + testLegend: { + actual: m1.asTarget().legendFormat, + expect: '{{job}}/{{instance}}: API server duration', + }, + testExpression: { + actual: m1.asTarget().expr, + expect: 'avg by (job,instance) (histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket{job="abc",job=~"$job",instance=~"$instance"}[10m])) by (le,job,instance)))', + }, + }), + }, + asTimeSeries: + { + raw:: m1.asTimeSeries(), + testResult: test.suite({ + testTStitle: { + actual: m1.asTimeSeries().title, + expect: 'API server duration', + }, + testUnit: { + actual: m1.asTimeSeries().fieldConfig.defaults.unit, + expect: 'seconds', + }, + testTStype: { + actual: m1.asTimeSeries().type, + expect: 'timeseries', + }, + testTSversion: { + actual: m1.asTimeSeries().pluginVersion, + expect: 'v10.0.0', + }, + testTSUid: { + actual: m1.asTimeSeries().datasource, + expect: { + uid: 'DS_PROMETHEUS', + type: 'prometheus', + }, + }, + }), + }, +} diff --git a/common-lib/common/signal/test_info.libsonnet b/common-lib/common/signal/test_info.libsonnet new file mode 100644 index 000000000..5f3e32653 --- /dev/null +++ b/common-lib/common/signal/test_info.libsonnet @@ -0,0 +1,52 @@ +local signal = import './signal.libsonnet'; +local test = import 'jsonnetunit/test.libsonnet'; + +local m1 = signal.init( + filteringSelector=['job="abc"'], +).addSignal( + name='Go version', + type='info', + description='Go version.', + expr='go_info{%(queriesSelector)s}', + infoLabel='version' + +); + +{ + + asTarget: { + raw:: m1.asTarget(), + testResult: test.suite({ + testExpression: { + actual: m1.asTarget().expr, + expect: 'go_info{job="abc",job=~"$job",instance=~"$instance"}', + }, + }), + }, + asStat: + { + raw:: m1.asStat(), + testResult: test.suite({ + testTStitle: { + actual: m1.asStat().title, + expect: 'Go version', + }, + testType: { + actual: m1.asStat().type, + expect: 'stat', + }, + testTSversion: { + actual: m1.asStat().pluginVersion, + expect: 'v10.0.0', + }, + testTSUid: { + actual: m1.asStat().datasource, + expect: { + uid: 'DS_PROMETHEUS', + type: 'prometheus', + }, + }, + }), + }, + +} diff --git a/common-lib/common/signal/test_variables.libsonnet b/common-lib/common/signal/test_variables.libsonnet new file mode 100644 index 000000000..aa67c662b --- /dev/null +++ b/common-lib/common/signal/test_variables.libsonnet @@ -0,0 +1,46 @@ +local signal = import './signal.libsonnet'; +local test = import 'jsonnetunit/test.libsonnet'; + +local signalInit = signal.init( + aggLevel='group', +); + +{ + multiChoice: { + local raw = signalInit.getVariablesMultiChoice(), + raw:: raw, + testResult: test.suite({ + testDS: { + actual: raw[0], + expect: { label: 'Data source', name: 'datasource', query: 'prometheus', regex: '', type: 'datasource' }, + }, + testGroupSelector: { + actual: raw[1], + expect: { allValue: '.+', datasource: { type: 'prometheus', uid: '${datasource}' }, includeAll: true, label: 'Job', multi: true, name: 'job', query: 'label_values(up{job=integrations/agent}, job)', refresh: 2, sort: 1, type: 'query' }, + }, + testInstanceSelector: { + actual: raw[2], + expect: { allValue: '.+', datasource: { type: 'prometheus', uid: '${datasource}' }, includeAll: true, label: 'Instance', multi: true, name: 'instance', query: 'label_values(up{job=integrations/agent,job=~"$job"}, instance)', refresh: 2, sort: 1, type: 'query' }, + }, + }), + }, + singleChoice: { + local raw = signalInit.getVariablesSingleChoice(), + raw:: raw, + testResult: test.suite({ + testDS: { + actual: raw[0], + expect: { label: 'Data source', name: 'datasource', query: 'prometheus', regex: '', type: 'datasource' }, + }, + testGroupSelector: { + actual: raw[1], + expect: { allValue: '.+', datasource: { type: 'prometheus', uid: '${datasource}' }, includeAll: true, label: 'Job', multi: true, name: 'job', query: 'label_values(up{job=integrations/agent}, job)', refresh: 2, sort: 1, type: 'query' }, + }, + testInstanceSelector: { + actual: raw[2], + expect: { allValue: '.+', datasource: { type: 'prometheus', uid: '${datasource}' }, includeAll: false, label: 'Instance', multi: false, name: 'instance', query: 'label_values(up{job=integrations/agent,job=~"$job"}, instance)', refresh: 2, sort: 1, type: 'query' }, + }, + }), + }, + +} diff --git a/common-lib/common/signal/utils.libsonnet b/common-lib/common/signal/utils.libsonnet new file mode 100644 index 000000000..b16ef1028 --- /dev/null +++ b/common-lib/common/signal/utils.libsonnet @@ -0,0 +1,44 @@ +{ + wrapExpr(type, expr, q=0.95, aggLevel): + if type == 'counter' then + ( + local baseExpr = 'rate(' + expr + '[%(interval)s])'; + if aggLevel == 'none' then + baseExpr + else + ('%(aggFunction)s by (%(agg)s) (' + baseExpr + ')') + ) + else if type == 'gauge' then + ( + if aggLevel == 'none' then + expr + else + ('%(aggFunction)s by (%(agg)s) (' + expr + ')') + ) + else if type == 'histogram' then + ( + local baseExpr = 'histogram_quantile(' + '%.2f' % q + ', sum(rate(' + expr + '[%(interval)s])) by (le,%(agg)s))'; + if aggLevel == 'none' then baseExpr + else '%(aggFunction)s by (%(agg)s) (' + baseExpr + ')' + ) + else if type == 'info' || type == 'info' then + expr, + + + wrapLegend(legend, aggLevel): + if aggLevel == 'none' then '%(legendPrefix)s' + legend + else + '%(aggLegend)s%(legendPrefix)s: ' + legend, + + generateUnits(type, unit): + if type == 'gauge' || type == 'histogram' || type == 'info' then unit + else if type == 'counter' then + ( + // some specific cases + if unit == 'seconds' then 'percent' + else if unit == 'requests' then 'rps' + else if unit == 'short' then '/s' + else unit[0] + 'ps' + ), + +} diff --git a/common-lib/common/utils.libsonnet b/common-lib/common/utils.libsonnet index 7c78f318e..17b4c0be8 100644 --- a/common-lib/common/utils.libsonnet +++ b/common-lib/common/utils.libsonnet @@ -7,6 +7,8 @@ // For PromQL or LogQL labelsToPromQLSelector(labels): std.join(',', ['%s=~"$%s"' % [label, label] for label in labels]), labelsToLogQLSelector: self.labelsToPromQLSelector, + labelsToPromQLSelectorAdvanced(labels): std.join(',', ['%s=~"${%s:regex}"' % [label, label] for label in labels]), + labelsToLogQLSelectorAdvanced: self.labelsToPromQLSelectorAdvanced, labelsToPanelLegend(labels): std.join('/', ['{{%s}}' % [label] for label in labels]), diff --git a/common-lib/common/variables/variables.libsonnet b/common-lib/common/variables/variables.libsonnet new file mode 100644 index 000000000..25c2bb490 --- /dev/null +++ b/common-lib/common/variables/variables.libsonnet @@ -0,0 +1,84 @@ +local g = import '../g.libsonnet'; +local var = g.dashboard.variable; +local utils = import '../utils.libsonnet'; + +{ + new( + filteringSelector, + groupLabels, + instanceLabels, + varMetric='up', + enableLokiLogs=false, + ): { + + local root = self, + local variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=true) = + local chainVarProto(index, chainVar) = + var.query.new(chainVar.label) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + chainVar.label, + '%s{%s}' % [varMetric, chainVar.chainSelector], + ) + + var.query.generalOptions.withLabel(utils.toSentenceCase(chainVar.label)) + + var.query.selectionOptions.withIncludeAll( + value=if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + customAllValue='.+' + ) + + var.query.selectionOptions.withMulti( + if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false + ); + std.mapWithIndex(chainVarProto, utils.chainLabels(groupLabels + instanceLabels, [filteringSelector])), + datasources: { + prometheus: + var.datasource.new('datasource', 'prometheus') + + var.datasource.generalOptions.withLabel('Data source') + + var.datasource.withRegex(''), + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('') + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + // Use on dashboards where multiple entities can be selected, like fleet dashboards + multiInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector), + // Use on dashboards where only single entity can be selected + singleInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=false), + queriesSelectorAdvancedSyntax: + '%s' % [ + utils.labelsToPromQLSelectorAdvanced(groupLabels + instanceLabels), + ], + queriesSelector: + '%s,%s' % [ + filteringSelector, + utils.labelsToPromQLSelector(groupLabels + instanceLabels), + ], + + } + + if enableLokiLogs then self.withLokiLogs() else {}, + + withLokiLogs(): { + datasources+: { + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('') + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + + multiInstance+: [self.datasources.loki], + singleInstance+: [self.datasources.loki], + }, + +} diff --git a/common-lib/jsonnetfile.json b/common-lib/jsonnetfile.json index 115d14345..f2ba079f8 100644 --- a/common-lib/jsonnetfile.json +++ b/common-lib/jsonnetfile.json @@ -9,6 +9,15 @@ } }, "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/yugui/jsonnetunit.git", + "subdir": "jsonnetunit" + } + }, + "version": "master" } ], "legacyImports": true diff --git a/couchbase-mixin/config.libsonnet b/couchbase-mixin/config.libsonnet index e8668e0d2..697857b35 100644 --- a/couchbase-mixin/config.libsonnet +++ b/couchbase-mixin/config.libsonnet @@ -1,5 +1,8 @@ { _config+:: { + enableMultiCluster: false, + couchbaseSelector: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster"' else 'job=~"$job"', + multiclusterSelector: 'job=~"$job"', dashboardTags: ['couchbase-mixin'], dashboardPeriod: 'now-1h', dashboardTimezone: 'default', diff --git a/couchbase-mixin/dashboards/couchbase-bucket-overview.libsonnet b/couchbase-mixin/dashboards/couchbase-bucket-overview.libsonnet index 716f2b39a..d83ce880e 100644 --- a/couchbase-mixin/dashboards/couchbase-bucket-overview.libsonnet +++ b/couchbase-mixin/dashboards/couchbase-bucket-overview.libsonnet @@ -12,11 +12,11 @@ local promDatasource = { uid: '${%s}' % promDatasourceName, }; -local topBucketsByMemoryUsedPanel = { +local topBucketsByMemoryUsedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, kv_mem_used_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"})', + 'topk(5, kv_mem_used_bytes{' + matcher + ' })', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', format='time_series', @@ -92,11 +92,11 @@ local topBucketsByMemoryUsedPanel = { }, }; -local topBucketsByDiskUsedPanel = { +local topBucketsByDiskUsedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, couch_docs_actual_disk_size{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"})', + 'topk(5, couch_docs_actual_disk_size{' + matcher + ' })', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -147,11 +147,11 @@ local topBucketsByDiskUsedPanel = { pluginVersion: '10.0.2-cloud.1.94a6f396', }; -local topBucketsByCurrentItemsPanel = { +local topBucketsByCurrentItemsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, kv_curr_items{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"})', + 'topk(5, kv_curr_items{' + matcher + ' })', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -226,11 +226,11 @@ local topBucketsByCurrentItemsPanel = { }, }; -local topBucketsByOperationsPanel = { +local topBucketsByOperationsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, instance, job, op) (rate(kv_ops{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}[$__rate_interval])))', + 'topk(5, sum by(bucket, couchbase_cluster, instance, job, op) (rate(kv_ops{' + matcher + ' }[$__rate_interval])))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}} - {{op}}', ), @@ -305,11 +305,11 @@ local topBucketsByOperationsPanel = { }, }; -local topBucketsByOperationsFailedPanel = { +local topBucketsByOperationsFailedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (rate(kv_ops_failed{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}[$__rate_interval])))', + 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (rate(kv_ops_failed{' + matcher + ' }[$__rate_interval])))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -384,11 +384,11 @@ local topBucketsByOperationsFailedPanel = { }, }; -local topBucketsByHighPriorityRequestsPanel = { +local topBucketsByHighPriorityRequestsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_num_high_pri_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}))', + 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_num_high_pri_requests{' + matcher + ' }))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -463,11 +463,11 @@ local topBucketsByHighPriorityRequestsPanel = { }, }; -local bottomBucketsByCacheHitRatioPanel = { +local bottomBucketsByCacheHitRatioPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'bottomk(5, sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_hits{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}[$__rate_interval]))) / (clamp_min(sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_hits{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}[$__rate_interval])), 1) + sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_misses{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}[$__rate_interval])))', + 'bottomk(5, sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_hits{' + matcher + ' }[$__rate_interval]))) / (clamp_min(sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_hits{' + matcher + ' }[$__rate_interval])), 1) + sum by(couchbase_cluster, job, instance, bucket) (increase(index_cache_misses{' + matcher + ' }[$__rate_interval])))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -543,11 +543,11 @@ local bottomBucketsByCacheHitRatioPanel = { }, }; -local topBucketsByVBucketsCountPanel = { +local topBucketsByVBucketsCountPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_num_vbuckets{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}))', + 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_num_vbuckets{' + matcher + ' }))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -597,11 +597,11 @@ local topBucketsByVBucketsCountPanel = { pluginVersion: '10.0.2-cloud.1.94a6f396', }; -local topBucketsByVBucketQueueMemoryPanel = { +local topBucketsByVBucketQueueMemoryPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_vb_queue_memory_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"}))', + 'topk(5, sum by(bucket, couchbase_cluster, instance, job) (kv_vb_queue_memory_bytes{' + matcher + ' }))', datasource=promDatasource, legendFormat='{{instance}} - {{bucket}}', ), @@ -675,6 +675,8 @@ local topBucketsByVBucketQueueMemoryPanel = { }, }; +local getMatcher(cfg) = '%(couchbaseSelector)s, couchbase_cluster=~"$couchbase_cluster", instance=~"$instance", bucket=~"$bucket"' % cfg; + { grafanaDashboards+:: { 'couchbase-bucket-overview.json': @@ -714,10 +716,22 @@ local topBucketsByVBucketQueueMemoryPanel = { allValues='', sort=0 ), + template.new( + 'cluster', + promDatasource, + 'label_values(kv_mem_used_bytes{%(multiclusterSelector)s}, cluster)' % $._config, + label='Cluster', + refresh=2, + includeAll=true, + multi=true, + allValues='.*', + hide=if $._config.enableMultiCluster then '' else 'variable', + sort=0 + ), template.new( 'couchbase_cluster', promDatasource, - 'label_values(kv_mem_used_bytes,couchbase_cluster)', + 'label_values(kv_mem_used_bytes{%(couchbaseSelector)s},couchbase_cluster)' % $._config, label='Couchbase cluster', refresh=2, includeAll=true, @@ -728,7 +742,7 @@ local topBucketsByVBucketQueueMemoryPanel = { template.new( 'instance', promDatasource, - 'label_values(kv_mem_used_bytes,instance)', + 'label_values(kv_mem_used_bytes{%(couchbaseSelector)s},instance)' % $._config, label='Instance', refresh=2, includeAll=true, @@ -739,7 +753,7 @@ local topBucketsByVBucketQueueMemoryPanel = { template.new( 'bucket', promDatasource, - 'label_values(kv_mem_used_bytes,bucket)', + 'label_values(kv_mem_used_bytes{%(couchbaseSelector)s},bucket)' % $._config, label='Bucket', refresh=2, includeAll=true, @@ -751,15 +765,15 @@ local topBucketsByVBucketQueueMemoryPanel = { ) .addPanels( [ - topBucketsByMemoryUsedPanel { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, - topBucketsByDiskUsedPanel { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, - topBucketsByCurrentItemsPanel { gridPos: { h: 8, w: 8, x: 0, y: 8 } }, - topBucketsByOperationsPanel { gridPos: { h: 8, w: 8, x: 8, y: 8 } }, - topBucketsByOperationsFailedPanel { gridPos: { h: 8, w: 8, x: 16, y: 8 } }, - topBucketsByHighPriorityRequestsPanel { gridPos: { h: 8, w: 12, x: 0, y: 16 } }, - bottomBucketsByCacheHitRatioPanel { gridPos: { h: 8, w: 12, x: 12, y: 16 } }, - topBucketsByVBucketsCountPanel { gridPos: { h: 8, w: 12, x: 0, y: 24 } }, - topBucketsByVBucketQueueMemoryPanel { gridPos: { h: 8, w: 12, x: 12, y: 24 } }, + topBucketsByMemoryUsedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, + topBucketsByDiskUsedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, + topBucketsByCurrentItemsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 0, y: 8 } }, + topBucketsByOperationsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 8, y: 8 } }, + topBucketsByOperationsFailedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 16, y: 8 } }, + topBucketsByHighPriorityRequestsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 16 } }, + bottomBucketsByCacheHitRatioPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 16 } }, + topBucketsByVBucketsCountPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 24 } }, + topBucketsByVBucketQueueMemoryPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 24 } }, ] ), }, diff --git a/couchbase-mixin/dashboards/couchbase-cluster-overview.libsonnet b/couchbase-mixin/dashboards/couchbase-cluster-overview.libsonnet index 97ca3e5ab..480ebbbca 100644 --- a/couchbase-mixin/dashboards/couchbase-cluster-overview.libsonnet +++ b/couchbase-mixin/dashboards/couchbase-cluster-overview.libsonnet @@ -12,11 +12,11 @@ local promDatasource = { uid: '${%s}' % promDatasourceName, }; -local topNodesByMemoryUsagePanel = { +local topNodesByMemoryUsagePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(job, couchbase_cluster, instance) (sys_mem_actual_used{job=~"$job", couchbase_cluster=~"$couchbase_cluster"})) / (sum by(job, couchbase_cluster, instance) (clamp_min(sys_mem_actual_free{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}, 1)) + sum by(couchbase_cluster, instance, job) (sys_mem_actual_used{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}))', + 'topk(5, sum by(job, couchbase_cluster, instance) (sys_mem_actual_used{' + matcher + '})) / (sum by(job, couchbase_cluster, instance) (clamp_min(sys_mem_actual_free{' + matcher + '}, 1)) + sum by(couchbase_cluster, instance, job) (sys_mem_actual_used{' + matcher + '}))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -91,11 +91,11 @@ local topNodesByMemoryUsagePanel = { }, }; -local topNodesByHTTPRequestsPanel = { +local topNodesByHTTPRequestsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(job, couchbase_cluster, instance) (rate(cm_http_requests_total{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval])))', + 'topk(5, sum by(job, couchbase_cluster, instance) (rate(cm_http_requests_total{' + matcher + '}[$__rate_interval])))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -170,11 +170,11 @@ local topNodesByHTTPRequestsPanel = { }, }; -local topNodesByQueryServiceRequestsPanel = { +local topNodesByQueryServiceRequestsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(job, instance, couchbase_cluster) (rate(n1ql_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval])))', + 'topk(5, sum by(job, instance, couchbase_cluster) (rate(n1ql_requests{' + matcher + '}[$__rate_interval])))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -249,11 +249,11 @@ local topNodesByQueryServiceRequestsPanel = { }, }; -local topNodesByIndexAverageScanLatencyPanel = { +local topNodesByIndexAverageScanLatencyPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, avg by(instance, couchbase_cluster, job) (index_avg_scan_latency{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}))', + 'topk(5, avg by(instance, couchbase_cluster, job) (index_avg_scan_latency{' + matcher + '}))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -328,11 +328,11 @@ local topNodesByIndexAverageScanLatencyPanel = { }, }; -local xdcrReplicationRatePanel = { +local xdcrReplicationRatePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, job) (rate(xdcr_data_replicated_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval]))', + 'sum by(couchbase_cluster, job) (rate(xdcr_data_replicated_bytes{' + matcher + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchbase_cluster}}', ), @@ -407,11 +407,11 @@ local xdcrReplicationRatePanel = { }, }; -local xdcrDocsReceivedPanel = { +local xdcrDocsReceivedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, couchbase_cluster) (rate(xdcr_docs_received_from_dcp_total{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval]))', + 'sum by(job, couchbase_cluster) (rate(xdcr_docs_received_from_dcp_total{' + matcher + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchbase_cluster}}', ), @@ -486,11 +486,11 @@ local xdcrDocsReceivedPanel = { }, }; -local localBackupSizePanel = { +local localBackupSizePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, job, instance) (backup_data_size{job=~"$job", couchbase_cluster=~"$couchbase_cluster"})', + 'sum by(couchbase_cluster, job, instance) (backup_data_size{' + matcher + '})', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -549,11 +549,11 @@ local bucketsRow = { collapsed: false, }; -local topBucketsByMemoryUsedPanel = { +local topBucketsByMemoryUsedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(bucket, couchbase_cluster, job) (kv_mem_used_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}))', + 'topk(5, sum by(bucket, couchbase_cluster, job) (kv_mem_used_bytes{' + matcher + '}))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{bucket}}', ), @@ -628,11 +628,11 @@ local topBucketsByMemoryUsedPanel = { }, }; -local topBucketsByDiskUsedPanel = { +local topBucketsByDiskUsedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(job, couchbase_cluster, bucket) (couch_docs_actual_disk_size{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}))', + 'topk(5, sum by(job, couchbase_cluster, bucket) (couch_docs_actual_disk_size{' + matcher + '}))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{bucket}}', ), @@ -683,11 +683,11 @@ local topBucketsByDiskUsedPanel = { pluginVersion: '10.0.2-cloud.1.94a6f396', }; -local topBucketsByOperationsPanel = { +local topBucketsByOperationsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(couchbase_cluster, job, bucket) (rate(kv_ops{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval])))', + 'topk(5, sum by(couchbase_cluster, job, bucket) (rate(kv_ops{' + matcher + '}[$__rate_interval])))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{bucket}}', ), @@ -761,11 +761,11 @@ local topBucketsByOperationsPanel = { }, }; -local topBucketsByOperationsFailedPanel = { +local topBucketsByOperationsFailedPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(couchbase_cluster, job, bucket) (rate(kv_ops_failed{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}[$__rate_interval])))', + 'topk(5, sum by(couchbase_cluster, job, bucket) (rate(kv_ops_failed{' + matcher + '}[$__rate_interval])))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{bucket}}', ), @@ -839,11 +839,11 @@ local topBucketsByOperationsFailedPanel = { }, }; -local topBucketsByVBucketsCountPanel = { +local topBucketsByVBucketsCountPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'topk(5, sum by(couchbase_cluster, job, bucket) (kv_num_vbuckets{job=~"$job", couchbase_cluster=~"$couchbase_cluster"}))', + 'topk(5, sum by(couchbase_cluster, job, bucket) (kv_num_vbuckets{' + matcher + '}))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{bucket}}', ), @@ -893,6 +893,8 @@ local topBucketsByVBucketsCountPanel = { pluginVersion: '10.0.2-cloud.1.94a6f396', }; +local getMatcher(cfg) = '%(couchbaseSelector)s, couchbase_cluster=~"$couchbase_cluster"' % cfg; + { grafanaDashboards+:: { 'couchbase-cluster-overview.json': @@ -932,10 +934,22 @@ local topBucketsByVBucketsCountPanel = { allValues='', sort=0 ), + template.new( + 'cluster', + promDatasource, + 'label_values(kv_num_vbuckets{%(multiclusterSelector)s}, cluster)' % $._config, + label='Cluster', + refresh=2, + includeAll=true, + multi=true, + allValues='.*', + hide=if $._config.enableMultiCluster then '' else 'variable', + sort=0 + ), template.new( 'couchbase_cluster', promDatasource, - 'label_values(kv_num_vbuckets,couchbase_cluster)', + 'label_values(kv_num_vbuckets{%(couchbaseSelector)s},couchbase_cluster)' % $._config, label='Couchbase cluster', refresh=2, includeAll=true, @@ -947,19 +961,19 @@ local topBucketsByVBucketsCountPanel = { ) .addPanels( [ - topNodesByMemoryUsagePanel { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, - topNodesByHTTPRequestsPanel { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, - topNodesByQueryServiceRequestsPanel { gridPos: { h: 8, w: 12, x: 0, y: 8 } }, - topNodesByIndexAverageScanLatencyPanel { gridPos: { h: 8, w: 12, x: 12, y: 8 } }, - xdcrReplicationRatePanel { gridPos: { h: 8, w: 8, x: 0, y: 16 } }, - xdcrDocsReceivedPanel { gridPos: { h: 8, w: 8, x: 8, y: 16 } }, - localBackupSizePanel { gridPos: { h: 8, w: 8, x: 16, y: 16 } }, + topNodesByMemoryUsagePanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, + topNodesByHTTPRequestsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, + topNodesByQueryServiceRequestsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 8 } }, + topNodesByIndexAverageScanLatencyPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 8 } }, + xdcrReplicationRatePanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 0, y: 16 } }, + xdcrDocsReceivedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 8, y: 16 } }, + localBackupSizePanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 16, y: 16 } }, bucketsRow { gridPos: { h: 1, w: 24, x: 0, y: 24 } }, - topBucketsByMemoryUsedPanel { gridPos: { h: 8, w: 12, x: 0, y: 25 } }, - topBucketsByDiskUsedPanel { gridPos: { h: 8, w: 12, x: 12, y: 25 } }, - topBucketsByOperationsPanel { gridPos: { h: 8, w: 8, x: 0, y: 33 } }, - topBucketsByOperationsFailedPanel { gridPos: { h: 8, w: 8, x: 8, y: 33 } }, - topBucketsByVBucketsCountPanel { gridPos: { h: 8, w: 8, x: 16, y: 33 } }, + topBucketsByMemoryUsedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 25 } }, + topBucketsByDiskUsedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 25 } }, + topBucketsByOperationsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 0, y: 33 } }, + topBucketsByOperationsFailedPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 8, y: 33 } }, + topBucketsByVBucketsCountPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 16, y: 33 } }, ] ), }, diff --git a/couchbase-mixin/dashboards/couchbase-node-overview.libsonnet b/couchbase-mixin/dashboards/couchbase-node-overview.libsonnet index 08fe6dc03..dc227b7dc 100644 --- a/couchbase-mixin/dashboards/couchbase-node-overview.libsonnet +++ b/couchbase-mixin/dashboards/couchbase-node-overview.libsonnet @@ -17,11 +17,11 @@ local lokiDatasource = { uid: '${%s}' % lokiDatasourceName, }; -local memoryUtilizationPanel = { +local memoryUtilizationPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sys_mem_actual_used{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"} / (clamp_min(sys_mem_actual_free{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"} + sys_mem_actual_used{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}, 1))', + 'sys_mem_actual_used{' + matcher + '} / (clamp_min(sys_mem_actual_free{' + matcher + '} + sys_mem_actual_used{' + matcher + '}, 1))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -96,11 +96,11 @@ local memoryUtilizationPanel = { }, }; -local cpuUtilizationPanel = { +local cpuUtilizationPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, job, instance) (sys_cpu_utilization_rate{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"})', + 'sum by(couchbase_cluster, job, instance) (sys_cpu_utilization_rate{' + matcher + '})', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -175,21 +175,21 @@ local cpuUtilizationPanel = { }, }; -local totalMemoryUsedByServicePanel = { +local totalMemoryUsedByServicePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'index_memory_used_total{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}', + 'index_memory_used_total{' + matcher + '}', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - index', ), prometheus.target( - 'cbas_direct_memory_used_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}', + 'cbas_direct_memory_used_bytes{' + matcher + '}', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - analytics', ), prometheus.target( - 'sum by(couchbase_cluster, instance, job) (kv_mem_used_bytes{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"})', + 'sum by(couchbase_cluster, instance, job) (kv_mem_used_bytes{' + matcher + '})', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - data', ), @@ -264,11 +264,11 @@ local totalMemoryUsedByServicePanel = { }, }; -local backupSizePanel = { +local backupSizePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, instance, job) (backup_data_size{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"})', + 'sum by(couchbase_cluster, instance, job) (backup_data_size{' + matcher + '})', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -319,11 +319,11 @@ local backupSizePanel = { pluginVersion: '10.0.2-cloud.1.94a6f396', }; -local currentConnectionsPanel = { +local currentConnectionsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'kv_curr_connections{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}', + 'kv_curr_connections{' + matcher + '}', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -399,11 +399,11 @@ local currentConnectionsPanel = { }, }; -local httpResponseCodesPanel = { +local httpResponseCodesPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, instance, couchbase_cluster, code) (rate(cm_http_requests_total{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval]))', + 'sum by(job, instance, couchbase_cluster, code) (rate(cm_http_requests_total{' + matcher + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - {{code}}', ), @@ -479,11 +479,11 @@ local httpResponseCodesPanel = { }, }; -local httpRequestMethodsPanel = { +local httpRequestMethodsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(job, instance, couchbase_cluster, method) (rate(cm_http_requests_total{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval]))', + 'sum by(job, instance, couchbase_cluster, method) (rate(cm_http_requests_total{' + matcher + '}[$__rate_interval]))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - {{method}}', ), @@ -558,21 +558,21 @@ local httpRequestMethodsPanel = { }, }; -local queryServiceRequestsPanel = { +local queryServiceRequestsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(n1ql_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval]) + rate(n1ql_invalid_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests{' + matcher + '}[$__rate_interval]) + rate(n1ql_invalid_requests{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - total', ), prometheus.target( - 'rate(n1ql_errors{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_errors{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - error', ), prometheus.target( - 'rate(n1ql_invalid_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_invalid_requests{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - invalid', ), @@ -647,31 +647,31 @@ local queryServiceRequestsPanel = { }, }; -local queryServiceRequestProcessingTimePanel = { +local queryServiceRequestProcessingTimePanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'rate(n1ql_requests{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - >0ms', ), prometheus.target( - 'rate(n1ql_requests_250ms{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests_250ms{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - >250ms', ), prometheus.target( - 'rate(n1ql_requests_500ms{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests_500ms{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - >500ms', ), prometheus.target( - 'rate(n1ql_requests_1000ms{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests_1000ms{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - >1000ms', ), prometheus.target( - 'rate(n1ql_requests_5000ms{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])', + 'rate(n1ql_requests_5000ms{' + matcher + '}[$__rate_interval])', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - >5000ms', ), @@ -746,7 +746,7 @@ local queryServiceRequestProcessingTimePanel = { }, }; -local indexServiceRequestsPanel = { +local indexServiceRequestsPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( @@ -825,11 +825,11 @@ local indexServiceRequestsPanel = { }, }; -local indexCacheHitRatioPanel = { +local indexCacheHitRatioPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, job, instance) (increase(index_cache_hits{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])) / (clamp_min(sum by(couchbase_cluster, job, instance) (increase(index_cache_hits{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])), 1) + sum by(couchbase_cluster, job, instance) (increase(index_cache_misses{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"}[$__rate_interval])))', + 'sum by(couchbase_cluster, job, instance) (increase(index_cache_hits{' + matcher + '}[$__rate_interval])) / (clamp_min(sum by(couchbase_cluster, job, instance) (increase(index_cache_hits{' + matcher + '}[$__rate_interval])), 1) + sum by(couchbase_cluster, job, instance) (increase(index_cache_misses{' + matcher + '}[$__rate_interval])))', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}}', ), @@ -905,11 +905,11 @@ local indexCacheHitRatioPanel = { }, }; -local averageScanLatencyPanel = { +local averageScanLatencyPanel(matcher) = { datasource: promDatasource, targets: [ prometheus.target( - 'sum by(couchbase_cluster, index, instance, job) (index_avg_scan_latency{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"})', + 'sum by(couchbase_cluster, index, instance, job) (index_avg_scan_latency{' + matcher + '})', datasource=promDatasource, legendFormat='{{couchbase_cluster}} - {{instance}} - {{index}}', ), @@ -984,13 +984,13 @@ local averageScanLatencyPanel = { }, }; -local errorLogsPanel = { +local errorLogsPanel(matcher) = { datasource: lokiDatasource, targets: [ { datasource: lokiDatasource, editorMode: 'code', - expr: '{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"} |~ `(ns_server:error)`', + expr: '{' + matcher + '} |~ `ns_server:error|couchbase.log.error`', queryType: 'range', refId: 'A', }, @@ -1010,13 +1010,13 @@ local errorLogsPanel = { }, }; -local couchbaseLogsPanel = { +local couchbaseLogsPanel(matcher) = { datasource: lokiDatasource, targets: [ { datasource: lokiDatasource, editorMode: 'code', - expr: '{job=~"$job", couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"} |~ `(couchdb:(info|error))`', + expr: '{' + matcher + '} |~ `couchdb`', queryType: 'range', refId: 'A', }, @@ -1036,6 +1036,8 @@ local couchbaseLogsPanel = { }, }; +local getMatcher(cfg) = '%(couchbaseSelector)s, couchbase_cluster=~"$couchbase_cluster", instance=~"$instance"' % cfg; + { grafanaDashboards+:: { 'couchbase-node-overview.json': @@ -1087,10 +1089,22 @@ local couchbaseLogsPanel = { allValues='', sort=0 ), + template.new( + 'cluster', + promDatasource, + 'label_values(sys_mem_actual_used{%(multiclusterSelector)s}, cluster)' % $._config, + label='Cluster', + refresh=2, + includeAll=true, + multi=true, + allValues='.*', + hide=if $._config.enableMultiCluster then '' else 'variable', + sort=0 + ), template.new( 'couchbase_cluster', promDatasource, - 'label_values(sys_mem_actual_used,couchbase_cluster)', + 'label_values(sys_mem_actual_used{%(couchbaseSelector)s},couchbase_cluster)' % $._config, label='Couchbase cluster', refresh=2, includeAll=true, @@ -1101,7 +1115,7 @@ local couchbaseLogsPanel = { template.new( 'instance', promDatasource, - 'label_values(sys_mem_actual_used,instance)', + 'label_values(sys_mem_actual_used{%(couchbaseSelector)s},instance)' % $._config, label='Instance', refresh=2, includeAll=true, @@ -1115,26 +1129,26 @@ local couchbaseLogsPanel = { .addPanels( std.flattenArrays([ [ - memoryUtilizationPanel { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, - cpuUtilizationPanel { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, - totalMemoryUsedByServicePanel { gridPos: { h: 8, w: 8, x: 0, y: 8 } }, - backupSizePanel { gridPos: { h: 8, w: 8, x: 8, y: 8 } }, - currentConnectionsPanel { gridPos: { h: 8, w: 8, x: 16, y: 8 } }, - httpResponseCodesPanel { gridPos: { h: 8, w: 12, x: 0, y: 16 } }, - httpRequestMethodsPanel { gridPos: { h: 8, w: 12, x: 12, y: 16 } }, - queryServiceRequestsPanel { gridPos: { h: 8, w: 12, x: 0, y: 24 } }, - queryServiceRequestProcessingTimePanel { gridPos: { h: 8, w: 12, x: 12, y: 24 } }, - indexServiceRequestsPanel { gridPos: { h: 8, w: 8, x: 0, y: 32 } }, - indexCacheHitRatioPanel { gridPos: { h: 8, w: 8, x: 8, y: 32 } }, - averageScanLatencyPanel { gridPos: { h: 8, w: 8, x: 16, y: 32 } }, + memoryUtilizationPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 0 } }, + cpuUtilizationPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 0 } }, + totalMemoryUsedByServicePanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 0, y: 8 } }, + backupSizePanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 8, y: 8 } }, + currentConnectionsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 16, y: 8 } }, + httpResponseCodesPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 16 } }, + httpRequestMethodsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 16 } }, + queryServiceRequestsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 24 } }, + queryServiceRequestProcessingTimePanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 24 } }, + indexServiceRequestsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 0, y: 32 } }, + indexCacheHitRatioPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 8, y: 32 } }, + averageScanLatencyPanel(getMatcher($._config)) { gridPos: { h: 8, w: 8, x: 16, y: 32 } }, ], if $._config.enableLokiLogs then [ - errorLogsPanel { gridPos: { h: 7, w: 24, x: 0, y: 40 } }, + errorLogsPanel(getMatcher($._config)) { gridPos: { h: 7, w: 24, x: 0, y: 40 } }, ] else [], [ ], if $._config.enableLokiLogs then [ - couchbaseLogsPanel { gridPos: { h: 8, w: 24, x: 0, y: 47 } }, + couchbaseLogsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 24, x: 0, y: 47 } }, ] else [], [ ], diff --git a/elasticsearch-mixin/dashboards/elasticsearch-overview.json b/elasticsearch-mixin/dashboards/elasticsearch-overview.json index d2d95e28c..234054764 100644 --- a/elasticsearch-mixin/dashboards/elasticsearch-overview.json +++ b/elasticsearch-mixin/dashboards/elasticsearch-overview.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -14,10 +17,10 @@ }, "description": "ElasticSearch cluster stats", "editable": true, + "fiscalYearStartMonth": 0, "gnetId": 2322, "graphTooltip": 1, - "id": 14, - "iteration": 1611742973621, + "id": 8, "links": [ { "asDropdown": true, @@ -65,10 +68,14 @@ "type": "dashboards" } ], + "liveNow": false, "panels": [ { "collapsed": false, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -77,78 +84,105 @@ }, "id": 90, "panels": [], - "repeat": null, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "KPI", "type": "row" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "#d44a3a", - "rgba(237, 129, 40, 0.89)", - "#299c46" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "1": { + "text": "Red" + }, + "3": { + "text": "Yellow" + }, + "5": { + "text": "Green" + } + }, + "type": "value" + }, + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 2 + }, + { + "color": "#299c46", + "value": 4 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 0, "y": 1 }, - "height": "50", "id": 53, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_status{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",color=\"red\"}==1 or (elasticsearch_cluster_health_status{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",color=\"green\"}==1)+4 or (elasticsearch_cluster_health_status{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",color=\"yellow\"}==1)+22", "format": "time_series", "instant": true, @@ -158,103 +192,96 @@ "refId": "A" } ], - "thresholds": "2,4", "title": "Cluster health", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - }, - { - "op": "=", - "text": "Green", - "value": "5" - }, - { - "op": "=", - "text": "Yellow", - "value": "3" - }, - { - "op": "=", - "text": "Red", - "value": "1" - } - ], - "valueName": "avg" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "$datasource", - "decimals": null, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "N/A": { + "color": "#299c46", + "text": "0" + }, + "no value": { + "color": "#299c46", + "text": "0" + } + }, + "type": "value" + }, + { + "options": { + "match": "null", + "result": { + "color": "#299c46", + "text": "0" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#d44a3a", + "value": 2 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 2, "x": 4, "y": 1 }, - "height": "50", "id": 81, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count(elasticsearch_breakers_tripped{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}>0)", "format": "time_series", "instant": true, @@ -263,99 +290,82 @@ "refId": "A" } ], - "thresholds": "1,2", "title": "Tripped for breakers", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "0", - "value": "N/A" - }, - { - "op": "=", - "text": "0", - "value": "no value" - }, - { - "op": "=", - "text": "0", - "value": "null" - } - ], - "valueName": "avg" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "rgba(50, 172, 45, 0.97)", - "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" - ], - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 80 + } + ] + }, + "unit": "percent", + "unitScale": true }, "overrides": [] }, - "format": "percent", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 6, "y": 1 }, - "height": "50", "id": 51, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum (elasticsearch_process_cpu_percent{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"} ) / count (elasticsearch_process_cpu_percent{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"} )", "format": "time_series", "instant": true, @@ -367,89 +377,82 @@ "step": 60 } ], - "thresholds": "70,80", "title": "CPU usage Avg.", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "rgba(50, 172, 45, 0.97)", - "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" - ], - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 80 + } + ] + }, + "unit": "percent", + "unitScale": true }, "overrides": [] }, - "format": "percent", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 10, "y": 1 }, - "height": "50", "id": 50, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum (elasticsearch_jvm_memory_used_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}) / sum (elasticsearch_jvm_memory_max_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}) * 100", "format": "time_series", "instant": true, @@ -461,90 +464,79 @@ "step": 60 } ], - "thresholds": "70,80", "title": "JVM memory used Avg.", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Number of nodes in the cluster", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 2, "x": 14, "y": 1 }, - "height": "50", "id": 10, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_number_of_nodes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -556,90 +548,79 @@ "step": 60 } ], - "thresholds": "", "title": "Nodes", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Number of data nodes in the cluster", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 2, "x": 16, "y": 1 }, - "height": "50", "id": 9, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_number_of_data_nodes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -651,91 +632,84 @@ "step": 60 } ], - "thresholds": "", "title": "Data nodes", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "rgba(50, 172, 45, 0.97)", - "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Cluster level changes which have not yet been executed", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 5 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 2, "x": 18, "y": 1 }, - "height": "50", "hideTimeOverride": true, "id": 16, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_number_of_pending_tasks{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -747,89 +721,68 @@ "step": 60 } ], - "thresholds": "1,5", "title": "Pending tasks", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(50, 172, 45, 0.97)", - "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" - ], - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "format": "short", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 20, "y": 1 }, - "height": "50", "id": 89, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": false + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum (elasticsearch_process_open_files_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"})", "format": "time_series", "instant": true, @@ -841,16 +794,15 @@ "step": 60 } ], - "thresholds": "", "title": "Open file descriptors per cluster", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [], - "valueName": "current" + "type": "stat" }, { "collapsed": false, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -859,83 +811,90 @@ }, "id": 91, "panels": [], - "repeat": null, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Shards", "type": "row" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "The number of primary shards in your cluster. This is an aggregate total across all indices.", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 0, "y": 5 }, - "height": "50", "id": 11, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "repeat": "shard_type", - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", + "repeat": "shard_type", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_active_primary_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -945,91 +904,80 @@ "step": 60 } ], - "thresholds": "", "title": "Active primary shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Aggregate total of all shards across all indices, which includes replica shards", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 4, "y": 5 }, - "height": "50", "id": 39, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_active_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -1039,91 +987,80 @@ "step": 60 } ], - "thresholds": "", "title": "Active shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Count of shards that are being freshly created", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 8, "y": 5 }, - "height": "50", "id": 40, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_initializing_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -1134,91 +1071,80 @@ "step": 60 } ], - "thresholds": "", "title": "Initializing shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "The number of shards that are currently moving from one node to another node.", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 12, "y": 5 }, - "height": "50", "id": 41, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_relocating_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"}", "format": "time_series", "instant": true, @@ -1228,91 +1154,80 @@ "step": 60 } ], - "thresholds": "", "title": "Relocating shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Shards delayed to reduce reallocation overhead", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 16, "y": 5 }, - "height": "50", "id": 42, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_delayed_unassigned_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"} ", "format": "time_series", "instant": true, @@ -1322,91 +1237,80 @@ "step": 60 } ], - "thresholds": "", "title": "Delayed shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "The number of shards that exist in the cluster state, but cannot be found in the cluster itself", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none", + "unitScale": true }, "overrides": [] }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, "gridPos": { "h": 3, "w": 4, "x": 20, "y": 5 }, - "height": "50", "id": 82, - "interval": null, "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "name": "value to text", - "value": 1 - }, - { - "name": "range to text", - "value": 2 - } - ], "maxDataPoints": 100, - "maxPerRow": 6, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": true, - "lineColor": "rgb(31, 120, 193)", - "show": true + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, - "tableColumn": "", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_cluster_health_unassigned_shards{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\"} ", "format": "time_series", "instant": true, @@ -1416,22 +1320,15 @@ "step": 60 } ], - "thresholds": "", "title": "Unassigned shards", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" + "type": "stat" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1441,64 +1338,96 @@ "id": 92, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "GCs", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, "y": 9 }, - "height": "400", - "hiddenSeries": false, "id": 7, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_jvm_gc_collection_seconds_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -1509,107 +1438,100 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "GC count", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "GCs", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, "y": 9 }, - "height": "400", - "hiddenSeries": false, "id": 27, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_jvm_gc_collection_seconds_sum{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -1620,56 +1542,28 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "GC time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "JVM Garbage Collection", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1679,56 +1573,96 @@ "id": 93, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 0, "y": 10 }, - "hiddenSeries": false, "id": 77, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_translog_operations{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -1736,98 +1670,100 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Total translog operations", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 10 }, - "hiddenSeries": false, "id": 78, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_translog_size_in_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -1835,55 +1771,28 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Total translog size in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Translog", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1893,58 +1802,95 @@ "id": 94, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 11 }, - "hiddenSeries": false, "id": 79, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": null, - "sortDesc": null, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_breakers_tripped{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -1952,100 +1898,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Tripped for breakers", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 18 }, - "hiddenSeries": false, "id": 80, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": null, - "sortDesc": null, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_breakers_estimated_size_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2053,6 +1998,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_breakers_limit_size_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2060,55 +2008,28 @@ "refId": "B" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Estimated size in bytes of breaker", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Breakers", "type": "row" }, { "collapsed": false, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2117,69 +2038,111 @@ }, "id": 95, "panels": [], - "repeat": null, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "CPU and Memory", "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "CPU usage", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, "y": 12 }, - "height": "400", - "hiddenSeries": false, "id": 30, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_os_load1{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "instant": false, @@ -2191,6 +2154,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_os_load5{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "instant": false, @@ -2202,6 +2168,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_os_load15{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "instant": false, @@ -2213,219 +2182,208 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Load average", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "CPU usage", - "logBase": 1, - "max": 100, - "min": 0, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "CPU usage", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, "y": 12 }, - "height": "400", - "hiddenSeries": false, "id": 88, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_process_cpu_percent{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "instant": false, "interval": "", - "intervalFactor": 2, - "legendFormat": "{{name}}", - "metric": "", - "refId": "A", - "step": 20 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "CPU usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percent", - "label": "CPU usage", - "logBase": 1, - "max": 100, - "min": 0, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false + "intervalFactor": 2, + "legendFormat": "{{name}}", + "metric": "", + "refId": "A", + "step": 20 } ], - "yaxis": { - "align": false, - "alignLevel": null - } + "title": "CPU usage", + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Memory", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, "y": 23 }, - "height": "400", - "hiddenSeries": false, "id": 31, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_jvm_memory_used_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "interval": "", @@ -2436,6 +2394,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_jvm_memory_max_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2444,6 +2405,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_jvm_memory_pool_peak_used_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2452,107 +2416,101 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "JVM memory usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": "Memory", - "logBase": 1, - "max": null, - "min": 0, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Memory", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, "y": 23 }, - "height": "400", - "hiddenSeries": false, "id": 54, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_jvm_memory_committed_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2561,6 +2519,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_jvm_memory_max_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -2569,51 +2530,15 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "JVM memory committed", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": "Memory", - "logBase": 1, - "max": null, - "min": 0, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2623,64 +2548,102 @@ "id": 96, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Disk Usage %", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "area" + } + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "rgba(216, 200, 27, 0.27)", + "value": 0.8 + }, + { + "color": "rgba(234, 112, 112, 0.22)", + "value": 0.9 + } + ] + }, + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, - "y": 7 + "y": 35 }, - "height": "400", - "hiddenSeries": false, "id": 32, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "1-(elasticsearch_filesystem_data_available_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}/elasticsearch_filesystem_data_size_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"})", "format": "time_series", "interval": "", @@ -2691,127 +2654,113 @@ "step": 20 } ], - "thresholds": [ - { - "colorMode": "custom", - "fill": true, - "fillColor": "rgba(216, 200, 27, 0.27)", - "op": "gt", - "value": 0.8 - }, - { - "colorMode": "custom", - "fill": true, - "fillColor": "rgba(234, 112, 112, 0.22)", - "op": "gt", - "value": 0.9 - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Disk usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": "Disk Usage %", - "logBase": 1, - "max": 1, - "min": 0, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Bytes/sec", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "sent" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, - "y": 7 + "y": 35 }, - "height": "400", - "hiddenSeries": false, "id": 47, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [ - { - "alias": "sent", - "transform": "negative-Y" + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" } - ], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_transport_tx_size_bytes_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -2821,6 +2770,9 @@ "step": 20 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "-irate(elasticsearch_transport_rx_size_bytes_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -2829,56 +2781,28 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Network usage", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "label": "Bytes/sec", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "pps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Disk and Network", "type": "row" }, { "collapsed": false, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2887,70 +2811,110 @@ }, "id": 97, "panels": [], - "repeat": null, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Documents", "type": "row" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "decimals": 2, - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, "y": 36 }, - "height": "400", - "hiddenSeries": false, "id": 1, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_docs{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "interval": "", @@ -2961,106 +2925,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Documents count on node", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 2, - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "index calls/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, "y": 36 }, - "height": "400", - "hiddenSeries": false, "id": 24, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_indexing_index_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3071,108 +3029,101 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Documents indexed rate", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "index calls/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Count of deleted documents on this node", - "editable": true, - "error": false, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Documents/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 0, "y": 47 }, - "height": "400", - "hiddenSeries": false, "id": 25, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_docs_deleted{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3183,106 +3134,101 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Documents deleted rate", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "Documents/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "decimals": 2, - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Documents/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 8, "y": 47 }, - "height": "400", - "hiddenSeries": false, "id": 26, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_merges_docs_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3293,106 +3239,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Documents merged rate", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 2, - "format": "short", - "label": "Documents/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Bytes/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 16, "y": 47 }, - "height": "400", - "hiddenSeries": false, "id": 52, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.7", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_merges_total_size_bytes_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3403,52 +3343,15 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Documents merged bytes", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "decbytes", - "label": "Bytes/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -3458,62 +3361,96 @@ "id": 98, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, - "y": 9 + "y": 59 }, - "height": "400", - "hiddenSeries": false, "id": 33, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_search_query_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval]) ", "format": "time_series", "interval": "", @@ -3524,105 +3461,100 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Query time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, - "y": 9 + "y": 59 }, - "height": "400", - "hiddenSeries": false, "id": 5, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_indexing_index_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3633,107 +3565,100 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Indexing time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, - "y": 20 + "y": 70 }, - "height": "400", - "hiddenSeries": false, "id": 3, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_merges_total_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3744,107 +3669,100 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Merging time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, - "y": 20 + "y": 70 }, - "height": "400", - "hiddenSeries": false, "id": 87, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_store_throttle_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3855,56 +3773,28 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Throttle time for index store", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Times", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -3914,64 +3804,117 @@ "id": 99, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Operations/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 24, "x": 0, - "y": 10 + "y": 60 }, - "height": "400", - "hiddenSeries": false, "id": 48, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_indexing_index_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -3982,6 +3925,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_search_query_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -3990,6 +3936,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_search_fetch_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -3998,6 +3947,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_merges_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4006,6 +3958,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_refresh_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4014,6 +3969,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_flush_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4022,6 +3980,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_get_exists_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4030,6 +3991,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_get_missing_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4038,6 +4002,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_get_tota{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4046,115 +4013,132 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_indexing_delete_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, - "legendFormat": "{{name}}: indexing_delete", - "refId": "J", - "step": 10 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Operations rate", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "Operations/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false + "legendFormat": "{{name}}: indexing_delete", + "refId": "J", + "step": 10 } ], - "yaxis": { - "align": false, - "alignLevel": null - } + "title": "Total Operations rate", + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Time", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 24, "x": 0, - "y": 21 + "y": 71 }, - "height": "400", - "hiddenSeries": false, "id": 49, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_indexing_index_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -4165,6 +4149,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_search_query_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4173,6 +4160,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_search_fetch_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4181,6 +4171,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_merges_total_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4189,6 +4182,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_refresh_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4197,6 +4193,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_flush_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4205,6 +4204,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_get_exists_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4213,6 +4215,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_get_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4221,6 +4226,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_get_missing_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4229,6 +4237,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_indexing_delete_time_seconds_total{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4237,6 +4248,9 @@ "step": 10 }, { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_indices_get_time_seconds{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4245,56 +4259,28 @@ "step": 10 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Total Operations time", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": "Time", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Total Operations stats", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -4304,60 +4290,116 @@ "id": 100, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 20, "w": 6, "x": 0, - "y": 11 + "y": 61 }, - "hiddenSeries": false, "id": 45, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideZero": true, - "max": true, - "min": true, - "show": true, - "sort": null, - "sortDesc": null, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_thread_pool_rejected_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4366,103 +4408,120 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Thread Pool operations rejected", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 20, "w": 6, "x": 6, - "y": 11 + "y": 61 }, - "hiddenSeries": false, "id": 46, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideZero": true, - "max": true, - "min": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_thread_pool_active_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -4471,104 +4530,120 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Thread Pool operations queued", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 20, "w": 6, "x": 12, - "y": 11 + "y": 61 }, - "height": "", - "hiddenSeries": false, "id": 43, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideZero": true, - "max": true, - "min": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_thread_pool_active_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -4577,103 +4652,120 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Thread Pool threads active", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 20, "w": 6, "x": 18, - "y": 11 + "y": 61 }, - "hiddenSeries": false, "id": 44, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideZero": true, - "max": true, - "min": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "irate(elasticsearch_thread_pool_completed_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "intervalFactor": 2, @@ -4682,56 +4774,28 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Thread Pool operations completed", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Thread Pool", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -4741,64 +4805,96 @@ "id": 101, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Memory", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 0, - "y": 12 + "y": 62 }, - "height": "400", - "hiddenSeries": false, "id": 4, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_fielddata_memory_size_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "interval": "", @@ -4809,107 +4905,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Field data memory size", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": "Memory", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Evictions/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 12, "x": 12, - "y": 12 + "y": 62 }, - "height": "400", - "hiddenSeries": false, "id": 34, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_fielddata_evictions{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -4920,107 +5009,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Field data evictions", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "Evictions/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Size", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 0, - "y": 23 + "y": 73 }, - "height": "400", - "hiddenSeries": false, "id": 35, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_query_cache_memory_size_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "interval": "", @@ -5031,107 +5113,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Query cache size", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": "Size", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Evictions/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 8, - "y": 23 + "y": 73 }, - "height": "400", - "hiddenSeries": false, "id": 36, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_query_cache_evictions{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -5142,107 +5217,100 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Query cache evictions", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "Evictions/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "editable": true, - "error": false, + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Evictions/s", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, - "grid": {}, "gridPos": { "h": 11, "w": 8, "x": 16, - "y": 23 + "y": 73 }, - "height": "400", - "hiddenSeries": false, "id": 84, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "connected", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(elasticsearch_indices_filter_cache_evictions{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}[$__rate_interval])", "format": "time_series", "interval": "", @@ -5253,56 +5321,28 @@ "step": 20 } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Evictions from filter cache", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "Evictions/s", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Caches", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -5312,58 +5352,95 @@ "id": 102, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 13 + "y": 63 }, - "hiddenSeries": false, "id": 85, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segments_count{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -5371,100 +5448,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Count of index segments", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 20 + "y": 70 }, - "hiddenSeries": false, "id": 86, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segments_memory_bytes{job=~\"$job\",instance=~\"$instance\",cluster=~\"$cluster\",name=~\"$name\"}", "format": "time_series", "intervalFactor": 2, @@ -5472,55 +5548,28 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Current memory size of segments in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Segments", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -5530,58 +5579,95 @@ "id": 103, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 14 + "y": 64 }, - "hiddenSeries": false, "id": 75, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_docs_primary{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "interval": "", @@ -5590,100 +5676,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Count of documents with only primary shards", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 21 + "y": 71 }, - "hiddenSeries": false, "id": 83, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_store_size_bytes_primary{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "interval": "", @@ -5692,100 +5777,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Total size of stored index data in bytes with only primary shards on all nodes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 28 + "y": 78 }, - "hiddenSeries": false, "id": 76, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_store_size_bytes_total{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "interval": "", @@ -5794,55 +5878,28 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Total size of stored index data in bytes with all shards on all nodes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Indices: Count of documents and Total size", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -5852,46 +5909,95 @@ "id": 106, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "fill": 1, + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 129 + "y": 65 }, "id": 57, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "options": { + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segment_doc_values_memory_bytes_primary{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 2, @@ -5899,83 +6005,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, "title": "Doc values with only primary shards on all nodes in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ] + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "fill": 1, + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 136 + "y": 72 }, "id": 58, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "options": { + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segment_doc_values_memory_bytes_total{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 2, @@ -5983,50 +6105,28 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, "title": "Doc values with all shards on all nodes in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ] + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Indices: Doc values", "type": "row" }, { "collapsed": true, - "datasource": null, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -6036,58 +6136,95 @@ "id": 107, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 16 + "y": 66 }, - "hiddenSeries": false, "id": 59, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segment_fields_memory_bytes_primary{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 2, @@ -6095,100 +6232,99 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Size of fields with only primary shards on all nodes in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "custom": {} + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, - "y": 23 + "y": 73 }, - "hiddenSeries": false, "id": 60, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "sort": "avg", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [], - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.3.6", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [ + "mean", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "elasticsearch_indices_segment_fields_memory_bytes_total{job=~\"$job\",instance=~\"$instance\"}", "format": "time_series", "intervalFactor": 2, @@ -6196,169 +6332,158 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Size of fields with all shards on all nodes in bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "refId": "A" } ], - "repeat": null, "title": "Indices: Fields", "type": "row" } ], - "refresh": false, - "schemaVersion": 26, - "style": "dark", + "refresh": "30s", + "schemaVersion": 39, "tags": [ - "elasticsearch", - "App" + "elasticsearch-integration" ], "templating": { "list": [ { - "error": null, + "current": { + "selected": false, + "text": "default", + "value": "default" + }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "datasource": "$datasource", + "current": { + "isNone": true, + "selected": false, + "text": "None", + "value": "" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(elasticsearch_cluster_health_status, job)", - "error": null, "hide": 0, "includeAll": false, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], "query": "label_values(elasticsearch_cluster_health_status, job)", - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, "tagValuesQuery": "", - "tags": [], "tagsQuery": "", "type": "query", "useTags": false }, { "allValue": ".+", - "datasource": "$datasource", + "current": { + "isNone": true, + "selected": false, + "text": "None", + "value": "" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(elasticsearch_indices_docs{job=~\"$job\"},cluster)", - "error": null, "hide": 0, "includeAll": false, - "label": "cluster", + "label": "Cluster", "multi": true, "name": "cluster", "options": [], "query": "label_values(elasticsearch_indices_docs{job=~\"$job\"},cluster)", - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 1, - "tagValuesQuery": null, - "tags": [], - "tagsQuery": null, "type": "query", "useTags": false }, { "allValue": ".+", - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(elasticsearch_indices_docs{job=~\"$job\", cluster=~\"$cluster\", name!=\"\"},name)", - "error": null, "hide": 0, "includeAll": true, - "label": "name", + "label": "Name", "multi": true, "name": "name", "options": [], "query": "label_values(elasticsearch_indices_docs{job=~\"$job\", cluster=~\"$cluster\", name!=\"\"},name)", - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 1, - "tagValuesQuery": null, - "tags": [], - "tagsQuery": null, "type": "query", "useTags": false }, { "allValue": ".+", - "datasource": "$datasource", + "current": { + "isNone": true, + "selected": false, + "text": "None", + "value": "" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(elasticsearch_indices_docs{job=~\"$job\",job=~\"$job\", cluster=~\"$cluster\", name!=\"\"},instance)", - "error": null, "hide": 0, "includeAll": false, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], "query": "label_values(elasticsearch_indices_docs{job=~\"$job\", cluster=~\"$cluster\", name!=\"\"},instance)", - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 1, - "tagValuesQuery": null, - "tags": [], - "tagsQuery": null, "type": "query", "useTags": false } ] }, "time": { - "from": "now-1h", + "from": "now-30m", "to": "now" }, "timepicker": { @@ -6389,5 +6514,6 @@ "timezone": "browser", "title": "ElasticSearch Overview", "uid": "4yyL6dBMk", - "version": 14 -} + "version": 3, + "weekStart": "" +} \ No newline at end of file diff --git a/grafana-agent-mixin/dashboards/grafana-agent-overview.json b/grafana-agent-mixin/dashboards/grafana-agent-overview.json new file mode 100644 index 000000000..26cd8afa5 --- /dev/null +++ b/grafana-agent-mixin/dashboards/grafana-agent-overview.json @@ -0,0 +1,1156 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 4, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [ + "grafana-agent-integration" + ], + "targetBlank": false, + "title": "Grafana Agent Dashboards", + "type": "dashboards", + "url": "" + } + ], + "panels": [ + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Overview", + "type": "row" + }, + { + "columns": [], + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "General statistics of running grafana agent instances.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value #B" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "fontSize": "100%", + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "showHeader": true, + "sort": { + "col": 0, + "desc": true + }, + "styles": [ + { + "alias": "Container", + "align": "auto", + "pattern": "container" + }, + { + "alias": "Instance", + "align": "auto", + "pattern": "instance" + }, + { + "alias": "Pod", + "align": "auto", + "pattern": "pod" + }, + { + "alias": "Version", + "align": "auto", + "pattern": "version" + }, + { + "alias": "Uptime", + "align": "auto", + "pattern": "Value #B", + "type": "number", + "unit": "s" + }, + { + "alias": "Time", + "align": "auto", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Value #A", + "align": "auto", + "pattern": "Value #A", + "type": "hidden" + } + ], + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "count by (instance, version) (agent_build_info{job=~\"$job\", instance=~\"$instance\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "max by (instance) (time() - process_start_time_seconds{job=~\"$job\", instance=~\"$instance\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B" + } + ], + "title": "Running Instances", + "transform": "table", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value #A": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Value #B": "Uptime" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 9, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Prometheus Discovery", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Actual interval to sync the scrape pool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 3, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(rate(prometheus_target_sync_length_seconds_sum{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, scrape_job)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}/{{scrape_job}}", + "refId": "A" + } + ], + "thresholds": [], + "title": "Target Sync", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "timeseries", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Discovered targets by prometheus service discovery.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 4, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (instance) (prometheus_sd_discovered_targets{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "title": "Targets", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "timeseries", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ] + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 10, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Prometheus Retrieval", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Actual intervals between scrapes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 5, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "rate(prometheus_target_interval_length_seconds_sum{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]) / rate(prometheus_target_interval_length_seconds_count{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{interval}} configured", + "refId": "A" + } + ], + "thresholds": [], + "title": "Average Scrape Interval Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "timeseries", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Shows all scrape failures (sample limit exceeded, duplicate, out of bounds, out of order).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (job) (rate(prometheus_target_scrapes_exceeded_sample_limit_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "exceeded sample limit: {{job}}", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (job) (rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "duplicate timestamp: {{job}}", + "refId": "B" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (job) (rate(prometheus_target_scrapes_sample_out_of_bounds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "out of bounds: {{job}}", + "refId": "C" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (job) (rate(prometheus_target_scrapes_sample_out_of_order_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "out of order: {{job}}", + "refId": "D" + } + ], + "thresholds": [], + "title": "Scrape failures", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "timeseries", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Total number of samples appended to the WAL.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 24 + }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (job, instance_group_name) (rate(agent_wal_samples_appended_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{job}} {{instance_group_name}}", + "refId": "A" + } + ], + "thresholds": [], + "title": "Appended Samples", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "timeseries", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ] + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [ + "grafana-agent-integration" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "hide": 0, + "includeAll": false, + "label": "Data source", + "multi": false, + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": { + "selected": false, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "options": [], + "query": "label_values(agent_build_info, job)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(agent_build_info{job=~\"$job\"}, instance)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "Grafana Agent Overview", + "uid": "integration-agent", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/grafana-agent-mixin/dashboards/grafana-agent.libsonnet b/grafana-agent-mixin/dashboards/grafana-agent.libsonnet index 1a51dfad3..c6bdcdd2f 100644 --- a/grafana-agent-mixin/dashboards/grafana-agent.libsonnet +++ b/grafana-agent-mixin/dashboards/grafana-agent.libsonnet @@ -53,139 +53,142 @@ local instance_template = grafana.template.new( { grafanaDashboards+:: { - 'grafana-agent-overview.json': - local agentStats = - tablePanel.new( - 'Running Instances', - description='General statistics of running grafana agent instances.', - datasource='$prometheus_datasource', - span=12, - styles=[ - { alias: 'Container', pattern: 'container' }, - { alias: 'Instance', pattern: 'instance' }, - { alias: 'Pod', pattern: 'pod' }, - { alias: 'Version', pattern: 'version' }, - { alias: 'Uptime', pattern: 'Value #B', type: 'number', unit: 's' }, - ], - ) - .addTarget(prometheus.target( - 'count by (instance, version) (agent_build_info{' + host_matcher + '})', - format='table', - instant=true, - )) - .addTarget(prometheus.target( - 'max by (instance) (time() - process_start_time_seconds{' + host_matcher + '})', - format='table', - instant=true, - )) - .hideColumn('Time') - .hideColumn('Value #A'); - - local prometheusTargetSync = - graphPanel.new( - 'Target Sync', - description='Actual interval to sync the scrape pool.', - datasource='$prometheus_datasource', - span=6, - ) - .addTarget(prometheus.target( - 'sum(rate(prometheus_target_sync_length_seconds_sum{' + host_matcher + '}[$__rate_interval])) by (instance, scrape_job)', - legendFormat='{{instance}}/{{scrape_job}}', - )) + - utils.timeSeriesOverride(unit='s'); - - local prometheusTargets = - graphPanel.new( - 'Targets', - description='Discovered targets by prometheus service discovery.', - datasource='$prometheus_datasource', - span=6, - ) - .addTarget(prometheus.target( - 'sum by (instance) (prometheus_sd_discovered_targets{' + host_matcher + '})', - )) + - utils.timeSeriesOverride(unit='short'); - - local averageScrapeIntervalDuration = - graphPanel.new( - 'Average Scrape Interval Duration', - description='Actual intervals between scrapes.', - datasource='$prometheus_datasource', - span=6, - ) - .addTarget(prometheus.target( - 'rate(prometheus_target_interval_length_seconds_sum{' + host_matcher + '}[$__rate_interval]) / rate(prometheus_target_interval_length_seconds_count{' + host_matcher + '}[$__rate_interval])', - legendFormat='{{instance}} {{interval}} configured', - )) + - utils.timeSeriesOverride(unit='s'); - - local scrapeFailures = - graphPanel.new( - 'Scrape failures', - description='Shows all scrape failures (sample limit exceeded, duplicate, out of bounds, out of order).', - datasource='$prometheus_datasource', - span=6, - ) - .addTarget(prometheus.target( - 'sum by (job) (rate(prometheus_target_scrapes_exceeded_sample_limit_total{' + host_matcher + '}[$__rate_interval]))', - legendFormat='exceeded sample limit: {{job}}' - )) - .addTarget(prometheus.target( - 'sum by (job) (rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{' + host_matcher + '}[$__rate_interval]))', - legendFormat='duplicate timestamp: {{job}}' - )) - .addTarget(prometheus.target( - 'sum by (job) (rate(prometheus_target_scrapes_sample_out_of_bounds_total{' + host_matcher + '}[$__rate_interval]))', - legendFormat='out of bounds: {{job}}' - )) - .addTarget(prometheus.target( - 'sum by (job) (rate(prometheus_target_scrapes_sample_out_of_order_total{' + host_matcher + '}[$__rate_interval]))', - legendFormat='out of order: {{job}}' - )) + - utils.timeSeriesOverride(unit='short'); - - local appendedSamples = - graphPanel.new( - 'Appended Samples', - description='Total number of samples appended to the WAL.', - datasource='$prometheus_datasource', - span=6, - ) - .addTarget(prometheus.target( - 'sum by (job, instance_group_name) (rate(agent_wal_samples_appended_total{' + host_matcher + '}[$__rate_interval]))', - legendFormat='{{job}} {{instance_group_name}}', - )) + - utils.timeSeriesOverride(unit='short'); - - - grafana.dashboard.new('Grafana Agent Overview', tags=$._config.dashboardTags, editable=false, time_from='%s' % $._config.dashboardPeriod, uid='integration-agent') - .addTemplates([ - ds_template, - job_template, - instance_template, - ]) - .addLink(grafana.link.dashboards( - asDropdown=false, - title='Grafana Agent Dashboards', - includeVars=true, - keepTime=true, - tags=($._config.dashboardTags), - )) - .addRow( - row.new('Overview') - .addPanel(agentStats) - ) - .addRow( - row.new('Prometheus Discovery') - .addPanel(prometheusTargetSync) - .addPanel(prometheusTargets) - ) - .addRow( - row.new('Prometheus Retrieval') - .addPanel(averageScrapeIntervalDuration) - .addPanel(scrapeFailures) - .addPanel(appendedSamples) - ), + // grafana-agent-overview.json using the older version of grafonnet, resulting in Angular usage. + // Temporarily disasbled in favour of flat-file json until we update this mixin to the latest Grafonnet. + 'grafana-agent-overview.json': (import 'grafana-agent-overview.json'), + // 'grafana-agent-overview.json': + // local agentStats = + // tablePanel.new( + // 'Running Instances', + // description='General statistics of running grafana agent instances.', + // datasource='$prometheus_datasource', + // span=12, + // styles=[ + // { alias: 'Container', pattern: 'container' }, + // { alias: 'Instance', pattern: 'instance' }, + // { alias: 'Pod', pattern: 'pod' }, + // { alias: 'Version', pattern: 'version' }, + // { alias: 'Uptime', pattern: 'Value #B', type: 'number', unit: 's' }, + // ], + // ) + // .addTarget(prometheus.target( + // 'count by (instance, version) (agent_build_info{' + host_matcher + '})', + // format='table', + // instant=true, + // )) + // .addTarget(prometheus.target( + // 'max by (instance) (time() - process_start_time_seconds{' + host_matcher + '})', + // format='table', + // instant=true, + // )) + // .hideColumn('Time') + // .hideColumn('Value #A'); + + // local prometheusTargetSync = + // graphPanel.new( + // 'Target Sync', + // description='Actual interval to sync the scrape pool.', + // datasource='$prometheus_datasource', + // span=6, + // ) + // .addTarget(prometheus.target( + // 'sum(rate(prometheus_target_sync_length_seconds_sum{' + host_matcher + '}[$__rate_interval])) by (instance, scrape_job)', + // legendFormat='{{instance}}/{{scrape_job}}', + // )) + + // utils.timeSeriesOverride(unit='s'); + + // local prometheusTargets = + // graphPanel.new( + // 'Targets', + // description='Discovered targets by prometheus service discovery.', + // datasource='$prometheus_datasource', + // span=6, + // ) + // .addTarget(prometheus.target( + // 'sum by (instance) (prometheus_sd_discovered_targets{' + host_matcher + '})', + // )) + + // utils.timeSeriesOverride(unit='short'); + + // local averageScrapeIntervalDuration = + // graphPanel.new( + // 'Average Scrape Interval Duration', + // description='Actual intervals between scrapes.', + // datasource='$prometheus_datasource', + // span=6, + // ) + // .addTarget(prometheus.target( + // 'rate(prometheus_target_interval_length_seconds_sum{' + host_matcher + '}[$__rate_interval]) / rate(prometheus_target_interval_length_seconds_count{' + host_matcher + '}[$__rate_interval])', + // legendFormat='{{instance}} {{interval}} configured', + // )) + + // utils.timeSeriesOverride(unit='s'); + + // local scrapeFailures = + // graphPanel.new( + // 'Scrape failures', + // description='Shows all scrape failures (sample limit exceeded, duplicate, out of bounds, out of order).', + // datasource='$prometheus_datasource', + // span=6, + // ) + // .addTarget(prometheus.target( + // 'sum by (job) (rate(prometheus_target_scrapes_exceeded_sample_limit_total{' + host_matcher + '}[$__rate_interval]))', + // legendFormat='exceeded sample limit: {{job}}' + // )) + // .addTarget(prometheus.target( + // 'sum by (job) (rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{' + host_matcher + '}[$__rate_interval]))', + // legendFormat='duplicate timestamp: {{job}}' + // )) + // .addTarget(prometheus.target( + // 'sum by (job) (rate(prometheus_target_scrapes_sample_out_of_bounds_total{' + host_matcher + '}[$__rate_interval]))', + // legendFormat='out of bounds: {{job}}' + // )) + // .addTarget(prometheus.target( + // 'sum by (job) (rate(prometheus_target_scrapes_sample_out_of_order_total{' + host_matcher + '}[$__rate_interval]))', + // legendFormat='out of order: {{job}}' + // )) + + // utils.timeSeriesOverride(unit='short'); + + // local appendedSamples = + // graphPanel.new( + // 'Appended Samples', + // description='Total number of samples appended to the WAL.', + // datasource='$prometheus_datasource', + // span=6, + // ) + // .addTarget(prometheus.target( + // 'sum by (job, instance_group_name) (rate(agent_wal_samples_appended_total{' + host_matcher + '}[$__rate_interval]))', + // legendFormat='{{job}} {{instance_group_name}}', + // )) + + // utils.timeSeriesOverride(unit='short'); + + + // grafana.dashboard.new('Grafana Agent Overview', tags=$._config.dashboardTags, editable=false, time_from='%s' % $._config.dashboardPeriod, uid='integration-agent') + // .addTemplates([ + // ds_template, + // job_template, + // instance_template, + // ]) + // .addLink(grafana.link.dashboards( + // asDropdown=false, + // title='Grafana Agent Dashboards', + // includeVars=true, + // keepTime=true, + // tags=($._config.dashboardTags), + // )) + // .addRow( + // row.new('Overview') + // .addPanel(agentStats) + // ) + // .addRow( + // row.new('Prometheus Discovery') + // .addPanel(prometheusTargetSync) + // .addPanel(prometheusTargets) + // ) + // .addRow( + // row.new('Prometheus Retrieval') + // .addPanel(averageScrapeIntervalDuration) + // .addPanel(scrapeFailures) + // .addPanel(appendedSamples) + // ), // Remote write specific dashboard. 'grafana-agent-remote-write.json': @@ -449,7 +452,7 @@ local instance_template = grafana.template.new( fill=0, ) .addTarget(prometheus.target( - 'rate(traces_receiver_accepted_spans{' + host_matcher + ',receiver!="otlp/lb"}[$__rate_interval])', + 'rate(traces_receiver_accepted_spans_total{' + host_matcher + ',receiver!="otlp/lb"}[$__rate_interval])', legendFormat='{{ instance }} - {{ receiver }}/{{ transport }}', )) + utils.timeSeriesOverride(unit='short'); @@ -465,7 +468,7 @@ local instance_template = grafana.template.new( fill=0, ) .addTarget(prometheus.target( - 'rate(traces_receiver_refused_spans{' + host_matcher + ',receiver!="otlp/lb"}[$__rate_interval])', + 'rate(traces_receiver_refused_spans_total{' + host_matcher + ',receiver!="otlp/lb"}[$__rate_interval])', legendFormat='{{ instance }} - {{ receiver }}/{{ transport }}', )) + utils.timeSeriesOverride(unit='short'); @@ -481,7 +484,7 @@ local instance_template = grafana.template.new( fill=0, ) .addTarget(prometheus.target( - 'rate(traces_exporter_sent_spans{' + host_matcher + ',exporter!="otlp"}[$__rate_interval])', + 'rate(traces_exporter_sent_spans_total{' + host_matcher + ',exporter!="otlp"}[$__rate_interval])', legendFormat='{{ instance }} - {{ exporter }}', )) + utils.timeSeriesOverride(unit='short'); @@ -497,7 +500,7 @@ local instance_template = grafana.template.new( fill=0, ) .addTarget(prometheus.target( - 'rate(traces_exporter_send_failed_spans{' + host_matcher + ',exporter!="otlp"}[$__rate_interval])', + 'rate(traces_exporter_send_failed_spans_total{' + host_matcher + ',exporter!="otlp"}[$__rate_interval])', legendFormat='{{ instance }} - {{ exporter }}', )) + utils.timeSeriesOverride(unit='short'); @@ -512,11 +515,11 @@ local instance_template = grafana.template.new( fill=1, ) .addTarget(prometheus.target( - 'sum(rate(traces_receiver_accepted_spans{' + host_matcher + ',%s}[$__rate_interval]))' % receiverFilter, + 'sum(rate(traces_receiver_accepted_spans_total{' + host_matcher + ',%s}[$__rate_interval]))' % receiverFilter, legendFormat='Accepted', )) .addTarget(prometheus.target( - 'sum(rate(traces_receiver_refused_spans{' + host_matcher + ',%s}[$__rate_interval])) ' % receiverFilter, + 'sum(rate(traces_receiver_refused_spans_total{' + host_matcher + ',%s}[$__rate_interval])) ' % receiverFilter, legendFormat='Refused', )) + utils.timeSeriesOverride(unit='short'); @@ -531,11 +534,11 @@ local instance_template = grafana.template.new( fill=1, ) .addTarget(prometheus.target( - 'sum(rate(traces_exporter_sent_spans{' + host_matcher + ',%s}[$__rate_interval]))' % exporterFilter, + 'sum(rate(traces_exporter_sent_spans_total{' + host_matcher + ',%s}[$__rate_interval]))' % exporterFilter, legendFormat='Sent', )) .addTarget(prometheus.target( - 'sum(rate(traces_exporter_send_failed_spans{' + host_matcher + ',%s}[$__rate_interval]))' % exporterFilter, + 'sum(rate(traces_exporter_send_failed_spans_total{' + host_matcher + ',%s}[$__rate_interval]))' % exporterFilter, legendFormat='Send failed', )) + utils.timeSeriesOverride(unit='short'); @@ -593,13 +596,15 @@ local instance_template = grafana.template.new( .addPanel(exportedFailedSpans) .addPanel(receivedSpans('receiver!="otlp/lb"', 6)) .addPanel(exportedSpans('exporter!="otlp"', 6)) - ) - .addRow( - row.new('Load balancing') - .addPanel(loadBalancedSpans) - .addPanel(peersNum) - .addPanel(receivedSpans('receiver="otlp/lb"', 3)) - .addPanel(exportedSpans('exporter="otlp"', 3)) ), + // TODO(ptodev): Uncomment this when Collector has instrumeneted LB exporter using OTel: + // https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29867 + // .addRow( + // row.new('Load balancing') + // .addPanel(loadBalancedSpans) + // .addPanel(peersNum) + // .addPanel(receivedSpans('receiver="otlp/lb"', 3)) + // .addPanel(exportedSpans('exporter="otlp"', 3)) + // ), }, } diff --git a/grafana-builder/grafana.libsonnet b/grafana-builder/grafana.libsonnet index 0bd0b3394..cc43f4836 100644 --- a/grafana-builder/grafana.libsonnet +++ b/grafana-builder/grafana.libsonnet @@ -1,3 +1,5 @@ +local utils = import 'mixin-utils/utils.libsonnet'; + { dashboard(title, uid='', datasource='default', datasource_regex=''):: { // Stuff that isn't materialised. @@ -70,6 +72,40 @@ }, }, + addShowNativeLatencyVariable():: self { + templating+: { + list+: [{ + current: { + selected: true, + text: 'classic', + value: '1', + }, + description: 'Choose between showing latencies based on low precision classic or high precision native histogram metrics.', + hide: 0, + includeAll: false, + label: 'Latency metrics', + multi: false, + name: 'latency_metrics', + query: 'native : -1,classic : 1', + options: [ + { + selected: false, + text: 'native', + value: '-1', + }, + { + selected: true, + text: 'classic', + value: '1', + }, + ], + skipUrlSync: false, + type: 'custom', + useTags: false, + }], + }, + }, + dashboardLinkUrl(title, url):: self { links+: [ { diff --git a/istio-2-mixin/.lint b/istio-2-mixin/.lint new file mode 100644 index 000000000..29de7f2d0 --- /dev/null +++ b/istio-2-mixin/.lint @@ -0,0 +1,22 @@ +exclusions: + template-job-rule: + reason: "Prometheus datasource variable is being named as prometheus_datasource now while linter expects 'datasource'" + panel-datasource-rule: + reason: "Loki datasource variable is being named as loki_datasource now while linter expects 'datasource'" + template-datasource-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + template-instance-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + target-job-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + panel-title-description-rule: + reason: "Not required for logs volume" + panel-units-rule: + reason: "Logs volume has no unit" + target-instance-rule: + reason: "Istio dashboards don't focus on instances" + entries: + - dashboard: "Istio overview" + - dashboard: "Istio services overview" + - dashboard: "Istio workloads overview" + - dashboard: "Istio logs" \ No newline at end of file diff --git a/istio-2-mixin/Makefile b/istio-2-mixin/Makefile new file mode 100644 index 000000000..a8d7f24aa --- /dev/null +++ b/istio-2-mixin/Makefile @@ -0,0 +1,34 @@ +JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s + +.PHONY: all +all: build dashboards_out prometheus_alerts.yaml + +vendor: jsonnetfile.json + jb install + +.PHONY: build +build: vendor + +.PHONY: fmt +fmt: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: lint +lint: build + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + while read f; do \ + $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ + done + mixtool lint mixin.libsonnet + +dashboards_out: mixin.libsonnet config.libsonnet dashboards.libsonnet + @mkdir -p dashboards_out + mixtool generate dashboards mixin.libsonnet -d dashboards_out + +prometheus_alerts.yaml: mixin.libsonnet alerts.libsonnet + mixtool generate alerts mixin.libsonnet -a prometheus_alerts.yaml + +.PHONY: clean +clean: + rm -rf dashboards_out prometheus_alerts.yaml diff --git a/istio-2-mixin/README.md b/istio-2-mixin/README.md new file mode 100644 index 000000000..5721f2862 --- /dev/null +++ b/istio-2-mixin/README.md @@ -0,0 +1,267 @@ +# Istio mixin +The Istio mixin is a set of configurable Grafana dashboards and alerts. + +The Istio mixin contains the following dashboards: + +- Istio overview +- Istio services overview +- Istio workloads overview +- Istio logs + +and the following alerts: + +- IstioHighRequestLatencyWarning +- IstioGalleyValidationFailuresWarning +- IstioListenerConfigConflictsCritical +- IstioXDSConfigRejectionsWarning +- IstioHighHTTPRequestErrorsCritical +- IstioHighGRPCRequestErrorsCritical +- IstioMetricsDown + +## Istio overview +The Istio overview dashboard provides high level details on alerts, HTTP/GRPC requests, vCPU, memory, control plane metrics, and service info for Istiod, proxies, and gateways. +![Istio overview dashboard (system)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_overview_1.png) +![Istio overview dashboard (control plane)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_overview_2.png) + +## Istio services overview +The Istio services overview dashboard provides details on HTTP/GRPC throughput, HTTP/GRPC response time, TCP throughput, and workload info for services acting in both client and server roles. +![Istio services overview dashboard (client)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_services_overview_1.png) +![Istio services overview dashboard (server)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_services_overview_2.png) +![Istio services overview dashboard (workloads)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_services_overview_3.png) + +## Istio workloads overview +The Istio workloads overview dashboard provides details on HTTP/GRPC throughput, HTTP/GRPC response time, and TCP throughput for workloads acting in both client and server roles. +![Istio workloads overview dashboard (client)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_workloads_overview_1.png) +![Istio workloads overview dashboard (server)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_workloads_overview_2.png) +![Istio workloads overview dashboard (server TCP)](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_workloads_overview_3.png) + +# Istio logs +The Istio logs dashboard provides details on incoming envoy proxy access logs. +![Istio logs dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/istio/screenshots/istio_logs.png) + +Istio logs are enabled by default in the `config.libsonnet` and can be disabled by setting `enableLokiLogs` to `false`. Then run `make` again to regenerate the dashboard: + +``` +{ + _config+:: { + enableLokiLogs: false, + }, +} +``` + +For the selectors to properly work with the Istio logs ingested into your logs datasource, replace the `cluster` labels as well as ensuring that the `request_method`, `response_code`, and `protocol` are being generated. + +``` +{ + discovery.kubernetes "istiod" { + role = "endpoints" + + namespaces { + names = ["istio-system"] + } + } + + discovery.relabel "istiod_filter" { + targets = discovery.kubernetes.istiod.targets + + rule { + source_labels = ["__meta_kubernetes_service_name", "__meta_kubernetes_endpoint_port_name"] + regex = "istiod;http-monitoring" + action = "keep" + } + + rule { + action = "replace" + source_labels = ["__meta_kubernetes_pod_name"] + target_label = "pod" + } + + rule { + target_label = "cluster" + replacement = "" + } + } + + prometheus.scrape "istiod" { + targets = discovery.relabel.istiod_filter.output + forward_to = [prometheus.remote_write.cloud.receiver] + job_name = "integrations/istio" + } + + discovery.kubernetes "envoy_proxies" { + role = "pod" + } + + discovery.relabel "envoy_proxies_metrics_filter" { + targets = discovery.kubernetes.envoy_proxies.targets + + rule { + source_labels = ["__meta_kubernetes_pod_container_name"] + regex = "istio-proxy.*" + action = "keep" + } + + rule { + source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_port", "__meta_kubernetes_pod_ip"] + regex = "(\\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})" + target_label = "__address__" + replacement = "[$2]:$1" + } + + rule { + source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_port", "__meta_kubernetes_pod_ip"] + regex = "(\\d+);((([0-9]+?)(\\.|$)){4})" + target_label = "__address__" + replacement = "$2:$1" + } + + rule { + action = "replace" + source_labels = ["__meta_kubernetes_pod_name"] + target_label = "pod" + } + + rule { + target_label = "cluster" + replacement = "" + } + } + + prometheus.scrape "envoy_proxies" { + targets = discovery.relabel.envoy_proxies_metrics_filter.output + forward_to = [prometheus.remote_write.cloud.receiver] + job_name = "integrations/istio" + metrics_path = "/stats/prometheus" + } + + loki.source.kubernetes "envoy_proxies" { + targets = discovery.relabel.envoy_proxies_logs_filter.output + forward_to = [loki.process.istio_access.receiver, loki.process.istio_system.receiver] + } + + discovery.relabel "envoy_proxies_logs_filter" { + targets = discovery.kubernetes.envoy_proxies.targets + + rule { + source_labels = ["__meta_kubernetes_pod_container_port_name"] + regex = ".*-envoy-prom" + action = "keep" + } + + rule { + source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_port", "__meta_kubernetes_pod_ip"] + regex = "(\\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})" + target_label = "instance" + replacement = "[$2]:$1" + } + + rule { + source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_port", "__meta_kubernetes_pod_ip"] + regex = "(\\d+);((([0-9]+?)(\\.|$)){4})" + target_label = "instance" + replacement = "$2:$1" + } + + rule { + target_label = "job" + replacement = "integrations/istio" + } + + rule { + target_label = "cluster" + replacement = "" + } + + rule { + action = "replace" + source_labels = ["__meta_kubernetes_pod_name"] + target_label = "pod" + } + } + + loki.process "istio_system" { + forward_to = [loki.write.cloud.receiver] + + stage.drop { + expression = "^\\[.*" + } + + stage.multiline { + firstline = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}" + } + } + + loki.process "istio_access" { + forward_to = [loki.write..receiver] + + stage.drop { + expression = "^[^\\[].*" + } + + stage.regex { + expression = "\\[\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\] \"(?P\\w+) \\S+ (?P\\S+)\" (?P\\d+) .+" + } + + stage.labels { + values = { + request_method = "", + protocol = "", + response_code = "", + } + } + } +} +``` + +## Alerts overview +- IstioHighRequestLatencyWarning: High request latency between pods can indicate that there are performance issues within the k8s environment. +- IstioGalleyValidationFailuresWarning: Istio Galley is reporting failures for a number of configurations. +- IstioListenerConfigConflictsCritical: Istio Pilot is seeing a number of inbound and or outbound listener conflicts by envoy proxies. +- IstioXDSConfigRejectionsWarning: Istio Pilot is seeing a number of xDS rejections from envoy proxies.. +- IstioHighHTTPRequestErrorsCritical: There are a high number of HTTP request errors in the Istio system. +- IstioHighGRPCRequestErrorsCritical: There are a high number of GRPC request errors in the Istio system. +- IstioMetricsDown: Istio metrics are down. + +Default thresholds can be configured in `config.libsonnet`. + +```js +{ + _configs+:: { + // alerts thresholds + alertsWarningHighRequestLatency: 4000, + alertsWarningGalleyValidationFailures: 0, + alertsCriticalListenerConfigConflicts: 0, + alertsWarningXDSConfigRejections: 0, + alertsCriticalHTTPRequestErrorPercentage: 5, //% + alertsCriticalGRPCRequestErrorPercentage: 5, //% + } +} +``` + +## Install tools +```bash +go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest +go install github.com/monitoring-mixins/mixtool/cmd/mixtool@latest +``` + +For linting and formatting, you would also need `jsonnetfmt` installed. If you +have a working Go development environment, it's easiest to run the following: + +```bash +go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest +``` + +The files in `dashboards_out` need to be imported +into your Grafana server. The exact details will be depending on your environment. + +`prometheus_alerts.yaml` needs to be imported into Prometheus. + +## Generate dashboards and alerts +Edit `config.libsonnet` if required and then build JSON dashboard files for Grafana: + +```bash +make +``` + +For more advanced uses of mixins, see +https://github.com/monitoring-mixins/docs. diff --git a/istio-2-mixin/alerts.libsonnet b/istio-2-mixin/alerts.libsonnet new file mode 100644 index 000000000..4cd937734 --- /dev/null +++ b/istio-2-mixin/alerts.libsonnet @@ -0,0 +1,136 @@ +{ + new(this): { + local reporterSourceFilter = 'reporter="source"', + local grpcResponseStatusErrorFilter = 'grpc_response_status=~"[1-9]\\\\d*"', + local grpcResponseStatusFilter = 'grpc_response_status=~"[0-9]\\\\d*"', + local requestProtocolHTTPFilter = 'request_protocol="http"', + local httpResponseCodeErrorFilter = 'request_protocol="http", response_code=~"[45].+"', + + groups: [ + { + name: 'istio-alerts-' + this.config.uid, + rules: [ + { + alert: 'IstioHighRequestLatencyWarning', + expr: ||| + sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_request_duration_milliseconds_sum{%(filteringSelector)s, %(reporterSourceFilter)s}[5m])) + / + clamp_min(sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_request_duration_milliseconds_count{%(filteringSelector)s, %(reporterSourceFilter)s}[5m])), 1) > %(alertsWarningHighRequestLatency)s + ||| % this.config { reporterSourceFilter: reporterSourceFilter }, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'High request latency between pods can indicate that there are performance issues within the k8s environment.', + description: ||| + Requests from Istio service {{$labels.source_canonical_service}} to service {{$labels.destination_canonical_service}} on cluster {{$labels.cluster}} has an average latency of {{ printf "%%.0f" $value }}ms, which is above the threshold of %(alertsWarningHighRequestLatency)s. + ||| % this.config, + }, + }, + { + alert: 'IstioGalleyValidationFailuresWarning', + expr: ||| + sum without(instance) (increase(galley_validation_failed{%(filteringSelector)s, pod=~"istiod.*"}[5m])) > %(alertsWarningGalleyValidationFailures)s + ||| % this.config, + 'for': '1m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Istio Galley is reporting failures for a number of configurations.', + description: ||| + {{$labels.pod}} on cluster {{$labels.cluster}} has had {{ printf "%%.0f" $value }} Galley validation failures, which is above the thresold of %(alertsWarningGalleyValidationFailures)s. + ||| % this.config, + }, + }, + { + alert: 'IstioListenerConfigConflictsCritical', + expr: ||| + sum without(instance) (increase(pilot_conflict_inbound_listener{%(filteringSelector)s, pod=~"istiod.*"}[5m])) + sum without(instance) (increase(pilot_conflict_outbound_listener_tcp_over_current_tcp{%(filteringSelector)s, pod=~"istiod.*"}[5m])) > %(alertsCriticalListenerConfigConflicts)s + ||| % this.config, + 'for': '1m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'Istio Pilot is seeing a number of inbound and or outbound listener conflicts by envoy proxies.', + description: ||| + {{$labels.pod}} on cluster {{$labels.cluster}} has had {{ printf "%%.0f" $value }} inbound and or outbound listener conflicts reported from envoy proxies, which is above the threshold of %(alertsCriticalListenerConfigConflicts)s. + ||| % this.config, + }, + }, + { + alert: 'IstioXDSConfigRejectionsWarning', + expr: ||| + sum without(instance) (increase(pilot_total_xds_rejects{%(filteringSelector)s, pod=~"istiod.*"}[5m])) > %(alertsWarningXDSConfigRejections)s + ||| % this.config, + 'for': '1m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Istio Pilot is seeing a number of xDS rejections from envoy proxies.', + description: ||| + {{$labels.pod}} on cluster {{$labels.cluster}} has had {{ printf "%%.0f" $value }} xDS rejections from envoy proxies, which is above the threshold of %(alertsWarningXDSConfigRejections)s. + ||| % this.config, + }, + }, + { + alert: 'IstioHighHTTPRequestErrorsCritical', + expr: ||| + 100 * sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_requests_total{%(filteringSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeErrorFilter)s}[5m])) + / + clamp_min(sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_requests_total{%(filteringSelector)s, %(reporterSourceFilter)s, %(requestProtocolHTTPFilter)s}[5m])), 1) > %(alertsCriticalHTTPRequestErrorPercentage)s + ||| % this.config { reporterSourceFilter: reporterSourceFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter, requestProtocolHTTPFilter: requestProtocolHTTPFilter }, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'There are a high number of HTTP request errors in the Istio system.', + description: ||| + HTTP requests from Istio service {{$labels.source_canonical_service}} to service {{$labels.destination_canonical_service}} on cluster {{$labels.cluster}} have an error rate above {{ printf "%%.0f" $value }}%%, which is above the threshold of %(alertsCriticalHTTPRequestErrorPercentage)s%%. + ||| % this.config, + }, + }, + { + alert: 'IstioHighGRPCRequestErrorsCritical', + expr: ||| + 100 * sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_requests_total{%(filteringSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusErrorFilter)s}[5m])) + / + clamp_min(sum without(connection_security_policy, destination_app, destination_canonical_revision, destination_service_name, destination_cluster, destination_principal, destination_service, destination_service_namespace, destination_version, destination_workload, destination_workload_namespace, grpc_response_status, instance, pod, reporter, request_protocol, response_code, response_flags, source_app, source_canonical_revision, source_cluster, source_principal, source_version, source_workload, source_workload_namespace) (increase(istio_requests_total{%(filteringSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusFilter)s}[5m])), 1) > %(alertsCriticalGRPCRequestErrorPercentage)s + ||| % this.config { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusErrorFilter: grpcResponseStatusErrorFilter, grpcResponseStatusFilter: grpcResponseStatusFilter }, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'There are a high number of GRPC request errors in the Istio system.', + description: ||| + GRPC requests from Istio service {{$labels.source_canonical_service}} to service {{$labels.destination_canonical_service}} on cluster {{$labels.cluster}} have an error rate above {{ printf "%%.0f" $value }}%%, which is above the threshold of %(alertsCriticalGRPCRequestErrorPercentage)s%%. + ||| % this.config, + }, + }, + { + alert: 'IstioMetricsDown', + expr: ||| + up{%(filteringSelector)s} == 0 + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'Istio metrics are down.', + description: + ( + 'There are no available metrics for Istio integration from pod {{$labels.pod}} in cluster {{$labels.cluster}}.' + ) % this.config, + }, + }, + ], + }, + ], + }, +} diff --git a/istio-2-mixin/config.libsonnet b/istio-2-mixin/config.libsonnet new file mode 100644 index 000000000..b852cd8f4 --- /dev/null +++ b/istio-2-mixin/config.libsonnet @@ -0,0 +1,30 @@ +{ + // Static selector to apply to ALL dashboard variables of type query, panel queries, alerts and recording rules. + filteringSelector: 'job=~"integrations/istio"', + // Used to identify 'group' of instances. + groupLabels: ['job', 'cluster'], + + // Prefix all dashboards uids and alert groups + uid: 'istio', + // Prefix for all Dashboards and (optional) rule groups + dashboardNamePrefix: '', + dashboardTags: [self.uid], + dashboardPeriod: 'now-1h', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + + // Alert thresholds + alertsWarningHighRequestLatency: 4000, + alertsWarningGalleyValidationFailures: 0, + alertsCriticalListenerConfigConflicts: 0, + alertsWarningXDSConfigRejections: 0, + alertsCriticalHTTPRequestErrorPercentage: 5, //% + alertsCriticalGRPCRequestErrorPercentage: 5, //% + + // Logs lib related + // Set to false to disable logs dashboard and logs annotations + enableLokiLogs: true, + extraLogLabels: ['pod', 'log_type', 'protocol', 'request_method', 'response_code', 'level'], + logsVolumeGroupBy: 'response_code', + showLogsVolume: true, +} diff --git a/istio-2-mixin/dashboards.libsonnet b/istio-2-mixin/dashboards.libsonnet new file mode 100644 index 000000000..7f576a4ef --- /dev/null +++ b/istio-2-mixin/dashboards.libsonnet @@ -0,0 +1,165 @@ +local g = import './g.libsonnet'; +local logslib = import 'logs-lib/logs/main.libsonnet'; +{ + local root = self, + new(this): + local prefix = this.config.dashboardNamePrefix; + local links = this.grafana.links; + local tags = this.config.dashboardTags; + local uid = g.util.string.slugify(this.config.uid); + local vars = this.grafana.variables; + local annotations = this.grafana.annotations; + local refresh = this.config.dashboardRefresh; + local period = this.config.dashboardPeriod; + local timezone = this.config.dashboardTimezone; + local panels = this.grafana.panels; + local stat = g.panel.stat; + { + overview: + g.dashboard.new(prefix + 'Istio overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.proxies { gridPos+: { w: 4, h: 4 } }, + panels.gateways { gridPos+: { w: 4, h: 4 } }, + panels.virtualServices { gridPos+: { w: 4, h: 4 } }, + panels.alertsPanel { gridPos+: { w: 12, h: 8 } }, + panels.destinationRules { gridPos+: { w: 4, h: 4 } }, + panels.serviceEntries { gridPos+: { w: 4, h: 4 } }, + panels.workloadEntries { gridPos+: { w: 4, h: 4 } }, + panels.openFileDescriptors { gridPos+: { w: 12 } }, + panels.vCPUUsage { gridPos+: { w: 12 } }, + panels.heapMemory { gridPos+: { w: 12 } }, + panels.virtualAndResidentMemory { gridPos+: { w: 12 } }, + panels.httpGRPCRequests { gridPos+: { w: 16 } }, + panels.httpResponseOverview { gridPos+: { w: 8 } }, + g.panel.row.new('Control plane'), + panels.xDSPushes { gridPos+: { w: 8 } }, + panels.xDSPushDelay { gridPos+: { w: 8 } }, + panels.galleyValidations { gridPos+: { w: 8 } }, + panels.xDSEnvoyThroughput { gridPos+: { w: 8 } }, + panels.xDSErrors { gridPos+: { w: 8 } }, + panels.sidecarInjections { gridPos+: { w: 8 } }, + g.panel.row.new('Services'), + panels.services { gridPos+: { w: 24, h: 8 } }, + ], 12, 6 + ) + ) + // hide link to self + + root.applyCommon(vars.overviewVariables, uid + '-overview', tags, links { overview+:: {} }, annotations, timezone, refresh, period), + servicesOverview: + g.dashboard.new(prefix + 'Istio services overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + g.panel.row.new('Client details'), + panels.clientServiceHTTPGRPCRequests, + panels.clientServiceHTTPGRPCRequestDelay, + panels.clientServiceHTTPGRPCRequestThroughput, + panels.clientServiceHTTPGRPCResponseThroughput, + panels.clientServiceHTTPResponseOverview { gridPos+: { w: 8 } }, + panels.clientServiceHTTPResponses { gridPos+: { w: 16 } }, + panels.clientServiceGRPCResponseOverview { gridPos+: { w: 8 } }, + panels.clientServiceGRPCResponses { gridPos+: { w: 16 } }, + panels.clientServiceTCPRequestThroughput { gridPos+: { w: 12 } }, + panels.clientServiceTCPResponseThroughput { gridPos+: { w: 12 } }, + g.panel.row.new('Server details'), + panels.serverServiceHTTPGRPCRequests, + panels.serverServiceHTTPGRPCRequestDelay, + panels.serverServiceHTTPGRPCRequestThroughput, + panels.serverServiceHTTPGRPCResponseThroughput, + panels.serverServiceHTTPResponseOverview { gridPos+: { w: 8 } }, + panels.serverServiceHTTPResponses { gridPos+: { w: 16 } }, + panels.serverServiceGRPCResponseOverview { gridPos+: { w: 8 } }, + panels.serverServiceGRPCResponses { gridPos+: { w: 16 } }, + panels.serverServiceTCPRequestThroughput { gridPos+: { w: 12 } }, + panels.serverServiceTCPResponseThroughput { gridPos+: { w: 12 } }, + g.panel.row.new('Workloads'), + panels.workloads { gridPos+: { w: 24, h: 8 } }, + ], 12, 6 + ) + ) + // hide link to self + + root.applyCommon(vars.serviceOverviewVariables, uid + '-services-overview', tags, links { servicesOverview+:: {} }, annotations, timezone, refresh, period), + workloadsOverview: + g.dashboard.new(prefix + 'Istio workloads overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + g.panel.row.new('Client details'), + panels.clientWorkloadHTTPGRPCRequests, + panels.clientWorkloadHTTPGRPCRequestDelay, + panels.clientWorkloadHTTPGRPCRequestThroughput, + panels.clientWorkloadHTTPGRPCResponseThroughput, + panels.clientWorkloadHTTPResponseOverview { gridPos+: { w: 8 } }, + panels.clientWorkloadHTTPResponses { gridPos+: { w: 16 } }, + panels.clientWorkloadGRPCResponseOverview { gridPos+: { w: 8 } }, + panels.clientWorkloadGRPCResponses { gridPos+: { w: 16 } }, + panels.clientWorkloadTCPRequestThroughput { gridPos+: { w: 12 } }, + panels.clientWorkloadTCPResponseThroughput { gridPos+: { w: 12 } }, + g.panel.row.new('Server details'), + panels.serverWorkloadHTTPGRPCRequests, + panels.serverWorkloadHTTPGRPCRequestDelay, + panels.serverWorkloadHTTPGRPCRequestThroughput, + panels.serverWorkloadHTTPGRPCResponseThroughput, + panels.serverWorkloadHTTPResponseOverview { gridPos+: { w: 8 } }, + panels.serverWorkloadHTTPResponses { gridPos+: { w: 16 } }, + panels.serverWorkloadGRPCResponseOverview { gridPos+: { w: 8 } }, + panels.serverWorkloadGRPCResponses { gridPos+: { w: 16 } }, + panels.serverWorkloadTCPRequestThroughput { gridPos+: { w: 12 } }, + panels.serverWorkloadTCPResponseThroughput { gridPos+: { w: 12 } }, + ], 12, 6 + ) + ) + // hide link to self + + root.applyCommon(vars.workloadOverviewVariables, uid + '-workloads-overview', tags, links { workloadsOverview+:: {} }, annotations, timezone, refresh, period), + } + + + if this.config.enableLokiLogs then + { + logs: + logslib.new( + prefix + 'Istio logs', + datasourceName=this.grafana.variables.datasources.loki.name, + datasourceRegex=this.grafana.variables.datasources.loki.regex, + filterSelector=this.config.filteringSelector, + labels=this.config.groupLabels + this.config.extraLogLabels, + formatParser=null, + showLogsVolume=this.config.showLogsVolume, + logsVolumeGroupBy=this.config.logsVolumeGroupBy, + ) + { + dashboards+: + { + logs+: + // reference to self, already generated variables, to keep them, but apply other common data in applyCommon + root.applyCommon(super.logs.templating.list, uid=uid + '-logs', tags=tags, links=links { logs+:: {} }, annotations=annotations, timezone=timezone, refresh=refresh, period=period), + }, + panels+: + { + // modify log panel + logs+: + g.panel.logs.options.withEnableLogDetails(true) + + g.panel.logs.options.withShowTime(false) + + g.panel.logs.options.withWrapLogMessage(false), + }, + variables+: { + // add prometheus datasource for annotations processing + toArray+: [ + this.grafana.variables.datasources.prometheus { hide: 2 }, + ], + }, + }.dashboards.logs, + } + else {}, + + //Apply common options(uids, tags, annotations etc..) to all dashboards above + applyCommon(vars, uid, tags, links, annotations, timezone, refresh, period): + g.dashboard.withTags(tags) + + g.dashboard.withUid(uid) + + g.dashboard.withLinks(std.objectValues(links)) + + g.dashboard.withTimezone(timezone) + + g.dashboard.withRefresh(refresh) + + g.dashboard.time.withFrom(period) + + g.dashboard.withVariables(vars), +} diff --git a/istio-2-mixin/g.libsonnet b/istio-2-mixin/g.libsonnet new file mode 100644 index 000000000..6da9f4eef --- /dev/null +++ b/istio-2-mixin/g.libsonnet @@ -0,0 +1 @@ +import 'github.com/grafana/grafonnet/gen/grafonnet-v10.0.0/main.libsonnet' diff --git a/istio-2-mixin/jsonnetfile.json b/istio-2-mixin/jsonnetfile.json new file mode 100644 index 000000000..69b58cc74 --- /dev/null +++ b/istio-2-mixin/jsonnetfile.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "common-lib" + } + }, + "version": "master" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-v10.0.0" + } + }, + "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "logs-lib" + } + }, + "version": "master" + } + ], + "legacyImports": true +} \ No newline at end of file diff --git a/istio-2-mixin/links.libsonnet b/istio-2-mixin/links.libsonnet new file mode 100644 index 000000000..531e8b9d5 --- /dev/null +++ b/istio-2-mixin/links.libsonnet @@ -0,0 +1,24 @@ +local g = import './g.libsonnet'; +{ + local link = g.dashboard.link, + new(this): + { + overview: + link.link.new('Istio overview', '/d/' + this.grafana.dashboards.overview.uid) + + link.link.options.withKeepTime(true), + servicesOverview: + link.link.new('Istio services overview', '/d/' + this.grafana.dashboards.servicesOverview.uid) + + link.link.options.withKeepTime(true), + workloadsOverview: + link.link.new('Istio workloads overview', '/d/' + this.grafana.dashboards.workloadsOverview.uid) + + link.link.options.withKeepTime(true), + } + + + if this.config.enableLokiLogs then + { + logs: + link.link.new('Istio logs', '/d/' + this.grafana.dashboards.logs.uid) + + link.link.options.withKeepTime(true), + } + else {}, +} diff --git a/istio-2-mixin/main.libsonnet b/istio-2-mixin/main.libsonnet new file mode 100644 index 000000000..51d05f05d --- /dev/null +++ b/istio-2-mixin/main.libsonnet @@ -0,0 +1,35 @@ +local alerts = import './alerts.libsonnet'; +local config = import './config.libsonnet'; +local dashboards = import './dashboards.libsonnet'; +local g = import './g.libsonnet'; +local links = import './links.libsonnet'; +local panels = import './panels.libsonnet'; +local targets = import './targets.libsonnet'; +local variables = import './variables.libsonnet'; + +{ + + withConfigMixin(config): { + config+: config, + }, + + new(): { + + local this = self, + config: config, + + grafana: { + variables: variables.new(this), + targets: targets.new(this), + annotations: {}, + links: links.new(this), + panels: panels.new(this), + dashboards: dashboards.new(this), + }, + + prometheus: { + alerts: alerts.new(this), + recordingRules: {}, + }, + }, +} diff --git a/istio-2-mixin/mixin.libsonnet b/istio-2-mixin/mixin.libsonnet new file mode 100644 index 000000000..1c2cc0189 --- /dev/null +++ b/istio-2-mixin/mixin.libsonnet @@ -0,0 +1,20 @@ +local istiolib = import './main.libsonnet'; + +local istio = + istiolib.new() + + istiolib.withConfigMixin( + { + filteringSelector: 'job=~"integrations/istio"', + uid: 'istio', + groupLabels: ['job', 'cluster'], + // disable loki logs + enableLokiLogs: true, + } + ); + +// populate monitoring-mixin: +{ + grafanaDashboards+:: istio.grafana.dashboards, + prometheusAlerts+:: istio.prometheus.alerts, + prometheusRules+:: istio.prometheus.recordingRules, +} diff --git a/istio-2-mixin/panels.libsonnet b/istio-2-mixin/panels.libsonnet new file mode 100644 index 000000000..c66428590 --- /dev/null +++ b/istio-2-mixin/panels.libsonnet @@ -0,0 +1,1061 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; +{ + new(this): + { + local t = this.grafana.targets, + local alertList = g.panel.alertList, + local stat = g.panel.stat, + local timeSeries = g.panel.timeSeries, + local pieChart = g.panel.pieChart, + local barGauge = g.panel.barGauge, + local table = g.panel.table, + local histogram = g.panel.histogram, + + alertsPanel: + alertList.new('Istio alerts') + + alertList.options.UnifiedAlertListOptions.withAlertInstanceLabelFilter(this.grafana.variables.queriesGroupSelectorAdvanced), + + proxies: + commonlib.panels.generic.stat.base.new( + 'Proxies', + targets=[t.proxyCount], + description='Number of proxies in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('super-light-red') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + gateways: + commonlib.panels.generic.stat.base.new( + 'Gateways', + targets=[t.gatewayCount], + description='Number of gateways in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('text') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + virtualServices: + commonlib.panels.generic.stat.base.new( + 'Virtual services', + targets=[t.virtualServiceCount], + description='Number of virtual services in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('text') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + destinationRules: + commonlib.panels.generic.stat.base.new( + 'Destination rules', + targets=[t.destinationRuleCount], + description='Number of destination rules in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('super-light-orange') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + serviceEntries: + commonlib.panels.generic.stat.base.new( + 'Service entries', + targets=[t.serviceEntryCount], + description='Number of service entries in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('text') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + workloadEntries: + commonlib.panels.generic.stat.base.new( + 'Workload entries', + targets=[t.workloadEntryCount], + description='Number of workload entries in the Istio system.', + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('text') + + stat.thresholdStep.withValue(null), + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(1), + ]), + + vCPUUsage: + commonlib.panels.generic.timeSeries.base.new( + 'vCPU usage', + targets=[ + t.istiodCPUUsage, + t.gatewayCPUUsage, + t.proxyCPUUsage, + ], + description='vCPU usage for various components of the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }) + + timeSeries.standardOptions.withUnit('percentunit'), + openFileDescriptors: + commonlib.panels.generic.timeSeries.base.new( + 'Open file descriptors', + targets=[ + t.istiodOpenFileDescriptors, + t.gatewayOpenFileDescriptors, + t.proxyOpenFileDescriptors, + ], + description='Number of open file descriptors for various components of the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + virtualAndResidentMemory: + commonlib.panels.memory.timeSeries.usageBytes.new( + 'Virtual & resident memory', + targets=[ + t.istiodVirtualMemory, + t.istiodResidentMemory, + t.gatewayVirtualMemory, + t.gatewayResidentMemory, + t.proxyVirtualMemory, + t.proxyResidentMemory, + ], + description='Available virtual memory compared to the resident memory for the various components of the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.fieldConfig.defaults.custom.withScaleDistributionMixin({ + log: 2, + type: 'log', + }) + + timeSeries.standardOptions.withUnit('bytes'), + heapMemory: + commonlib.panels.memory.timeSeries.usageBytes.new( + 'Heap memory', + targets=[ + t.istiodHeapAllocated, + t.istiodHeapInUse, + t.istiodHeapSystem, + t.gatewayHeapAllocated, + t.gatewayHeapInUse, + t.gatewayHeapSystem, + t.proxyHeapAllocated, + t.proxyHeapInUse, + t.proxyHeapSystem, + ], + description='Heap memory information for the various components of the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.standardOptions.withUnit('bytes'), + httpGRPCRequests: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC requests', + targets=[ + t.gatewayHTTPGRPCRequestRate, + t.proxyHTTPGRPCRequestRate, + ], + description='HTTP/GRPC request rate for the components of the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }) + + timeSeries.standardOptions.withUnit('reqps'), + xDSEnvoyThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'xDS envoy throughput', + targets=[ + t.envoyxDSBytesSendRate, + t.envoyxDSBytesReceiveRate, + ], + description='The send and receive data rates from all envoy proxies in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps'), + xDSErrors: + commonlib.panels.generic.timeSeries.base.new( + 'xDS errors / $__interval', + targets=[ + t.pilotCDSxDSRejections, + t.pilotEDSxDSRejections, + t.pilotRDSxDSRejections, + t.pilotLDSxDSRejections, + t.pilotxDSWriteTimeouts, + t.pilotxDSInternalErrors, + t.pilotxDSProxyRejects, + t.pilotxDSInboundListenerConflicts, + t.pilotxDSOutboundListenerTCPConflicts, + ], + description='The xDS related errors across the Istio system.' + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']), + clientServiceHTTPGRPCRequests: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC requests sent', + targets=[ + t.clientServiceHTTPGRPCRequestRate, + ], + description='Rate of HTTP/GRPC requests sent from this service to server services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('reqps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceHTTPGRPCRequestDelay: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request delay', + targets=[ + t.clientServiceHTTPGRPCAvgRequestDelay, + ], + description='Average latency of HTTP/GRPC requests sent from this service to server services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('ms'), + clientServiceHTTPGRPCRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request throughput', + targets=[ + t.clientServiceHTTPGRPCRequestThroughputRate, + ], + description='Rate of HTTP/GRPC request data sent from this service to server services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceHTTPGRPCResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC response throughput', + targets=[ + t.clientServiceHTTPGRPCResponseThroughputRate, + ], + description='Rate of HTTP/GRPC response data received by this service from server services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceHTTPResponses: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP responses / $__interval', + targets=[ + t.clientServiceHTTP1xxResponses, + t.clientServiceHTTP2xxResponses, + t.clientServiceHTTP3xxResponses, + t.clientServiceHTTP4xxResponses, + t.clientServiceHTTP5xxResponses, + ], + description='The types of HTTP responses received by this service from server services in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceGRPCResponses: + commonlib.panels.generic.timeSeries.base.new( + 'GRPC responses / $__interval', + targets=[ + t.clientServiceGRPCResponses, + ], + description='The types of GRPC responses received by this service from server services in the Istio system.' + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceTCPRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP request throughput', + targets=[ + t.clientServiceTCPRequestThroughputRate, + ], + description='Rate of TCP request data sent from this service to server services in the Istio system.' + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientServiceTCPResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP response throughput', + targets=[ + t.clientServiceTCPResponseThroughputRate, + ], + description='Rate of TCP response data received by this service from server services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceHTTPGRPCRequests: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC requests received', + targets=[ + t.serverServiceHTTPGRPCRequestRate, + ], + description='Rate of HTTP/GRPC requests received by this service from client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('reqps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceHTTPGRPCRequestDelay: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request delay', + targets=[ + t.serverServiceHTTPGRPCAvgRequestDelay, + ], + description='Average latency of HTTP/GRPC requests received by this service from client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('ms'), + serverServiceHTTPGRPCRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request throughput', + targets=[ + t.serverServiceHTTPGRPCRequestThroughputRate, + ], + description='Rate of HTTP/GRPC request data received by this service from client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceHTTPGRPCResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC response throughput', + targets=[ + t.serverServiceHTTPGRPCResponseThroughputRate, + ], + description='Rate of HTTP/GRPC response data sent from this service to client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceHTTPResponses: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP responses / $__interval', + targets=[ + t.serverServiceHTTP1xxResponses, + t.serverServiceHTTP2xxResponses, + t.serverServiceHTTP3xxResponses, + t.serverServiceHTTP4xxResponses, + t.serverServiceHTTP5xxResponses, + ], + description='The types of HTTP responses sent from this service to client services in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceGRPCResponses: + commonlib.panels.generic.timeSeries.base.new( + 'GRPC responses / $__interval', + targets=[ + t.serverServiceGRPCResponses, + ], + description='The types of GRPC responses sent from this service to client services in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceTCPRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP request throughput', + targets=[ + t.serverServiceTCPRequestThroughputRate, + ], + description='Rate of TCP request data received by this service from client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverServiceTCPResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP response throughput', + targets=[ + t.serverServiceTCPResponseThroughputRate, + ], + description='Rate of TCP response data sent from this service to client services in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadHTTPGRPCRequests: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC requests sent', + targets=[ + t.clientWorkloadHTTPGRPCRequestRate, + ], + description='Rate of HTTP/GRPC requests sent from this workload to server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('reqps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadHTTPGRPCRequestDelay: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request delay', + targets=[ + t.clientWorkloadHTTPGRPCAvgRequestDelay, + ], + description='Average latency of HTTP/GRPC requests sent from this workload to server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('ms'), + clientWorkloadHTTPGRPCRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request throughput', + targets=[ + t.clientWorkloadHTTPGRPCRequestThroughputRate, + ], + description='Rate of HTTP/GRPC request data sent from this workload to server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadHTTPGRPCResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC response throughput', + targets=[ + t.clientWorkloadHTTPGRPCResponseThroughputRate, + ], + description='Rate of HTTP/GRPC response data received by this workload from server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadHTTPResponses: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP responses / $__interval', + targets=[ + t.clientWorkloadHTTP1xxResponses, + t.clientWorkloadHTTP2xxResponses, + t.clientWorkloadHTTP3xxResponses, + t.clientWorkloadHTTP4xxResponses, + t.clientWorkloadHTTP5xxResponses, + ], + description='The types of HTTP responses received by this workload from server workloads in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadGRPCResponses: + commonlib.panels.generic.timeSeries.base.new( + 'GRPC responses / $__interval', + targets=[ + t.clientWorkloadGRPCResponses, + ], + description='The types of GRPC responses received by this workload from server workloads in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadTCPRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP request throughput', + targets=[ + t.clientWorkloadTCPRequestThroughputRate, + ], + description='Rate of TCP request data sent from this workload to server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + clientWorkloadTCPResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP response throughput', + targets=[ + t.clientWorkloadTCPResponseThroughputRate, + ], + description='Rate of TCP response data received by this workload from server workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadHTTPGRPCRequests: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC requests received', + targets=[ + t.serverWorkloadHTTPGRPCRequestRate, + ], + description='Rate of HTTP/GRPC requests received by this workload from client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('reqps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadHTTPGRPCRequestDelay: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request delay', + targets=[ + t.serverWorkloadHTTPGRPCAvgRequestDelay, + ], + description='Average latency of HTTP/GRPC requests received by this workload from client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('ms'), + serverWorkloadHTTPGRPCRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC request throughput', + targets=[ + t.serverWorkloadHTTPGRPCRequestThroughputRate, + ], + description='Rate of HTTP/GRPC request data received by this workload from client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadHTTPGRPCResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP/GRPC response throughput', + targets=[ + t.serverWorkloadHTTPGRPCResponseThroughputRate, + ], + description='Rate of HTTP/GRPC response data sent from this workload to client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadHTTPResponses: + commonlib.panels.generic.timeSeries.base.new( + 'HTTP responses / $__interval', + targets=[ + t.serverWorkloadHTTP1xxResponses, + t.serverWorkloadHTTP2xxResponses, + t.serverWorkloadHTTP3xxResponses, + t.serverWorkloadHTTP4xxResponses, + t.serverWorkloadHTTP5xxResponses, + ], + description='The types of HTTP responses sent from this workload to client workloads in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadGRPCResponses: + commonlib.panels.generic.timeSeries.base.new( + 'GRPC responses / $__interval', + targets=[ + t.serverWorkloadGRPCResponses, + ], + description='The types of GRPC responses sent from this workload to client workloads in the Istio system.', + ) + + timeSeries.options.legend.withDisplayMode('table') + + timeSeries.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadTCPRequestThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP request throughput', + targets=[ + t.serverWorkloadTCPRequestThroughputRate, + ], + description='Rate of TCP request data received by this workload from client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + serverWorkloadTCPResponseThroughput: + commonlib.panels.generic.timeSeries.base.new( + 'TCP response throughput', + targets=[ + t.serverWorkloadTCPResponseThroughputRate, + ], + description='Rate of TCP response data sent from this workload to client workloads in the Istio system.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withUnit('Bps') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }), + + httpResponseOverview: + pieChart.new(title='HTTP response overview') + + pieChart.queryOptions.withTargets([ + t.gatewayHTTPOKResponses, + t.gatewayHTTPErrorResponses, + t.proxyHTTPOKResponses, + t.proxyHTTPErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Recent number of successful (1xx, 2xx, 3xx) vs error (4xx, 5xx) HTTP responses received by various components of the Istio system.'), + clientServiceHTTPResponseOverview: + pieChart.new(title='HTTP response overview') + + pieChart.queryOptions.withTargets([ + t.clientServiceHTTPOKResponses, + t.clientServiceHTTPErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of HTTP responses received by this service from server services in the Istio system.'), + clientServiceGRPCResponseOverview: + pieChart.new(title='GRPC response overview') + + pieChart.queryOptions.withTargets([ + t.clientServiceGRPCOKResponses, + t.clientServiceGRPCErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of GRPC responses received by this service from server services in the Istio system.'), + serverServiceHTTPResponseOverview: + pieChart.new(title='HTTP response overview') + + pieChart.queryOptions.withTargets([ + t.serverServiceHTTPOKResponses, + t.serverServiceHTTPErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of HTTP responses sent from this service to client services in the Istio system.'), + serverServiceGRPCResponseOverview: + pieChart.new(title='GRPC response overview') + + pieChart.queryOptions.withTargets([ + t.serverServiceGRPCOKResponses, + t.serverServiceGRPCErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of GRPC responses sent from this service to client services in the Istio system.'), + clientWorkloadHTTPResponseOverview: + pieChart.new(title='HTTP response overview') + + pieChart.queryOptions.withTargets([ + t.clientWorkloadHTTPOKResponses, + t.clientWorkloadHTTPErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of HTTP responses received by this workload from server workloads in the Istio system.'), + clientWorkloadGRPCResponseOverview: + pieChart.new(title='GRPC response overview') + + pieChart.queryOptions.withTargets([ + t.clientWorkloadGRPCOKResponses, + t.clientWorkloadGRPCErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of GRPC responses received by this workload from server workloads in the Istio system.'), + serverWorkloadHTTPResponseOverview: + pieChart.new(title='HTTP response overview') + + pieChart.queryOptions.withTargets([ + t.serverWorkloadHTTPOKResponses, + t.serverWorkloadHTTPErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of HTTP responses sent from this workload to client workloads in the Istio system.'), + serverWorkloadGRPCResponseOverview: + pieChart.new(title='GRPC response overview') + + pieChart.queryOptions.withTargets([ + t.serverWorkloadGRPCOKResponses, + t.serverWorkloadGRPCErrorResponses, + ]) + + pieChart.options.legend.withPlacement('right') + + pieChart.options.reduceOptions.withCalcs(['sum']) + + pieChart.options.withTooltipMixin({ + mode: 'multi', + sort: 'desc', + }) + + pieChart.queryOptions.withDatasource('prometheus', '${datasource}',) + + pieChart.panelOptions.withDescription('Overview of the types of GRPC responses sent from this workload to client workloads in the Istio system.'), + + xDSPushes: + barGauge.new(title='xDS pushes') + + barGauge.queryOptions.withTargets([ + t.pilotCDSxDSPushes, + t.pilotEDSxDSPushes, + t.pilotLDSxDSPushes, + t.pilotRDSxDSPushes, + t.pilotSDSxDSPushes, + t.pilotNDSxDSPushes, + ]) + + barGauge.queryOptions.withDatasource('prometheus', '${datasource}',) + + barGauge.panelOptions.withDescription('Number of xDS pushes by Istiod over the entire time range for the Istio system.') + + barGauge.standardOptions.thresholds.withSteps([ + barGauge.thresholdStep.withColor('super-light-green'), + ]) + + barGauge.options.withOrientation('horizontal') + + barGauge.options.reduceOptions.withCalcs(['sum']), + galleyValidations: + barGauge.new(title='Galley validations') + + barGauge.queryOptions.withTargets([ + t.galleyValidationsPassed, + t.galleyValidationsFailed, + ]) + + barGauge.queryOptions.withDatasource('prometheus', '${datasource}') + + barGauge.panelOptions.withDescription('Number of galley validations over the entire time range for the Istio system.') + + barGauge.standardOptions.thresholds.withSteps([ + barGauge.thresholdStep.withColor('super-light-green'), + ]) + + barGauge.options.withOrientation('horizontal') + + barGauge.options.reduceOptions.withCalcs(['sum']), + sidecarInjections: + barGauge.new(title='Sidecar injections') + + barGauge.queryOptions.withTargets([ + t.sidecarInjectionSuccesses, + t.sidecarInjectionFailures, + ]) + + barGauge.queryOptions.withDatasource('prometheus', '${datasource}') + + barGauge.panelOptions.withDescription('Number of sidecar injections over the entire time range for the Istio system.') + + barGauge.standardOptions.thresholds.withSteps([ + barGauge.thresholdStep.withColor('super-light-green'), + ]) + + barGauge.options.withOrientation('horizontal') + + barGauge.options.reduceOptions.withCalcs(['sum']), + + xDSPushDelay: + histogram.new(title='xDS push delay (s)') + + histogram.queryOptions.withTargets([ + t.pilotxDSProxyPushLatencyBucket, + ]) + + histogram.queryOptions.withDatasource('prometheus', '${datasource}') + + histogram.options.legend.withPlacement('right') + + histogram.standardOptions.color.withMode('thresholds') + + histogram.standardOptions.thresholds.withSteps([ + histogram.thresholdStep.withColor('super-light-green'), + ]) + + histogram.panelOptions.withDescription('The latency of xDS pushes by Istiod over the entire time range for the Istio system.'), + + services: + table.new( + title='Services' + ) + + table.queryOptions.withTargets([ + t.tableSourceServiceHTTPGRPCRequestRate, + t.tableDestinationServiceHTTPGRPCRequestRate, + t.tableSourceServiceHTTPGRPCRequestLatency, + t.tableDestinationServiceHTTPGRPCRequestLatency, + t.tableSourceServiceHTTPRequestSuccessRate, + t.tableDestinationServiceHTTPRequestSuccessRate, + t.tableSourceServiceTCPReceiveRate, + t.tableSourceServiceTCPSendRate, + ]) + + table.queryOptions.withDatasource('prometheus', '${datasource}') + + table.panelOptions.withDescription('Service details for the Istio system.') + + table.standardOptions.withNoValue('NA') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('job') + + table.fieldOverride.byName.withProperty('custom.hidden', 'true'), + table.fieldOverride.byName.new('Service') + + table.fieldOverride.byName.withProperty('links', [ + { + title: '', + url: 'd/istio-services-overview?var-datasource=${datasource}&var-job=${__data.fields["Job"]}&var-cluster=${__data.fields["Cluster"]}&var-service=${__value.raw}&${__url_time_range}', + }, + ]), + table.fieldOverride.byName.new('HTTP/GRPC tx delay') + + table.fieldOverride.byName.withProperty('custom.width', 157) + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'ms'), + table.fieldOverride.byName.new('HTTP/GRPC rx delay') + + table.fieldOverride.byName.withProperty('custom.width', 157) + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'ms'), + table.fieldOverride.byName.new('HTTP/GRPC tx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'reqps'), + table.fieldOverride.byName.new('HTTP/GRPC rx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'reqps'), + table.fieldOverride.byName.new('HTTP tx success') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'percent'), + table.fieldOverride.byName.new('HTTP rx success') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'percent'), + table.fieldOverride.byName.new('TCP tx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'Bps'), + table.fieldOverride.byName.new('TCP rx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'Bps'), + ]) + + table.options.withFooter( + table.options.footer.TableFooterOptions.withReducerMixin(['sum']) + ) + + table.queryOptions.withTransformationsMixin([ + { + id: 'merge', + options: {}, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + }, + includeByName: {}, + indexByName: { + Time: 0, + 'Value #A': 4, + 'Value #B': 7, + 'Value #C': 5, + 'Value #D': 8, + 'Value #E': 6, + 'Value #F': 9, + 'Value #G': 10, + 'Value #H': 11, + cluster: 1, + job: 2, + service: 3, + }, + renameByName: { + 'Value #A': 'HTTP/GRPC tx', + 'Value #B': 'HTTP/GRPC rx', + 'Value #C': 'HTTP/GRPC tx delay', + 'Value #D': 'HTTP/GRPC rx delay', + 'Value #E': 'HTTP tx success', + 'Value #F': 'HTTP rx success', + 'Value #G': 'TCP tx', + 'Value #H': 'TCP rx', + cluster: 'Cluster', + job: 'Job', + service: 'Service', + }, + }, + }, + ]), + workloads: + table.new( + title='Workloads' + ) + + table.queryOptions.withTargets([ + t.tableSourceWorkloadHTTPGRPCRequestRate, + t.tableDestinationWorkloadHTTPGRPCRequestRate, + t.tableSourceWorkloadHTTPGRPCRequestLatency, + t.tableDestinationWorkloadHTTPGRPCRequestLatency, + t.tableSourceWorkloadHTTPRequestSuccessRate, + t.tableDestinationWorkloadHTTPRequestSuccessRate, + t.tableSourceWorkloadTCPRequestThroughputRate, + t.tableDestinationWorkloadTCPResponseThroughputRate, + ]) + + table.queryOptions.withDatasource('prometheus', '${datasource}') + + table.panelOptions.withDescription('Workload details for a service in the Istio system.') + + table.standardOptions.withNoValue('NA') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('job') + + table.fieldOverride.byName.withProperty('custom.hidden', 'true'), + table.fieldOverride.byName.new('Service') + + table.fieldOverride.byName.withProperty('links', [ + { + title: '', + url: 'd/istio-workloads-overview?var-datasource=${datasource}&var-job=${__data.fields["Job"]}&var-cluster=${__data.fields["Cluster"]}&var-service=${__value.raw}&${__url_time_range}', + }, + ]), + table.fieldOverride.byName.new('Workload') + + table.fieldOverride.byName.withProperty('links', [ + { + title: '', + url: 'd/istio-workloads-overview?var-datasource=${datasource}&var-job=${__data.fields["Job"]}&var-cluster=${__data.fields["Cluster"]}&var-service=${__data.fields["Service"]}&var-workload=${__value.raw}&${__url_time_range}', + }, + ]), + table.fieldOverride.byName.new('HTTP/GRPC tx delay') + + table.fieldOverride.byName.withProperty('custom.width', 157) + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'ms'), + table.fieldOverride.byName.new('HTTP/GRPC rx delay') + + table.fieldOverride.byName.withProperty('custom.width', 157) + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'ms'), + table.fieldOverride.byName.new('HTTP/GRPC tx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'reqps'), + table.fieldOverride.byName.new('HTTP/GRPC rx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'reqps'), + table.fieldOverride.byName.new('HTTP tx success') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'percent'), + table.fieldOverride.byName.new('HTTP rx success') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'percent'), + table.fieldOverride.byName.new('TCP tx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'Bps'), + table.fieldOverride.byName.new('TCP rx') + + table.fieldOverride.byName.withProperty('custom.align', 'left') + + table.fieldOverride.byName.withProperty('unit', 'Bps'), + ]) + + table.options.withFooter( + table.options.footer.TableFooterOptions.withReducerMixin(['sum']) + ) + + table.queryOptions.withTransformationsMixin([ + { + id: 'merge', + options: {}, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + }, + includeByName: {}, + indexByName: { + Time: 0, + 'Value #A': 5, + 'Value #B': 8, + 'Value #C': 6, + 'Value #D': 9, + 'Value #E': 7, + 'Value #F': 10, + 'Value #G': 11, + 'Value #H': 12, + cluster: 1, + job: 2, + service: 3, + workload: 4, + }, + renameByName: { + 'Value #A': 'HTTP/GRPC tx', + 'Value #B': 'HTTP/GRPC rx', + 'Value #C': 'HTTP/GRPC tx delay', + 'Value #D': 'HTTP/GRPC rx delay', + 'Value #E': 'HTTP tx success', + 'Value #F': 'HTTP rx success', + 'Value #G': 'TCP tx', + 'Value #H': 'TCP rx', + cluster: 'Cluster', + job: 'Job', + service: 'Service', + workload: 'Workload', + }, + }, + }, + ]), + }, +} diff --git a/istio-2-mixin/targets.libsonnet b/istio-2-mixin/targets.libsonnet new file mode 100644 index 000000000..25615cf08 --- /dev/null +++ b/istio-2-mixin/targets.libsonnet @@ -0,0 +1,989 @@ +local g = import './g.libsonnet'; +local prometheusQuery = g.query.prometheus; +local lokiQuery = g.query.loki; + +{ + new(this): { + local vars = this.grafana.variables, + local config = this.config, + local panel = g.panel, + local componentProxyFilter = 'component="proxy"', + local typeGatewayFilter = 'type="Gateway"', + local typeVirtualServiceFilter = 'type="VirtualService"', + local typeDestinationRuleFilter = 'type="DestinationRule"', + local typeServiceEntryFilter = 'type="ServiceEntry"', + local typeWorkloadEntryFilter = 'type="WorkloadEntry"', + local eventAddFilter = 'event="add"', + local eventDeleteFilter = 'event="delete"', + local reporterSourceFilter = 'reporter="source"', + local reporterDestinationFilter = 'reporter="destination"', + local requestProtocolHTTPFilter = 'request_protocol="http"', + local httpResponseCodeOKFilter = 'request_protocol="http", response_code=~"[123].+"', + local httpResponseCodeErrorFilter = 'request_protocol="http", response_code=~"[45].+"', + local httpResponseCode1xxFilter = 'request_protocol="http", response_code=~"1.+"', + local httpResponseCode2xxFilter = 'request_protocol="http", response_code=~"2.+"', + local httpResponseCode3xxFilter = 'request_protocol="http", response_code=~"3.+"', + local httpResponseCode4xxFilter = 'request_protocol="http", response_code=~"4.+"', + local httpResponseCode5xxFilter = 'request_protocol="http", response_code=~"5.+"', + local grpcResponseStatusOKFilter = 'grpc_response_status="0"', + local grpcResponseStatusErrorFilter = 'grpc_response_status=~"[1-9]\\\\d*"', + local grpcResponseStatusFilter = 'grpc_response_status=~"[0-9]\\\\d*"', + local typeCDSFilter = 'type="cds"', + local typeEDSFilter = 'type="eds"', + local typeLDSFilter = 'type="lds"', + local typeSDSFilter = 'type="sds"', + local typeNDSFilter = 'type="nds"', + local typeRDSFilter = 'type="rds"', + local clusterNamexDSGRPCFilter = 'cluster_name="xds-grpc"', + + proxyCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'count by(job, cluster) (istio_build{%(queriesGroupSelector)s, %(componentProxyFilter)s})' % vars { componentProxyFilter: componentProxyFilter } + ), + gatewayCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeGatewayFilter)s, %(eventAddFilter)s}) - (max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeGatewayFilter)s, %(eventDeleteFilter)s}) or max(up * 0))' % vars { typeGatewayFilter: typeGatewayFilter, eventAddFilter: eventAddFilter, eventDeleteFilter: eventDeleteFilter } + ), + virtualServiceCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeVirtualServiceFilter)s, %(eventAddFilter)s}) - (max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeVirtualServiceFilter)s, %(eventDeleteFilter)s}) or (max(up) * 0))' % vars { typeVirtualServiceFilter: typeVirtualServiceFilter, eventAddFilter: eventAddFilter, eventDeleteFilter: eventDeleteFilter } + ), + destinationRuleCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeDestinationRuleFilter)s, %(eventAddFilter)s}) - (max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeDestinationRuleFilter)s, %(eventDeleteFilter)s}) or (max(up) * 0))' % vars { typeDestinationRuleFilter: typeDestinationRuleFilter, eventAddFilter: eventAddFilter, eventDeleteFilter: eventDeleteFilter } + ), + serviceEntryCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeServiceEntryFilter)s, %(eventAddFilter)s}) - (max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeServiceEntryFilter)s, %(eventDeleteFilter)s}) or (max(up) * 0))' % vars { typeServiceEntryFilter: typeServiceEntryFilter, eventAddFilter: eventAddFilter, eventDeleteFilter: eventDeleteFilter } + ), + workloadEntryCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeWorkloadEntryFilter)s, %(eventAddFilter)s}) - (max(pilot_k8s_cfg_events{%(queriesGroupSelector)s, %(typeWorkloadEntryFilter)s, %(eventDeleteFilter)s}) or (max(up) * 0))' % vars { typeWorkloadEntryFilter: typeWorkloadEntryFilter, eventAddFilter: eventAddFilter, eventDeleteFilter: eventDeleteFilter } + ), + istiodCPUUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by (job, cluster) (rate(process_cpu_seconds_total{%(queriesGroupIstiodSelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod'), + gatewayCPUUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(istio_agent_process_cpu_seconds_total{%(queriesGroupGatewaySelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway'), + proxyCPUUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(istio_agent_process_cpu_seconds_total{%(queriesGroupProxySelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy'), + istiodOpenFileDescriptors: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (process_open_fds{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod'), + gatewayOpenFileDescriptors: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_open_fds{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway'), + proxyOpenFileDescriptors: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_open_fds{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy'), + istiodVirtualMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (process_virtual_memory_bytes{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod - virtual'), + istiodResidentMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (process_resident_memory_bytes{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod - resident'), + gatewayVirtualMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_virtual_memory_bytes{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - virtual'), + gatewayResidentMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_resident_memory_bytes{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - resident'), + proxyVirtualMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_virtual_memory_bytes{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - virtual'), + proxyResidentMemory: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_process_resident_memory_bytes{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - resident'), + istiodHeapAllocated: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (go_memstats_heap_alloc_bytes{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod - alloc'), + istiodHeapInUse: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (go_memstats_heap_inuse_bytes{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod - inuse'), + istiodHeapSystem: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (go_memstats_heap_sys_bytes{%(queriesGroupIstiodSelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - istiod - sys'), + gatewayHeapAllocated: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_alloc_bytes{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - alloc'), + gatewayHeapInUse: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_inuse_bytes{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - inuse'), + gatewayHeapSystem: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_sys_bytes{%(queriesGroupGatewaySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - sys'), + proxyHeapAllocated: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_alloc_bytes{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - alloc'), + proxyHeapInUse: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_inuse_bytes{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - inuse'), + proxyHeapSystem: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (istio_agent_go_memstats_heap_sys_bytes{%(queriesGroupProxySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - sys'), + gatewayHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(istio_requests_total{%(queriesGroupGatewaySelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - gateway'), + proxyHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(istio_requests_total{%(queriesGroupProxySelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy'), + gatewayHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (istio_requests_total{%(queriesGroupGatewaySelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - ok'), + gatewayHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (istio_requests_total{%(queriesGroupGatewaySelector)s, %(reporterSourceFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{cluster}} - gateway - error'), + proxyHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (istio_requests_total{%(queriesGroupProxySelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - ok'), + proxyHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (istio_requests_total{%(queriesGroupProxySelector)s, %(reporterSourceFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{cluster}} - proxy - error'), + pilotCDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeCDSFilter)s})[$__interval:])' % vars { typeCDSFilter: typeCDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - CDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotEDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeEDSFilter)s})[$__interval:])' % vars { typeEDSFilter: typeEDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - EDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotLDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeLDSFilter)s})[$__interval:])' % vars { typeLDSFilter: typeLDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - LDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotRDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeRDSFilter)s})[$__interval:])' % vars { typeRDSFilter: typeRDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - RDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotSDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeSDSFilter)s})[$__interval:])' % vars { typeSDSFilter: typeSDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - SDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotNDSxDSPushes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_pushes{%(queriesGroupIstiodSelector)s, %(typeNDSFilter)s})[$__interval:])' % vars { typeNDSFilter: typeNDSFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - NDS') + + panel.barGauge.queryOptions.withInterval('1m'), + pilotxDSProxyPushLatencyBucket: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(le, job, cluster) (increase(pilot_proxy_convergence_time_bucket{%(queriesGroupIstiodSelector)s}[$__range:]))' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}}') + + panel.histogram.queryOptions.withInterval('1m') + + prometheusQuery.withInstant(true) + + prometheusQuery.withFormat('heatmap'), + galleyValidationsPassed: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (galley_validation_passed{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - passed') + + panel.barGauge.queryOptions.withInterval('1m'), + galleyValidationsFailed: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster) (galley_validation_failed{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - failed') + + panel.barGauge.queryOptions.withInterval('1m'), + envoyxDSBytesSendRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(envoy_cluster_upstream_cx_rx_bytes_total{%(queriesGroupSelector)s, %(clusterNamexDSGRPCFilter)s}[$__rate_interval]))' % vars { clusterNamexDSGRPCFilter: clusterNamexDSGRPCFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - sent'), + envoyxDSBytesReceiveRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster) (rate(envoy_cluster_upstream_cx_tx_bytes_total{%(queriesGroupSelector)s, %(clusterNamexDSGRPCFilter)s}[$__rate_interval]))' % vars { clusterNamexDSGRPCFilter: clusterNamexDSGRPCFilter } + ) + + prometheusQuery.withLegendFormat('{{cluster}} - received'), + pilotCDSxDSRejections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_cds_reject{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - CDS reject') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotEDSxDSRejections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_eds_reject{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - EDS reject') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotRDSxDSRejections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_rds_reject{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - RDS reject') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotLDSxDSRejections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_lds_reject{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - LDS reject') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotxDSWriteTimeouts: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_xds_write_timeout{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - write timeout') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotxDSInternalErrors: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_total_xds_internal_errors{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - internal') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotxDSProxyRejects: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_total_xds_rejects{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - proxy rejects') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotxDSInboundListenerConflicts: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_conflict_inbound_listener{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - in listener conflict') + + panel.timeSeries.queryOptions.withInterval('1m'), + pilotxDSOutboundListenerTCPConflicts: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (pilot_conflict_outbound_listener_tcp_over_current_tcp{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - out listener tcp conflict') + + panel.timeSeries.queryOptions.withInterval('1m'), + sidecarInjectionSuccesses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (sidecar_injection_success_total{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - success') + + panel.barGauge.queryOptions.withInterval('1m'), + sidecarInjectionFailures: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by (job, cluster) (sidecar_injection_failure_total{%(queriesGroupIstiodSelector)s})[$__interval:])' % vars + ) + + prometheusQuery.withLegendFormat('{{cluster}} - failure') + + panel.barGauge.queryOptions.withInterval('1m'), + tableSourceServiceHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service) (label_replace(rate(istio_requests_total{%(queriesGroupSelector)s, %(reporterSourceFilter)s}[$__rate_interval]), "service", "$1", "source_canonical_service", "(.*)"))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableDestinationServiceHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service) (label_replace(rate(istio_requests_total{%(queriesGroupSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]), "service", "$1", "destination_canonical_service", "(.*)"))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableSourceServiceHTTPGRPCRequestLatency: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, service) (label_replace(increase(istio_request_duration_milliseconds_sum{%(queriesGroupSelector)s, %(reporterSourceFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)")) + / + clamp_min(sum by(job, cluster, service) (label_replace(increase(istio_request_duration_milliseconds_count{%(queriesGroupSelector)s, %(reporterSourceFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)")), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableDestinationServiceHTTPGRPCRequestLatency: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, service) (label_replace(increase(istio_request_duration_milliseconds_sum{%(queriesGroupSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)")) + / + clamp_min(sum by(job, cluster, service) (label_replace(increase(istio_request_duration_milliseconds_count{%(queriesGroupSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)")), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableSourceServiceHTTPRequestSuccessRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + 100 * sum by(job, cluster, service) (label_replace(increase(istio_requests_total{%(queriesGroupSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)")) + / + clamp_min(sum by(job, cluster, service) (label_replace(increase(istio_requests_total{%(queriesGroupSelector)s, %(reporterSourceFilter)s, %(requestProtocolHTTPFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)")), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter, requestProtocolHTTPFilter: requestProtocolHTTPFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableDestinationServiceHTTPRequestSuccessRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + 100 * sum by(job, cluster, service) (label_replace(increase(istio_requests_total{%(queriesGroupSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeOKFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)")) + / + clamp_min(sum by(job, cluster, service) (label_replace(increase(istio_requests_total{%(queriesGroupSelector)s, %(reporterDestinationFilter)s, %(requestProtocolHTTPFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)")), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter, requestProtocolHTTPFilter: requestProtocolHTTPFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableSourceServiceTCPReceiveRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service) (label_replace(rate(istio_tcp_received_bytes_total{%(queriesGroupSelector)s, %(reporterSourceFilter)s}[$__rate_interval]), "service", "$1", "source_canonical_service", "(.*)"))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableSourceServiceTCPSendRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service) (label_replace(rate(istio_tcp_sent_bytes_total{%(queriesGroupSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]), "service", "$1", "destination_canonical_service", "(.*)"))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + clientServiceHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_canonical_service}} -> {{destination_canonical_service}}'), + clientServiceHTTPGRPCAvgRequestDelay: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, source_canonical_service, destination_canonical_service) (increase(istio_request_duration_milliseconds_sum{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval:])) + / + clamp_min(sum by(job, cluster, source_canonical_service, destination_canonical_service) (increase(istio_request_duration_milliseconds_count{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval:])), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} -> {{destination_canonical_service}}'), + clientServiceHTTPGRPCRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_request_bytes_sum{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_canonical_service}} -> {{destination_canonical_service}}'), + clientServiceHTTPGRPCResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_response_bytes_sum{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}'), + clientServiceHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (ok)'), + clientServiceHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (error)'), + clientServiceHTTP1xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCode1xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode1xxFilter: httpResponseCode1xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (1xx)'), + clientServiceHTTP2xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCode2xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode2xxFilter: httpResponseCode2xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (2xx)'), + clientServiceHTTP3xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCode3xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode3xxFilter: httpResponseCode3xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (3xx)'), + clientServiceHTTP4xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCode4xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode4xxFilter: httpResponseCode4xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (4xx)'), + clientServiceHTTP5xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCode5xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode5xxFilter: httpResponseCode5xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (5xx)'), + clientServiceGRPCOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusOKFilter: grpcResponseStatusOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (ok)'), + clientServiceGRPCErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusErrorFilter: grpcResponseStatusErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: (error)'), + clientServiceGRPCResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusFilter: grpcResponseStatusFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}: {{grpc_response_status}}'), + clientServiceTCPRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_tcp_received_bytes_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_canonical_service}} -> {{destination_canonical_service}}'), + clientServiceTCPResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_tcp_sent_bytes_total{%(queriesGroupClientServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_canonical_service}} <- {{destination_canonical_service}}'), + serverServiceHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} <- {{source_canonical_service}}'), + serverServiceHTTPGRPCAvgRequestDelay: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, source_canonical_service, destination_canonical_service) (increase(istio_request_duration_milliseconds_sum{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:])) + / + clamp_min(sum by(job, cluster, source_canonical_service, destination_canonical_service) (increase(istio_request_duration_milliseconds_count{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:])), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} <- {{source_canonical_service}}'), + serverServiceHTTPGRPCRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_request_bytes_sum{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} <- {{source_canonical_service}}'), + serverServiceHTTPGRPCResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_response_bytes_sum{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}'), + serverServiceHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (ok)'), + serverServiceHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (error)'), + serverServiceHTTP1xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode1xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode1xxFilter: httpResponseCode1xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (1xx)'), + serverServiceHTTP2xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode2xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode2xxFilter: httpResponseCode2xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (2xx)'), + serverServiceHTTP3xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode3xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode3xxFilter: httpResponseCode3xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (3xx)'), + serverServiceHTTP4xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode4xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode4xxFilter: httpResponseCode4xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (4xx)'), + serverServiceHTTP5xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode5xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode5xxFilter: httpResponseCode5xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (5xx)'), + serverServiceGRPCOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusOKFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusOKFilter: grpcResponseStatusOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (ok)'), + serverServiceGRPCErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusErrorFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusErrorFilter: grpcResponseStatusErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: (error)'), + serverServiceGRPCResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_canonical_service, destination_canonical_service) (istio_requests_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusFilter: grpcResponseStatusFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}: {{grpc_response_status}}'), + serverServiceTCPRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_tcp_received_bytes_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} <- {{source_canonical_service}}'), + serverServiceTCPResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_canonical_service, destination_canonical_service) (rate(istio_tcp_sent_bytes_total{%(queriesGroupServerServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_canonical_service}} -> {{source_canonical_service}}'), + tableSourceWorkloadHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service, workload) (label_replace(label_replace(rate(istio_requests_total{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)"))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableDestinationWorkloadHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service, workload) (label_replace(label_replace(rate(istio_requests_total{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)"))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableSourceWorkloadHTTPGRPCRequestLatency: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_request_duration_milliseconds_sum{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)")) + / + clamp_min(sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_request_duration_milliseconds_count{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)")), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableDestinationWorkloadHTTPGRPCRequestLatency: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_request_duration_milliseconds_sum{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)")) + / + clamp_min(sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_request_duration_milliseconds_count{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)")), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableSourceWorkloadHTTPRequestSuccessRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + 100 * sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_requests_total{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)")) + / + clamp_min(sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_requests_total{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s, %(requestProtocolHTTPFilter)s}[$__rate_interval:]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)")), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter, requestProtocolHTTPFilter: requestProtocolHTTPFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableDestinationWorkloadHTTPRequestSuccessRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + 100 * sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_requests_total{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeOKFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)")) + / + clamp_min(sum by(job, cluster, service, workload) (label_replace(label_replace(increase(istio_requests_total{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s, %(requestProtocolHTTPFilter)s}[$__rate_interval:]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)")), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter, requestProtocolHTTPFilter: requestProtocolHTTPFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true) + + panel.table.queryOptions.withInterval('1m'), + tableSourceWorkloadTCPRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service, workload) (label_replace(label_replace(rate(istio_tcp_received_bytes_total{%(queriesGroupSourceServiceSelector)s, %(reporterSourceFilter)s}[$__rate_interval]), "service", "$1", "source_canonical_service", "(.*)"), "workload", "$1", "source_workload", "(.*)"))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + tableDestinationWorkloadTCPResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, service, workload) (label_replace(label_replace(rate(istio_tcp_sent_bytes_total{%(queriesGroupDestinationServiceSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]), "service", "$1", "destination_canonical_service", "(.*)"), "workload", "$1", "destination_workload", "(.*)"))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + clientWorkloadHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_workload}} -> {{destination_workload}}'), + clientWorkloadHTTPGRPCAvgRequestDelay: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, source_workload, destination_workload) (increase(istio_request_duration_milliseconds_sum{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval:])) + / + clamp_min(sum by(job, cluster, source_workload, destination_workload) (increase(istio_request_duration_milliseconds_count{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval:])), 1) + ||| % vars { reporterSourceFilter: reporterSourceFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} -> {{destination_workload}}'), + clientWorkloadHTTPGRPCRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_request_bytes_sum{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_workload}} -> {{destination_workload}}'), + clientWorkloadHTTPGRPCResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_response_bytes_sum{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}'), + clientWorkloadHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (ok)'), + clientWorkloadHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (error)'), + clientWorkloadHTTP1xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCode1xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode1xxFilter: httpResponseCode1xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (1xx)'), + clientWorkloadHTTP2xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCode2xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode2xxFilter: httpResponseCode2xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (2xx)'), + clientWorkloadHTTP3xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCode3xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode3xxFilter: httpResponseCode3xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (3xx)'), + clientWorkloadHTTP4xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCode4xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode4xxFilter: httpResponseCode4xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (4xx)'), + clientWorkloadHTTP5xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(httpResponseCode5xxFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, httpResponseCode5xxFilter: httpResponseCode5xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (5xx)'), + clientWorkloadGRPCOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusOKFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusOKFilter: grpcResponseStatusOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (ok)'), + clientWorkloadGRPCErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusErrorFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusErrorFilter: grpcResponseStatusErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: (error)'), + clientWorkloadGRPCResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s, %(grpcResponseStatusFilter)s})[$__interval:])' % vars { reporterSourceFilter: reporterSourceFilter, grpcResponseStatusFilter: grpcResponseStatusFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}: {{grpc_response_status}}'), + clientWorkloadTCPRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_tcp_received_bytes_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_workload}} -> {{destination_workload}}'), + clientWorkloadTCPResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_tcp_sent_bytes_total{%(queriesGroupClientWorkloadSelector)s, %(reporterSourceFilter)s}[$__rate_interval]))' % vars { reporterSourceFilter: reporterSourceFilter } + ) + + prometheusQuery.withLegendFormat('{{source_workload}} <- {{destination_workload}}'), + serverWorkloadHTTPGRPCRequestRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_workload}} <- {{source_workload}}'), + serverWorkloadHTTPGRPCAvgRequestDelay: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + ||| + sum by(job, cluster, source_workload, destination_workload) (increase(istio_request_duration_milliseconds_sum{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:])) + / + clamp_min(sum by(job, cluster, source_workload, destination_workload) (increase(istio_request_duration_milliseconds_count{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval:])), 1) + ||| % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} <- {{source_workload}}'), + serverWorkloadHTTPGRPCRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_request_bytes_sum{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_workload}} <- {{source_workload}}'), + serverWorkloadHTTPGRPCResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_response_bytes_sum{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}'), + serverWorkloadHTTPOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeOKFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeOKFilter: httpResponseCodeOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (ok)'), + serverWorkloadHTTPErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCodeErrorFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCodeErrorFilter: httpResponseCodeErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (error)'), + serverWorkloadHTTP1xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode1xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode1xxFilter: httpResponseCode1xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (1xx)'), + serverWorkloadHTTP2xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode2xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode2xxFilter: httpResponseCode2xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (2xx)'), + serverWorkloadHTTP3xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode3xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode3xxFilter: httpResponseCode3xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (3xx)'), + serverWorkloadHTTP4xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode4xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode4xxFilter: httpResponseCode4xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (4xx)'), + serverWorkloadHTTP5xxResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(httpResponseCode5xxFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, httpResponseCode5xxFilter: httpResponseCode5xxFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (5xx)'), + serverWorkloadGRPCOKResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusOKFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusOKFilter: grpcResponseStatusOKFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (ok)'), + serverWorkloadGRPCErrorResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusErrorFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusErrorFilter: grpcResponseStatusErrorFilter } + ) + + panel.pieChart.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: (error)'), + serverWorkloadGRPCResponses: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'increase(sum by(job, cluster, source_workload, destination_workload) (istio_requests_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s, %(grpcResponseStatusFilter)s})[$__interval:])' % vars { reporterDestinationFilter: reporterDestinationFilter, grpcResponseStatusFilter: grpcResponseStatusFilter } + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}: {{grpc_response_status}}'), + serverWorkloadTCPRequestThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_tcp_received_bytes_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_workload}} <- {{source_workload}}'), + serverWorkloadTCPResponseThroughputRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by(job, cluster, source_workload, destination_workload) (rate(istio_tcp_sent_bytes_total{%(queriesGroupServerWorkloadSelector)s, %(reporterDestinationFilter)s}[$__rate_interval]))' % vars { reporterDestinationFilter: reporterDestinationFilter } + ) + + prometheusQuery.withLegendFormat('{{destination_workload}} -> {{source_workload}}'), + + // add more metrics or loki queries as targets below: + + }, +} diff --git a/istio-2-mixin/variables.libsonnet b/istio-2-mixin/variables.libsonnet new file mode 100644 index 000000000..bd23af350 --- /dev/null +++ b/istio-2-mixin/variables.libsonnet @@ -0,0 +1,206 @@ +// variables.libsonnet +local g = import './g.libsonnet'; +local var = g.dashboard.variable; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; + +{ + new(this): + { + local groupLabels = this.config.groupLabels, + local istiodLabel = 'istiod', + local gatewayLabel = 'gateway', + local proxyLabel = 'proxy', + local namespaceLabel = 'namespace', + local namespaceQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster"}) by (destination_workload_namespace, source_workload_namespace) or sum(istio_tcp_sent_bytes_total{job=~"$job", cluster=~"$cluster"}) by (destination_workload_namespace, source_workload_namespace))', + local namespaceRegex = '/(?:destination|source)_workload_namespace="([^"]*)/g', + local serviceLabel = 'service', + local serviceQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster", source_workload_namespace=~"$namespace"}) by (source_canonical_service) or sum(istio_requests_total{job=~"$job", cluster=~"$cluster", destination_workload_namespace=~"$namespace"}) by (destination_canonical_service) or sum(istio_tcp_sent_bytes_total{job=~"$job", cluster=~"$cluster", source_workload_namespace=~"$namespace"}) by (source_canonical_service) or sum(istio_tcp_sent_bytes_total{job=~"$job", cluster=~"$cluster", destination_workload_namespace=~"$namespace"}) by (destination_canonical_service))', + local serviceRegex = '/(?:source_canonical_service|destination_canonical_service)="([^"]*)/g', + local workloadLabel = 'workload', + local workloadQuery = 'query_result(sum by(source_workload) (istio_requests_total{job=~"$job", cluster=~"$cluster", source_workload_namespace=~"$namespace", source_canonical_service=~"$service"}) or sum by(destination_workload) (istio_requests_total{job=~"$job", cluster=~"$cluster", destination_workload_namespace=~"$namespace", destination_service_name=~"$service"}) or sum by(source_workload) (istio_tcp_sent_bytes_total{job=~"$job", cluster=~"$cluster", source_workload_namespace=~"$namespace", source_canonical_service=~"$service"}) or sum by(destination_workload) (istio_tcp_sent_bytes_total{job=~"$job", cluster=~"$cluster", destination_workload_namespace=~"$namespace", destination_service_name=~"$service"}))', + local workloadRegex = '/(?:source|destination)_workload="([^"]*)/g', + local clientServiceLabel = 'client_service', + local clientServiceQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster", destination_canonical_service=~"$service"}) by (destination_canonical_service, source_canonical_service) or sum(istio_tcp_received_bytes_total{job=~"$job", cluster=~"$cluster", destination_canonical_service=~"$service"}) by (destination_canonical_service, source_canonical_service))', + local clientServiceRegex = '/source_canonical_service="([^"]*)/', + local serverServiceLabel = 'server_service', + local serverServiceQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster", source_canonical_service=~"$service"}) by (destination_canonical_service, source_canonical_service) or sum(istio_tcp_received_bytes_total{job=~"$job", cluster=~"$cluster", source_canonical_service=~"$service"}) by (destination_canonical_service, source_canonical_service))', + local serverServiceRegex = '/destination_canonical_service="([^"]*)/', + local clientWorkloadLabel = 'client_workload', + local clientWorkloadQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster", destination_workload=~"$workload"}) by (source_workload) or sum(istio_tcp_received_bytes_total{job=~"$job", cluster=~"$cluster", destination_workload=~"$workload"}) by (source_workload))', + local clientWorkloadRegex = '/source_workload="([^"]*)/', + local serverWorkloadLabel = 'server_workload', + local serverWorkloadQuery = 'query_result(sum(istio_requests_total{job=~"$job", cluster=~"$cluster", source_workload=~"$workload"}) by (destination_workload) or sum(istio_tcp_received_bytes_total{job=~"$job", cluster=~"$cluster", source_workload=~"$workload"}) by (destination_workload))', + local serverWorkloadRegex = '/destination_workload="([^"]*)/', + local groupVarMetric = 'istiod_uptime_seconds', + local root = self, + + // Generates chained variables to use on on all dashboards + local groupVariablesFromLabels(groupLabels) = + local chainVarProto(index, chainVar) = + var.query.new(chainVar.label) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + chainVar.label, + '%s{%s}' % [groupVarMetric, chainVar.chainSelector], + ) + + var.query.generalOptions.withLabel( + if (chainVar.label == 'cluster') then 'K8s cluster' else utils.toSentenceCase(chainVar.label) + ) + + var.query.selectionOptions.withIncludeAll( + value=true, + customAllValue='.+', + ) + + var.query.selectionOptions.withMulti( + true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false, + ); + std.mapWithIndex(chainVarProto, utils.chainLabels(groupLabels, [])), + datasources: { + prometheus: + var.datasource.new('datasource', 'prometheus') + + var.datasource.generalOptions.withLabel('Data source') + + var.datasource.withRegex(''), + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('') + // hide by default (used for annotations) + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + local createOverviewVariable(name, displayName, metric, selector) = + local variable = + var.query.new(name) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + 'pod', + '%s{%s}' % [metric, selector], + ) + + var.query.generalOptions.withLabel(displayName) + + var.query.selectionOptions.withIncludeAll( + value=true, + ) + + var.query.selectionOptions.withMulti( + true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false, + ); + [variable], + local createQueryVariable(name, displayName, query, regex, includeAll) = + local variable = + var.query.new(name, query) + + var.query.generalOptions.withLabel(displayName) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.withRegex(regex) + + var.query.selectionOptions.withIncludeAll( + value=if (!includeAll) then false else true, + ) + + var.query.selectionOptions.withMulti( + true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false, + ); + [variable], + overviewVariables: + [root.datasources.prometheus] + + groupVariablesFromLabels(groupLabels) + + createOverviewVariable(istiodLabel, 'Istiod', 'pilot_info', 'job=~"$job", cluster=~"$cluster"') + + createOverviewVariable(gatewayLabel, 'Gateway', 'istio_agent_process_cpu_seconds_total', 'job=~"$job", cluster=~"$cluster", pod=~"istio-egress.*|istio-ingress.*"') + + createOverviewVariable(proxyLabel, 'Proxy', 'istio_agent_process_cpu_seconds_total', 'job=~"$job", cluster=~"$cluster", pod!~"istio-egress.*|istio-ingress.*"'), + serviceOverviewVariables: + [root.datasources.prometheus] + + groupVariablesFromLabels(groupLabels) + + createQueryVariable(namespaceLabel, 'Namespace', namespaceQuery, namespaceRegex, true) + + createQueryVariable(serviceLabel, 'Service', serviceQuery, serviceRegex, false) + + createQueryVariable(clientServiceLabel, 'Client service', clientServiceQuery, clientServiceRegex, true) + + createQueryVariable(serverServiceLabel, 'Server service', serverServiceQuery, serverServiceRegex, true), + workloadOverviewVariables: + [root.datasources.prometheus] + + groupVariablesFromLabels(groupLabels) + + createQueryVariable(namespaceLabel, 'Namespace', namespaceQuery, namespaceRegex, true) + + createQueryVariable(serviceLabel, 'Service', serviceQuery, serviceRegex, false) + + createQueryVariable(workloadLabel, 'Workload', workloadQuery, workloadRegex, true) + + createQueryVariable(clientWorkloadLabel, 'Client workload', clientWorkloadQuery, clientWorkloadRegex, true) + + createQueryVariable(serverWorkloadLabel, 'Server workload', serverWorkloadQuery, serverWorkloadRegex, true), + + queriesGroupSelectorAdvanced: + '%s' % [ + utils.labelsToPromQLSelectorAdvanced(groupLabels), + ], + queriesGroupSelector: + '%s' % [ + utils.labelsToPromQLSelector(groupLabels), + ], + queriesGroupIstiodSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'pod=~"$' + istiodLabel + '"', + ], + queriesGroupGatewaySelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'pod=~"$' + gatewayLabel + '"', + ], + queriesGroupProxySelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'pod=~"$' + proxyLabel + '"', + ], + queriesGroupClientServiceSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'source_workload_namespace=~"$' + namespaceLabel + '",source_canonical_service=~"$' + serviceLabel + '",destination_canonical_service=~"$' + serverServiceLabel + '"', + ], + queriesGroupServerServiceSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'destination_workload_namespace=~"$' + namespaceLabel + '",destination_canonical_service=~"$' + serviceLabel + '",source_canonical_service=~"$' + clientServiceLabel + '"', + ], + queriesGroupSourceServiceSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'source_workload_namespace=~"$' + namespaceLabel + '",source_canonical_service=~"$' + serviceLabel + '"', + ], + queriesGroupDestinationServiceSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'destination_workload_namespace=~"$' + namespaceLabel + '",destination_canonical_service=~"$' + serviceLabel + '"', + ], + queriesGroupClientWorkloadSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'source_workload_namespace=~"$' + namespaceLabel + '",source_workload=~"$' + workloadLabel + '",destination_workload=~"$' + serverWorkloadLabel + '"', + ], + queriesGroupServerWorkloadSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'destination_workload_namespace=~"$' + namespaceLabel + '",destination_workload=~"$' + workloadLabel + '",source_workload=~"$' + clientWorkloadLabel + '"', + ], + queriesGroupSourceWorkloadSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'source_workload_namespace=~"$' + namespaceLabel + '",source_workload=~"$' + workloadLabel + '"', + ], + queriesGroupDestinationWorkloadSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + 'destination_workload_namespace=~"$' + namespaceLabel + '",destination_workload=~"$' + workloadLabel + '"', + ], + }, +} diff --git a/memcached-mixin/config.libsonnet b/memcached-mixin/config.libsonnet index d3e8590d8..029048878 100644 --- a/memcached-mixin/config.libsonnet +++ b/memcached-mixin/config.libsonnet @@ -1,5 +1,11 @@ { _config+:: { clusterLabel: 'cluster', + // Controls tooltip and hover highlight behavior across different panels + // 0: Default, the cross hair will appear on only one panel + // 1: Shared crosshair, the crosshair will appear on all panels but the + // tooltip will appear only on the panel under the cursor + // 2: Shared Tooltip, both crosshair and tooltip will appear on all panels + graphTooltip: 1, }, } diff --git a/memcached-mixin/dashboards.libsonnet b/memcached-mixin/dashboards.libsonnet index 650ba8478..c7cdc3b3c 100644 --- a/memcached-mixin/dashboards.libsonnet +++ b/memcached-mixin/dashboards.libsonnet @@ -5,9 +5,12 @@ local g = (import 'grafana-builder/grafana.libsonnet'); 'memcached-overview.json': ( g.dashboard('Memcached Overview') + - { uid: '124d5222454213f748dbfaf69b77ec48' } + { + uid: '124d5222454213f748dbfaf69b77ec48', + graphTooltip: $._config.graphTooltip, + } ) - .addMultiTemplate('cluster', 'memcached_commands_total', $._config.clusterLabel) + .addMultiTemplate('cluster', 'memcached_commands_total', $._config.clusterLabel, allValue='.*') .addMultiTemplate('job', 'memcached_commands_total{' + $._config.clusterLabel + '=~"$cluster"}', 'job') .addMultiTemplate('instance', 'memcached_commands_total{' + $._config.clusterLabel + '=~"$cluster",job=~"$job"}', 'instance') .addRow( diff --git a/mixin-utils/utils.libsonnet b/mixin-utils/utils.libsonnet index c0692526c..8baef5486 100644 --- a/mixin-utils/utils.libsonnet +++ b/mixin-utils/utils.libsonnet @@ -1,7 +1,94 @@ local g = import 'grafana-builder/grafana.libsonnet'; { - histogramRules(metric, labels, interval='1m'):: + // The classicNativeHistogramQuantile function is used to calculate histogram quantiles from native histograms or classic histograms. + // Metric name should be provided without _bucket suffix. + nativeClassicHistogramQuantile(percentile, metric, selector, sum_by=[], rate_interval='$__rate_interval', multiplier=''):: + local classicSumBy = if std.length(sum_by) > 0 then ' by (%(lbls)s) ' % { lbls: std.join(',', ['le'] + sum_by) } else ' by (le) '; + local nativeSumBy = if std.length(sum_by) > 0 then ' by (%(lbls)s) ' % { lbls: std.join(',', sum_by) } else ' '; + local multiplierStr = if multiplier == '' then '' else ' * %s' % multiplier; + { + classic: 'histogram_quantile(%(percentile)s, sum%(classicSumBy)s(rate(%(metric)s_bucket{%(selector)s}[%(rateInterval)s])))%(multiplierStr)s' % { + classicSumBy: classicSumBy, + metric: metric, + multiplierStr: multiplierStr, + percentile: percentile, + rateInterval: rate_interval, + selector: selector, + }, + native: 'histogram_quantile(%(percentile)s, sum%(nativeSumBy)s(rate(%(metric)s{%(selector)s}[%(rateInterval)s])))%(multiplierStr)s' % { + metric: metric, + multiplierStr: multiplierStr, + nativeSumBy: nativeSumBy, + percentile: percentile, + rateInterval: rate_interval, + selector: selector, + }, + }, + + // The classicNativeHistogramSumRate function is used to calculate the histogram sum of rate from native histograms or classic histograms. + // Metric name should be provided without _sum suffix. + nativeClassicHistogramSumRate(metric, selector, rate_interval='$__rate_interval'):: + { + classic: 'rate(%(metric)s_sum{%(selector)s}[%(rateInterval)s])' % { + metric: metric, + rateInterval: rate_interval, + selector: selector, + }, + native: 'histogram_sum(rate(%(metric)s{%(selector)s}[%(rateInterval)s]))' % { + metric: metric, + rateInterval: rate_interval, + selector: selector, + }, + }, + + + // The classicNativeHistogramCountRate function is used to calculate the histogram count of rate from native histograms or classic histograms. + // Metric name should be provided without _count suffix. + nativeClassicHistogramCountRate(metric, selector, rate_interval='$__rate_interval'):: + { + classic: 'rate(%(metric)s_count{%(selector)s}[%(rateInterval)s])' % { + metric: metric, + rateInterval: rate_interval, + selector: selector, + }, + native: 'histogram_count(rate(%(metric)s{%(selector)s}[%(rateInterval)s]))' % { + metric: metric, + rateInterval: rate_interval, + selector: selector, + }, + }, + + // TODO(krajorama) Switch to histogram_avg function for native histograms later. + nativeClassicHistogramAverageRate(metric, selector, rate_interval='$__rate_interval', multiplier=''):: + local multiplierStr = if multiplier == '' then '' else '%s * ' % multiplier; + { + classic: ||| + %(multiplier)ssum(%(sumMetricQuery)s) / + sum(%(countMetricQuery)s) + ||| % { + sumMetricQuery: $.nativeClassicHistogramSumRate(metric, selector, rate_interval).classic, + countMetricQuery: $.nativeClassicHistogramCountRate(metric, selector, rate_interval).classic, + multiplier: multiplierStr, + }, + native: ||| + %(multiplier)ssum(%(sumMetricQuery)s) / + sum(%(countMetricQuery)s) + ||| % { + sumMetricQuery: $.nativeClassicHistogramSumRate(metric, selector, rate_interval).native, + countMetricQuery: $.nativeClassicHistogramCountRate(metric, selector, rate_interval).native, + multiplier: multiplierStr, + }, + }, + + // showClassicHistogramQuery wraps a query defined as map {classic: q, native: q}, and compares the classic query + // to dashboard variable which should take -1 or +1 as values in order to hide or show the classic query. + showClassicHistogramQuery(query, dashboard_variable='latency_metrics'):: '%s < ($%s * +Inf)' % [query.classic, dashboard_variable], + // showNativeHistogramQuery wraps a query defined as map {classic: q, native: q}, and compares the native query + // to dashboard variable which should take -1 or +1 as values in order to show or hide the native query. + showNativeHistogramQuery(query, dashboard_variable='latency_metrics'):: '%s < ($%s * -Inf)' % [query.native, dashboard_variable], + + histogramRules(metric, labels, interval='1m', record_native=false):: local vars = { metric: metric, labels_underscore: std.join('_', labels), @@ -19,7 +106,7 @@ local g = import 'grafana-builder/grafana.libsonnet'; }, { record: '%(labels_underscore)s:%(metric)s:avg' % vars, - expr: 'sum(rate(%(metric)s_sum[1m])) by (%(labels_comma)s) / sum(rate(%(metric)s_count[%(interval)s])) by (%(labels_comma)s)' % vars, + expr: 'sum(rate(%(metric)s_sum[%(interval)s])) by (%(labels_comma)s) / sum(rate(%(metric)s_count[%(interval)s])) by (%(labels_comma)s)' % vars, }, { record: '%(labels_underscore)s:%(metric)s_bucket:sum_rate' % vars, @@ -33,7 +120,18 @@ local g = import 'grafana-builder/grafana.libsonnet'; record: '%(labels_underscore)s:%(metric)s_count:sum_rate' % vars, expr: 'sum(rate(%(metric)s_count[%(interval)s])) by (%(labels_comma)s)' % vars, }, - ], + ] + if record_native then [ + // Native histogram rule, sum_rate contains the following information: + // - rate of sum, + // - rate of count, + // - rate of sum/count aka average, + // - rate of buckets, + // - implicitly the quantile information. + { + record: '%(labels_underscore)s:%(metric)s:sum_rate' % vars, + expr: 'sum(rate(%(metric)s[%(interval)s])) by (%(labels_comma)s)' % vars, + }, + ] else [], // latencyRecordingRulePanel - build a latency panel for a recording rule. @@ -117,12 +215,13 @@ local g = import 'grafana-builder/grafana.libsonnet'; // withRunbookURL - Add/Override the runbook_url annotations for all alerts inside a list of rule groups. // - url_format: an URL format for the runbook, the alert name will be substituted in the URL. // - groups: the list of rule groups containing alerts. - withRunbookURL(url_format, groups):: + // - annotation_key: the key to use for the annotation whose value will be the formatted runbook URL. + withRunbookURL(url_format, groups, annotation_key='runbook_url'):: local update_rule(rule) = if std.objectHas(rule, 'alert') then rule { annotations+: { - runbook_url: url_format % rule.alert, + [annotation_key]: url_format % rule.alert, }, } else rule; diff --git a/mongodb-mixin/dashboards/MongoDB_Instance.json b/mongodb-mixin/dashboards/MongoDB_Instance.json index 8d2be022f..0a1a55cdb 100644 --- a/mongodb-mixin/dashboards/MongoDB_Instance.json +++ b/mongodb-mixin/dashboards/MongoDB_Instance.json @@ -1447,7 +1447,7 @@ } ] }, - "unit": "percentunit" + "unit": "short" }, "overrides": [] }, diff --git a/mongodb-mixin/dashboards/MongoDB_ReplicaSet.json b/mongodb-mixin/dashboards/MongoDB_ReplicaSet.json index 2fb7d620e..caccd3f60 100644 --- a/mongodb-mixin/dashboards/MongoDB_ReplicaSet.json +++ b/mongodb-mixin/dashboards/MongoDB_ReplicaSet.json @@ -487,7 +487,7 @@ "uid": "${datasource}" }, "exemplar": true, - "expr": "max by (set, mongodb_cluter, service_name) (mongodb_mongod_replset_my_state{set=~\"$replset\",service_name=~\"$service_name\", mongodb_cluster=\"$cluster\",job=~\"$job\"})", + "expr": "max by (set, mongodb_cluster, service_name) (mongodb_mongod_replset_my_state{set=~\"$replset\",service_name=~\"$service_name\", mongodb_cluster=\"$cluster\",job=~\"$job\"})", "format": "time_series", "hide": false, "instant": false, diff --git a/openldap-mixin/.lint b/openldap-mixin/.lint new file mode 100644 index 000000000..16ef0605f --- /dev/null +++ b/openldap-mixin/.lint @@ -0,0 +1,17 @@ +exclusions: + panel-units-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + template-datasource-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + template-instance-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + template-on-time-change-reload-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + target-instance-rule: + reason: "Failing with new dashboard linter. TODO: Investigate and remove the warning exclusion" + target-job-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + target-promql-rule: + reason: "Linter does not support all LogQL queries and gives invalid PromQL query error" + entries: + - dashboard: "OpenLDAP logs" diff --git a/openldap-mixin/Makefile b/openldap-mixin/Makefile new file mode 100644 index 000000000..a8d7f24aa --- /dev/null +++ b/openldap-mixin/Makefile @@ -0,0 +1,34 @@ +JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s + +.PHONY: all +all: build dashboards_out prometheus_alerts.yaml + +vendor: jsonnetfile.json + jb install + +.PHONY: build +build: vendor + +.PHONY: fmt +fmt: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: lint +lint: build + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + while read f; do \ + $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ + done + mixtool lint mixin.libsonnet + +dashboards_out: mixin.libsonnet config.libsonnet dashboards.libsonnet + @mkdir -p dashboards_out + mixtool generate dashboards mixin.libsonnet -d dashboards_out + +prometheus_alerts.yaml: mixin.libsonnet alerts.libsonnet + mixtool generate alerts mixin.libsonnet -a prometheus_alerts.yaml + +.PHONY: clean +clean: + rm -rf dashboards_out prometheus_alerts.yaml diff --git a/openldap-mixin/README.md b/openldap-mixin/README.md new file mode 100644 index 000000000..e79eebb06 --- /dev/null +++ b/openldap-mixin/README.md @@ -0,0 +1,118 @@ +# OpenLDAP Mixin + +The OpenLDAP mixin is a set of configurable Grafana dashboards and alerts. + +The OpenLDAP mixin contains the following dashboards: + +- OpenLDAP overview +- OpenLDAP logs overview + +and the following alerts: + +- OpenLDAPConnectionSpike +- OpenLDAPHighSearchOperationRateSpike +- OpenLDAPDialFailureRateIncrease +- OpenLDAPBindFailureRateIncrease + +## OpenLDAP Overview + +The OpenLDAP cluster overview dashboard provides details on connections, waiters, network connectivity, PDU processes, authentication attempts, operations and threads metrics. + +![OpenLDAP Overview Dashboard (operations)](https://storage.googleapis.com/grafanalabs-integration-assets/openldap/screenshots/openldap-overview-1.png) + +## OpenLDAP Logs Overview + +The OpenLDAP logs overview dashboard provides details on the stats olc logs level. [Promtail and Loki needs to be installed](https://grafana.com/docs/loki/latest/installation/) and provisioned for logs with your Grafana instance. + +OpenLDAP logs are enabled by default in the `config.libsonnet` and can be removed by setting `enableLokiLogs` to `false`. Then run `make` again to regenerate the dashboard: + +``` +{ + _config+:: { + enableLokiLogs: false, + }, +} +``` + +In order for the selectors to properly work for system logs ingested into your logs datasource, please also include the matching `job` label onto the [scrape_configs](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#scrape_configs) as to match the labels for ingested metrics. + +Additionally to get slapd logs that contain stats level logging, you may need to [configure OpenLDAP](https://tutoriels.meddeb.net/openldap-tutorial-log/) to enable stats logs and configured for rsyslog. + +```yaml +scrape_configs: + - job_name: integrations/openldap + static_configs: + - targets: [localhost] + labels: + job: integrations/openldap + __path__: /var/log/slapd/*.log + instance: '' + pipeline_stages: + - multiline: + firstline: '^\[\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}\]' + - regex: + expression: '^\[\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}\] (?P\S+) (?P\w+)' + - labels: + level: + component: +``` + +![OpenLDAP Logs Overview Dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/openldap/screenshots/openldap-logs-overview.png) + +## Alerts Overview + +| Alert | Summary | +|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OpenLDAPConnectionSpike | A sudden spike in OpenLDAP connections indicates potential high usage or security issues. | +| OpenLDAPHighSearchOperationRateSpike | A significant spike in OpenLDAP search operations indicates inefficient queries, potential abuse, or unintended heavy load. performance. | +| OpenLDAPDialFailureRateIncrease | Significant increase in LDAP dial failures indicates network issues, problems with the LDAP service, or configuration errors that may lead to service unavailability. | +| OpenLDAPBindFailureRateIncrease | Significant increase in LDAP bind failures indicates authentication issues, potential security threats or problems with user directories. | + +Default thresholds can be configured in `config.libsonnet` + +```js +{ + _config+:: { + alertsWarningConnectionSpike: 100, + alertsWarningHighSearchOperationRateSpike: 100, + alertsCriticalDialFailureRateIncrease: 50, + alertsCriticalBindFailureRateIncrease: 50, + }, +} +``` + +## Install Tools + +```bash +go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest +go install github.com/monitoring-mixins/mixtool/cmd/mixtool@latest +# or in brew: brew install go-jsonnet +``` + +For linting and formatting, you would also need `mixtool` and `jsonnetfmt` installed. If you +have a working Go development environment, it's easiest to run the following: + +```bash +go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest +``` + +The files in `dashboards_out` need to be imported +into your Grafana server. The exact details will be depending on your environment. + +`prometheus_alerts.yaml` needs to be imported into Prometheus. + +## Generate Dashboards And Alerts + +Edit `config.libsonnet` if required and then build JSON dashboard files for Grafana: + +```bash +make +``` + +For more advanced uses of mixins, see +https://github.com/monitoring-mixins/docs. + + +Documentation +port forwarding with the multipass VM +One shot prompting, can't figure out diff --git a/openldap-mixin/alerts.libsonnet b/openldap-mixin/alerts.libsonnet new file mode 100644 index 000000000..478846e5f --- /dev/null +++ b/openldap-mixin/alerts.libsonnet @@ -0,0 +1,87 @@ +{ + new(this): { + groups: [ + { + name: 'openldap-alerts', + rules: [ + { + alert: 'OpenLDAPConnectionSpike', + expr: ||| + increase(openldap_monitor_counter_object{dn="cn=Current,cn=Connections,cn=Monitor"}[5m]) > %(alertsWarningConnectionSpike)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'A sudden spike in OpenLDAP connections indicates potential high usage or security issues.', + description: + ( + 'There are {{ printf "%%.0f" $value }} OpenLDAP connections on instance {{$labels.instance}}, ' + + 'which is above the threshold of %(alertsWarningConnectionSpike)s.' + ) % this.config, + }, + }, + { + alert: 'OpenLDAPHighSearchOperationRateSpike', + expr: ||| + 100 * ( + rate(openldap_monitor_operation{dn="cn=Search,cn=Operations,cn=Monitor"}[5m]) + / + clamp_min(rate(openldap_monitor_operation{dn="cn=Search,cn=Operations,cn=Monitor"}[15m] offset 5m), 0.0001) + ) > %(alertsWarningHighSearchOperationRateSpike)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'A significant spike in OpenLDAP search operations indicates inefficient queries, potential abuse, or unintended heavy load.', + description: + ( + 'The rate of search operations in OpenLDAP on instance {{$labels.instance}} has increased by {{ printf "%%.0f" $value }} percent in the last 5 minutes, ' + + 'compared to the average over the last 15 minutes, which is above the threshold of %(alertsWarningHighSearchOperationRateSpike)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenLDAPDialFailures', + expr: ||| + increase(openldap_dial{result!="ok"}[10m]) > %(alertsWarningDialFailureSpike)s + ||| % this.config, + 'for': '10m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Significant increase in LDAP dial failures indicates network issues, problems with the LDAP service, or configuration errors that may lead to service unavailability.', + description: + ( + 'LDAP dial failures on instance {{$labels.instance}} have increased by {{ printf "%%.0f" $value }} in the last 10 minutes, ' + + 'which is above the threshold of %(alertsWarningDialFailureSpike)s.' + ) % this.config, + }, + }, + { + alert: 'OpenLDAPBindFailureRateIncrease', + expr: ||| + increase(openldap_bind{result!="ok"}[10m]) > %(alertsWarningBindFailureRateIncrease)s + ||| % this.config, + 'for': '10m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Significant increase in LDAP bind failures indicates authentication issues, potential security threats or problems with user directories.', + description: + ( + 'LDAP bind failures on instance {{$labels.instance}} have increased by {{ printf "%%.0f" $value }} in the last 10 minutes, ' + + 'which is above the threshold of %(alertsWarningBindFailureRateIncrease)s.' + ) % this.config, + }, + }, + ], + }, + ], + }, +} diff --git a/openldap-mixin/config.libsonnet b/openldap-mixin/config.libsonnet new file mode 100644 index 000000000..c6eb879b6 --- /dev/null +++ b/openldap-mixin/config.libsonnet @@ -0,0 +1,27 @@ +{ + filteringSelector: 'job=~".*openldap.*"', + uid: 'openldap', + + enableMultiCluster: false, + groupLabels: if self.enableMultiCluster then ['job', 'cluster'] else ['job'], + logLabels: if self.enableMultiCluster then ['job', 'cluster', 'instance'] else ['job', 'instance'], + clusterLegendLabel: ['cluster', 'instance'], + instanceLabels: ['instance'], + + // prefix dashboards titles + dashboardNamePrefix: '', + dashboardTags: [self.uid], + dashboardPeriod: 'now-1h', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + + alertsWarningConnectionSpike: 100, + alertsWarningHighSearchOperationRateSpike: 200, + alertsWarningDialFailureSpike: 10, + alertsWarningBindFailureRateIncrease: 10, + + enableLokiLogs: true, + extraLogLabels: ['level', 'component'], + logsVolumeGroupBy: 'level', + showLogsVolume: true, +} diff --git a/openldap-mixin/dashboards.libsonnet b/openldap-mixin/dashboards.libsonnet new file mode 100644 index 000000000..e5c78f3c3 --- /dev/null +++ b/openldap-mixin/dashboards.libsonnet @@ -0,0 +1,86 @@ +local g = import './g.libsonnet'; +local logslib = import 'github.com/grafana/jsonnet-libs/logs-lib/logs/main.libsonnet'; + +{ + local root = self, + new(this): + local prefix = this.config.dashboardNamePrefix; + local links = this.grafana.links; + local tags = this.config.dashboardTags; + local uid = g.util.string.slugify(this.config.uid); + local vars = this.grafana.variables; + local annotations = this.grafana.annotations; + local refresh = this.config.dashboardRefresh; + local period = this.config.dashboardPeriod; + local timezone = this.config.dashboardTimezone; + local panels = this.grafana.panels; + + { + overview: + g.dashboard.new(prefix + 'OpenLDAP overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.uptime { gridPos+: { w: 8 } }, + panels.referrals { gridPos+: { w: 8 } }, + panels.alerts { gridPos+: { w: 8 } }, + panels.connections { gridPos+: { w: 8 } }, + panels.waiters { gridPos+: { w: 8 } }, + panels.directoryEntries { gridPos+: { w: 8 } }, + panels.networkConnectivity { gridPos+: { w: 8 } }, + panels.pduProcessed { gridPos+: { w: 8 } }, + panels.authenticationAttempts { gridPos+: { w: 8 } }, + panels.coreOperations { gridPos+: { w: 12 } }, + panels.auxiliaryOperations { gridPos+: { w: 12 } }, + panels.primaryThreadActivity { gridPos+: { w: 12 } }, + panels.threadQueueManagement { gridPos+: { w: 12 } }, + ], 12, 6 + ) + ) + + root.applyCommon(vars.singleInstance, uid + '-overview', tags, links { openldapOverview+:: {} }, annotations, timezone, refresh, period), + } + + + (if this.config.enableLokiLogs then + { + logs: + logslib.new(prefix + 'OpenLDAP logs', + datasourceName=this.grafana.variables.datasources.loki.name, + datasourceRegex=this.grafana.variables.datasources.loki.regex, + filterSelector=this.config.filteringSelector, + labels=this.config.logLabels + this.config.extraLogLabels, + formatParser=null, + showLogsVolume=this.config.showLogsVolume, + logsVolumeGroupBy=this.config.logsVolumeGroupBy) + { + dashboards+: + { + logs+: + // reference to self, already generated variables, to keep them, but apply other common data in applyCommon + root.applyCommon(super.logs.templating.list, uid=uid + '-logs', tags=tags, links=links { logs+:: {} }, annotations=annotations, timezone=timezone, refresh=refresh, period=period), + }, + panels+: + { + // modify log panel + logs+: + g.panel.logs.options.withEnableLogDetails(true) + + g.panel.logs.options.withShowTime(false) + + g.panel.logs.options.withWrapLogMessage(false), + }, + variables+: { + // add prometheus datasource for annotations processing + toArray+: [ + this.grafana.variables.datasources.prometheus { hide: 2 }, + ], + }, + }.dashboards.logs, + } else {}), + applyCommon(vars, uid, tags, links, annotations, timezone, refresh, period): + g.dashboard.withTags(tags) + + g.dashboard.withUid(uid) + + g.dashboard.withLinks(std.objectValues(links)) + + g.dashboard.withTimezone(timezone) + + g.dashboard.withRefresh(refresh) + + g.dashboard.time.withFrom(period) + + g.dashboard.withVariables(vars) + + g.dashboard.withAnnotations(std.objectValues(annotations)), +} diff --git a/openldap-mixin/g.libsonnet b/openldap-mixin/g.libsonnet new file mode 100644 index 000000000..6da9f4eef --- /dev/null +++ b/openldap-mixin/g.libsonnet @@ -0,0 +1 @@ +import 'github.com/grafana/grafonnet/gen/grafonnet-v10.0.0/main.libsonnet' diff --git a/openldap-mixin/jsonnetfile.json b/openldap-mixin/jsonnetfile.json new file mode 100644 index 000000000..8db875b8b --- /dev/null +++ b/openldap-mixin/jsonnetfile.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "common-lib" + } + }, + "version": "master" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-v10.0.0" + } + }, + "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "logs-lib" + } + }, + "version": "master" + } + ], + "legacyImports": true +} diff --git a/openldap-mixin/links.libsonnet b/openldap-mixin/links.libsonnet new file mode 100644 index 000000000..394534f7e --- /dev/null +++ b/openldap-mixin/links.libsonnet @@ -0,0 +1,18 @@ +local g = import './g.libsonnet'; +{ + local link = g.dashboard.link, + new(this): + { + openldapOverview: + link.link.new('OpenLDAP overview', '/d/' + this.grafana.dashboards.overview.uid) + + link.link.options.withKeepTime(true), + } + + + if this.config.enableLokiLogs then + { + logs: + link.link.new('OpenLDAP logs', '/d/' + this.grafana.dashboards.logs.uid) + + link.link.options.withKeepTime(true), + } + else {}, +} diff --git a/openldap-mixin/main.libsonnet b/openldap-mixin/main.libsonnet new file mode 100644 index 000000000..5f28d47d1 --- /dev/null +++ b/openldap-mixin/main.libsonnet @@ -0,0 +1,35 @@ +local alerts = import './alerts.libsonnet'; +local config = import './config.libsonnet'; +local dashboards = import './dashboards.libsonnet'; +local g = import './g.libsonnet'; +local links = import './links.libsonnet'; +local panels = import './panels.libsonnet'; +local targets = import './targets.libsonnet'; +local variables = import './variables.libsonnet'; + +{ + + withConfigMixin(config): { + config+: config, + }, + + new(): { + + local this = self, + config: config, + + grafana: { + variables: variables.new(this, varMetric='openldap_dial' % this.config), + targets: targets.new(this), + annotations: {}, + links: links.new(this), + panels: panels.new(this), + dashboards: dashboards.new(this), + }, + + prometheus: { + alerts: alerts.new(this), + recordingRules: {}, + }, + }, +} diff --git a/openldap-mixin/mixin.libsonnet b/openldap-mixin/mixin.libsonnet new file mode 100644 index 000000000..41075d5b8 --- /dev/null +++ b/openldap-mixin/mixin.libsonnet @@ -0,0 +1,18 @@ +local openldaplib = import './main.libsonnet'; + +local openldap = + openldaplib.new() + + openldaplib.withConfigMixin( + { + filteringSelector: 'job=~"integrations/openldap"', + uid: 'openldap', + instanceLabels: ['instance'], + } + ); + +// populate monitoring-mixin: +{ + grafanaDashboards+:: openldap.grafana.dashboards, + prometheusAlerts+:: openldap.prometheus.alerts, + prometheusRules+:: openldap.prometheus.recordingRules, +} diff --git a/openldap-mixin/panels.libsonnet b/openldap-mixin/panels.libsonnet new file mode 100644 index 000000000..d2828c29b --- /dev/null +++ b/openldap-mixin/panels.libsonnet @@ -0,0 +1,240 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; + +{ + new(this): + { + local t = this.grafana.targets, + local stat = g.panel.stat, + local timeSeriesPanel = g.panel.timeSeries, + local alertListPanel = g.panel.alertList, + + // Uptime Panel + uptime: commonlib.panels.generic.stat.info.new( + 'Uptime', + targets=[t.uptime], + description='The total time since the LDAP server was last started.' + ) + + stat.options.withTextMode('value') + + stat.standardOptions.withUnit('s') + + stat.standardOptions.withMin(0) + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withMode('absolute') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('green'), + ]), + + // Referrals Panel + referrals: commonlib.panels.generic.stat.info.new( + 'Referrals', + targets=[t.referrals], + description='The number of LDAP referrals.' + ) + + stat.options.withTextMode('value') + + stat.standardOptions.withMin(0) + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withMode('absolute') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('green'), + ]), + + alerts: + alertListPanel.new('OpenLDAP alerts') + + alertListPanel.options.UnifiedAlertListOptions.withAlertInstanceLabelFilter(this.grafana.variables.queriesGroupSelectorAdvanced), + + // Directory Entries Panel + directoryEntries: commonlib.panels.generic.timeSeries.base.new( + 'Directory entries / $__interval', + targets=[t.directoryEntries('__interval')], + description='The total increase of new directory entries added over time.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Connections Panel + connections: commonlib.panels.generic.timeSeries.base.new( + 'Connections / $__interval', + targets=[t.connections('__interval')], + description='The increase of new LDAP connections over time.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Waiters Panel + waiters: commonlib.panels.generic.timeSeries.base.new( + 'Waiters', + targets=[t.waiters('Read'), t.waiters('Write')], + description='The number of read and write waiters.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Network Connectivity Panel + networkConnectivity: commonlib.panels.generic.timeSeries.base.new( + 'Network connectivity / $__interval', + targets=[t.networkConnectivity('__interval')], + description='The LDAP network connection attempts over time.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // PDU Processed Panel + pduProcessed: commonlib.panels.generic.timeSeries.base.new( + 'PDU processed / $__interval', + targets=[t.pduProcessed('__interval')], + description='The number of LDAP Protocol Data Units (PDUs) processed over time.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Authentication Attempts Panel + authenticationAttempts: commonlib.panels.generic.timeSeries.base.new( + 'Authentication attempts / $__interval', + targets=[t.authenticationAttempts('__interval')], + description='The total increase of authentication attempts over time.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('list') + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Core Operations Panel + coreOperations: commonlib.panels.generic.timeSeries.base.new( + 'Core operations / $__interval', + targets=[ + t.coreOperations('Add', '__interval'), + t.coreOperations('Bind', '__interval'), + t.coreOperations('Modify', '__interval'), + t.coreOperations('Search', '__interval'), + t.coreOperations('Delete', '__interval'), + ], + description='The key LDAP operations.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('table') + + timeSeriesPanel.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeriesPanel.options.legend.withPlacement('right') + + timeSeriesPanel.options.legend.withShowLegend(true) + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Auxiliary Operations Panel + auxiliaryOperations: commonlib.panels.generic.timeSeries.base.new( + 'Auxiliary operations / $__interval', + targets=[ + t.auxiliaryOperations('Abandon', '__interval'), + t.auxiliaryOperations('Compare', '__interval'), + t.auxiliaryOperations('Unbind', '__interval'), + t.auxiliaryOperations('Extended', '__interval'), + t.auxiliaryOperations('Modrdn', '__interval'), + ], + description='The less frequent but important LDAP operations.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('table') + + timeSeriesPanel.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeriesPanel.options.legend.withPlacement('right') + + timeSeriesPanel.options.legend.withShowLegend(true) + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + ]), + + // Primary Thread Activity Panel + primaryThreadActivity: commonlib.panels.generic.timeSeries.base.new( + 'Primary thread activity', + targets=[ + t.threadQueueManagement('Open'), + t.threadQueueManagement('Active'), + t.threadQueueManagement('Max'), + ], + description='The active, open, and maximum threads in the LDAP server.' + ) + + timeSeriesPanel.options.legend.withDisplayMode('table') + + timeSeriesPanel.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeriesPanel.options.legend.withPlacement('right') + + timeSeriesPanel.options.legend.withShowLegend(true) + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + timeSeriesPanel.thresholdStep.withValue(null), + ]), + + // Thread Queue Management Panel + threadQueueManagement: commonlib.panels.generic.timeSeries.base.new( + 'Thread queue management', + targets=[ + t.threadQueueManagement('Starting'), + t.threadQueueManagement('Pending'), + t.threadQueueManagement('Max Pending'), + t.threadQueueManagement('Backload'), + ], + description="The LDAP server's thread backlog and pending status." + ) + + timeSeriesPanel.options.legend.withDisplayMode('table') + + timeSeriesPanel.options.legend.withCalcsMixin(['min', 'max', 'mean']) + + timeSeriesPanel.options.legend.withPlacement('right') + + timeSeriesPanel.options.legend.withShowLegend(true) + + timeSeriesPanel.standardOptions.withUnit('none') + + timeSeriesPanel.standardOptions.withMin(0) + + timeSeriesPanel.standardOptions.withDecimals(0) + + timeSeriesPanel.standardOptions.color.withMode('palette-classic') + + timeSeriesPanel.standardOptions.thresholds.withMode('absolute') + + timeSeriesPanel.standardOptions.thresholds.withSteps([ + timeSeriesPanel.thresholdStep.withColor('green'), + timeSeriesPanel.thresholdStep.withValue(null), + ]), + }, +} diff --git a/openldap-mixin/targets.libsonnet b/openldap-mixin/targets.libsonnet new file mode 100644 index 000000000..1dba27d01 --- /dev/null +++ b/openldap-mixin/targets.libsonnet @@ -0,0 +1,103 @@ +local g = import './g.libsonnet'; +local prometheusQuery = g.query.prometheus; +local commonlib = import 'common-lib/common/main.libsonnet'; + +{ + new(this): { + local variables = this.grafana.variables, + local panel = g.panel, + + uptimeQuery:: 'openldap_monitored_object{%(queriesSelector)s, dn="cn=Uptime,cn=Time,cn=Monitor"}' % variables, + referralsQuery:: 'openldap_monitor_counter_object{%(queriesSelector)s, dn="cn=Referrals,cn=Statistics,cn=Monitor"}' % variables, + directoryEntriesQuery(interval):: 'increase(openldap_monitor_counter_object{%(queriesSelector)s, dn="cn=Entries,cn=Statistics,cn=Monitor"}[$%s:])' % [variables.queriesSelector, interval], + connectionsQuery(interval):: 'increase(openldap_monitor_counter_object{%(queriesSelector)s, dn="cn=Current,cn=Connections,cn=Monitor"}[$%s:])' % [variables.queriesSelector, interval], + waitersQuery(type):: 'openldap_monitor_counter_object{%(queriesSelector)s, dn="cn=%s,cn=Waiters,cn=Monitor"}' % [variables.queriesSelector, type], + networkConnectivityQuery(interval):: 'increase(openldap_dial{%(queriesSelector)s}[$%s:])' % [variables.queriesSelector, interval], + pduProcessedQuery(interval):: 'increase(openldap_monitor_counter_object{%(queriesSelector)s, dn="cn=PDU,cn=Statistics,cn=Monitor"}[$%s:])' % [variables.queriesSelector, interval], + authenticationAttemptsQuery(interval):: 'increase(openldap_bind{%(queriesSelector)s}[$%s:])' % [variables.queriesSelector, interval], + coreOperationsQuery(operation, interval):: 'increase(openldap_monitor_operation{%(queriesSelector)s, dn="cn=%s,cn=Operations,cn=Monitor"}[$%s:])' % [variables.queriesSelector, operation, interval], + auxiliaryOperationsQuery(operation, interval):: 'increase(openldap_monitor_operation{%(queriesSelector)s, dn="cn=%s,cn=Operations,cn=Monitor"}[$%s:])' % [variables.queriesSelector, operation, interval], + primaryThreadActivityQuery(type):: 'openldap_monitored_object{%(queriesSelector)s, dn="cn=%s,cn=Threads,cn=Monitor"}' % [variables.queriesSelector, type], + threadQueueManagementQuery(type):: 'openldap_monitored_object{%(queriesSelector)s, dn="cn=%s,cn=Threads,cn=Monitor"}' % [variables.queriesSelector, type], + + uptime: + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.uptimeQuery + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)), + referrals: + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.referralsQuery + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)), + directoryEntries(interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.directoryEntriesQuery(interval) + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)) + + panel.timeSeries.queryOptions.withInterval('1m'), + connections(interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.connectionsQuery(interval) + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)) + + panel.timeSeries.queryOptions.withInterval('1m'), + waiters(type): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.waitersQuery(type) + ) + + prometheusQuery.withLegendFormat('{{instance}} - ' + type), + networkConnectivity(interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.networkConnectivityQuery(interval) + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)) + + panel.timeSeries.queryOptions.withInterval('1m'), + pduProcessed(interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.pduProcessedQuery(interval) + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)) + + panel.timeSeries.queryOptions.withInterval('1m'), + authenticationAttempts(interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.authenticationAttemptsQuery(interval) + ) + + prometheusQuery.withLegendFormat('%s' % commonlib.utils.labelsToPanelLegend(this.config.instanceLabels)) + + panel.timeSeries.queryOptions.withInterval('1m'), + coreOperations(operation, interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.coreOperationsQuery(operation, interval) + ) + + prometheusQuery.withLegendFormat('{{instance}} - ' + operation) + + panel.timeSeries.queryOptions.withInterval('1m'), + auxiliaryOperations(operation, interval): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.auxiliaryOperationsQuery(operation, interval) + ) + + prometheusQuery.withLegendFormat('{{instance}} - ' + operation) + + panel.timeSeries.queryOptions.withInterval('1m'), + primaryThreadActivity(type): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.primaryThreadActivityQuery(type) + ) + + prometheusQuery.withLegendFormat('{{instance}} - open'), + threadQueueManagement(type): + prometheusQuery.new( + '${' + variables.datasources.prometheus.name + '}', + self.threadQueueManagementQuery(type) + ) + + prometheusQuery.withLegendFormat('{{instance}} - ' + type), + }, +} diff --git a/openldap-mixin/variables.libsonnet b/openldap-mixin/variables.libsonnet new file mode 100644 index 000000000..b3eda31e8 --- /dev/null +++ b/openldap-mixin/variables.libsonnet @@ -0,0 +1,87 @@ +local g = import './g.libsonnet'; +local var = g.dashboard.variable; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; + +// Generates chained variables to use on on all dashboards +{ + new(this, varMetric): + { + local filteringSelector = this.config.filteringSelector, + local groupLabels = this.config.groupLabels, + local instanceLabels = this.config.instanceLabels, + local root = self, + local variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=true) = + local chainVarProto(index, chainVar) = + var.query.new(chainVar.label) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + chainVar.label, + '%s{%s}' % [varMetric, chainVar.chainSelector], + ) + + var.query.generalOptions.withLabel(utils.toSentenceCase(chainVar.label)) + + var.query.selectionOptions.withIncludeAll( + value=if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + customAllValue='.+' + ) + + var.query.selectionOptions.withMulti( + if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false + ); + std.mapWithIndex(chainVarProto, utils.chainLabels(groupLabels + instanceLabels, [filteringSelector])), + datasources: { + prometheus: + var.datasource.new('prometheus_datasource', 'prometheus') + + var.datasource.generalOptions.withLabel('Prometheus data source') + + var.datasource.withRegex(''), + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('') + // hide by default (used for annotations) + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + // Use on dashboards where multiple entities can be selected, like fleet dashboards + multiInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector), + multiCluster: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, [], filteringSelector), + // Use on dashboards where only single entity can be selected, like drill-down dashboards + singleInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=false), + + queriesSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels + instanceLabels), + filteringSelector, + ], + queriesGroupSelectorAdvanced: + '%s' % [ + utils.labelsToPromQLSelectorAdvanced(this.config.logLabels), + ], + clusterQuerySelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + filteringSelector, + ], + instanceQueriesSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels + instanceLabels), + filteringSelector, + ], + } + + if this.config.enableLokiLogs then self.withLokiLogs(this) else {}, + withLokiLogs(this): { + multiInstance+: [this.grafana.variables.datasources.loki], + singleInstance+: [this.grafana.variables.datasources.loki], + }, +} diff --git a/openstack-mixin/.lint b/openstack-mixin/.lint new file mode 100644 index 000000000..4754cd89a --- /dev/null +++ b/openstack-mixin/.lint @@ -0,0 +1,15 @@ +exclusions: + template-job-rule: + reason: "Prometheus datasource variable is being named as prometheus_datasource now while linter expects 'datasource'" + panel-datasource-rule: + reason: "Loki datasource variable is being named as loki_datasource now while linter expects 'datasource'" + template-datasource-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + template-instance-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + target-job-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + panel-title-description-rule: + reason: "Not required for logs volume" + panel-units-rule: + reason: "Logs volume has no unit" diff --git a/openstack-mixin/Makefile b/openstack-mixin/Makefile new file mode 100644 index 000000000..a8d7f24aa --- /dev/null +++ b/openstack-mixin/Makefile @@ -0,0 +1,34 @@ +JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s + +.PHONY: all +all: build dashboards_out prometheus_alerts.yaml + +vendor: jsonnetfile.json + jb install + +.PHONY: build +build: vendor + +.PHONY: fmt +fmt: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: lint +lint: build + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + while read f; do \ + $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ + done + mixtool lint mixin.libsonnet + +dashboards_out: mixin.libsonnet config.libsonnet dashboards.libsonnet + @mkdir -p dashboards_out + mixtool generate dashboards mixin.libsonnet -d dashboards_out + +prometheus_alerts.yaml: mixin.libsonnet alerts.libsonnet + mixtool generate alerts mixin.libsonnet -a prometheus_alerts.yaml + +.PHONY: clean +clean: + rm -rf dashboards_out prometheus_alerts.yaml diff --git a/openstack-mixin/README.md b/openstack-mixin/README.md new file mode 100644 index 000000000..6ad2dcf1f --- /dev/null +++ b/openstack-mixin/README.md @@ -0,0 +1,158 @@ +# OpenStack mixin + +The OpenStack mixin is a set of configurable Grafana dashboards and alerts. + +The OpenStack mixin contains the following dashboards: + +- OpenStack overview +- OpenStack Nova +- OpenStack Neutron +- OpenStack Cinder +- OpenStack logs + +and the following alerts: + +- OpenStackPlacementHighMemoryUsageWarning +- OpenStackPlacementHighMemoryUsageCritical +- OpenStackNovaHighVMMemoryUsage +- OpenStackNovaHighVMVCPUUsage +- OpenStackNeutronHighDisconnectedPortRate +- OpenStackNeutronHighInactiveRouterRate +- OpenStackCinderHighBackupMemoryUsage +- OpenStackCinderHighVolumeMemoryUsage +- OpenStackCinderHighPoolCapacityUsage + +## OpenStack overview + +The OpenStack overview dashboard provides details on OpenStack services, alerts, cloud resource usage, hierarchy, and images. +![OpenStack overview dashboard (services)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_overview_1.png) +![OpenStack overview dashboard (images)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_overview_2.png) + +## OpenStack Nova + +The OpenStack Nova dashboard provides details on the compute service in OpenStack. +![OpenStack Nova dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_nova.png) + +## OpenStack Neutron + +The OpenStack Neutron dashboard provides details on the networking service in OpenStack. +![OpenStack Neutron dashboard (networks)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_neutron_1.png) +![OpenStack Neutron dashboard (ports)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_neutron_2.png) + +## OpenStack Cinder + +The OpenStack Cinder dashboard provides details on the block storage service in OpenStack. +![OpenStack Cinder dashboard (storage)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_cinder_1.png) +![OpenStack Cinder dashboard (agents)](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_cinder_2.png) + +# OpenStack logs + +The OpenStack logs dashboard provides details on incoming OpenStack journald logs. +![OpenStack logs dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/openstack/screenshots/openstack_logs.png) + +OpenStack logs are enabled by default in the `config.libsonnet` and can be disabled by setting `enableLokiLogs` to `false`. Then run `make` again to regenerate the dashboard: + +``` +{ + _config+:: { + enableLokiLogs: false, + }, +} +``` + +For the selectors to properly work with the OpenStack logs ingested into your logs datasource, please also include the matching `instance` and `job` labels in the [scrape configs](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#scrape_configs) to match the labels for ingested metrics. + +```yaml +scrape_configs: + - job_name: integrations/openstack + journal: + max_age: 12h + labels: + job: integrations/openstack + instance: + relabel_configs: + - source_labels: ["__journal_systemd_unit"] + target_label: "unit" + pipeline_stages: + - multiline: + firstline: "(?P(DEBUG|INFO|WARNING|ERROR)) " + - regex: + expression: '(?P(DEBUG|INFO|WARNING|ERROR)) (?P\w+)[\w|.]+ (\[.*] )(?P.*)' + - labels: + level: + service: +``` + +#### Logging to a file (optional) + +This integration collects logs from journald, assuming that logging to a file is not configured. If you wish to configure a log file for your OpenStack services: + +1. Create a `.log` file. +2. Edit the `.conf` file to include `log_file` and `level` config options. + +```bash +log_file = /Path/to/log/dir/.log +level = WARNING +``` +- Other possible `level` options are `DEBUG`, `INFO`, and `ERROR`. +3. Repeat steps 1 & 2 for each service. + +## Alerts overview + +- OpenStackPlacementHighMemoryUsageWarning: The cloud is using a significant percentage of its allocated memory. +- OpenStackPlacementHighMemoryUsageCritical: The cloud is using a large percentage of its allocated memory, consider allocating more resources. +- OpenStackNovaHighVMMemoryUsage: VMs are using a high percentage of their allocated memory. +- OpenStackNovaHighVMVCPUUsage: VMs are using a high percentage of their allocated virtual CPUs. +- OpenStackNeutronHighDisconnectedPortRate: A high rate of ports have no IP addresses assigned to them. +- OpenStackNeutronHighInactiveRouterRate: A high rate of routers are currently inactive. +- OpenStackCinderHighBackupMemoryUsage: Cinder backups are using a large amount of their maximum memory. +- OpenStackCinderHighVolumeMemoryUsage: Cinder volumes are using a large amount of their maximum memory. +- OpenStackCinderHighPoolCapacityUsage: Cinder pools are using a large amount of their maximum capacity. + +Default thresholds can be configured in `config.libsonnet`. + +```js +{ + _configs+:: { + alertsWarningPlacementHighMemoryUsage: 80, // % + alertsCriticalPlacementHighMemoryUsage: 90, // % + alertsWarningNovaHighVMMemoryUsage: 80, // % + alertsWarningNovaHighVMVCPUUsage: 80, // % + alertsCriticalNeutronHighDisconnectedPortRate: 25, // % + alertsCriticalNeutronHighInactiveRouterRate: 15, // % + alertsWarningCinderHighBackupMemoryUsage: 80, // % + alertsWarningCinderHighVolumeMemoryUsage: 80, // % + alertsWarningCinderHighPoolCapacityUsage: 80, // % + } +} +``` + +## Install tools + +```bash +go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest +go install github.com/monitoring-mixins/mixtool/cmd/mixtool@latest +``` + +For linting and formatting, `jsonnetfmt` must be installed. If you +have a working Go development environment, it's easiest to run the following: + +```bash +go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest +``` + +The files in `dashboards_out` need to be imported +into your Grafana server. The exact details will depend on your environment. + +`prometheus_alerts.yaml` needs to be imported into Prometheus. + +## Generate dashboards and alerts + +Edit `config.libsonnet` if required and then build JSON dashboard files for Grafana: + +```bash +make +``` + +For more advanced uses of mixins, see +https://github.com/monitoring-mixins/docs. diff --git a/openstack-mixin/alerts.libsonnet b/openstack-mixin/alerts.libsonnet new file mode 100644 index 000000000..46551c47b --- /dev/null +++ b/openstack-mixin/alerts.libsonnet @@ -0,0 +1,168 @@ +{ + new(this): { + groups: [ + { + name: 'openstack-alerts-' + this.config.uid, + rules: [ + { + alert: 'OpenStackPlacementHighMemoryUsageWarning', + expr: ||| + 100 * openstack_placement_resource_usage{%(filteringSelector)s, resourcetype="MEMORY_MB"} / clamp_min(openstack_placement_resource_total{%(filteringSelector)s, resourcetype="MEMORY_MB"}, 1) > %(alertsWarningPlacementHighMemoryUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'The cloud is using a significant percentage of its allocated memory.', + description: + ( + 'The cloud on instance {{$labels.instance}} is using {{ printf "%%.0f" $value }} percent of its allocated memory, ' + + 'which is above the threshold of %(alertsWarningPlacementHighMemoryUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackPlacementHighMemoryUsageCritical', + expr: ||| + 100 * openstack_placement_resource_usage{%(filteringSelector)s, resourcetype="MEMORY_MB"} / clamp_min(openstack_placement_resource_total{%(filteringSelector)s, resourcetype="MEMORY_MB"}, 1) > %(alertsCriticalPlacementHighMemoryUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'The cloud is using a large percentage of its allocated memory, consider allocating more resources.', + description: + ( + 'The cloud on instance {{$labels.instance}} is using {{ printf "%%.0f" $value }} percent of its allocated memory, ' + + 'which is above the threshold of %(alertsCriticalPlacementHighMemoryUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackNovaHighVMMemoryUsage', + expr: ||| + 100 * openstack_nova_limits_memory_used{%(filteringSelector)s} / clamp_min(openstack_nova_limits_memory_max{%(filteringSelector)s}, 1) > %(alertsWarningNovaHighVMMemoryUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'VMs are using a high percentage of their allocated memory.', + description: + ( + 'Virtual machines on the cloud on {{$labels.instance}} are using {{ printf "%%.0f" $value }} percent of their allocated memory, ' + + 'which is above the threshold of %(alertsWarningNovaHighVMMemoryUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackNovaHighVMVCPUUsage', + expr: ||| + 100 * openstack_nova_limits_vcpus_used{%(filteringSelector)s} / clamp_min(openstack_nova_limits_vcpus_max{%(filteringSelector)s}, 1) > %(alertsWarningNovaHighVMVCPUUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'VMs are using a high percentage of their allocated virtual CPUs.', + description: + ( + 'Virtual machines on the cloud on {{$labels.instance}} are using {{ printf "%%.0f" $value }} percent of their allocated virtual CPUs, ' + + 'which is above the threshold of %(alertsWarningNovaHighVMVCPUUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackNeutronHighDisconnectedPortRate', + expr: ||| + 100 * openstack_neutron_ports_no_ips{%(filteringSelector)s} / clamp_min(openstack_neutron_ports{%(filteringSelector)s}, 1) > %(alertsCriticalNeutronHighDisconnectedPortRate)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'A high rate of ports have no IP addresses assigned to them.', + description: ( + '{{ printf "%%.0f" $value }} percent of ports managed by the Neutron service on instance {{$labels.instance}} have no IP addresses assigned to them, ' + + 'which is above the threshold of %(alertsCriticalNeutronHighDisconnectedPortRate)s' + ) % this.config, + }, + }, + { + alert: 'OpenStackNeutronHighInactiveRouterRate', + expr: ||| + 100 * openstack_neutron_routers_not_active{%(filteringSelector)s} / clamp_min(openstack_neutron_routers{%(filteringSelector)s}, 1) > %(alertsCriticalNeutronHighInactiveRouterRate)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'A high rate of routers are currently inactive.', + description: ( + '{{ printf "%%.0f" $value }} percent of routers managed by the Neutron service on instance {{$labels.instance}} are currently inactive, ' + + 'which is above the threshold of %(alertsCriticalNeutronHighInactiveRouterRate)s' + ) % this.config, + }, + }, + { + alert: 'OpenStackCinderHighBackupMemoryUsage', + expr: ||| + 100 * openstack_cinder_limits_backup_used_gb{%(filteringSelector)s} / clamp_min(openstack_cinder_limits_backup_max_gb{%(filteringSelector)s}, 1) > %(alertsWarningCinderHighBackupMemoryUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Cinder backups are using a large amount of their maximum memory.', + description: ( + 'Backups managed by the Cinder service on instance {{$labels.instance}} are using {{ printf "%%.0f" $value }} percent of their allocated memory, ' + + 'which is above the threshold of %(alertsWarningCinderHighBackupMemoryUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackCinderHighVolumeMemoryUsage', + expr: ||| + 100 * openstack_cinder_limits_volume_used_gb{%(filteringSelector)s} / clamp_min(openstack_cinder_limits_volume_max_gb{%(filteringSelector)s}, 1) > %(alertsWarningCinderHighVolumeMemoryUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Cinder volumes are using a large amount of their maximum memory.', + description: ( + 'Volumes managed by the Cinder service on instance {{$labels.instance}} are using {{ printf "%%.0f" $value }} percent of their allocated memory, ' + + 'which is above the threshold of %(alertsWarningCinderHighVolumeMemoryUsage)s percent.' + ) % this.config, + }, + }, + { + alert: 'OpenStackCinderHighPoolCapacityUsage', + expr: ||| + 100 * (openstack_cinder_pool_capacity_total_gb{%(filteringSelector)s} - openstack_cinder_pool_capacity_free_gb{%(filteringSelector)s}) / clamp_min(openstack_cinder_pool_capacity_total_gb{%(filteringSelector)s}, 1) > %(alertsWarningCinderHighPoolCapacityUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Cinder pools are using a large amount of their maximum capacity.', + description: ( + 'Pools managed by the Cinder service on instance {{$labels.instance}} are using {{ printf "%%.0f" $value }} percent of their allocated capacity, ' + + 'which is above the threshold of %(alertsWarningCinderHighPoolCapacityUsage)s percent.' + ) % this.config, + }, + }, + ], + }, + ], + }, +} diff --git a/openstack-mixin/config.libsonnet b/openstack-mixin/config.libsonnet new file mode 100644 index 000000000..ee563a8a8 --- /dev/null +++ b/openstack-mixin/config.libsonnet @@ -0,0 +1,29 @@ +{ + filteringSelector: 'job="integrations/openstack"', + groupLabels: ['job'], + instanceLabels: ['instance'], + + uid: 'openstack', + dashboardTags: [self.uid], + dashboardPeriod: 'now-30m', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + + alertsWarningPlacementHighMemoryUsage: 80, // % + alertsCriticalPlacementHighMemoryUsage: 90, // % + alertsWarningNovaHighVMMemoryUsage: 80, // % + alertsWarningNovaHighVMVCPUUsage: 80, // % + alertsCriticalNeutronHighDisconnectedPortRate: 25, // % + alertsCriticalNeutronHighInactiveRouterRate: 15, // % + alertsWarningCinderHighBackupMemoryUsage: 80, // % + alertsWarningCinderHighVolumeMemoryUsage: 80, // % + alertsWarningCinderHighPoolCapacityUsage: 80, // % + + // logs lib related + enableLokiLogs: true, + logsExtraFilters: '', + extraLogLabels: ['level', 'service'], + logsVolumeGroupBy: 'level', + logsFilteringSelector: self.filteringSelector, + showLogsVolume: true, +} diff --git a/openstack-mixin/dashboards.libsonnet b/openstack-mixin/dashboards.libsonnet new file mode 100644 index 000000000..96b68e4a2 --- /dev/null +++ b/openstack-mixin/dashboards.libsonnet @@ -0,0 +1,148 @@ +local g = import './g.libsonnet'; +local logslib = import 'logs-lib/logs/main.libsonnet'; +{ + local root = self, + new(this): + local links = this.grafana.links; + local tags = this.config.dashboardTags; + local uid = g.util.string.slugify(this.config.uid); + local vars = this.grafana.variables; + local refresh = this.config.dashboardRefresh; + local period = this.config.dashboardPeriod; + local timezone = this.config.dashboardTimezone; + local panels = this.grafana.panels; + local stat = g.panel.stat; + { + overview: + g.dashboard.new('OpenStack overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.placementStatus { gridPos+: { w: 4 } }, + panels.keystoneStatus { gridPos+: { w: 4 } }, + panels.novaStatus { gridPos+: { w: 4 } }, + panels.neutronStatus { gridPos+: { w: 4 } }, + panels.cinderStatus { gridPos+: { w: 4 } }, + panels.glanceStatus { gridPos+: { w: 4 } }, + panels.alertsPanel { gridPos+: { w: 8 } }, + panels.totalResources { gridPos+: { w: 16 } }, + g.panel.row.new('Keystone service'), + panels.domains { gridPos+: { w: 4 } }, + panels.projects { gridPos+: { w: 4 } }, + panels.regions { gridPos+: { w: 4 } }, + panels.users, + panels.projectDetails { gridPos+: { w: 24 } }, + g.panel.row.new('Glance service'), + panels.glanceStatus { gridPos+: { w: 6 } }, + panels.imageCount { gridPos+: { w: 18 } }, + panels.images { gridPos+: { w: 24 } }, + ], 12, 8 + ) + ) + // hide link to self + + root.applyCommon(vars.multiInstance, uid + '-overview', tags, links { overview+:: {} }, timezone, refresh, period), + nova: + g.dashboard.new('OpenStack Nova') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.novaStatus { gridPos+: { w: 6 } }, + panels.vms { gridPos+: { w: 18 } }, + panels.instanceUsage, + panels.vCPUUsage, + panels.memoryUsage, + panels.novaAgents, + ], 12, 8 + ) + ) + // hide link to self + + root.applyCommon(vars.multiInstance, uid + '-nova', tags, links { nova+:: {} }, timezone, refresh, period), + neutron: + g.dashboard.new('OpenStack Neutron') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.neutronStatus { gridPos+: { w: 6 } }, + panels.networks { gridPos+: { w: 9 } }, + panels.subnets { gridPos+: { w: 9 } }, + panels.routers, + panels.routerDetails, + panels.ports { gridPos+: { w: 8 } }, + panels.portDetails { gridPos+: { w: 16 } }, + panels.floatingIPs, + panels.ipsUsed, + panels.securityGroups, + panels.neutronAgents, + ], 12, 8 + ) + ) + // hide link to self + + root.applyCommon(vars.multiInstance, uid + '-neutron', tags, links { neutron+:: {} }, timezone, refresh, period), + cinder: + g.dashboard.new('OpenStack Cinder') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.cinderStatus { gridPos+: { w: 4 } }, + panels.volumes { gridPos+: { w: 10 } }, + panels.volumeStatus { gridPos+: { w: 10 } }, + panels.volumeUsage, + panels.backupUsage, + panels.poolUsage, + panels.snapshots, + panels.cinderAgents { gridPos+: { w: 24 } }, + ], 12, 8 + ) + ) + // hide link to self + + root.applyCommon(vars.multiInstance, uid + '-cinder', tags, links { cinder+:: {} }, timezone, refresh, period), + } + + + if this.config.enableLokiLogs then + { + logs: + logslib.new( + 'OpenStack logs', + datasourceName=this.grafana.variables.datasources.loki.name, + datasourceRegex=this.grafana.variables.datasources.loki.regex, + filterSelector=this.config.filteringSelector, + labels=this.config.groupLabels + this.config.extraLogLabels, + formatParser=null, + showLogsVolume=this.config.showLogsVolume, + logsVolumeGroupBy=this.config.logsVolumeGroupBy, + ) + { + dashboards+: + { + logs+: + // reference to self, already generated variables, to keep them, but apply other common data in applyCommon + root.applyCommon(super.logs.templating.list, uid=uid + '-logs', tags=tags, links=links { logs+:: {} }, timezone=timezone, refresh=refresh, period=period), + }, + panels+: + { + // modify log panel + logs+: + g.panel.logs.options.withEnableLogDetails(true) + + g.panel.logs.options.withShowTime(false) + + g.panel.logs.options.withWrapLogMessage(false), + }, + variables+: { + // add prometheus datasource for annotations processing + toArray+: [ + this.grafana.variables.datasources.prometheus { hide: 2 }, + ], + }, + }.dashboards.logs, + } + else {}, + + // Apply common options(uids, tags, annotations etc..) to all dashboards above + applyCommon(vars, uid, tags, links, timezone, refresh, period): + g.dashboard.withTags(tags) + + g.dashboard.withUid(uid) + + g.dashboard.withLinks(std.objectValues(links)) + + g.dashboard.withTimezone(timezone) + + g.dashboard.withRefresh(refresh) + + g.dashboard.time.withFrom(period) + + g.dashboard.withVariables(vars), +} diff --git a/openstack-mixin/g.libsonnet b/openstack-mixin/g.libsonnet new file mode 100644 index 000000000..6da9f4eef --- /dev/null +++ b/openstack-mixin/g.libsonnet @@ -0,0 +1 @@ +import 'github.com/grafana/grafonnet/gen/grafonnet-v10.0.0/main.libsonnet' diff --git a/openstack-mixin/jsonnetfile.json b/openstack-mixin/jsonnetfile.json new file mode 100644 index 000000000..8db875b8b --- /dev/null +++ b/openstack-mixin/jsonnetfile.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "common-lib" + } + }, + "version": "master" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-v10.0.0" + } + }, + "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "logs-lib" + } + }, + "version": "master" + } + ], + "legacyImports": true +} diff --git a/openstack-mixin/links.libsonnet b/openstack-mixin/links.libsonnet new file mode 100644 index 000000000..a8686fa6e --- /dev/null +++ b/openstack-mixin/links.libsonnet @@ -0,0 +1,27 @@ +local g = import './g.libsonnet'; +{ + local link = g.dashboard.link, + new(this): + { + overview: + link.link.new('OpenStack overview', '/d/' + this.grafana.dashboards.overview.uid) + + link.link.options.withKeepTime(true), + nova: + link.link.new('OpenStack Nova', '/d/' + this.grafana.dashboards.nova.uid) + + link.link.options.withKeepTime(true), + neutron: + link.link.new('OpenStack Neutron', '/d/' + this.grafana.dashboards.neutron.uid) + + link.link.options.withKeepTime(true), + cinder: + link.link.new('OpenStack Cinder', '/d/' + this.grafana.dashboards.cinder.uid) + + link.link.options.withKeepTime(true), + } + + + if this.config.enableLokiLogs then + { + logs: + link.link.new('OpenStack logs', '/d/' + this.grafana.dashboards.logs.uid) + + link.link.options.withKeepTime(true), + } + else {}, +} diff --git a/openstack-mixin/main.libsonnet b/openstack-mixin/main.libsonnet new file mode 100644 index 000000000..51d05f05d --- /dev/null +++ b/openstack-mixin/main.libsonnet @@ -0,0 +1,35 @@ +local alerts = import './alerts.libsonnet'; +local config = import './config.libsonnet'; +local dashboards = import './dashboards.libsonnet'; +local g = import './g.libsonnet'; +local links = import './links.libsonnet'; +local panels = import './panels.libsonnet'; +local targets = import './targets.libsonnet'; +local variables = import './variables.libsonnet'; + +{ + + withConfigMixin(config): { + config+: config, + }, + + new(): { + + local this = self, + config: config, + + grafana: { + variables: variables.new(this), + targets: targets.new(this), + annotations: {}, + links: links.new(this), + panels: panels.new(this), + dashboards: dashboards.new(this), + }, + + prometheus: { + alerts: alerts.new(this), + recordingRules: {}, + }, + }, +} diff --git a/openstack-mixin/mixin.libsonnet b/openstack-mixin/mixin.libsonnet new file mode 100644 index 000000000..60c13e95e --- /dev/null +++ b/openstack-mixin/mixin.libsonnet @@ -0,0 +1,18 @@ +local openstacklib = import './main.libsonnet'; + +local openstack = + openstacklib.new() + + openstacklib.withConfigMixin( + { + filteringSelector: 'job=~"integrations/openstack"', + uid: 'openstack', + groupLabels: ['job'], + enableLokiLogs: true, + } + ); + +{ + grafanaDashboards+:: openstack.grafana.dashboards, + prometheusAlerts+:: openstack.prometheus.alerts, + prometheusRules+:: openstack.prometheus.recordingRules, +} diff --git a/openstack-mixin/panels.libsonnet b/openstack-mixin/panels.libsonnet new file mode 100644 index 000000000..f05c6287f --- /dev/null +++ b/openstack-mixin/panels.libsonnet @@ -0,0 +1,1012 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; +{ + new(this): { + local t = this.grafana.targets, + local alertList = g.panel.alertList, + local stat = g.panel.stat, + local timeSeries = g.panel.timeSeries, + local table = g.panel.table, + + placementStatus: + commonlib.panels.generic.stat.base.new( + 'Placement status', + targets=[t.placementStatus], + description='Reports the status of the Placement resource-scheduling service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + keystoneStatus: + commonlib.panels.generic.stat.base.new( + 'Keystone status', + targets=[t.keystoneStatus], + description='Reports the status of the Keystone identity service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + novaStatus: + commonlib.panels.generic.stat.base.new( + 'Nova status', + targets=[t.novaStatus], + description='Reports the status of the Nova compute service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + neutronStatus: + commonlib.panels.generic.stat.base.new( + 'Neutron status', + targets=[t.neutronStatus], + description='Reports the status of the Neutron networking service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + cinderStatus: + commonlib.panels.generic.stat.base.new( + 'Cinder status', + targets=[t.cinderStatus], + description='Reports the status of the Cinder block storage service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + glanceStatus: + commonlib.panels.generic.stat.base.new( + 'Glance status', + targets=[t.glanceStatus], + description='Reports the status of the Glance image service.', + ) + + stat.standardOptions.withUnit('string') + + stat.options.withGraphMode('none') + + stat.standardOptions.withMappings({ + type: 'value', + options: { + '0': { + color: 'red', + index: 1, + text: 'Down', + }, + '1': { + color: 'green', + index: 0, + text: 'Up', + }, + }, + }), + + alertsPanel: + alertList.new('Alerts') + + alertList.panelOptions.withDescription('Panel to report on the status of firing alerts.') + + alertList.options.UnifiedAlertListOptions.withAlertInstanceLabelFilter(this.grafana.variables.queriesGroupSelectorAdvanced), + + totalResources: + table.new('Total resources') + + table.queryOptions.withTargets([ + t.totalDiskCapacity, + t.totalDiskUsage, + t.totalMemoryCapacity, + t.totalMemoryUsage, + t.totalVCPUCapacity, + t.totalVCPUUsage, + ]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Summary of the hardware resources available and used by OpenStack.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byRegexp.new('/Disk/') + + table.standardOptions.override.byRegexp.withPropertiesFromOptions( + table.standardOptions.withUnit('decgbytes') + ), + table.fieldOverride.byRegexp.new('/Memory/') + + table.standardOptions.override.byRegexp.withPropertiesFromOptions( + table.standardOptions.withUnit('decmbytes') + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'instance', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + 'Time 1': true, + 'Time 3': true, + 'Time 4': true, + 'Time 5': true, + 'Time 6': true, + '__name__ 1': true, + '__name__ 2': true, + '__name__ 3': true, + '__name__ 4': true, + '__name__ 5': true, + '__name__ 6': true, + 'hostname 1': true, + 'hostname 2': true, + 'hostname 3': true, + 'hostname 4': true, + 'hostname 5': true, + 'hostname 6': true, + job: true, + 'job 1': true, + 'job 2': true, + 'job 3': true, + 'job 4': true, + 'job 5': true, + 'job 6': true, + 'resourcetype 1': true, + 'resourcetype 2': true, + 'resourcetype 3': true, + 'resourcetype 4': true, + 'resourcetype 5': true, + 'resourcetype 6': true, + }, + indexByName: { + instance: 0, + '__name__ 1': 1, + 'resourcetype 1': 2, + 'Value #A': 3, + 'Value #B': 4, + 'Value #C': 5, + 'Value #D': 6, + 'Value #E': 7, + 'Value #F': 8, + 'Time 2': 9, + '__name__ 2': 10, + 'hostname 2': 11, + 'job 2': 12, + 'resourcetype 2': 13, + 'Time 3': 14, + '__name__ 3': 15, + 'hostname 3': 16, + 'job 3': 17, + 'resourcetype 3': 18, + 'Time 4': 19, + '__name__ 4': 20, + 'hostname 4': 21, + 'job 4': 22, + 'resourcetype 4': 23, + 'Time 5': 24, + '__name__ 5': 25, + 'hostname 5': 26, + 'job 5': 27, + 'resourcetype 5': 28, + 'Time 6': 29, + '__name__ 6': 30, + 'hostname 6': 31, + 'job 6': 32, + 'resourcetype 6': 33, + 'Time 1': 34, + 'hostname 1': 35, + 'job 1': 36, + }, + renameByName: { + Time: '', + 'Value #A': 'Disk available', + 'Value #B': 'Disk used', + 'Value #C': 'Memory avaliable', + 'Value #D': 'Memory used', + 'Value #E': 'VCPUs available', + 'Value #F': 'VCPUs used', + hostname: 'Hostname', + instance: 'Instance', + openstack_placement_resource_total: 'Total', + openstack_placement_resource_usage: 'In use', + resourcetype: 'Resource', + }, + includeByName: {}, + }, + }, + ]), + + domains: + commonlib.panels.generic.stat.info.new( + 'Domains', + targets=[t.domains], + description='The number of domains for the OpenStack cloud.', + ) + + stat.options.withGraphMode('none'), + + projects: + commonlib.panels.generic.stat.info.new( + 'Projects', + targets=[t.projects], + description='The number of projects for the OpenStack cloud.', + ) + + stat.options.withGraphMode('none'), + + regions: + commonlib.panels.generic.stat.info.new( + 'Regions', + targets=[t.regions], + description='The number of regions for the OpenStack cloud.', + ) + + stat.options.withGraphMode('none'), + + users: + commonlib.panels.generic.timeSeries.base.new( + 'Users', + targets=[t.users], + description='The number of users for the OpenStack cloud.', + ) + + timeSeries.standardOptions.withDecimals(0), + + projectDetails: + table.new('Project details') + + table.queryOptions.withTargets([t.projectDetails]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Details for the projects in the OpenStack cloud.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('Enabled') + + table.fieldOverride.byName.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byName.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + 'false': { + color: 'red', + index: 1, + text: 'False', + }, + 'true': { + color: 'green', + index: 0, + text: 'True', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + description: true, + job: true, + parent_id: true, + }, + includeByName: {}, + indexByName: { + Time: 3, + Value: 11, + __name__: 4, + description: 5, + domain_id: 7, + enabled: 6, + id: 1, + instance: 2, + is_domain: 8, + job: 10, + name: 0, + parent_id: 9, + }, + renameByName: { + domain_id: 'Domain ID', + enabled: 'Enabled', + id: 'ID', + instance: 'Instance', + is_domain: 'Is domain', + name: 'Name', + }, + }, + }, + ]), + + vms: + commonlib.panels.generic.timeSeries.base.new( + 'VMs', + targets=[t.vms], + description='The current number of total and running virtual machines.', + ) + + timeSeries.standardOptions.withDecimals(0), + + instanceUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'Instance usage', + targets=[t.instanceUsage], + description='Percentage of the maximum number of instances in use for each project.' + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + vCPUUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'VCPU usage', + targets=[t.vCPUUsage], + description='Percentage of the maximum number of virtual CPUs in use for each project.' + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + memoryUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'Memory usage', + targets=[t.memoryUsage], + description='Percentage of the maximum amount of memory in use for each project.' + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + novaAgents: + table.new('Agents') + + table.queryOptions.withTargets([t.novaAgentState]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Details for the agents for OpenStack Nova.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('Admin state') + + table.fieldOverride.byName.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byName.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + disabled: { + color: 'red', + index: 1, + text: 'Disabled', + }, + enabled: { + color: 'green', + index: 0, + text: 'Enabled', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + hostname: true, + job: true, + }, + includeByName: {}, + indexByName: { + Time: 6, + Value: 9, + __name__: 7, + adminState: 3, + hostname: 5, + id: 4, + instance: 1, + job: 8, + service: 0, + zone: 2, + }, + renameByName: { + Time: '', + adminState: 'Admin state', + id: 'ID', + instance: 'Instance', + service: 'Service', + zone: 'Zone', + }, + }, + }, + ]), + + networks: + commonlib.panels.generic.timeSeries.base.new( + 'Networks', + targets=[t.networks], + description='The number of networks managed by Neutron.', + ) + + timeSeries.standardOptions.withDecimals(0), + + subnets: + commonlib.panels.generic.timeSeries.base.new( + 'Subnets', + targets=[t.subnets], + description='The number of networks managed by Neutron.' + ) + + timeSeries.standardOptions.withDecimals(0), + + routers: + commonlib.panels.generic.timeSeries.base.new( + 'Routers', + targets=[t.routers, t.routersNotActive], + description='The number of routers managed by Neutron.', + ) + + timeSeries.standardOptions.withDecimals(0), + + routerDetails: + table.new('Router details') + + table.queryOptions.withTargets([t.routerDetails]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Detailed view of the routers managed by Neutron.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byRegexp.new('/Admin up|Status/') + + table.fieldOverride.byRegexp.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byRegexp.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + ACTIVE: { + color: 'green', + index: 2, + text: 'Active', + }, + DOWN: { + color: 'red', + index: 3, + text: 'Down', + }, + 'false': { + color: 'red', + index: 1, + text: 'False', + }, + 'true': { + color: 'green', + index: 0, + text: 'True', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + hostname: true, + job: true, + project_id: true, + }, + indexByName: { + name: 0, + instance: 1, + status: 2, + admin_state_up: 3, + id: 4, + external_network_id: 5, + project_id: 6, + Time: 7, + __name__: 8, + job: 9, + Value: 10, + }, + renameByName: { + Time: '', + adminState: 'Admin state', + admin_state_up: 'Admin up', + external_network_id: 'External network ID', + id: 'ID', + instance: 'Instance', + name: 'Name', + project_id: '', + service: 'Service', + status: 'Status', + zone: 'Zone', + }, + includeByName: {}, + }, + }, + ]), + + ports: + commonlib.panels.generic.timeSeries.base.new( + 'Ports', + targets=[t.ports, t.portsLBNotActive, t.portsNoIPs], + description='The number of routers managed by Neutron.', + ) + + timeSeries.standardOptions.withDecimals(0), + + portDetails: + table.new('Port details') + + table.queryOptions.withTargets([t.portDetails]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Detailed view of the ports managed by Neutron.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byRegexp.new('/Admin up|Status/') + + table.fieldOverride.byRegexp.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byRegexp.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + ACTIVE: { + color: 'green', + index: 2, + text: 'Active', + }, + DOWN: { + color: 'red', + index: 3, + text: 'Down', + }, + 'false': { + color: 'red', + index: 1, + text: 'False', + }, + 'true': { + color: 'green', + index: 0, + text: 'True', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + hostname: true, + job: true, + fixed_ips: true, + }, + indexByName: { + Time: 8, + Value: 11, + __name__: 9, + admin_state_up: 3, + binding_vif_type: 6, + device_owner: 5, + instance: 0, + job: 10, + mac_address: 1, + network_id: 4, + status: 2, + uuid: 7, + }, + renameByName: { + Time: '', + adminState: 'Admin state', + admin_state_up: 'Admin up', + binding_vif_type: 'Binding VIF type', + device_owner: 'Device owner', + id: 'ID', + instance: 'Instance', + mac_address: 'MAC address', + network_id: 'Network ID', + service: 'Service', + status: 'Status', + uuid: 'UUID', + zone: 'Zone', + fixed_ips: '', + }, + includeByName: {}, + }, + }, + ]), + + floatingIPs: + commonlib.panels.generic.timeSeries.base.new( + 'Floating IPs', + targets=[t.floatingIPs, t.floatingIPsAssociatedNotActive], + description='The number of public IP addresses managed by Neutron.', + ) + + timeSeries.standardOptions.withDecimals(0), + + ipsUsed: + commonlib.panels.generic.timeSeries.percentage.new( + 'IPs used', + targets=[t.ipsUsed], + description='The usage of available IP addresses broken down by subnet.', + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + securityGroups: + commonlib.panels.generic.timeSeries.base.new( + 'Security groups', + targets=[t.securityGroups], + description='The number of network security groups managed by Neutron.', + ) + + timeSeries.standardOptions.withDecimals(0), + + neutronAgents: + table.new('Agents') + + table.queryOptions.withTargets([t.neutronAgentState]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Details for the agents for OpenStack Neutron.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('Admin state') + + table.fieldOverride.byName.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byName.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + down: { + color: 'red', + index: 1, + text: 'Down', + }, + up: { + color: 'green', + index: 0, + text: 'Up', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + hostname: true, + job: true, + }, + includeByName: {}, + indexByName: { + Time: 6, + Value: 9, + __name__: 7, + adminState: 3, + hostname: 5, + id: 4, + instance: 1, + job: 8, + service: 0, + zone: 2, + }, + renameByName: { + Time: '', + adminState: 'Admin state', + id: 'ID', + instance: 'Instance', + service: 'Service', + zone: 'Zone', + }, + }, + }, + ]), + + volumes: + commonlib.panels.generic.timeSeries.base.new( + 'Volumes', + targets=[t.volumes], + description='The number of volumes managed by Cinder.', + ) + + timeSeries.standardOptions.withDecimals(0), + + volumeStatus: + commonlib.panels.generic.timeSeries.base.new( + 'Volume status', + targets=[t.volumeErrorStatus, t.volumeNonErrorStatus], + description='The current status of volumes in Cinder.', + ) + + timeSeries.options.legend.withPlacement('right') + + timeSeries.fieldConfig.defaults.custom.withStackingMixin({ + group: 'A', + mode: 'normal', + }) + + timeSeries.standardOptions.withDecimals(0), + + volumeUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'Volume usage', + targets=[t.volumeUsage], + description='The percent of volume storage in use for Cinder.', + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + backupUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'Backup usage', + targets=[t.backupUsage], + description='The percent of backup storage in use for Cinder.', + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.options.legend.withPlacement('right') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + poolUsage: + commonlib.panels.generic.timeSeries.percentage.new( + 'Pool usage', + targets=[t.poolUsage], + description='The percent of pool capacity in use for Cinder.', + ) + + timeSeries.standardOptions.withUnit('percentunit') + + timeSeries.standardOptions.withMax(1) + + timeSeries.standardOptions.withMin(0), + + snapshots: + commonlib.panels.generic.timeSeries.base.new( + 'Snapshots', + targets=[t.snaphots], + description='The number of volume snapshots in Cinder.', + ) + + timeSeries.standardOptions.withDecimals(0), + + cinderAgents: + table.new('Agents') + + table.queryOptions.withTargets([t.cinderAgentState]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Details for the agents for OpenStack Cinder.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.fieldConfig.defaults.custom.withCellOptions('color-text') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('Admin state') + + table.fieldOverride.byName.withProperty('custom.displayMode', 'color-text') + + table.fieldOverride.byName.withPropertiesFromOptions( + table.standardOptions.withMappings( + { + type: 'value', + options: { + disabled: { + color: 'red', + index: 1, + text: 'Disabled', + }, + enabled: { + color: 'green', + index: 0, + text: 'Enabled', + }, + }, + } + ), + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + Value: true, + __name__: true, + hostname: true, + job: true, + }, + indexByName: { + Time: 6, + Value: 9, + __name__: 7, + adminState: 3, + hostname: 5, + instance: 1, + job: 8, + service: 0, + uuid: 4, + zone: 2, + }, + renameByName: { + Time: '', + adminState: 'Admin state', + id: 'ID', + instance: 'Instance', + service: 'Service', + zone: 'Zone', + uuid: 'UUID', + }, + includeByName: {}, + }, + }, + ]), + + imageCount: + commonlib.panels.generic.timeSeries.base.new( + 'Image count', + targets=[t.imageCount], + description='The number of images present in Glance.', + ) + + timeSeries.standardOptions.withDecimals(0), + + images: + table.new('Images') + + table.queryOptions.withTargets([t.imageDetails]) + + table.queryOptions.withDatasource('prometheus', '${prometheus_datasource}') + + table.panelOptions.withDescription('Details for the images in Glance.') + + table.fieldConfig.defaults.custom.withAlign('center') + + table.standardOptions.withOverridesMixin([ + table.fieldOverride.byName.new('Size') + + table.standardOptions.override.byName.withPropertiesFromOptions( + table.standardOptions.withUnit('decbytes') + ), + ]) + + table.queryOptions.withTransformationsMixin([ + { + id: 'joinByField', + options: { + byField: 'Time', + mode: 'outer', + }, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + __name__: true, + job: true, + }, + includeByName: {}, + indexByName: { + Time: 5, + Value: 2, + __name__: 6, + id: 1, + instance: 3, + job: 7, + name: 0, + tenant_id: 4, + }, + renameByName: { + Value: 'Size', + id: 'ID', + instance: 'Instance', + name: 'Name', + tenant_id: 'Tenant ID', + }, + }, + }, + ]), + }, +} diff --git a/openstack-mixin/targets.libsonnet b/openstack-mixin/targets.libsonnet new file mode 100644 index 000000000..047bd5a33 --- /dev/null +++ b/openstack-mixin/targets.libsonnet @@ -0,0 +1,317 @@ +local g = import './g.libsonnet'; +local prometheusQuery = g.query.prometheus; +local lokiQuery = g.query.loki; + +{ + new(this): { + local vars = this.grafana.variables, + local config = this.config, + local panel = g.panel, + + placementStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + keystoneStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + novaStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + neutronStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + cinderStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + glanceStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_up{%(queriesSelector)s}' % vars + ), + totalDiskCapacity: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_total{%(queriesSelector)s, resourcetype="DISK_GB"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + totalDiskUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_usage{%(queriesSelector)s, resourcetype="DISK_GB"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + totalMemoryCapacity: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_total{%(queriesSelector)s, resourcetype="MEMORY_MB"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + totalMemoryUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_usage{%(queriesSelector)s, resourcetype="MEMORY_MB"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + totalVCPUCapacity: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_total{%(queriesSelector)s, resourcetype="VCPU"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + totalVCPUUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_placement_resource_usage{%(queriesSelector)s, resourcetype="VCPU"}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + domains: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_identity_domains{%(queriesSelector)s}' % vars + ), + projects: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_identity_projects{%(queriesSelector)s}' % vars + ), + regions: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_identity_regions{%(queriesSelector)s}' % vars + ), + users: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_identity_users{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + + projectDetails: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_identity_project_info{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + vms: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_nova_total_vms{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + instanceUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_nova_limits_instances_used{%(queriesSelector)s} / clamp_min(openstack_nova_limits_instances_max{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{tenant}}'), + vCPUUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_nova_limits_vcpus_used{%(queriesSelector)s} / clamp_min(openstack_nova_limits_vcpus_max{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{tenant}}'), + memoryUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_nova_limits_memory_used{%(queriesSelector)s} / clamp_min(openstack_nova_limits_memory_max{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{tenant}}'), + novaAgentState: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_nova_agent_state{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + networks: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_networks{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + subnets: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_subnets{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + routers: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_routers{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - total'), + routersNotActive: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_routers_not_active{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - inactive'), + routerDetails: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_router{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + ports: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_ports{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - total'), + portsLBNotActive: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_ports_lb_not_active{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - load balancer inactive'), + portsNoIPs: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_ports_no_ips{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - no IPs'), + portDetails: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_port{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + floatingIPs: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_floating_ips{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - total'), + floatingIPsAssociatedNotActive: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_floating_ips_associated_not_active{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - associated inactive'), + ipsUsed: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum by (job, instance, ip_version, subnet_name) (openstack_neutron_network_ip_availabilities_used{%(queriesSelector)s}) / sum by (job, instance, ip_version, subnet_name)(openstack_neutron_network_ip_availabilities_total{%(queriesSelector)s})' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{subnet_name}}'), + securityGroups: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_security_groups{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + neutronAgentState: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_neutron_agent_state{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + volumes: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_volumes{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + volumeErrorStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_volume_status_counter{%(queriesSelector)s, status=~"error|error_backing-up|error_deleting|error_extending|error_restoring"} > 0' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{status}}'), + volumeNonErrorStatus: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk(5, openstack_cinder_volume_status_counter{%(queriesSelector)s, status!~"error|error_backing-up|error_deleting|error_extending|error_restoring"}) > 0' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{status}}'), + volumeUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_limits_volume_used_gb{%(queriesSelector)s} / clamp_min(openstack_cinder_limits_volume_max_gb{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{tenant}}'), + backupUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_limits_backup_used_gb{%(queriesSelector)s} / clamp_min(openstack_cinder_limits_backup_max_gb{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{tenant}}'), + poolUsage: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + '(openstack_cinder_pool_capacity_total_gb{%(queriesSelector)s} - openstack_cinder_pool_capacity_free_gb{%(queriesSelector)s}) / clamp_min(openstack_cinder_pool_capacity_total_gb{%(queriesSelector)s}, 1)' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}} - {{name}}'), + snaphots: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_snapshots{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + cinderAgentState: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_cinder_agent_state{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + imageCount: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_glance_images{%(queriesSelector)s}' % vars + ) + + panel.timeSeries.queryOptions.withInterval('1m') + + prometheusQuery.withLegendFormat('{{instance}}'), + imageDetails: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'openstack_glance_image_bytes{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withFormat('table') + + prometheusQuery.withInstant(true), + }, +} diff --git a/openstack-mixin/variables.libsonnet b/openstack-mixin/variables.libsonnet new file mode 100644 index 000000000..b66cd6ab5 --- /dev/null +++ b/openstack-mixin/variables.libsonnet @@ -0,0 +1,73 @@ +local g = import './g.libsonnet'; +local var = g.dashboard.variable; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; + +// Generates chained variables to use on on all dashboards +{ + new(this): + { + local filteringSelector = this.config.filteringSelector, + local groupLabels = this.config.groupLabels, + local instanceLabels = this.config.instanceLabels, + local varMetric = 'openstack_identity_up', + local root = self, + local variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=true) = + local chainVarProto(index, chainVar) = + var.query.new(chainVar.label) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + chainVar.label, + '%s{%s}' % [varMetric, chainVar.chainSelector], + ) + + var.query.generalOptions.withLabel(utils.toSentenceCase(chainVar.label)) + + var.query.selectionOptions.withIncludeAll( + value=if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + customAllValue='.+' + ) + + var.query.selectionOptions.withMulti( + if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false + ); + std.mapWithIndex(chainVarProto, utils.chainLabels(groupLabels + instanceLabels, [filteringSelector])), + datasources: { + prometheus: + var.datasource.new('prometheus_datasource', 'prometheus') + + var.datasource.generalOptions.withLabel('Data source') + + var.datasource.withRegex(''), + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('(?!grafanacloud.+usage-insights|grafanacloud.+alert-state-history).+') + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + // Use on dashboards where multiple entities can be selected, like fleet dashboards + multiInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector), + // Use on dashboards where only single entity can be selected, like drill-down dashboards + singleInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=false), + + queriesSelector: + '%s' % [ + utils.labelsToPromQLSelector(groupLabels + instanceLabels), + ], + queriesGroupSelectorAdvanced: + '%s' % [ + utils.labelsToPromQLSelectorAdvanced(groupLabels), + ], + } + + if this.config.enableLokiLogs then self.withLokiLogs(this) else {}, + withLokiLogs(this): { + multiInstance+: [this.grafana.variables.datasources.loki], + singleInstance+: [this.grafana.variables.datasources.loki], + }, +} diff --git a/oracledb-mixin/config.libsonnet b/oracledb-mixin/config.libsonnet index b20cf0424..d77528744 100644 --- a/oracledb-mixin/config.libsonnet +++ b/oracledb-mixin/config.libsonnet @@ -1,5 +1,7 @@ { _config+:: { + enableMultiCluster: false, + oracledbSelector: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster"' else 'job=~"$job"', dashboardTags: ['oracledb-mixin'], dashboardPeriod: 'now-1h', dashboardTimezone: 'default', diff --git a/oracledb-mixin/dashboards/overview.libsonnet b/oracledb-mixin/dashboards/overview.libsonnet index 48df1eee4..131d7aeed 100644 --- a/oracledb-mixin/dashboards/overview.libsonnet +++ b/oracledb-mixin/dashboards/overview.libsonnet @@ -5,7 +5,7 @@ local dashboardUid = 'oracledb-overview'; local prometheus = grafana.prometheus; local promDatasourceName = 'prometheus_datasource'; -local matcher = 'job=~"$job", instance=~"$instance"'; +local getMatcher(cfg) = '%(oracledbSelector)s, instance=~"$instance"' % cfg; local promDatasource = { uid: '${%s}' % promDatasourceName, @@ -15,7 +15,7 @@ local lokiDatasource = { uid: '$loki_datasource', }; -local databaseStatusPanel = { +local databaseStatusPanel(matcher) = { description: 'Database status either Up or Down. Colored to be green when Up or red when Down', fieldConfig: { defaults: { @@ -81,7 +81,7 @@ local databaseStatusPanel = { type: 'stat', }; -local sessionsPanel = { +local sessionsPanel(matcher) = { datasource: promDatasource, description: 'Number of sessions and the limit overtime.', fieldConfig: { @@ -171,7 +171,7 @@ local sessionsPanel = { type: 'timeseries', }; -local processPanel = { +local processPanel(matcher) = { datasource: promDatasource, description: 'Number of processes and the limit overtime.', fieldConfig: { @@ -261,7 +261,7 @@ local processPanel = { type: 'timeseries', }; -local alertLogPanel = { +local alertLogPanel(matcher) = { datasource: lokiDatasource, description: 'Recent logs from alert log file', options: { @@ -279,7 +279,7 @@ local alertLogPanel = { { datasource: lokiDatasource, editorMode: 'builder', - expr: '{filename=~"/u01/base/diag/rdbms/.*/.*/trace/alert_.*log",' + matcher + '}', + expr: '{filename=~"/.*/.*/diag/rdbms/.*/.*/trace/alert_.*log",' + matcher + '}', queryType: 'range', refId: 'A', }, @@ -294,7 +294,7 @@ local waitTimerow = { type: 'row', }; -local applicationWaitTimePanel = { +local applicationWaitTimePanel(matcher) = { datasource: promDatasource, description: 'Application wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -375,7 +375,7 @@ local applicationWaitTimePanel = { type: 'timeseries', }; -local commitTimePanel = { +local commitTimePanel(matcher) = { datasource: promDatasource, description: 'Commit wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -456,7 +456,7 @@ local commitTimePanel = { type: 'timeseries', }; -local concurrencyWaitTime = { +local concurrencyWaitTime(matcher) = { datasource: promDatasource, description: 'Concurrency wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -537,7 +537,7 @@ local concurrencyWaitTime = { type: 'timeseries', }; -local configurationWaitTime = { +local configurationWaitTime(matcher) = { datasource: promDatasource, description: 'Configuration wait time, in seconds waiting for wait events.', fieldConfig: { @@ -618,7 +618,7 @@ local configurationWaitTime = { type: 'timeseries', }; -local networkWaitTime = { +local networkWaitTime(matcher) = { datasource: promDatasource, description: 'Network wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -699,7 +699,7 @@ local networkWaitTime = { type: 'timeseries', }; -local schedulerWaitTime = { +local schedulerWaitTime(matcher) = { datasource: promDatasource, description: 'Scheduler wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -780,7 +780,7 @@ local schedulerWaitTime = { type: 'timeseries', }; -local systemIOWaitTime = { +local systemIOWaitTime(matcher) = { datasource: promDatasource, description: 'System I/O wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -861,7 +861,7 @@ local systemIOWaitTime = { type: 'timeseries', }; -local userIOWaitTime = { +local userIOWaitTime(matcher) = { datasource: promDatasource, description: 'User I/O wait time, in seconds, waiting for wait events.', fieldConfig: { @@ -948,7 +948,7 @@ local tablespaceRow = { type: 'row', }; -local tablespaceSizePanel = { +local tablespaceSizePanel(matcher) = { datasource: promDatasource, description: 'Shows the size overtime for the tablespace.', fieldConfig: { @@ -1098,6 +1098,18 @@ local tablespaceSizePanel = { allValues='.+', sort=1 ), + template.new( + 'cluster', + promDatasource, + 'label_values(oracledb_up, cluster)' % $._config, + label='Cluster', + refresh=2, + includeAll=true, + multi=true, + allValues='.*', + hide=if $._config.enableMultiCluster then '' else 'variable', + sort=0 + ), template.new( name='instance', label='Instance', @@ -1113,7 +1125,7 @@ local tablespaceSizePanel = { template.new( 'tablespace', promDatasource, - query='label_values(oracledb_tablespace_bytes{' + matcher + '}, tablespace)', + query='label_values(oracledb_tablespace_bytes{%(oracledbSelector)s, instance=~"$instance"}, tablespace)' % $._config, label='Tablespace', refresh='time', includeAll=true, @@ -1128,33 +1140,33 @@ local tablespaceSizePanel = { .addPanels( std.flattenArrays([ [ - databaseStatusPanel { gridPos: { h: 6, w: 4, x: 0, y: 0 } }, - sessionsPanel { gridPos: { h: 6, w: 10, x: 4, y: 0 } }, - processPanel { gridPos: { h: 6, w: 10, x: 14, y: 0 } }, + databaseStatusPanel(getMatcher($._config)) { gridPos: { h: 6, w: 4, x: 0, y: 0 } }, + sessionsPanel(getMatcher($._config)) { gridPos: { h: 6, w: 10, x: 4, y: 0 } }, + processPanel(getMatcher($._config)) { gridPos: { h: 6, w: 10, x: 14, y: 0 } }, ], if $._config.enableLokiLogs then [ - alertLogPanel { gridPos: { h: 7, w: 24, x: 0, y: 6 } }, + alertLogPanel(getMatcher($._config)) { gridPos: { h: 7, w: 24, x: 0, y: 6 } }, ] else [], [ waitTimerow { gridPos: { h: 1, w: 24, x: 0, y: 13 } }, ], [ - applicationWaitTimePanel { gridPos: { h: 6, w: 6, x: 0, y: 14 } }, - commitTimePanel { gridPos: { h: 6, w: 6, x: 6, y: 14 } }, - concurrencyWaitTime { gridPos: { h: 6, w: 6, x: 12, y: 14 } }, - configurationWaitTime { gridPos: { h: 6, w: 6, x: 18, y: 14 } }, + applicationWaitTimePanel(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 0, y: 14 } }, + commitTimePanel(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 6, y: 14 } }, + concurrencyWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 12, y: 14 } }, + configurationWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 18, y: 14 } }, ], [ - networkWaitTime { gridPos: { h: 6, w: 6, x: 0, y: 20 } }, - schedulerWaitTime { gridPos: { h: 6, w: 6, x: 6, y: 20 } }, - systemIOWaitTime { gridPos: { h: 6, w: 6, x: 12, y: 20 } }, - userIOWaitTime { gridPos: { h: 6, w: 6, x: 18, y: 20 } }, + networkWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 0, y: 20 } }, + schedulerWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 6, y: 20 } }, + systemIOWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 12, y: 20 } }, + userIOWaitTime(getMatcher($._config)) { gridPos: { h: 6, w: 6, x: 18, y: 20 } }, ], [ tablespaceRow { gridPos: { h: 1, w: 24, x: 0, y: 26 } }, ], [ - tablespaceSizePanel { gridPos: { h: 6, w: 24, x: 0, y: 27 } }, + tablespaceSizePanel(getMatcher($._config)) { gridPos: { h: 6, w: 24, x: 0, y: 27 } }, ], ]) ), diff --git a/pgbouncer-mixin/.lint b/pgbouncer-mixin/.lint new file mode 100644 index 000000000..76ad01875 --- /dev/null +++ b/pgbouncer-mixin/.lint @@ -0,0 +1,19 @@ +exclusions: + template-job-rule: + reason: "Prometheus datasource variable is being named as prometheus_datasource now while linter expects 'datasource'" + panel-datasource-rule: + reason: "Loki datasource variable is being named as loki_datasource now while linter expects 'datasource'" + template-datasource-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + template-instance-rule: + reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" + target-job-rule: + reason: "mixtool upgrade made this rule stricter. TODO: Fix errors and remove the warning exclusion" + panel-title-description-rule: + reason: "Not required for logs volume" + panel-units-rule: + reason: "Logs volume has no unit" + target-instance-rule: + reason: "Cluster dashboard doesn't use instance" + entries: + - dashboard: "PgBouncer cluster overview" diff --git a/pgbouncer-mixin/Makefile b/pgbouncer-mixin/Makefile new file mode 100644 index 000000000..2db585e50 --- /dev/null +++ b/pgbouncer-mixin/Makefile @@ -0,0 +1,34 @@ +JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s + +.PHONY: all +all: build dashboards_out prometheus_alerts.yaml + +vendor: jsonnetfile.json + jb install + +.PHONY: build +build: vendor + +.PHONY: fmt +fmt: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: lint +lint: build + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + while read f; do \ + $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ + done + mixtool lint mixin.libsonnet + +dashboards_out: mixin.libsonnet config.libsonnet dashboards.libsonnet + @mkdir -p dashboards_out + mixtool generate dashboards mixin.libsonnet -d dashboards_out + +prometheus_alerts.yaml: mixin.libsonnet alerts.libsonnet + mixtool generate alerts mixin.libsonnet -a prometheus_alerts.yaml + +.PHONY: clean +clean: + rm -rf dashboards_out prometheus_alerts.yaml \ No newline at end of file diff --git a/pgbouncer-mixin/README.md b/pgbouncer-mixin/README.md new file mode 100644 index 000000000..4dd5e4b7f --- /dev/null +++ b/pgbouncer-mixin/README.md @@ -0,0 +1,120 @@ +# PgBouncer Mixin +The PgBouncer mixin is a set of configurable Grafana dashboards and alerts. + +The PgBouncer mixin contains the following dashboards: + +- PgBouncer cluster overview +- PgBouncer overview +- PgBouncer logs overview + +and the following alerts: + +- HighNumberClientWaitingConnections +- HighClientWaitTime +- HighServerConnectionSaturationWarning +- HighServerConnectionSaturationCritical + +## PgBouncer Cluster Overview + +The PgBouncer cluster overview dashboard provides details on active connections, query durations, query processing, network traffic, and alerts. + +![PgBouncer Overview Dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/pgbouncer/screenshots/pgbouncer-cluster-overview.png) + +## PgBouncer Overview + +The PgBouncer overview dashboard provides details on active connections, query durations, query processing, network traffic, config details, client connections, SQL transactions, and wait times. + +![PgBouncer Overview Dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/pgbouncer/screenshots/pgbouncer-overview.png) + +## PgBouncer Logs Overview + +The PgBouncer logs overview dashboard provides details on the PgBouncer system. [Promtail and Loki needs to be installed](https://grafana.com/docs/loki/latest/installation/) and provisioned for logs with your Grafana instance. The default PgBouncer log path is `/var/log/postgresql/pgbouncer.log`, but this can change depending on the path you provide in your `pgbouncer.ini` configuration file. + +![PgBouncer Logs Dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/pgbouncer/screenshots/pgbouncer-logs-overview.png) + +PgBouncer logs are enabled by default in the `config.libsonnet` and can be removed by setting `enableLokiLogs` to `false`. Then run `make` again to regenerate the dashboard: + +``` +{ + _config+:: { + enableLokiLogs: false, + }, +} +``` + +In order for the selectors to properly work for system logs ingested into your logs datasource, please also include the matching `job` label onto the [scrape_configs](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#scrape_configs) as to match the labels for ingested metrics. + +```yaml +scrape_configs: + - job_name: integrations/pgbouncer + static_configs: + - targets: [localhost] + labels: + job: integrations/pgbouncer + __path__: /var/log/postgresql/pgbouncer.log + pgbouncer_cluster: cluster-A + instance: localhost:9127 + pipeline_stages: + - multiline: + firstline: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}' + - regex: + expression: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \w+ \[\d+\] (?PLOG|ERROR|WARNING|INFO|DEBUG) .*' + - labels: + level: +``` + +![PgBouncer Logs Overview Dashboard](https://storage.googleapis.com/grafanalabs-integration-assets/pgbouncer/screenshots/pgbouncer-logs-overview.png) + +## Alerts Overview + +| Alert | Summary | +| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| HighNumberClientWaitingConnections | High number of clients waiting a connection, which may indicate a bottleneck in connection pooling, where too many clients are waiting for available server connections | +| HighClientWaitTime | Clients are experiencing significant delays, which could indicate issues with connection pool saturation or server performance. | +| HighServerConnectionSaturationWarning | System is nearing a high number of user connections, near the threshold of configured max user connections. | +| HighServerConnectionSaturationCritical | System is nearing a critically high number of user connections, near the threshold of configured max user connections. | + +Default thresholds can be configured in `config.libsonnet` + +```js +{ + _config+:: { + alertsHighClientWaitingConnections: 20, + alertsHighClientWaitTime: 15, + alertsHighServerConnectionSaturationWarning: 80, + alertsHighServerConnectionSaturationCritical: 90, + }, +} +``` + +## Install Tools + +```bash +go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest +go install github.com/monitoring-mixins/mixtool/cmd/mixtool@latest +# or in brew: brew install go-jsonnet +``` + +For linting and formatting, you would also need `mixtool` and `jsonnetfmt` installed. If you +have a working Go development environment, it's easiest to run the following: + +```bash +go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest +``` + +The files in `dashboards_out` need to be imported +into your Grafana server. The exact details will be depending on your environment. + +`prometheus_alerts.yaml` needs to be imported into Prometheus. + +## Generate Dashboards And Alerts + +Edit `config.libsonnet` if required and then build JSON dashboard files for Grafana: + +```bash +make +``` + +For more advanced uses of mixins, see +https://github.com/monitoring-mixins/docs. + diff --git a/pgbouncer-mixin/alerts.libsonnet b/pgbouncer-mixin/alerts.libsonnet new file mode 100644 index 000000000..2e1f1c156 --- /dev/null +++ b/pgbouncer-mixin/alerts.libsonnet @@ -0,0 +1,76 @@ +{ + new(this): { + + groups: [ + { + name: this.config.uid, + rules: [ + { + alert: 'PGBouncerHighNumberClientWaitingConnections', + expr: ||| + pgbouncer_pools_client_waiting_connections{%(filteringSelector)s} > %(alertsHighClientWaitingConnections)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'May indicate a bottleneck in connection pooling where too many clients are waiting for available server connections.', + description: ||| + The number of clients waiting for connections on {{ $labels.instance }} is now above %(alertsHighClientWaitingConnections)s. The current value is {{ $value | printf "%%.2f" }}. + ||| % this.config, + }, + }, + { + alert: 'PGBouncerHighClientWaitTime', + expr: ||| + pgbouncer_pools_client_maxwait_seconds{%(filteringSelector)s} > %(alertsHighClientWaitTime)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Clients are experiencing significant delays, which could indicate issues with connection pool saturation or server performance.', + description: ||| + The wait time for user connections on {{ $labels.instance }}, is above %(alertsHighClientWaitTime)s. The current value is {{ $value | printf "%%.2f" }}. + ||| % this.config, + }, + }, + { + alert: 'PGBouncerHighServerConnectionSaturationWarning', + expr: ||| + 100 * (sum without (database, user) (pgbouncer_pools_server_active_connections{%(filteringSelector)s} + pgbouncer_pools_server_idle_connections{%(filteringSelector)s} + pgbouncer_pools_server_used_connections{%(filteringSelector)s}) / clamp_min(pgbouncer_config_max_user_connections{%(filteringSelector)s},1)) > %(alertsHighServerConnectionSaturationWarning)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'PGBouncer is nearing user connection capacity.', + description: ||| + User connection capacity on {{ $labels.instance }}, is above %(alertsHighServerConnectionSaturationWarning)s%%. The current value is {{ $value | printf "%%.2f" }}. + ||| % this.config, + }, + }, + { + alert: 'PGBouncerHighServerConnectionSaturationCritical', + expr: ||| + 100 * (sum without (database, user) (pgbouncer_pools_server_active_connections{%(filteringSelector)s} + pgbouncer_pools_server_idle_connections{%(filteringSelector)s} + pgbouncer_pools_server_used_connections{%(filteringSelector)s}) / clamp_min(pgbouncer_config_max_user_connections{%(filteringSelector)s},1)) > %(alertsHighServerConnectionSaturationCritical)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'PGBouncer is nearing critical levels of user connection capacity.', + description: ||| + User connection capacity on {{ $labels.instance }}, is above %(alertsHighServerConnectionSaturationCritical)s%%. The current value is {{ $value | printf "%%.2f" }}. + ||| % this.config, + }, + }, + ], + }, + ], + }, +} diff --git a/pgbouncer-mixin/config.libsonnet b/pgbouncer-mixin/config.libsonnet new file mode 100644 index 000000000..86300df74 --- /dev/null +++ b/pgbouncer-mixin/config.libsonnet @@ -0,0 +1,36 @@ +{ + // any modular library should include as inputs: + // 'dashboardNamePrefix' - Use as prefix for all Dashboards and (optional) rule groups + // 'filteringSelector' - Static selector to apply to ALL dashboard variables of type query, panel queries, alerts and recording rules. + // 'groupLabels' - one or more labels that can be used to identify 'group' of instances. In simple cases, can be 'job' or 'cluster'. + // 'instanceLabels' - one or more labels that can be used to identify single entity of instances. In simple cases, can be 'instance' or 'pod'. + // 'uid' - UID to prefix all dashboards original uids + enableMultiCluster: false, + filteringSelector: 'job="integrations/pgbouncer"', + groupLabels: if self.enableMultiCluster then ['job', 'cluster', 'pgbouncer_cluster'] else ['job', 'pgbouncer_cluster'], + logLabels: if self.enableMultiCluster then ['job', 'cluster', 'pgbouncer_cluster', 'instance'] else ['job', 'pgbouncer_cluster', 'instance'], + pureInstanceLabels: ['instance'], + legendLabels: ['database'], + clusterLegendLabel: ['pgbouncer_cluster', 'instance', 'database'], + instanceLabels: ['instance', 'database'], + dashboardTags: [self.uid], + uid: 'pgbouncer', + dashboardNamePrefix: '', + + // additional params can be added if needed + dashboardPeriod: 'now-1h', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + + // alert thresholds + alertsHighClientWaitingConnections: 20, + alertsHighClientWaitTime: 15, + alertsHighServerConnectionSaturationWarning: 80, + alertsHighServerConnectionSaturationCritical: 90, + + // logs lib related + enableLokiLogs: true, + extraLogLabels: ['level'], + logsVolumeGroupBy: 'level', + showLogsVolume: true, +} diff --git a/pgbouncer-mixin/dashboards.libsonnet b/pgbouncer-mixin/dashboards.libsonnet new file mode 100644 index 000000000..4c1ff8b67 --- /dev/null +++ b/pgbouncer-mixin/dashboards.libsonnet @@ -0,0 +1,111 @@ +local g = import './g.libsonnet'; +local logslib = import 'logs-lib/logs/main.libsonnet'; +{ + local root = self, + new(this): + local prefix = this.config.dashboardNamePrefix; + local links = this.grafana.links; + local tags = this.config.dashboardTags; + local uid = g.util.string.slugify(this.config.uid); + local vars = this.grafana.variables; + local annotations = this.grafana.annotations; + local refresh = this.config.dashboardRefresh; + local period = this.config.dashboardPeriod; + local timezone = this.config.dashboardTimezone; + local panels = this.grafana.panels; + local stat = g.panel.stat; + { + overview: + g.dashboard.new(prefix + 'PgBouncer overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.clientsWaitingConnections { gridPos+: { w: 4, h: 4 } }, + panels.activeClientConnections { gridPos+: { w: 4, h: 4 } }, + panels.activeServerConnections { gridPos+: { w: 4, h: 4 } }, + panels.maxDatabaseConnections { gridPos+: { w: 4, h: 4 } }, + panels.maxUserConnections { gridPos+: { w: 4, h: 4 } }, + panels.maxClientConnections { gridPos+: { w: 4, h: 4 } }, + g.panel.row.new('Queries'), + panels.queriesPooled { gridPos+: { w: 12 } }, + panels.queryDuration { gridPos+: { w: 12 } }, + g.panel.row.new('Network'), + panels.networkTraffic { gridPos+: { w: 24 } }, + g.panel.row.new('Transactions'), + panels.transactionRate { gridPos+: { w: 12 } }, + panels.transactionAverageDuration { gridPos+: { w: 12 } }, + g.panel.row.new('Server'), + panels.serverConnections { gridPos+: { w: 24 } }, + g.panel.row.new('Client'), + panels.granularActiveClientConnections { gridPos+: { w: 8 } }, + panels.clientsWaiting { gridPos+: { w: 8 } }, + panels.maxClientWaitTime { gridPos+: { w: 8 } }, + ], 12, 6 + ) + ) + // hide link to self + + root.applyCommon(vars.singleInstance, uid + '-overview', tags, links { pgbouncerOverview+:: {} }, annotations, timezone, refresh, period), + clusterOverview: + g.dashboard.new(prefix + 'PgBouncer cluster overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + panels.topDatabaseActiveConnection { gridPos+: { w: 12 } }, + panels.alertsPanel { gridPos+: { w: 12 } }, + panels.topDatabaseQueryPooled { gridPos+: { w: 12 } }, + panels.topDatabaseQueryDuration { gridPos+: { w: 12 } }, + panels.topDatabaseNetworkTraffic { gridPos+: { w: 24 } }, + ], 12, 6 + ) + ) + // hide link to self + + root.applyCommon(vars.clusterVariableSelectors, uid + '-cluster-overview', tags, links { pgbouncerClusterOverview+:: {} }, annotations, timezone, refresh, period), + } + + + if this.config.enableLokiLogs then + { + logs: + logslib.new( + prefix + 'PgBouncer logs', + datasourceName=this.grafana.variables.datasources.loki.name, + datasourceRegex=this.grafana.variables.datasources.loki.regex, + filterSelector=this.config.filteringSelector, + labels=this.config.logLabels + this.config.extraLogLabels, + formatParser=null, + showLogsVolume=this.config.showLogsVolume, + logsVolumeGroupBy=this.config.logsVolumeGroupBy, + ) + { + dashboards+: + { + logs+: + // reference to self, already generated variables, to keep them, but apply other common data in applyCommon + root.applyCommon(super.logs.templating.list, uid=uid + '-logs', tags=tags, links=links { logs+:: {} }, annotations=annotations, timezone=timezone, refresh=refresh, period=period), + }, + panels+: + { + // modify log panel + logs+: + g.panel.logs.options.withEnableLogDetails(true) + + g.panel.logs.options.withShowTime(false) + + g.panel.logs.options.withWrapLogMessage(false), + }, + variables+: { + // add prometheus datasource for annotations processing + toArray+: [ + this.grafana.variables.datasources.prometheus { hide: 2 }, + ], + }, + }.dashboards.logs, + } + else {}, + //Apply common options(uids, tags, annotations etc..) to all dashboards above + applyCommon(vars, uid, tags, links, annotations, timezone, refresh, period): + g.dashboard.withTags(tags) + + g.dashboard.withUid(uid) + + g.dashboard.withLinks(std.objectValues(links)) + + g.dashboard.withTimezone(timezone) + + g.dashboard.withRefresh(refresh) + + g.dashboard.time.withFrom(period) + + g.dashboard.withVariables(vars), +} diff --git a/pgbouncer-mixin/g.libsonnet b/pgbouncer-mixin/g.libsonnet new file mode 100644 index 000000000..6da9f4eef --- /dev/null +++ b/pgbouncer-mixin/g.libsonnet @@ -0,0 +1 @@ +import 'github.com/grafana/grafonnet/gen/grafonnet-v10.0.0/main.libsonnet' diff --git a/pgbouncer-mixin/jsonnetfile.json b/pgbouncer-mixin/jsonnetfile.json new file mode 100644 index 000000000..69b58cc74 --- /dev/null +++ b/pgbouncer-mixin/jsonnetfile.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "common-lib" + } + }, + "version": "master" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-v10.0.0" + } + }, + "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "logs-lib" + } + }, + "version": "master" + } + ], + "legacyImports": true +} \ No newline at end of file diff --git a/pgbouncer-mixin/links.libsonnet b/pgbouncer-mixin/links.libsonnet new file mode 100644 index 000000000..8cf725f75 --- /dev/null +++ b/pgbouncer-mixin/links.libsonnet @@ -0,0 +1,21 @@ +local g = import './g.libsonnet'; +{ + local link = g.dashboard.link, + new(this): + { + pgbouncerOverview: + link.link.new('PgBouncer overview', '/d/' + this.grafana.dashboards.overview.uid) + + link.link.options.withKeepTime(true), + pgbouncerClusterOverview: + link.link.new('PgBouncer cluster overview', '/d/' + this.grafana.dashboards.clusterOverview.uid) + + link.link.options.withKeepTime(true), + } + + + if this.config.enableLokiLogs then + { + logs: + link.link.new('PgBouncer logs', '/d/' + this.grafana.dashboards.logs.uid) + + link.link.options.withKeepTime(true), + } + else {}, +} diff --git a/pgbouncer-mixin/main.libsonnet b/pgbouncer-mixin/main.libsonnet new file mode 100644 index 000000000..8ac3be57c --- /dev/null +++ b/pgbouncer-mixin/main.libsonnet @@ -0,0 +1,35 @@ +local alerts = import './alerts.libsonnet'; +local config = import './config.libsonnet'; +local dashboards = import './dashboards.libsonnet'; +local g = import './g.libsonnet'; +local links = import './links.libsonnet'; +local panels = import './panels.libsonnet'; +local targets = import './targets.libsonnet'; +local variables = import './variables.libsonnet'; + +{ + + withConfigMixin(config): { + config+: config, + }, + + new(): { + + local this = self, + config: config, + + grafana: { + variables: variables.new(this, varMetric='pgbouncer_databases_current_connections'), + targets: targets.new(this), + annotations: {}, + links: links.new(this), + panels: panels.new(this), + dashboards: dashboards.new(this), + }, + + prometheus: { + alerts: alerts.new(this), + recordingRules: {}, + }, + }, +} diff --git a/pgbouncer-mixin/mixin.libsonnet b/pgbouncer-mixin/mixin.libsonnet new file mode 100644 index 000000000..cf60cdb56 --- /dev/null +++ b/pgbouncer-mixin/mixin.libsonnet @@ -0,0 +1,18 @@ +local pgbouncerlib = import './main.libsonnet'; + +local pgbouncer = + pgbouncerlib.new() + + pgbouncerlib.withConfigMixin( + { + filteringSelector: 'job=~"integrations/pgbouncer"', + uid: 'pgbouncer', + enableLokiLogs: true, + } + ); + +// populate monitoring-mixin: +{ + grafanaDashboards+:: pgbouncer.grafana.dashboards, + prometheusAlerts+:: pgbouncer.prometheus.alerts, + prometheusRules+:: pgbouncer.prometheus.recordingRules, +} diff --git a/pgbouncer-mixin/panels.libsonnet b/pgbouncer-mixin/panels.libsonnet new file mode 100644 index 000000000..5c059c5aa --- /dev/null +++ b/pgbouncer-mixin/panels.libsonnet @@ -0,0 +1,201 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; +{ + new(this): + { + local t = this.grafana.targets, + local stat = g.panel.stat, + local alertList = g.panel.alertList, + + // create stat panel using commonlib + clientsWaitingConnections: + commonlib.panels.generic.stat.base.new( + 'Client waiting connections', + targets=[t.clientsWaitingConnections], + description='Current number of client connections waiting on a server connection.' + ) + + stat.options.withGraphMode('none') + + stat.standardOptions.color.withMode('thresholds') + + stat.standardOptions.thresholds.withSteps([ + stat.thresholdStep.withColor('super-light-green') + + stat.thresholdStep.withValue(0), + stat.thresholdStep.withColor('super-light-orange') + + stat.thresholdStep.withValue(10), + stat.thresholdStep.withColor('super-light-red') + + stat.thresholdStep.withValue(20), + ]), + activeClientConnections: + commonlib.panels.generic.stat.info.new( + 'Active client connections', + targets=[t.activeClientConnections], + description='Current number of active client connections.' + ) + + stat.options.withGraphMode('none'), + activeServerConnections: + commonlib.panels.generic.stat.info.new( + 'Active server connections', + targets=[t.activeServerConnections], + description='Current number of client connections that are linked to a server connection and able to process queries.' + ) + + stat.options.withGraphMode('none'), + maxDatabaseConnections: + commonlib.panels.generic.stat.info.new( + 'Max database connections', + targets=[t.maxDatabaseConnections], + description='Maximum number of allowed connections for database.' + ) + + stat.options.withGraphMode('none'), + maxUserConnections: + commonlib.panels.generic.stat.info.new( + 'Max user connections', + targets=[t.maxUserConnections], + description='Maximum number of server connections per user allowed.' + ) + + stat.options.withGraphMode('none'), + maxClientConnections: + commonlib.panels.generic.stat.info.new( + 'Max client connections', + targets=[t.maxClientConnections], + description='Maximum number of client connections allowed.' + ) + + stat.options.withGraphMode('none'), + + queriesPooled: + commonlib.panels.generic.timeSeries.base.new( + 'Queries processed', + targets=[t.queriesPooled], + description=||| + Rate of SQL queries pooled by PgBouncer. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('ops'), + + queryDuration: + commonlib.panels.generic.timeSeries.base.new( + 'Queries average duration / $__interval', + targets=[t.queryDuration], + description=||| + Average duration of queries being processed by PgBouncer. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('ms'), + + networkTraffic: + commonlib.panels.network.timeSeries.traffic.new( + 'Network traffic', + targets=[t.networkTrafficRecieved, t.networkTrafficSent], + description=||| + Volume in bytes of network traffic received by PgBouncer. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('Bps') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right'), + + transactionRate: + commonlib.panels.generic.timeSeries.base.new( + 'SQL transaction rate', + targets=[t.transactionRate], + description=||| + Rate of SQL transactions pooled. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('ops'), + + transactionAverageDuration: + commonlib.panels.generic.timeSeries.base.new( + 'SQL average transaction duration / $__interval', + targets=[t.transactionAverageDuration], + description=||| + Average duration of SQL transactions pooled. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('ms'), + + serverConnections: + commonlib.panels.generic.timeSeries.base.new( + 'Server connections', + targets=[t.serverIdleConnections, t.serverUsedConnections, t.serverLoginConnections, t.serverTestingConnections], + description=||| + Number of various server connection states. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('conn') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right'), + + granularActiveClientConnections: + commonlib.panels.generic.timeSeries.base.new( + 'Active client connections', + targets=[t.granularActiveClientConnections], + description=||| + Current number of active client connections. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('conn'), + + clientsWaiting: + commonlib.panels.generic.timeSeries.base.new( + 'Waiting clients', + targets=[t.clientsWaiting], + description=||| + Current number of client connections waiting on a server connection. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('clients'), + + maxClientWaitTime: + commonlib.panels.generic.timeSeries.base.new( + 'Max client wait time', + targets=[t.maxClientWaitTime], + description=||| + Age of the oldest unserved client connection in seconds. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('s'), + + alertsPanel: + alertList.new('PgBouncer alerts') + + alertList.options.UnifiedAlertListOptions.withAlertInstanceLabelFilter(this.grafana.variables.queriesGroupSelectorAdvanced), + + topDatabaseActiveConnection: + commonlib.panels.generic.timeSeries.base.new( + 'Top databases by active connections', + targets=[t.topDatabaseActiveConnection], + description=||| + Top databases by current number of active client connections. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('conn'), + topDatabaseQueryPooled: + commonlib.panels.generic.timeSeries.base.new( + 'Top databases by queries processed', + targets=[t.topDatabaseQueryProcessed], + description=||| + Top databases by rate of SQL queries pooled by PgBouncer. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('ops'), + topDatabaseQueryDuration: + commonlib.panels.generic.timeSeries.base.new( + 'Top databases by average query duration', + targets=[t.topDatabaseQueryDuration], + description=||| + Top databases by average duration of queries being processed by PgBouncer. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('s'), + topDatabaseNetworkTraffic: + commonlib.panels.generic.timeSeries.base.new( + 'Top databases by network traffic', + targets=[t.topDatabaseNetworkTrafficReceived, t.topDatabaseNetworkTrafficSent], + description=||| + Top databases by volume of network traffic. + ||| + ) + + g.panel.timeSeries.standardOptions.withUnit('Bps') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right'), + }, +} diff --git a/pgbouncer-mixin/targets.libsonnet b/pgbouncer-mixin/targets.libsonnet new file mode 100644 index 000000000..890472155 --- /dev/null +++ b/pgbouncer-mixin/targets.libsonnet @@ -0,0 +1,165 @@ +local g = import './g.libsonnet'; +local prometheusQuery = g.query.prometheus; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils { + labelsToPanelLegend(labels): std.join(' - ', ['{{%s}}' % [label] for label in labels]), +}; +local lokiQuery = g.query.loki; + +{ + new(this): { + local vars = this.grafana.variables, + local config = this.config, + + clientsWaitingConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_pools_client_waiting_connections{%(queriesSelector)s})' % vars + ), + activeClientConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_pools_client_active_connections{%(queriesSelector)s})' % vars + ), + activeServerConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_pools_server_active_connections{%(queriesSelector)s})' % vars + ), + maxDatabaseConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_databases_max_connections{%(queriesSelector)s})' % vars + ), + maxUserConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_config_max_user_connections{%(instanceQueriesSelector)s})' % vars + ), + maxClientConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'sum(pgbouncer_config_max_client_connections{%(instanceQueriesSelector)s})' % vars + ), + queriesPooled: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'rate(pgbouncer_stats_queries_pooled_total{%(queriesSelector)s}[$__rate_interval])' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + queryDuration: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + '1000 * increase(pgbouncer_stats_queries_duration_seconds_total{%(queriesSelector)s}[$__interval:]) / clamp_min(increase(pgbouncer_stats_queries_pooled_total{%(queriesSelector)s}[$__interval:]), 1)' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + networkTrafficRecieved: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'rate(pgbouncer_stats_received_bytes_total{%(queriesSelector)s}[$__rate_interval])' % vars + ) + + prometheusQuery.withLegendFormat('%s - received' % utils.labelsToPanelLegend(this.config.legendLabels)), + + networkTrafficSent: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'rate(pgbouncer_stats_sent_bytes_total{%(queriesSelector)s}[$__rate_interval])' % vars + ) + + prometheusQuery.withLegendFormat('%s - sent' % utils.labelsToPanelLegend(this.config.legendLabels)), + + transactionRate: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'rate(pgbouncer_stats_sql_transactions_pooled_total{%(queriesSelector)s}[$__rate_interval])' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + transactionAverageDuration: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + '1000 * increase(pgbouncer_stats_server_in_transaction_seconds_total{%(queriesSelector)s}[$__interval:]) / clamp_min(increase(pgbouncer_stats_sql_transactions_pooled_total{%(queriesSelector)s}[$__interval:]), 1)' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + serverIdleConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_server_idle_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s - idle' % utils.labelsToPanelLegend(this.config.legendLabels)), + + serverUsedConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_server_used_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s - used' % utils.labelsToPanelLegend(this.config.legendLabels)), + + serverTestingConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_server_testing_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s - testing' % utils.labelsToPanelLegend(this.config.legendLabels)), + + serverLoginConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_server_login_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s - login' % utils.labelsToPanelLegend(this.config.legendLabels)), + + granularActiveClientConnections: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_client_active_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + clientsWaiting: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_client_waiting_connections{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + maxClientWaitTime: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'pgbouncer_pools_client_maxwait_seconds{%(queriesSelector)s}' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.legendLabels)), + + topDatabaseActiveConnection: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk by(database, instance, pgbouncer_cluster)($top_database_count, pgbouncer_pools_client_active_connections{%(clusterQuerySelector)s})' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.clusterLegendLabel)), + topDatabaseQueryProcessed: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk by(database, instance, pgbouncer_cluster)($top_database_count, rate(pgbouncer_stats_queries_pooled_total{%(clusterQuerySelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.clusterLegendLabel)), + topDatabaseQueryDuration: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk by(database, instance, pgbouncer_cluster)($top_database_count, 1000 * increase(pgbouncer_stats_queries_duration_seconds_total{%(clusterQuerySelector)s}[$__interval:]) / clamp_min(increase(pgbouncer_stats_queries_pooled_total{%(clusterQuerySelector)s}[$__interval:]), 1))' % vars + ) + + prometheusQuery.withLegendFormat('%s' % utils.labelsToPanelLegend(this.config.clusterLegendLabel)), + topDatabaseNetworkTrafficReceived: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk by(database, instance, pgbouncer_cluster)($top_database_count, rate(pgbouncer_stats_received_bytes_total{%(clusterQuerySelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('%s - received' % utils.labelsToPanelLegend(this.config.clusterLegendLabel)), + topDatabaseNetworkTrafficSent: + prometheusQuery.new( + '${' + vars.datasources.prometheus.name + '}', + 'topk by(database, instance, pgbouncer_cluster)($top_database_count, rate(pgbouncer_stats_sent_bytes_total{%(clusterQuerySelector)s}[$__rate_interval]))' % vars + ) + + prometheusQuery.withLegendFormat('%s - sent' % utils.labelsToPanelLegend(this.config.clusterLegendLabel)), + }, +} diff --git a/pgbouncer-mixin/variables.libsonnet b/pgbouncer-mixin/variables.libsonnet new file mode 100644 index 000000000..beefbbc96 --- /dev/null +++ b/pgbouncer-mixin/variables.libsonnet @@ -0,0 +1,99 @@ +local g = import './g.libsonnet'; +local var = g.dashboard.variable; +local commonlib = import 'common-lib/common/main.libsonnet'; +local utils = commonlib.utils; + +// Generates chained variables to use on on all dashboards +{ + new(this, varMetric): + { + local filteringSelector = this.config.filteringSelector, + local groupLabels = this.config.groupLabels, + local instanceLabels = this.config.instanceLabels, + local pureInstanceLabels = this.config.pureInstanceLabels, + local topDatabaseSelector = + var.custom.new( + 'top_database_count', + values=[2, 4, 6, 8, 10], + ) + + var.custom.generalOptions.withDescription( + 'This variable allows for modification of top database value.' + ) + + var.custom.generalOptions.withLabel('Top database count'), + local root = self, + local variablesFromLabels(groupLabels, instanceLabels, filteringSelector, multiInstance=true) = + local chainVarProto(index, chainVar) = + var.query.new(chainVar.label) + + var.query.withDatasourceFromVariable(root.datasources.prometheus) + + var.query.queryTypes.withLabelValues( + chainVar.label, + '%s{%s}' % [varMetric, chainVar.chainSelector], + ) + + var.query.generalOptions.withLabel(utils.toSentenceCase(chainVar.label)) + + var.query.selectionOptions.withIncludeAll( + value=if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + customAllValue='.+' + ) + + var.query.selectionOptions.withMulti( + if (!multiInstance && std.member(instanceLabels, chainVar.label)) then false else true, + ) + + var.query.refresh.onTime() + + var.query.withSort( + i=1, + type='alphabetical', + asc=true, + caseInsensitive=false + ); + std.mapWithIndex(chainVarProto, utils.chainLabels(groupLabels + instanceLabels, [filteringSelector])), + datasources: { + prometheus: + var.datasource.new('prometheus_datasource', 'prometheus') + + var.datasource.generalOptions.withLabel('Prometheus data source') + + var.datasource.withRegex(''), + loki: + var.datasource.new('loki_datasource', 'loki') + + var.datasource.generalOptions.withLabel('Loki data source') + + var.datasource.withRegex('') + // hide by default (used for annotations) + + var.datasource.generalOptions.showOnDashboard.withNothing(), + }, + // Use on dashboards where multiple entities can be selected, like fleet dashboards + multiInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, instanceLabels, filteringSelector), + multiCluster: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, [], filteringSelector), + // Use on dashboards where only single entity can be selected, like drill-down dashboards + singleInstance: + [root.datasources.prometheus] + + variablesFromLabels(groupLabels, pureInstanceLabels, filteringSelector, multiInstance=false) + + variablesFromLabels([], ['database'], filteringSelector), + queriesSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels + instanceLabels), + filteringSelector, + ], + clusterVariableSelectors: + [root.datasources.prometheus] + variablesFromLabels(groupLabels, [], filteringSelector) + [topDatabaseSelector], + queriesGroupSelectorAdvanced: + '%s' % [ + utils.labelsToPromQLSelectorAdvanced(groupLabels), + ], + clusterQuerySelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels), + filteringSelector, + ], + instanceQueriesSelector: + '%s,%s' % [ + utils.labelsToPromQLSelector(groupLabels + pureInstanceLabels), + filteringSelector, + ], + } + + if this.config.enableLokiLogs then self.withLokiLogs(this) else {}, + withLokiLogs(this): { + multiInstance+: [this.grafana.variables.datasources.loki], + singleInstance+: [this.grafana.variables.datasources.loki], + }, +} diff --git a/postgres-exporter/main.libsonnet b/postgres-exporter/main.libsonnet index 115cffc35..fc1d2a28e 100644 --- a/postgres-exporter/main.libsonnet +++ b/postgres-exporter/main.libsonnet @@ -6,6 +6,8 @@ local k = import 'ksonnet-util/kausal.libsonnet'; data_source_uri='$(HOSTNAME):$(PORT)/postgres', data_source_name='', ssl=true, + // Note that upgrading to an image version greater than 0.12.1 + // will break dependencies using `withQueriesYaml`. image='quay.io/prometheuscommunity/postgres-exporter:v0.10.0', ):: { local this = self, @@ -79,4 +81,28 @@ local k = import 'ksonnet-util/kausal.libsonnet'; ), ]), }, + + // Upgrading to an image version greater than 0.12.1 + // will break this function. + withQueriesYaml(content):: { + container+: + k.core.v1.container.withVolumeMounts([ + k.core.v1.volumeMount.new( + 'queries-yaml-volume', + '/etc/pg_exporter', + ), + ]) + + k.core.v1.container.withEnvMixin([ + k.core.v1.envVar.new('PG_EXPORTER_EXTEND_QUERY_PATH', '/etc/pg_exporter/queries.yaml'), + ]), + deployment+: + k.apps.v1.deployment.spec.template.spec.withVolumesMixin([ + k.core.v1.volume.fromConfigMap('queries-yaml-volume', 'queries-yaml'), + ]), + local configMap = k.core.v1.configMap, + configMap: + configMap.new('queries-yaml', { + 'queries.yaml': content, + }), + }, } diff --git a/ruby-mixin/dashboards/ruby-overview.json b/ruby-mixin/dashboards/ruby-overview.json index b7cfd24ca..b21688730 100644 --- a/ruby-mixin/dashboards/ruby-overview.json +++ b/ruby-mixin/dashboards/ruby-overview.json @@ -25,15 +25,11 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 268, + "id": 18, "links": [], "liveNow": false, "panels": [ { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "$datasource" @@ -41,44 +37,81 @@ "description": "Http requests throughput by path.", "fieldConfig": { "defaults": { - "unit": "short" + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 0 }, - "hiddenSeries": false, "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "9.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { "datasource": { @@ -92,42 +125,10 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Request rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "$datasource" @@ -135,44 +136,81 @@ "description": "Http requests duration percentiles and average.", "fieldConfig": { "defaults": { - "unit": "ms" + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }, - "hiddenSeries": false, "id": 5, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "9.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { "datasource": { @@ -213,42 +251,10 @@ "refId": "C" } ], - "thresholds": [], - "timeRegions": [], "title": "Request latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, "datasource": { "type": "prometheus", "uid": "$datasource" @@ -256,44 +262,81 @@ "description": "Http requests error rate (5xx) by path.", "fieldConfig": { "defaults": { - "unit": "short" + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 9 }, - "hiddenSeries": false, "id": 7, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "9.4.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { "datasource": { @@ -308,42 +351,13 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Error rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" } ], "refresh": "30s", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [ "ruby-rack-integration" ], @@ -354,10 +368,10 @@ "current": { "selected": true, "text": [ - "integrations/ruby-rack" + "All" ], "value": [ - "integrations/ruby-rack" + "$__all" ] }, "datasource": { @@ -367,7 +381,7 @@ "definition": "label_values(http_server_requests_total, job)", "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -375,7 +389,7 @@ "query": "label_values(http_server_requests_total, job)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -386,10 +400,10 @@ "current": { "selected": true, "text": [ - "localhost:9292" + "All" ], "value": [ - "localhost:9292" + "$__all" ] }, "datasource": { @@ -399,7 +413,7 @@ "definition": "label_values(http_server_requests_total, instance)", "hide": 0, "includeAll": true, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -407,7 +421,7 @@ "query": "label_values(http_server_requests_total, instance)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -421,7 +435,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -451,6 +465,7 @@ "hide": 0, "includeAll": true, "multi": true, + "label": "Path", "name": "path", "options": [], "query": { @@ -485,6 +500,7 @@ "hide": 0, "includeAll": true, "multi": true, + "label": "Method", "name": "method", "options": [], "query": { @@ -510,6 +526,6 @@ "timezone": "", "title": "Ruby Rack application overview", "uid": "k17ofEYMz", - "version": 14, + "version": 2, "weekStart": "" -} +} \ No newline at end of file diff --git a/supabase-mixin/.lint b/supabase-mixin/.lint new file mode 100644 index 000000000..0e4416b7b --- /dev/null +++ b/supabase-mixin/.lint @@ -0,0 +1,11 @@ +exclusions: + template-instance-rule: + reason: "SupaBase instance filtering is accomplished by the project" + template-job-rule: + reason: "SupaBase instance filtering is accomplished by the project" + target-instance-rule: + reason: "SupaBase instance filtering is accomplished by the project" + target-job-rule: + reason: "SupaBase instance filtering is accomplished by the project" + panel-units-rule: + reason: "Unit set as Number(none)" \ No newline at end of file diff --git a/supabase-mixin/README.md b/supabase-mixin/README.md new file mode 100644 index 000000000..729d6727d --- /dev/null +++ b/supabase-mixin/README.md @@ -0,0 +1,26 @@ +# SupaBase Mixin + +The SupaBase mixin is a configurable Grafana dashboard. + +The SupaBase mixin contains the following dashboard: + +- SupaBase + +## SupaBase Dashboard Overview +SupaBase dashboard provides details on the overall status of the SupaBase project including the database related metrics. The dashboard includes visualizations for requests, overall project stats. The dashboard is sourced from https://github.com/supabase/supabase-grafana + +## Tools +To use them, you need to have `mixtool` and `jsonnetfmt` installed. If you have a working Go development environment, it's easiest to run the following: + +```bash +$ go get github.com/monitoring-mixins/mixtool/cmd/mixtool +$ go get github.com/google/go-jsonnet/cmd/jsonnetfmt +``` + +You can then build a directory `dashboard_out` with the JSON dashboard files for Grafana: + +```bash +$ make build +``` + +For more advanced uses of mixins, see [Prometheus Monitoring Mixins docs](https://github.com/monitoring-mixins/docs). diff --git a/supabase-mixin/dashboards/supabase.json b/supabase-mixin/dashboards/supabase.json new file mode 100644 index 000000000..fe34e7b98 --- /dev/null +++ b/supabase-mixin/dashboards/supabase.json @@ -0,0 +1,25331 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 14, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 261, + "panels": [], + "title": "Quick CPU / Mem / Disk", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Busy state of all CPU cores together", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "(((count(count(node_cpu_seconds_total{supabase_project_ref=\"$project\"}) by (cpu))) - avg(sum by (mode)(rate(node_cpu_seconds_total{mode='idle',supabase_project_ref=\"$project\"}[$__rate_interval])))) * 100) / count(count(node_cpu_seconds_total{supabase_project_ref=\"$project\"}) by (cpu))", + "hide": false, + "intervalFactor": 1, + "legendFormat": "", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Busy state of all CPU cores together (5 min average)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "avg(node_load5{supabase_project_ref=~\"$project\"}) / count(count(node_cpu_seconds_total{supabase_project_ref=~\"$project\"}) by (cpu)) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Busy state of all CPU cores together (15 min average)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "avg(node_load15{supabase_project_ref=~\"$project\"}) / count(count(node_cpu_seconds_total{supabase_project_ref=~\"$project\"}) by (cpu)) * 100", + "hide": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Non available RAM memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "hideTimeOverride": false, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "((node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"} - node_memory_MemFree_bytes{supabase_project_ref=~\"$project\"}) / (node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"} )) * 100", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "100 - ((node_memory_MemAvailable_bytes{supabase_project_ref=~\"$project\"} * 100) / node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Used Swap", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "((node_memory_SwapTotal_bytes{supabase_project_ref=~\"$project\"} - node_memory_SwapFree_bytes{supabase_project_ref=~\"$project\"}) / (node_memory_SwapTotal_bytes{supabase_project_ref=~\"$project\"} )) * 100", + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Used Root FS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "100 - ((node_filesystem_avail_bytes{supabase_project_ref=~\"$project\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{supabase_project_ref=~\"$project\",mountpoint=\"/\",fstype!=\"rootfs\"})", + "format": "time_series", + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Root FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "count(count(node_cpu_seconds_total{supabase_project_ref=~\"$project\"}) by (cpu))", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "hideTimeOverride": true, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_time_seconds{supabase_project_ref=~\"$project\"} - node_boot_time_seconds{supabase_project_ref=~\"$project\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_SwapTotal_bytes{supabase_project_ref=~\"$project\"}", + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Total RootFS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_filesystem_size_bytes{supabase_project_ref=~\"$project\",mountpoint=\"/\",fstype!=\"rootfs\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "RootFS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Total data disk capacity", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 3 + }, + "id": 322, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "node_filesystem_size_bytes{supabase_project_ref=~\"$project\",mountpoint=\"/data\",fstype!=\"rootfs\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "queryType": "measurements", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Data Disk Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 3 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"}", + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 263, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Basic CPU info", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#1F78C1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle - Waiting for something to happen" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "guest" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "irq" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "nice" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "softirq" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "steal" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCE2DE", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "system" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "user" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#5195CE", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 2 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode=\"system\",supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode='user',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode='iowait',supabase_project_ref=\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy Iowait", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "sum by (instance)(rate(node_cpu_seconds_total{mode=~\".*irq\",supabase_project_ref=\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "sum (rate(node_cpu_seconds_total{mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq',supabase_project_ref=\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Busy Other", + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='idle',supabase_project_ref=\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Idle", + "refId": "F", + "step": 240 + } + ], + "title": "CPU Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Basic memory usage", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": "A", + "mode": "none" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Avaliable" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": "A", + "mode": "none" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 2 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Total", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"} - node_memory_MemFree_bytes{supabase_project_ref=~\"$project\"} - (node_memory_Cached_bytes{supabase_project_ref=~\"$project\"} + node_memory_Buffers_bytes{supabase_project_ref=~\"$project\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Used", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_Cached_bytes{supabase_project_ref=\"$project\"} + node_memory_Buffers_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_MemFree_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "(node_memory_SwapTotal_bytes{supabase_project_ref=~\"$project\"} - node_memory_SwapFree_bytes{supabase_project_ref=~\"$project\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SWAP Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Basic network info per interface", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Recv_bytes_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_drop_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_errs_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Recv_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CCA300", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_bytes_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_drop_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_errs_eth2" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trans_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CCA300", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_drop_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#967302", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_errs_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "recv_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_bytes_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_bytes_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_drop_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_drop_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#967302", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_errs_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "trans_errs_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "recv {{device}}", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "trans {{device}} ", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Basic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Disk space used of all filesystems mounted", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "EBS Balance" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 152, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "100 - ((node_filesystem_avail_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Disk mounted at {{mountpoint}}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Disk Space Used, EBS IO Balance", + "type": "timeseries" + } + ], + "title": "Basic CPU / Mem / Net / Disk", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 317, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Disk space used by the database", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decmbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 321, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pg_database_size_mb{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Database size", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Database size ", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Active number of client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 20, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "pgbouncer client connections waiting" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 12, + "y": 3 + }, + "id": 323, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pg_stat_database_num_backends{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "postgres connections", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(supavisor_connections_active{supabase_project_ref=~\"$project\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "supavisor connections", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pgbouncer_used_clients{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "pgbouncer connections", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (Name) (pgbouncer_pools_client_waiting_connections{supabase_project_ref=~\"$project\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "pgbouncer client connections waiting", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "Client connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Postgres status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 1, + "text": "Stopped" + }, + "1": { + "color": "green", + "index": 0, + "text": "Running" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 3 + }, + "id": 319, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pg_up{supabase_project_ref=~\"$project\"}", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "Postgres status", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "pgbouncer status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 1, + "text": "Stopped" + }, + "1": { + "color": "green", + "index": 0, + "text": "Running" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 6 + }, + "id": 341, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pgbouncer_up{supabase_project_ref=~\"$project\"}", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "pgbouncer status", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Query stats", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total time spent" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "s" + }, + { + "id": "custom.axisSoftMax" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 0, + "y": 9 + }, + "id": 330, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(supabase_usage_metrics_user_queries_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "No. of user queries", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_statements_total_queries{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Total no. of queries", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_statements_total_time_seconds{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "legendFormat": "Total time spent", + "range": true, + "refId": "C" + } + ], + "title": "Query stats", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "postgres stats", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Deadlocks detected" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisSoftMax", + "value": 25 + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 7, + "y": 9 + }, + "id": 342, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_xact_commit_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Tx committed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_xact_rollback_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Tx rolled back", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_deadlocks_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Deadlocks detected", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "pg stats", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Conflicts - Queries cancelled due to", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Total time spent" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "s" + }, + { + "id": "custom.axisSoftMax" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 7, + "x": 14, + "y": 9 + }, + "id": 331, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_conflicts_confl_tablespace_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Dropped tablespaces", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_conflicts_confl_lock_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Lock timeouts", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_conflicts_confl_snapshot_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Old Snapshots", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_conflicts_confl_bufferpin_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Pinned buffers", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_database_conflicts_confl_deadlock_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Deadlocks", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Conflicts - Queries cancelled due to", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "DB Mode", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "green", + "index": 0, + "text": "ReadWrite" + }, + "1": { + "color": "red", + "index": 1, + "text": "ReadOnly" + } + }, + "type": "value" + } + ], + "noValue": "N/A", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 9 + }, + "id": 324, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "limit": 2, + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pg_settings_default_transaction_read_only{supabase_project_ref=~\"$project\"}", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "DB Mode", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "In Recovery", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "green", + "index": 0, + "text": "No" + }, + "1": { + "color": "red", + "index": 1, + "text": "Yes" + } + }, + "type": "value" + } + ], + "noValue": "N/A", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 12 + }, + "id": 325, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "pg_status_in_recovery{supabase_project_ref=~\"$project\"}", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "In Recovery", + "type": "stat" + } + ], + "title": "Postgres", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 337, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Realtime replication status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 1, + "text": "Inactive" + }, + "1": { + "color": "green", + "index": 0, + "text": "Active" + } + }, + "type": "value" + } + ], + "noValue": "N/A", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 0 + }, + { + "color": "green", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 4 + }, + "id": 328, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0-66955", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "replication_realtime_slot_status{supabase_project_ref=~\"$project\"}", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "Realtime replication status", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Realtime replication lag", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 20, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 7, + "x": 3, + "y": 4 + }, + "id": 329, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "replication_realtime_lag_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Replication lag ", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Realtime replication lag", + "type": "timeseries" + } + ], + "title": "Postgres: realtime", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 335, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "bgwriter stats: checkpoints", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/^Time spent/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "ms" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 5 + }, + "id": 332, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_checkpoints_timed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Scheduled checkpoints", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_checkpoints_req_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Requested checkpoints", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_checkpoint_write_time_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time spent writing checkpoint files", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_checkpoint_sync_time_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time spent synchronizing checkpoint files", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "bgwriter stats: checkpoints", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "bgwriter stats: buffers", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Allocated" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 5 + }, + "id": 333, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_buffers_checkpoint_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Written during checkpoints", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_buffers_clean_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Written by bgwriter", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_buffers_backend_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Written by a backend", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_buffers_alloc_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Allocated", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "bgwriter stats: buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "bgwriter: fsync/clean", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 5, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Backend fsync calls" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 5 + }, + "id": 340, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_maxwritten_clean_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "No. of times clean stopped due to writing too many buffers", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(pg_stat_bgwriter_buffers_backend_fsync_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Fsync calls by backend", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "bgwriter: fsync/clean", + "type": "timeseries" + } + ], + "title": "Postgres: bgwriter", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 265, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "CPU", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "percentage", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Idle - Waiting for something to happen" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "guest" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "iowait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "irq" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "nice" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "softirq" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "steal" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCE2DE", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "system" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "user" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#5195CE", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode=\"system\",supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "System - Processes executing in kernel mode", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='user',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "User - Normal processes executing in user mode", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='nice',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Nice - Niced processes executing in user mode", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='idle',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Idle - Waiting for something to happen", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='iowait',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Iowait - Waiting for I/O to complete", + "range": true, + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='irq',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Irq - Servicing interrupts", + "range": true, + "refId": "F", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='softirq',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Softirq - Servicing softirqs", + "range": true, + "refId": "G", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='steal',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Steal - Time spent in other operating systems when running in a virtualized environment", + "range": true, + "refId": "H", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum by (mode)(rate(node_cpu_seconds_total{mode='guest',supabase_project_ref=~\"$project\"}[$__rate_interval])) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Guest - Time spent running a virtual CPU for a guest operating system", + "range": true, + "refId": "I", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Stack", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap - Swap memory usage" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused - Free memory unassigned" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Hardware Corrupted - *./" + }, + "properties": [ + { + "id": "custom.stacking", + "value": { + "group": "A", + "mode": "none" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 24, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_MemTotal_bytes{supabase_project_ref=~\"$project\"} - node_memory_MemFree_bytes{supabase_project_ref=~\"$project\"} - node_memory_Buffers_bytes{supabase_project_ref=~\"$project\"} - node_memory_Cached_bytes{supabase_project_ref=~\"$project\"} - node_memory_Slab_bytes{supabase_project_ref=~\"$project\"} - node_memory_PageTables_bytes{supabase_project_ref=~\"$project\"} - node_memory_SwapCached_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Apps - Memory used by user-space applications", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_PageTables_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "PageTables - Memory used to map between virtual and physical memory addresses", + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_SwapCached_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_Slab_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_Cached_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Cache - Parked file data (file content) cache", + "refId": "E", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_Buffers_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Buffers - Block device (e.g. harddisk) cache", + "refId": "F", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_MemFree_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Unused - Free memory unassigned", + "refId": "G", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "(node_memory_SwapTotal_bytes{supabase_project_ref=\"$project\"} - node_memory_SwapFree_bytes{supabase_project_ref=\"$project\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Swap - Swap space used", + "refId": "H", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_HardwareCorrupted_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working", + "refId": "I", + "step": 240 + } + ], + "title": "Memory Stack", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bits out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "receive_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "receive_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 84, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])*8", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Disk Space Used", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 156, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_size_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'} - node_filesystem_avail_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Disk Space Used", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Disk IOps", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IO read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 229, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_reads_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Reads completed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_writes_completed_total{supabase_project_ref=\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Writes completed", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "I/O Usage Read / Write", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "io time" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byType", + "options": "time" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "hidden" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 42, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_read_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Successfully read bytes", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_written_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Successfully written bytes", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "I/O Utilization", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "%util", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "io time" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byType", + "options": "time" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "hidden" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 42 + }, + "id": 127, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_io_time_seconds_total{supabase_project_ref=~\"$project\"} [$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "I/O Utilization", + "type": "timeseries" + } + ], + "title": "CPU / Memory / Net / Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 266, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Active / Inactive", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 136, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Inactive_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Active_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Active / Inactive", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Commited", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*CommitLimit - *./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 135, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Committed_AS_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Committed_AS - Amount of memory presently allocated on the system", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_CommitLimit_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "CommitLimit - Amount of memory currently available to be allocated on the system", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Commited", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Active / Inactive Detail", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 191, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Inactive_file_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Inactive_file - File-backed memory on inactive LRU list", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Inactive_anon_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Active_file_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Active_file - File-backed memory on active LRU list", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Active_anon_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "Memory Active / Inactive Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Writeback and Dirty", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 130, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Writeback_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Writeback - Memory which is actively being written back to disk", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_WritebackTmp_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "WritebackTmp - Memory used by FUSE for temporary writeback buffers", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Dirty_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Dirty - Memory which is waiting to get written back to the disk", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Memory Writeback and Dirty", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Shared and Mapped", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 27 + }, + "id": 138, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Mapped_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Mapped - Used memory in mapped pages files which have been mmaped, such as libraries", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Shmem_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Shmem - Used shared memory (shared between several processes, thus including RAM disks)", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_ShmemHugePages_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_ShmemPmdMapped_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ShmemPmdMapped - Ammount of shared (shmem/tmpfs) memory backed by huge pages", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "Memory Shared and Mapped", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Slab", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 131, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_SUnreclaim_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_SReclaimable_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "SReclaimable - Part of Slab, that might be reclaimed, such as caches", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Slab", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Vmalloc", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 37 + }, + "id": 70, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_VmallocChunk_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocChunk - Largest contigious block of vmalloc area which is free", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_VmallocTotal_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocTotal - Total size of vmalloc memory area", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_VmallocUsed_bytes{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "VmallocUsed - Amount of vmalloc area which is used", + "refId": "C", + "step": 240 + } + ], + "title": "Memory Vmalloc", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Bounce", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 37 + }, + "id": 159, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Bounce_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Bounce - Memory used for block device bounce buffers", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Memory Bounce", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Anonymous", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Inactive *./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 129, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_AnonHugePages_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "AnonHugePages - Memory in anonymous huge pages", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_AnonPages_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "AnonPages - Memory in user pages not backed by files", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Anonymous", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Kernel / CPU", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 160, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_KernelStack_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "KernelStack - Kernel memory stack. This is not reclaimable", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Percpu_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PerCPU - Per CPU memory allocated dynamically by loadable modules", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Kernel / CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory HugePages Counter", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 140, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_HugePages_Free{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Free - Huge pages in the pool that are not yet allocated", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_HugePages_Rsvd{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_memory_HugePages_Surp{supabase_project_ref=\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages", + "refId": "C", + "step": 240 + } + ], + "title": "Memory HugePages Counter", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory HugePages Size", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 71, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_HugePages_Total{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HugePages - Total size of the pool of huge pages", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Hugepagesize_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Hugepagesize - Huge Page size", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory HugePages Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory NFS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 67 + }, + "id": 132, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_NFS_Unstable_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NFS Unstable - Memory in NFS pages sent to the server, but not yet commited to the storage", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Memory NFS", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Unevictable and MLocked", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 137, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Unevictable_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_memory_Mlocked_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "MLocked - Size of pages locked to memory using the mlock() system call", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Unevictable and MLocked", + "type": "timeseries" + } + ], + "title": "Memory Meminfo", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 267, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Pages In / Out", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*out/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 176, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pgpgin{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pagesin - Page in operations", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pgpgout{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pagesout - Page out operations", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Pages In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Pages Swap In / Out", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "pages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*out/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 22, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pswpin{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pswpin - Pages swapped in", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pswpout{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pswpout - Pages swapped out", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Memory Pages Swap In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Memory Page Faults", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "faults", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pgfault - Page major and minor fault operations" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": "A", + "mode": "none" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 175, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pgfault{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgfault - Page major and minor fault operations", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pgmajfault{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgmajfault - Major page fault operations", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_pgfault{supabase_project_ref=~\"$project\"}[$__rate_interval]) - rate(node_vmstat_pgmajfault{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Pgminfault - Minor page fault operations", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Memory Page Faults", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "OOM Killer", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#99440A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#58140C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Dirty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#B7DBAB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mapped" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total RAM + Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "VmallocUsed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 307, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_vmstat_oom_kill{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "oom killer invocations ", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "OOM Killer", + "type": "timeseries" + } + ], + "title": "Memory Vmstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 293, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Time Syncronized Drift", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Variation*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 260, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_estimated_error_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Estimated error in seconds", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_offset_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time offset in between local system and reference clock", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_maxerror_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum error in seconds", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Time Syncronized Drift", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Time PLL Adjust", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 291, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_loop_time_constant{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Phase-locked loop time adjust", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Time PLL Adjust", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Time Syncronized Status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Variation*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 168, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_sync_status{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Is clock synchronized to a reliable server (1 = yes, 0 = no)", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_frequency_adjustment_ratio{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Local clock frequency adjustment", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Time Syncronized Status", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Time Misc", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 294, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_tick_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Seconds between clock ticks", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_timex_tai_offset_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "International Atomic Time (TAI) offset", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Time Misc", + "type": "timeseries" + } + ], + "title": "System Timesync", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 312, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Processes Status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 62, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_procs_blocked{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Processes blocked waiting for I/O to complete", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_procs_running{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Processes in runnable state", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Processes Status", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Processes State", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 315, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_processes_state{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ state }}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Processes State", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Processes Forks", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "forks / sec", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 148, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_forks_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Processes forks second", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Processes Forks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Processes Memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max.*/" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 149, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(process_virtual_memory_bytes{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Processes virtual memory size in bytes", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "process_resident_memory_max_bytes{supabase_project_ref=~\"$project\"}", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(process_virtual_memory_bytes{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Processes virtual memory size in bytes", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(process_virtual_memory_max_bytes{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum amount of virtual memory available in bytes", + "range": true, + "refId": "D", + "step": 240 + } + ], + "title": "Processes Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "PIDs Number and Limit", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "PIDs limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 313, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_processes_pids{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Number of PIDs", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_processes_max_processes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PIDs limit", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "PIDs Number and Limit", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Process schedule stats Running / Waiting", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*waiting.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 305, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_schedstat_running_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }} - seconds spent running a process", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_schedstat_waiting_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }} - seconds spent by processing waiting for this CPU", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Process schedule stats Running / Waiting", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Threads Number and Limit", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Threads limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 40 + }, + "id": 314, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_processes_threads{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Allocated threads", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_processes_max_threads{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Threads limit", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Threads Number and Limit", + "type": "timeseries" + } + ], + "title": "System Processes", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 269, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Context Switches / Interrupts", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 8, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_context_switches_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Context switches", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_intr_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Interrupts", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Context Switches / Interrupts", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "System Load", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 7, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_load1{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Load 1m", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_load5{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Load 5m", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_load15{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Load 15m", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "System Load", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Interrupts Detail", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Critical*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 259, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_interrupts_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ type }} - {{ info }}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Interrupts Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Schedule timeslices executed by each cpu", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 306, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_schedstat_timeslices_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{ cpu }}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Schedule timeslices executed by each cpu", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Entropy", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 31 + }, + "id": 151, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_entropy_available_bits{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Entropy available to random number generators", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Entropy", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "CPU time spent in user and system contexts", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 31 + }, + "id": 308, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(process_cpu_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Time spent", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "CPU time spent in user and system contexts", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "File Descriptors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 41 + }, + "id": 64, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "process_max_fds{supabase_project_ref=~\"$project\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Maximum open file descriptors", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "process_open_fds{supabase_project_ref=~\"$project\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Open file descriptors", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "File Descriptors", + "type": "timeseries" + } + ], + "title": "System Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 304, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Hardware temperature monitor", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "temperature", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Critical*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 158, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_hwmon_temp_celsius{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip }} {{ sensor }} temp", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_hwmon_temp_crit_alarm_celsius{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_hwmon_temp_crit_celsius{supabase_project_ref=\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip }} {{ sensor }} Critical", + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_hwmon_temp_crit_hyst_celsius{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip }} {{ sensor }} Critical Historical", + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "expr": "node_hwmon_temp_max_celsius{supabase_project_ref=\"$project\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ chip }} {{ sensor }} Max", + "refId": "E", + "step": 240 + } + ], + "title": "Hardware temperature monitor", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Throttle cooling device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Max*./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 300, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_cooling_device_cur_state{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Current {{ name }} in {{ type }}", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_cooling_device_max_state{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Max {{ name }} in {{ type }}", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Throttle cooling device", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Power supply", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 302, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_power_supply_online{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ power_supply }} online", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Power supply", + "type": "timeseries" + } + ], + "title": "Hardware Misc", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 296, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Systemd Sockets", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 297, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_systemd_socket_accepted_connections_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ name }} Connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Systemd Sockets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Systemd Units State", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Failed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FF9830", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Active" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#73BF69", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Deactivating" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FFCB7D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Activating" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C8F2C2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 298, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_systemd_units{supabase_project_ref=~\"$project\",state=\"activating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Activating", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_systemd_units{supabase_project_ref=~\"$project\",state=\"active\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Active", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_systemd_units{supabase_project_ref=~\"$project\",state=\"deactivating\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Deactivating", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_systemd_units{supabase_project_ref=~\"$project\",state=\"failed\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Failed", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_systemd_units{supabase_project_ref=~\"$project\",state=\"inactive\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Inactive", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Systemd Units State", + "type": "timeseries" + } + ], + "title": "Systemd", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 270, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The number (after merges) of I/O requests completed per second for the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IO read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 9, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_reads_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Reads completed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_writes_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Writes completed", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps Completed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The number of bytes read from or written to the device per second", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 33, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_read_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Read bytes", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_written_bytes_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Written bytes", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk R/W Data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The average time for requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "time. read (-) / write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 30, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 37, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_read_time_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval]) / rate(node_disk_reads_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - Read wait time avg", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_write_time_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval]) / rate(node_disk_writes_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Write wait time avg", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk Average Wait Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The average queue length of the requests that were issued to the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "aqu-sz", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 35, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_io_time_weighted_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}}", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Average Queue Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The number of read and write requests merged per second that were queued to the device", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "I/Os", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 133, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_reads_merged_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Read merged", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_writes_merged_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "intervalFactor": 1, + "legendFormat": "{{device}} - Write merged", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk R/W Merged", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100% for devices serving requests serially. But for devices serving requests in parallel, such as RAID arrays and modern SSDs, this number does not reflect their performance limits.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "%util", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 30, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 36, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_io_time_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - IO", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_discard_time_seconds_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - discard", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Time Spent Doing I/Os", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "The number of outstanding requests at the instant the sample was taken. Incremented as requests are given to appropriate struct request_queue and decremented as they finish.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Outstanding req.", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 34, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_io_now{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 4, + "legendFormat": "{{device}} - IO now", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Instantaneous Queue Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "IOs", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6ED0E0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EF843C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda2_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BA43A9", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sda3_.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F4D598", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdb3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#962D82", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdc3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#9AC48A", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#65C5DB", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9934E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EA6460", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde1.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sdd2.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FCEACA", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*sde3.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F9E2D2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 301, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_discards_completed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Discards completed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_disk_discards_merged_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Discards merged", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Disk IOps Discards completed / merged", + "description": "Disk IOps Discards completed / merged", + "type": "timeseries" + } + ], + "title": "Storage Disk", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 271, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Filesystem space available", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 43, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_avail_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Available", + "metric": "", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_free_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_size_bytes{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "hide": true, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Size", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Filesystem space available", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "File Nodes Free", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "file nodes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 41, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_files_free{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Free file nodes", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "File Nodes Free", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "File Descriptor", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "files", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 28, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filefd_maximum{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Max open files", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filefd_allocated{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Open files", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "File Descriptor", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "File Nodes Size", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "file Nodes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 25 + }, + "id": 219, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_files{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - File nodes total", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "File Nodes Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Filesystem in ReadOnly / Error", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "/ ReadOnly" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsZero", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byValue", + "options": { + "op": "gte", + "reducer": "allIsNull", + "value": 0 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 44, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_readonly{supabase_project_ref=~\"$project\",device!~'rootfs'}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - ReadOnly", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_filesystem_device_error{supabase_project_ref=~\"$project\",device!~'rootfs',fstype!~'tmpfs'}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{mountpoint}} - Device error", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Filesystem in ReadOnly / Error", + "type": "timeseries" + } + ], + "title": "Storage Filesystem", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 272, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic by Packets", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "receive_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "receive_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_eth0" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transmit_packets_lo" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E24D42", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 60, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_packets_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_packets_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic by Packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Errors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 142, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_errs_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive errors", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_errs_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Rransmit errors", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Drop", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 143, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_drop_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive drop", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_drop_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit drop", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Drop", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Compressed", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 26 + }, + "id": 141, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_compressed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive compressed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_compressed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit compressed", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Compressed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Multicast", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 146, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_multicast_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive multicast", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Multicast", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Fifo", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 144, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_fifo_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive fifo", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_fifo_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit fifo", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Network Traffic Fifo", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Frame", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 46 + }, + "id": 145, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_receive_frame_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "{{device}} - Receive frame", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Frame", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Carrier", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 46 + }, + "id": 231, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_carrier_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Statistic transmit_carrier", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Carrier", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Traffic Colls", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Trans.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 232, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_network_transmit_colls_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{device}} - Transmit colls", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Network Traffic Colls", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "NF Contrack", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "entries", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "NF conntrack limit" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 56 + }, + "id": 61, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_nf_conntrack_entries{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NF conntrack entries", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_nf_conntrack_entries_limit{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "NF conntrack limit", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "NF Contrack", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "ARP Entries", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Entries", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 66 + }, + "id": 230, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_arp_entries{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - ARP entries", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "ARP Entries", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "MTU", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 66 + }, + "id": 288, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_network_mtu_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Bytes", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "MTU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Speed", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 76 + }, + "id": 280, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_network_speed_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Speed", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Speed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Queue Length", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packets", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 76 + }, + "id": 289, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_network_transmit_queue_length{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ device }} - Interface transmit queue length", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Queue Length", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Softnet Packets", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "packetes drop (-) / process (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Dropped.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 86 + }, + "id": 290, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_softnet_processed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Processed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_softnet_dropped_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Dropped", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Softnet Packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Softnet Out of Quota", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 86 + }, + "id": 310, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_softnet_times_squeezed_total{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU {{cpu}} - Squeezed", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Softnet Out of Quota", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Network Operational Status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 96 + }, + "id": 309, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_network_up{operstate=\"up\",supabase_project_ref=~\"$project\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{interface}} - Operational state UP", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_network_carrier{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "instant": false, + "legendFormat": "{{device}} - Physical link state", + "refId": "B" + } + ], + "title": "Network Operational Status", + "type": "timeseries" + } + ], + "title": "Network Traffic", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 273, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Sockstat TCP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 63, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_alloc{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_alloc - Allocated sockets", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_inuse{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_inuse - Tcp sockets currently in use", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_mem{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_mem - Used memory for tcp", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_orphan{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_orphan - Orphan sockets", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_tw{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCP_tw - Sockets wating close", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Sockstat TCP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Sockstat UDP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 124, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_UDPLITE_inuse{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_UDP_inuse{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDP_inuse - Udp sockets currently in use", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_UDP_mem{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "UDP_mem - Used memory for udp", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Sockstat UDP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Sockstat FRAG / RAW", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 27 + }, + "id": 125, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_FRAG_inuse{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "FRAG_inuse - Frag sockets currently in use", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_RAW_inuse{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "RAW_inuse - Raw sockets currently in use", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "Sockstat FRAG / RAW", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Sockstat Memory Size", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "bytes", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 220, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_TCP_mem_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "mem_bytes - TCP sockets in that state", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_UDP_mem_bytes{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "mem_bytes - UDP sockets in that state", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_FRAG_memory{supabase_project_ref=~\"$project\"}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "FRAG_memory - Used memory for frag", + "range": true, + "refId": "C" + } + ], + "title": "Sockstat Memory Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Sockstat Used", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "sockets", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 37 + }, + "id": 126, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_sockstat_sockets_used{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Sockets_used - Sockets currently in use", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Sockstat Used", + "type": "timeseries" + } + ], + "title": "Network Sockstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 274, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Netstat IP In / Out Octets", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "octects out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 221, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_IpExt_InOctets{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InOctets - Received octets", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_IpExt_OutOctets{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "OutOctets - Sent octets", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Netstat IP In / Out Octets", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Netstat IP Forwarding", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 81, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "width": 300 + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Ip_Forwarding{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "Forwarding - IP forwarding", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Netstat IP Forwarding", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "ICMP In / Out", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "messages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 57 + }, + "id": 115, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Icmp_InMsgs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Icmp_OutMsgs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "ICMP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "ICMP Errors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "messages out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 57 + }, + "id": 50, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Icmp_InErrors{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "ICMP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "UDP In / Out", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Snd.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 67 + }, + "id": 55, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_InDatagrams{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InDatagrams - Datagrams received", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_OutDatagrams{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutDatagrams - Datagrams sent", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "UDP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "UDP Errors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 109, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_InErrors{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "InErrors - UDP Datagrams that could not be delivered to an application", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_NoPorts{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "NoPorts - UDP Datagrams received on a port with no listener", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_UdpLite_InErrors{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "legendFormat": "InErrors Lite - UDPLite Datagrams that could not be delivered to an application", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_RcvbufErrors{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "RcvbufErrors - UDP buffer errors received", + "range": true, + "refId": "D", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Udp_SndbufErrors{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "SndbufErrors - UDP buffer errors send", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "UDP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "TCP In / Out", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "datagrams out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Out.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/.*Snd.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 77 + }, + "id": 299, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_InSegs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "InSegs - Segments received, including those received in error. This count includes segments received on currently established connections", + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_OutSegs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "TCP In / Out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "TCP Errors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 77 + }, + "id": 104, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_ListenOverflows{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "ListenOverflows - Times the listen queue of a socket overflowed", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_ListenDrops{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_TCPSynRetrans{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_RetransSegs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "legendFormat": "RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_InErrs{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "legendFormat": "InErrs - Segments received in error (e.g., bad TCP checksums)", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_OutRsts{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "interval": "", + "legendFormat": "OutRsts - Segments sent with RST flag", + "range": true, + "refId": "F" + } + ], + "title": "TCP Errors", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "TCP Connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*MaxConn *./" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 87 + }, + "id": 85, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_netstat_Tcp_CurrEstab{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_netstat_Tcp_MaxConn{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "MaxConn - Limit on the total number of TCP connections the entity can support (Dinamic is \"-1\")", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "TCP Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "TCP SynCookie", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter out (-) / in (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Sent.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 87 + }, + "id": 91, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_SyncookiesFailed{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesFailed - Invalid SYN cookies received", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_SyncookiesRecv{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesRecv - SYN cookies received", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_TcpExt_SyncookiesSent{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "SyncookiesSent - SYN cookies sent", + "range": true, + "refId": "C", + "step": 240 + } + ], + "title": "TCP SynCookie", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "TCP Direct Transition", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 97 + }, + "id": 82, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "7.3.7", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_ActiveOpens{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "rate(node_netstat_Tcp_PassiveOpens{supabase_project_ref=~\"$project\"}[$__rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "TCP Direct Transition", + "type": "timeseries" + } + ], + "title": "Network Netstat", + "type": "row" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 279, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Node Exporter Scrape Time", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 40, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_scrape_collector_duration_seconds{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape duration", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Node Exporter Scrape Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "Node Exporter Scrape", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "counter", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*error.*/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#F2495C", + "mode": "fixed" + } + }, + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 157, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_scrape_collector_success{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape success", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "node_textfile_scrape_error{supabase_project_ref=~\"$project\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{collector}} - Scrape textfile error (1 = true)", + "range": true, + "refId": "B", + "step": 240 + } + ], + "title": "Node Exporter Scrape", + "type": "timeseries" + } + ], + "title": "Node Exporter", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "cnzozbhxrotegdkfoglk", + "value": "cnzozbhxrotegdkfoglk" + }, + "definition": "label_values(supabase_project_ref)", + "hide": 0, + "includeAll": false, + "label": "Project", + "multi": false, + "name": "project", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(supabase_project_ref)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "grafanacloud-ishanjain-prom", + "value": "$datasource" + }, + "hide": 0, + "includeAll": false, + "label": "Data source", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Supabase Project", + "uid": "d402d94e-da48-48e4-ac52-53026b96a000", + "version": 9, + "weekStart": "" + } \ No newline at end of file diff --git a/supabase-mixin/makefile b/supabase-mixin/makefile new file mode 100644 index 000000000..bf9321d78 --- /dev/null +++ b/supabase-mixin/makefile @@ -0,0 +1,24 @@ +JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s + +.PHONY: all +all: dashboards_out + +.PHONY: fmt +fmt: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: lint +lint: + find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ + while read f; do \ + $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ + done + mixtool lint mixin.libsonnet + +dashboards_out: mixin.libsonnet $(wildcard dashboards/*) + @mkdir -p dashboards_out + mixtool generate dashboards mixin.libsonnet -d dashboards_out + +.PHONY: clean +clean: + rm -rf dashboards_out prometheus_alerts.yaml \ No newline at end of file diff --git a/supabase-mixin/mixin.libsonnet b/supabase-mixin/mixin.libsonnet new file mode 100644 index 000000000..cfd81205d --- /dev/null +++ b/supabase-mixin/mixin.libsonnet @@ -0,0 +1,5 @@ +{ + grafanaDashboards: { + 'supabase.json': (import 'dashboards/supabase.json'), + }, +} diff --git a/tensorflow-mixin/config.libsonnet b/tensorflow-mixin/config.libsonnet index 8adbeda13..69fee70b3 100644 --- a/tensorflow-mixin/config.libsonnet +++ b/tensorflow-mixin/config.libsonnet @@ -1,5 +1,7 @@ { _config+:: { + enableMultiCluster: false, + tensorflowSelector: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster"' else 'job=~"$job"', dashboardTags: ['tensorflow-mixin'], dashboardPeriod: 'now-30m', dashboardTimezone: 'default', diff --git a/tensorflow-mixin/dashboards/tensorflow-overview.libsonnet b/tensorflow-mixin/dashboards/tensorflow-overview.libsonnet index 2999bb22a..69c171f31 100644 --- a/tensorflow-mixin/dashboards/tensorflow-overview.libsonnet +++ b/tensorflow-mixin/dashboards/tensorflow-overview.libsonnet @@ -23,7 +23,7 @@ local servingOverviewRow = { type: 'row', }; -local modelRequestRatePanel = { +local modelRequestRatePanel(matcher) = { datasource: promDatasource, description: 'Rate of requests over time for the selected model. Grouped by statuses.', fieldConfig: { @@ -80,7 +80,7 @@ local modelRequestRatePanel = { }, targets: [ prometheus.target( - 'rate(:tensorflow:serving:request_count{job=~"$job",instance=~"$instance",model_name=~"$model_name"}[$__rate_interval])', + 'rate(:tensorflow:serving:request_count{' + matcher + ', model_name=~"$model_name"}[$__rate_interval])', datasource=promDatasource, legendFormat='model_name="{{model_name}}",status="{{status}}"', ), @@ -90,7 +90,7 @@ local modelRequestRatePanel = { type: 'timeseries', }; -local modelPredictRequestLatencyPanel = { +local modelPredictRequestLatencyPanel(matcher) = { datasource: promDatasource, description: 'Average request latency of predict requests for the selected model.', fieldConfig: { @@ -147,7 +147,7 @@ local modelPredictRequestLatencyPanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:serving:request_latency_sum{job=~"$job",instance=~"$instance",model_name=~"$model_name"}[$__rate_interval])/increase(:tensorflow:serving:request_latency_count{job=~"$job",instance=~"$instance",model_name=~"$model_name"}[$__rate_interval])', + 'increase(:tensorflow:serving:request_latency_sum{' + matcher + ', model_name=~"$model_name"}[$__rate_interval])/increase(:tensorflow:serving:request_latency_count{' + matcher + ', model_name=~"$model_name"}[$__rate_interval])', datasource=promDatasource, legendFormat='model_name="{{model_name}}"', ), @@ -157,7 +157,7 @@ local modelPredictRequestLatencyPanel = { type: 'timeseries', }; -local modelPredictRuntimeLatencyPanel = { +local modelPredictRuntimeLatencyPanel(matcher) = { datasource: promDatasource, description: 'Average runtime latency to fulfill a predict request for the selected model.', fieldConfig: { @@ -214,7 +214,7 @@ local modelPredictRuntimeLatencyPanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:serving:runtime_latency_sum{job=~"$job",instance=~"$instance",model_name=~"$model_name"}[$__rate_interval])/increase(:tensorflow:serving:runtime_latency_count{job=~"$job",instance=~"$instance",model_name=~"$model_name"}[$__rate_interval])', + 'increase(:tensorflow:serving:runtime_latency_sum{' + matcher + ', model_name=~"$model_name"}[$__rate_interval])/increase(:tensorflow:serving:runtime_latency_count{' + matcher + ', model_name=~"$model_name"}[$__rate_interval])', datasource=promDatasource, legendFormat='model_name="{{model_name}}"', ), @@ -224,7 +224,7 @@ local modelPredictRuntimeLatencyPanel = { type: 'timeseries', }; -local graphBuildCallsPanel = { +local graphBuildCallsPanel(matcher) = { datasource: promDatasource, description: 'Number of times TensorFlow Serving has created a new client graph.', fieldConfig: { @@ -281,7 +281,7 @@ local graphBuildCallsPanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:core:graph_build_calls{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'increase(:tensorflow:core:graph_build_calls{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -290,7 +290,7 @@ local graphBuildCallsPanel = { type: 'timeseries', }; -local graphRunsPanel = { +local graphRunsPanel(matcher) = { datasource: promDatasource, description: 'Number of graph executions.', fieldConfig: { @@ -347,7 +347,7 @@ local graphRunsPanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:core:graph_runs{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'increase(:tensorflow:core:graph_runs{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -356,7 +356,7 @@ local graphRunsPanel = { type: 'timeseries', }; -local graphBuildTimePanel = { +local graphBuildTimePanel(matcher) = { datasource: promDatasource, description: 'Amount of time Tensorflow has spent creating new client graphs.', fieldConfig: { @@ -413,7 +413,7 @@ local graphBuildTimePanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:core:graph_build_time_usecs{job=~"$job",instance=~"$instance"}[$__rate_interval])/increase(:tensorflow:core:graph_build_calls{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'increase(:tensorflow:core:graph_build_time_usecs{' + matcher + '}[$__rate_interval])/increase(:tensorflow:core:graph_build_calls{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -422,7 +422,7 @@ local graphBuildTimePanel = { type: 'timeseries', }; -local graphRunTimePanel = { +local graphRunTimePanel(matcher) = { datasource: promDatasource, description: 'Amount of time spent executing graphs.', fieldConfig: { @@ -479,7 +479,7 @@ local graphRunTimePanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:core:graph_run_time_usecs{job=~"$job",instance=~"$instance"}[$__rate_interval])/increase(:tensorflow:core:graph_runs{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'increase(:tensorflow:core:graph_run_time_usecs{' + matcher + '}[$__rate_interval])/increase(:tensorflow:core:graph_runs{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -488,7 +488,7 @@ local graphRunTimePanel = { type: 'timeseries', }; -local batchQueuingLatencyPanel = { +local batchQueuingLatencyPanel(matcher) = { datasource: promDatasource, description: 'Current latency in the batching queue.', fieldConfig: { @@ -545,7 +545,7 @@ local batchQueuingLatencyPanel = { }, targets: [ prometheus.target( - 'increase(:tensorflow:serving:batching_session:queuing_latency_sum{job=~"$job",instance=~"$instance"}[$__rate_interval])/increase(:tensorflow:serving:batching_session:queuing_latency_count{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'increase(:tensorflow:serving:batching_session:queuing_latency_sum{' + matcher + '}[$__rate_interval])/increase(:tensorflow:serving:batching_session:queuing_latency_count{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -554,7 +554,7 @@ local batchQueuingLatencyPanel = { type: 'timeseries', }; -local batchQueueThroughputPanel = { +local batchQueueThroughputPanel(matcher) = { datasource: promDatasource, description: 'Rate of batch queue throughput over time.', fieldConfig: { @@ -611,7 +611,7 @@ local batchQueueThroughputPanel = { }, targets: [ prometheus.target( - 'rate(:tensorflow:serving:batching_session:queuing_latency_count{job=~"$job",instance=~"$instance"}[$__rate_interval])', + 'rate(:tensorflow:serving:batching_session:queuing_latency_count{' + matcher + '}[$__rate_interval])', datasource=promDatasource, ), ], @@ -620,7 +620,7 @@ local batchQueueThroughputPanel = { type: 'timeseries', }; -local containerLogsPanel = { +local containerLogsPanel(matcher) = { datasource: lokiDatasource, description: 'Logs from the TensorFlow Serving Docker container.', options: { @@ -637,7 +637,7 @@ local containerLogsPanel = { { datasource: lokiDatasource, editorMode: 'code', - expr: '{name="tensorflow",job=~"$job",instance=~"$instance"}', + expr: '{name="tensorflow",' + matcher + '}', legendFormat: '', queryType: 'range', refId: 'A', @@ -648,6 +648,8 @@ local containerLogsPanel = { type: 'logs', }; +local getMatcher(cfg) = '%(tensorflowSelector)s, instance=~"$instance"' % cfg; + { grafanaDashboards+:: { 'tensorflow-overview.json': @@ -681,10 +683,22 @@ local containerLogsPanel = { allValues='.+', sort=1, ), + template.new( + 'cluster', + promDatasource, + 'label_values(:tensorflow:serving:request_count{}, cluster)' % $._config, + label='Cluster', + refresh=2, + includeAll=true, + multi=true, + allValues='.*', + hide=if $._config.enableMultiCluster then '' else 'variable', + sort=0 + ), template.new( 'instance', promDatasource, - 'label_values(:tensorflow:serving:request_count{job=~"$job"}, instance)', + 'label_values(:tensorflow:serving:request_count{%(tensorflowSelector)s}, instance)' % $._config, label='Instance', refresh='time', includeAll=true, @@ -695,7 +709,7 @@ local containerLogsPanel = { template.new( 'model_name', promDatasource, - 'label_values(:tensorflow:serving:request_count{job=~"$job",instance=~"$instance"}, model_name)', + 'label_values(:tensorflow:serving:request_count{%(tensorflowSelector)s}, model_name)' % $._config, label='Model name', refresh='time', includeAll=true, @@ -718,23 +732,23 @@ local containerLogsPanel = { std.flattenArrays([ // Model Row [ - modelRequestRatePanel { gridPos: { h: 8, w: 24, x: 0, y: 0 } }, - modelPredictRequestLatencyPanel { gridPos: { h: 8, w: 12, x: 0, y: 8 } }, - modelPredictRuntimeLatencyPanel { gridPos: { h: 8, w: 12, x: 12, y: 8 } }, + modelRequestRatePanel(getMatcher($._config)) { gridPos: { h: 8, w: 24, x: 0, y: 0 } }, + modelPredictRequestLatencyPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 8 } }, + modelPredictRuntimeLatencyPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 8 } }, ], // Serving Overview Row [ servingOverviewRow { gridPos: { h: 1, w: 24, x: 0, y: 16 } }, - graphBuildCallsPanel { gridPos: { h: 8, w: 12, x: 0, y: 17 } }, - graphRunsPanel { gridPos: { h: 8, w: 12, x: 12, y: 17 } }, - graphBuildTimePanel { gridPos: { h: 8, w: 12, x: 0, y: 25 } }, - graphRunTimePanel { gridPos: { h: 8, w: 12, x: 12, y: 25 } }, - batchQueuingLatencyPanel { gridPos: { h: 8, w: 12, x: 0, y: 33 } }, - batchQueueThroughputPanel { gridPos: { h: 8, w: 12, x: 12, y: 33 } }, + graphBuildCallsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 17 } }, + graphRunsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 17 } }, + graphBuildTimePanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 25 } }, + graphRunTimePanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 25 } }, + batchQueuingLatencyPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 0, y: 33 } }, + batchQueueThroughputPanel(getMatcher($._config)) { gridPos: { h: 8, w: 12, x: 12, y: 33 } }, ], // Optional Log Row if $._config.enableLokiLogs then [ - containerLogsPanel { gridPos: { h: 8, w: 24, x: 0, y: 41 } }, + containerLogsPanel(getMatcher($._config)) { gridPos: { h: 8, w: 24, x: 0, y: 41 } }, ] else [], ]), ), diff --git a/wso2-enterprise-integrator-mixin/dashboards/API_Metrics.json b/wso2-enterprise-integrator-mixin/dashboards/API_Metrics.json index ea61fd49c..36033a1c8 100644 --- a/wso2-enterprise-integrator-mixin/dashboards/API_Metrics.json +++ b/wso2-enterprise-integrator-mixin/dashboards/API_Metrics.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,14 +26,15 @@ "fiscalYearStartMonth": 0, "gnetId": 12888, "graphTooltip": 0, - "id": 61, - "iteration": 1635452761687, + "id": 20, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -40,12 +44,21 @@ "id": 4, "panels": [], "repeat": "service", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "$service", "type": "row" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -71,7 +84,8 @@ } ] }, - "unit": "dtdurations" + "unit": "dtdurations", + "unitScale": true }, "overrides": [] }, @@ -82,7 +96,6 @@ "y": 1 }, "id": 6, - "interval": null, "links": [], "maxDataPoints": 100, "options": { @@ -97,12 +110,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "time() - max(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": false, @@ -111,14 +129,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Up Time", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time request count served by this API service. This will also include the error requests.", "fieldConfig": { "defaults": { @@ -143,7 +160,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -173,12 +191,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum((max_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))- (min_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "interval": "", @@ -186,14 +209,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "All Request Count", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays approximate request count received by this API service within the selected time range.", "fieldConfig": { "defaults": { @@ -216,7 +238,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -240,12 +263,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "(sum((max_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))- (min_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))))-(sum((max_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))- (min_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))))", "hide": false, @@ -254,6 +282,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "(sum(max_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "hide": true, @@ -262,14 +293,14 @@ "refId": "B" } ], - "timeFrom": null, - "timeShift": null, "title": "Successful Request Count", "transformations": [], "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time error count occurred within this API service", "fieldConfig": { "defaults": { @@ -298,7 +329,8 @@ "value": 0 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -321,12 +353,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum((max_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))-(min_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "interval": "", @@ -334,13 +371,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Count", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays number of error requests occurred during the selected time range.", "fieldConfig": { "defaults": { @@ -372,7 +409,8 @@ } ] }, - "unit": "percentunit" + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, @@ -395,12 +433,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum((max_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))-(min_over_time(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))/sum((max_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))-(min_over_time(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "interval": "30s", @@ -408,13 +451,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Percentage", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays number of nodes this API service is deployed.", "fieldConfig": { "defaults": { @@ -428,7 +471,8 @@ "value": null } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -452,12 +496,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "count(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": true, @@ -466,61 +515,98 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Deployed Node Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the request rate for this API service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 6 }, - "hiddenSeries": false, "id": 9, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum(rate(wso2_integration_api_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "70s", @@ -529,98 +615,98 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays error rate of this API service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 6 }, - "hiddenSeries": false, "id": 12, "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(wso2_integration_api_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -628,64 +714,39 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "short", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "cards": { - "cardPadding": null, - "cardRound": null - }, + "cards": {}, "color": { "cardColor": "#73BF69", "colorScale": "sqrt", "colorScheme": "interpolateSpectral", "exponent": 0.5, - "min": null, "mode": "opacity" }, "dataFormat": "tsbuckets", - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the response time of all requests served by this API service in a heat map. Each tile will represent number of requests which fell in to the pre-defined time bucket during the bucket time span. If you seen any anomalies please use the below link to view tracing information related to $service", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + }, + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 8, "w": 8, @@ -701,9 +762,51 @@ "show": true }, "links": [], + "options": { + "calculate": false, + "calculation": {}, + "cellGap": 2, + "cellValues": {}, + "color": { + "exponent": 0.5, + "fill": "#73BF69", + "mode": "opacity", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 128 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "ge" + }, + "showValue": "never", + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.3.1", "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum by (le)(increase(wso2_integration_api_latency_seconds{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\", le=~\".+\"}[$__rate_interval]))", "format": "heatmap", @@ -714,8 +817,6 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Response Time", "tooltip": { "show": true, @@ -725,55 +826,54 @@ "xAxis": { "show": true }, - "xBucketNumber": null, - "xBucketSize": null, "yAxis": { - "decimals": null, "format": "s", "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null + "show": true }, - "yBucketBound": "upper", - "yBucketNumber": null, - "yBucketSize": null + "yBucketBound": "upper" } ], "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], + "schemaVersion": 39, + "tags": [ + "wso2-enterprise-integrator-integration" + ], "templating": { "list": [ { - "current": {}, - "description": null, - "error": null, + "current": { + "selected": false, + "text": "default", + "value": "default" + }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"api\"}, job)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -792,14 +892,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"api\", job=~\"$job\"}, service_name)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "service", + "label": "Service", "multi": true, "name": "service", "options": [], @@ -818,14 +922,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"api\", service_name=~\"$service\", job=~\"$job\"}, instance)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -833,7 +941,7 @@ "query": "label_values(wso2_integration_service_up{service_type=\"api\", service_name=~\"$service\", job=~\"$job\"}, instance)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -861,5 +969,6 @@ "timezone": "", "title": "WSO2 API Metrics", "uid": "0KIvzUI7z", - "version": 8 + "version": 3, + "weekStart": "" } \ No newline at end of file diff --git a/wso2-enterprise-integrator-mixin/dashboards/Cluster_Metrics.json b/wso2-enterprise-integrator-mixin/dashboards/Cluster_Metrics.json index 551336a99..5d88591df 100644 --- a/wso2-enterprise-integrator-mixin/dashboards/Cluster_Metrics.json +++ b/wso2-enterprise-integrator-mixin/dashboards/Cluster_Metrics.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,14 +26,15 @@ "fiscalYearStartMonth": 0, "gnetId": 12783, "graphTooltip": 0, - "id": 62, - "iteration": 1635514673335, + "id": 21, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "gridPos": { "h": 1, "w": 24, @@ -40,12 +44,21 @@ "id": 4, "panels": [], "repeat": "node", + "targets": [ + { + "datasource": { + "uid": "${datasource}" + }, + "refId": "A" + } + ], "title": "WSO2 Integration Cluster", "type": "row" }, { - "cacheTimeout": null, - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the number of nodes connected to this cluster", "fieldConfig": { "defaults": { @@ -67,7 +80,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -91,12 +105,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "count(wso2_integration_server_up{wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"})", "format": "time_series", @@ -106,13 +125,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Node Count", "type": "stat" }, { - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the number of services deployed in the cluster.", "fieldConfig": { "defaults": { @@ -126,7 +145,8 @@ "value": null } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -149,12 +169,17 @@ "fields": "", "values": true }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "count(count by(service_name,service_type)(wso2_integration_service_up{wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}))", "instant": true, @@ -163,13 +188,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Service Count", "type": "stat" }, { - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays nodes that are deployed in this cluster", "fieldConfig": { "defaults": { @@ -178,7 +203,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -193,7 +221,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [ { @@ -207,8 +236,7 @@ "value": "Time" }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -235,8 +263,7 @@ "value": "time: YYYY-MM-DD HH:mm:ss" }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -269,8 +296,7 @@ ] }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] } @@ -284,11 +310,23 @@ }, "id": 37, "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "sum by(instance) (wso2_integration_server_up{wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}>0)*1000", "format": "table", @@ -298,8 +336,6 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Node List", "transformations": [ { @@ -312,7 +348,9 @@ "type": "table" }, { - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays services that are deployed in this cluster", "fieldConfig": { "defaults": { @@ -321,7 +359,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -336,7 +377,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [ { @@ -350,8 +392,7 @@ "value": "Time" }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -378,8 +419,7 @@ "value": "time: YYYY-MM-DD HH:mm:ss" }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -402,8 +442,7 @@ "value": 2 }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -430,8 +469,7 @@ "value": "time: YYYY-MM-DD HH:mm:ss" }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -464,8 +502,7 @@ ] }, { - "id": "custom.align", - "value": null + "id": "custom.align" } ] } @@ -479,11 +516,23 @@ }, "id": 22, "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "max by(service_name,service_type) (wso2_integration_service_up{wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}>0)*1000", "format": "table", @@ -493,8 +542,6 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Service List", "transformations": [ { @@ -507,7 +554,9 @@ "type": "table" }, { - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the total request count served by the cluster for the selected time period. Request which resulted in errors will be counted here too.", "fieldConfig": { "defaults": { @@ -533,7 +582,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -556,12 +606,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "sum((max_over_time({__name__ =~\"wso2_integration_.*_request_count_total\",wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range]))- (min_over_time({__name__ =~\"wso2_integration_.*_request_count_total\",wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range])))", "interval": "", @@ -569,13 +624,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Request Count", "type": "stat" }, { - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the total error count occurred in this cluster for the selected time period", "fieldConfig": { "defaults": { @@ -600,7 +655,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -623,12 +679,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "sum((max_over_time({__name__ =~\"wso2_integration_.*_request_count_error_total\",wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range]))- (min_over_time({__name__ =~\"wso2_integration_.*_request_count_error_total\",wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range])))", "interval": "", @@ -636,62 +697,99 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the request rate received by cluster during the selected time period. This will also include error requests. ", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 13 }, - "hiddenSeries": false, "id": 9, "interval": "", - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "sum(rate({__name__ =~\"wso2_integration_.*_request_count_total\",wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval]))", "interval": "70s", @@ -700,99 +798,98 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays the error rate occurred at this cluster during the selected time period. ", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 13 }, - "hiddenSeries": false, "id": 12, "interval": "", - "legend": { - "avg": false, - "current": false, - "hideEmpty": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "sum(rate({__name__ =~\"wso2_integration_.*_request_count_error_total\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -800,97 +897,97 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${datasource}", + "datasource": { + "uid": "${datasource}" + }, "description": "Displays 95th and 50th percentile of response times served by all nodes of this cluster", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 13 }, - "hiddenSeries": false, "id": 13, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "histogram_quantile(0.5, sum(rate({__name__ =~\"wso2_integration_.*_latency_seconds\", le=~\".+\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval])) by (le))", "format": "time_series", @@ -900,6 +997,9 @@ "refId": "A" }, { + "datasource": { + "uid": "${datasource}" + }, "exemplar": false, "expr": "histogram_quantile(0.95, sum(rate({__name__ =~\"wso2_integration_.*_latency_seconds\", le=~\".+\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval])) by (le))", "interval": "1m", @@ -907,81 +1007,50 @@ "refId": "B" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Response Time", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 10, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" } ], "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], + "schemaVersion": 39, + "tags": [ + "wso2-enterprise-integrator-integration" + ], "templating": { "list": [ { - "current": {}, - "description": null, - "error": null, + "current": { + "selected": false, + "text": "default", + "value": "default" + }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_server_up, job)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -1000,11 +1069,15 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_server_up, wso2_cluster)", - "description": null, - "error": null, "hide": 0, "includeAll": true, "label": "Cluster", @@ -1015,7 +1088,7 @@ "query": "label_values(wso2_integration_server_up, wso2_cluster)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -1043,5 +1116,6 @@ "timezone": "", "title": "WSO2 Integration Cluster Metrics", "uid": "TdzS6sS7z", - "version": 6 + "version": 2, + "weekStart": "" } \ No newline at end of file diff --git a/wso2-enterprise-integrator-mixin/dashboards/Inbound_Endpoint_Metrics.json b/wso2-enterprise-integrator-mixin/dashboards/Inbound_Endpoint_Metrics.json index 5ce1932aa..7352088f6 100644 --- a/wso2-enterprise-integrator-mixin/dashboards/Inbound_Endpoint_Metrics.json +++ b/wso2-enterprise-integrator-mixin/dashboards/Inbound_Endpoint_Metrics.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,14 +26,15 @@ "fiscalYearStartMonth": 0, "gnetId": 12890, "graphTooltip": 0, - "id": 63, - "iteration": 1635514659781, + "id": 22, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -40,12 +44,21 @@ "id": 4, "panels": [], "repeat": "service", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "$service", "type": "row" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -75,7 +88,8 @@ } ] }, - "unit": "dtdurations" + "unit": "dtdurations", + "unitScale": true }, "overrides": [] }, @@ -86,7 +100,6 @@ "y": 1 }, "id": 6, - "interval": null, "links": [], "maxDataPoints": 100, "options": { @@ -101,12 +114,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "time() - max(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": false, "interval": "", @@ -114,14 +132,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Up Time", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time request count served by this API service. This will also include the error requests.", "fieldConfig": { "defaults": { @@ -146,7 +163,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -176,26 +194,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "", "legendFormat": "", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "All Request Count", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays approximate request count received by this API service within the selected time range.", "fieldConfig": { "defaults": { @@ -220,7 +242,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -244,25 +267,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "(sum(max_over_time(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))-(sum(max_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "interval": "1m", "legendFormat": "", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Successful Request Count", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time error count occurred within this API service", "fieldConfig": { "defaults": { @@ -291,7 +319,8 @@ "value": 0 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -314,25 +343,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "", "legendFormat": "", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Count", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays percentage of error requests against total request count", "fieldConfig": { "defaults": { @@ -364,7 +398,8 @@ } ] }, - "unit": "percentunit" + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, @@ -387,25 +422,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))/sum(max_over_time(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_inbound_endpoint_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "30s", "legendFormat": "Current", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Percentage", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays number of nodes this API service is deployed.", "fieldConfig": { "defaults": { @@ -419,7 +459,8 @@ "value": null } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -443,12 +484,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": true, "interval": "", @@ -456,61 +502,98 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Deployed Node Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the request rate for this API service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 6 }, - "hiddenSeries": false, "id": 9, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(wso2_integration_inbound_endpoint_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -519,98 +602,98 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays error rate of this API service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 6 }, - "hiddenSeries": false, "id": 12, "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(wso2_integration_inbound_endpoint_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -618,64 +701,39 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "short", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "cards": { - "cardPadding": null, - "cardRound": null - }, + "cards": {}, "color": { "cardColor": "#73BF69", "colorScale": "sqrt", "colorScheme": "interpolateYlOrRd", "exponent": 0.5, - "min": null, "mode": "opacity" }, "dataFormat": "tsbuckets", - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the response time of all requests served by this API service in a heat map. Each tile will represent number of requests which fell in to the pre-defined time bucket during the bucket time span.", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + }, + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 8, "w": 8, @@ -691,9 +749,51 @@ "show": true }, "links": [], + "options": { + "calculate": false, + "calculation": {}, + "cellGap": 2, + "cellValues": {}, + "color": { + "exponent": 0.5, + "fill": "#73BF69", + "mode": "opacity", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 128 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "ge" + }, + "showValue": "never", + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.3.1", "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum by (le)(increase(wso2_integration_inbound_endpoint_latency_seconds{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\", le=~\".+\"}[$__rate_interval]))", "format": "heatmap", @@ -703,8 +803,6 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Response Time", "tooltip": { "show": true, @@ -714,54 +812,53 @@ "xAxis": { "show": true }, - "xBucketNumber": null, - "xBucketSize": null, "yAxis": { - "decimals": null, "format": "s", "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null + "show": true }, - "yBucketBound": "upper", - "yBucketNumber": null, - "yBucketSize": null + "yBucketBound": "upper" } ], "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], + "schemaVersion": 39, + "tags": [ + "wso2-enterprise-integrator-integration" + ], "templating": { "list": [ { - "current": {}, - "description": null, - "error": null, + "current": { + "selected": false, + "text": "default", + "value": "default" + }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"inbound-endpoint\"}, job)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -780,14 +877,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"inbound-endpoint\", job=~\"$job\"}, service_name)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "service", + "label": "Service", "multi": true, "name": "service", "options": [], @@ -806,14 +907,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"inbound-endpoint\", job=~\"$job\", service_name=~\"$service\"}, instance)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -821,7 +926,7 @@ "query": "label_values(wso2_integration_service_up{service_type=\"inbound-endpoint\", job=~\"$job\", service_name=~\"$service\"}, instance)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -849,5 +954,6 @@ "timezone": "", "title": "WSO2 Inbound Endpoint Metrics", "uid": "x5VJI8S7z", - "version": 5 + "version": 2, + "weekStart": "" } \ No newline at end of file diff --git a/wso2-enterprise-integrator-mixin/dashboards/Node_Metrics.json b/wso2-enterprise-integrator-mixin/dashboards/Node_Metrics.json index 8bb25ea23..5c2deb45b 100644 --- a/wso2-enterprise-integrator-mixin/dashboards/Node_Metrics.json +++ b/wso2-enterprise-integrator-mixin/dashboards/Node_Metrics.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,14 +26,15 @@ "fiscalYearStartMonth": 0, "gnetId": 12887, "graphTooltip": 0, - "id": 64, - "iteration": 1635514716040, + "id": 23, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -40,12 +44,21 @@ "id": 4, "panels": [], "repeat": "node", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Instance - $instance", "type": "row" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -70,7 +83,8 @@ } ] }, - "unit": "dtdurations" + "unit": "dtdurations", + "unitScale": true }, "overrides": [] }, @@ -81,7 +95,6 @@ "y": 1 }, "id": 35, - "interval": null, "links": [], "maxDataPoints": 100, "options": { @@ -101,12 +114,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "max(time()-wso2_integration_server_up{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"})", "format": "time_series", @@ -116,13 +134,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Up Time", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the number of services deployed in this node.", "fieldConfig": { "defaults": { @@ -136,7 +154,8 @@ "value": null } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -159,12 +178,17 @@ "fields": "", "values": true }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "count(wso2_integration_service_up{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"})", "instant": true, @@ -173,66 +197,102 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Service Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays current CPU utilisation of the system. If you observe high CPU utilisation refer below link and get a thread dump and thread usage for further investigations.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 6, "w": 4, "x": 8, "y": 1 }, - "hiddenSeries": false, "id": 16, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [ { "title": "How to take thread usage and thread dump", "url": "https://docs.wso2.com/display/CLUSTER44x/Troubleshooting+in+Production+Environments#TroubleshootinginProductionEnvironments-Analyzingastacktrace" } ], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "rate(process_cpu_seconds_total{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval])", "interval": "1m", @@ -240,82 +300,77 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "CPU Utilization", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "percentunit", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays max and current used memory. If you observe any abnormalities refer below link and take a heap-dump of the system for further analysis.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line+area" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "transparent" + } + ] + }, + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, "gridPos": { "h": 6, "w": 4, "x": 12, "y": 1 }, - "hiddenSeries": false, "id": 18, - "legend": { - "avg": false, - "current": true, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [ { "targetBlank": true, @@ -323,21 +378,26 @@ "url": "https://docs.wso2.com/display/CLUSTER44x/Troubleshooting+in+Production+Environments#TroubleshootinginProductionEnvironments-Capturingthestateofthesystem" } ], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_memory_bytes_max{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\",area=\"heap\"}", "interval": "", @@ -345,6 +405,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_memory_bytes_used{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", area=\"heap\"}", "interval": "", @@ -352,63 +415,69 @@ "refId": "B" } ], - "thresholds": [ - { - "$$hashKey": "object:149", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "lt", - "value": null, - "yaxis": "left" - } - ], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "JVM Heap Memory", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "decbytes", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "columns": [], - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays services that are deployed in this instance", - "fontSize": "100%", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 12, "w": 8, @@ -416,114 +485,23 @@ "y": 1 }, "id": 22, - "pageSize": null, - "showHeader": true, - "sort": { - "col": 0, - "desc": true - }, - "styles": [ - { - "$$hashKey": "object:316", - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "link": false, - "pattern": "Time", - "type": "hidden" - }, - { - "$$hashKey": "object:317", - "alias": "Deploy Time", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [], - "type": "date", - "unit": "short" - }, - { - "$$hashKey": "object:318", - "alias": "Service Type", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "service_type", - "sanitize": false, - "thresholds": [], - "type": "string", - "unit": "short", - "valueMaps": [ - { - "$$hashKey": "object:360", - "text": "API", - "value": "api" - }, - { - "$$hashKey": "object:361", - "text": "Proxy Service", - "value": "proxy_service" - } - ] - }, - { - "$$hashKey": "object:319", - "alias": "Deploy Time", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "start_time", - "thresholds": [], - "type": "date", - "unit": "dateTimeFromNow" + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, - { - "$$hashKey": "object:320", - "alias": "Service Name", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "link": true, - "linkTargetBlank": true, - "linkTooltip": "Visit service metrics for ${__cell} ${__cell_2}", - "linkUrl": "d/wso2-observerbility-${__cell_2}/wso2-${__cell_2}-metrics?var-service=${__cell}&from=${__from}&to=${__to}&refresh=30s", - "mappingType": 1, - "pattern": "service_name", - "thresholds": [], - "type": "string", - "unit": "short" + "tooltip": { + "mode": "single", + "sort": "none" } - ], + }, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum by(service_name,service_type, start_time) (wso2_integration_service_up{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}*1000>0)", "format": "table", @@ -533,14 +511,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Service List", - "transform": "table", - "type": "table-old" + "type": "timeseries" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the total request count served by this node from the start. Request which resulted in error will be counted here too.", "fieldConfig": { "defaults": { @@ -566,7 +543,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -589,12 +567,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum((max_over_time({__name__ =~\"wso2_integration_.*_request_count_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range]))- (min_over_time({__name__ =~\"wso2_integration_.*_request_count_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range])))", "interval": "", @@ -602,13 +585,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Request Count", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the total error count occurred at this node from the start.", "fieldConfig": { "defaults": { @@ -633,7 +616,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -656,12 +640,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum((max_over_time({__name__ =~\"wso2_integration_.*_request_count_error_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range]))- (min_over_time({__name__ =~\"wso2_integration_.*_request_count_error_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__range])))", "interval": "", @@ -669,45 +658,79 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the thread count per state. If you observe higher number of blocked threads refer below link and take a thread dump to analyze further.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, "gridPos": { "h": 6, "w": 4, "x": 8, "y": 7 }, - "hiddenSeries": false, "id": 19, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, "links": [ { "targetBlank": true, @@ -715,21 +738,24 @@ "url": "https://docs.wso2.com/display/CLUSTER44x/Troubleshooting+in+Production+Environments#TroubleshootinginProductionEnvironments-Analyzingastacktrace" } ], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_threads_state{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", state=\"RUNNABLE\"}", "interval": "30s", @@ -737,6 +763,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_threads_state{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", state=\"WAITING\"} ", "interval": "30s", @@ -744,6 +773,9 @@ "refId": "B" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_threads_state{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", state=\"BLOCKED\"}", "interval": "30s", @@ -751,6 +783,9 @@ "refId": "C" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_threads_state{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", state=\"TIMED_WAITING\"}", "interval": "", @@ -758,84 +793,78 @@ "refId": "D" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Thread Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays 'Open' and 'Max' file descriptor count. If open descriptor count is high and exceeding max descriptor count refer below link to increase the max file descriptor count.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, "gridPos": { "h": 6, "w": 4, "x": 12, "y": 7 }, - "hiddenSeries": false, "id": 6, - "legend": { - "alignAsTable": false, - "avg": false, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, "links": [ { "targetBlank": true, @@ -843,21 +872,26 @@ "url": "https://ei.docs.wso2.com/en/latest/micro-integrator/setup/performance_tuning/network_os_performance/" } ], - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "process_open_fds{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}", "interval": "", @@ -865,6 +899,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "process_max_fds{instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}", "interval": "", @@ -872,98 +909,99 @@ "refId": "B" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Open File Descriptor Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 32, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the request rate received by this node during the selected time period. This will also include error requests. ", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 13 }, - "hiddenSeries": false, "id": 9, "interval": "", - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum(rate({__name__ =~\"wso2_integration_.*_request_count_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -972,99 +1010,98 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the error rate occurred at this node during the selected time period. ", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 13 }, - "hiddenSeries": false, "id": 12, "interval": "", - "legend": { - "avg": false, - "current": false, - "hideEmpty": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "sum(rate({__name__ =~\"wso2_integration_.*_request_count_error_total\",instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", @@ -1072,97 +1109,97 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the response time of all requests served by this node in a heat map. Each tile will represent number of requests which fell in to the pre-defined time bucket during the bucket time span.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s", + "unitScale": true }, "overrides": [] }, - "fill": 0, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 13 }, - "hiddenSeries": false, "id": 13, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "histogram_quantile(0.5, sum(rate({__name__ =~\"wso2_integration_.*_latency_seconds\", instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", le=~\".+\"}[$__rate_interval])) by (le))", "format": "time_series", @@ -1172,6 +1209,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate({__name__ =~\"wso2_integration_.*_latency_seconds\", instance=~\"$instance\", wso2_cluster=~\"$wso2_cluster\", job=~\"$job\", le=~\".+\"}[$__rate_interval])) by (le))", "interval": "1m", @@ -1179,83 +1219,50 @@ "refId": "B" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Response Time", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:144", - "format": "s", - "label": null, - "logBase": 10, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:145", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" } ], "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], + "schemaVersion": 39, + "tags": [ + "wso2-enterprise-integrator-integration" + ], "templating": { "list": [ { - "current": {}, - "description": null, - "error": null, + "current": { + "selected": false, + "text": "default", + "value": "default" + }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_server_up, job)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -1274,14 +1281,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_server_up{job=~\"$job\"}, wso2_cluster)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "cluster", + "label": "Cluster", "multi": true, "name": "wso2_cluster", "options": [], @@ -1289,7 +1300,7 @@ "query": "label_values(wso2_integration_server_up{job=~\"$job\"}, wso2_cluster)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -1297,14 +1308,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_server_up{job=~\"$job\", wso2_cluster=~\"$wso2_cluster\"}, instance)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -1312,7 +1327,7 @@ "query": "label_values(wso2_integration_server_up{job=~\"$job\", wso2_cluster=~\"$wso2_cluster\"}, instance)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -1340,5 +1355,6 @@ "timezone": "", "title": "WSO2 Integration Node Metrics", "uid": "j509RUS7z", - "version": 3 + "version": 2, + "weekStart": "" } \ No newline at end of file diff --git a/wso2-enterprise-integrator-mixin/dashboards/Proxy_Service_Metrics.json b/wso2-enterprise-integrator-mixin/dashboards/Proxy_Service_Metrics.json index 9f822c417..621dda908 100644 --- a/wso2-enterprise-integrator-mixin/dashboards/Proxy_Service_Metrics.json +++ b/wso2-enterprise-integrator-mixin/dashboards/Proxy_Service_Metrics.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -23,14 +26,15 @@ "fiscalYearStartMonth": 0, "gnetId": 12889, "graphTooltip": 0, - "id": 65, - "iteration": 1635514687282, + "id": 24, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -40,12 +44,21 @@ "id": 4, "panels": [], "repeat": "service", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "$service", "type": "row" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -75,7 +88,8 @@ } ] }, - "unit": "dtdurations" + "unit": "dtdurations", + "unitScale": true }, "overrides": [] }, @@ -86,7 +100,6 @@ "y": 1 }, "id": 6, - "interval": null, "links": [], "maxDataPoints": 100, "options": { @@ -101,12 +114,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "time() - max(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": false, "interval": "", @@ -114,14 +132,13 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Up Time", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time request count served by this proxy service. This will also include the error requests.", "fieldConfig": { "defaults": { @@ -146,7 +163,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -176,26 +194,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "", "legendFormat": "", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "All Request Count", "type": "stat" }, { - "cacheTimeout": null, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays approximate request count received by this proxy service within the selected time range.", "fieldConfig": { "defaults": { @@ -220,7 +242,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -244,18 +267,26 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "(sum(max_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))-(sum(max_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "interval": "", "legendFormat": "", "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "(sum(max_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])))", "hide": true, "interval": "", @@ -263,14 +294,14 @@ "refId": "B" } ], - "timeFrom": null, - "timeShift": null, "title": "Successful Request Count", "transformations": [], "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays all time error count occurred within this proxy service.", "fieldConfig": { "defaults": { @@ -299,7 +330,8 @@ "value": 0 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -323,25 +355,30 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "", "legendFormat": "", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Count", "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays number of error requests occurred during the selected time range.", "fieldConfig": { "defaults": { @@ -372,7 +409,8 @@ } ] }, - "unit": "percentunit" + "unit": "percentunit", + "unitScale": true }, "overrides": [] }, @@ -395,26 +433,31 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(max_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))/sum(max_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range])-min_over_time(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__range]))", "interval": "30s", "legendFormat": "Current", "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Error Percentage", "transformations": [], "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays number of nodes this proxy service is deployed.", "fieldConfig": { "defaults": { @@ -428,7 +471,8 @@ "value": null } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -452,12 +496,17 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": {}, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.2.2-39068", + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "count(wso2_integration_service_up{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"})", "instant": true, "interval": "", @@ -465,61 +514,98 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Deployed Node Count", "type": "stat" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the request rate for this proxy service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 6 }, - "hiddenSeries": false, "id": 9, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(rate(wso2_integration_proxy_request_count_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "70s", "intervalFactor": 1, @@ -527,164 +613,137 @@ "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Request Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:55", - "decimals": 0, - "format": "reqps", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "$$hashKey": "object:56", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays error rate of this proxy service.", "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "unitScale": true }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 6 }, - "hiddenSeries": false, "id": 12, "interval": "", - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": false, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.2-39068", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.3.1", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(rate(wso2_integration_proxy_request_count_error_total{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\"}[$__rate_interval]))", "interval": "1m", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, "title": "Error Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "format": "short", - "label": "TPS", - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } + "type": "timeseries" }, { - "cards": { - "cardPadding": null, - "cardRound": null - }, + "cards": {}, "color": { "cardColor": "#b4ff00", "colorScale": "sqrt", "colorScheme": "interpolateYlOrRd", "exponent": 0.5, - "min": null, "mode": "spectrum" }, "dataFormat": "tsbuckets", - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Displays the response time of all requests served by this proxy service in a heat map. Each tile will represent number of requests which fell in to the pre-defined time bucket during the bucket time span. If you seen any anomalies please use the below link to view tracing information related to $service", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + }, + "unitScale": true + }, + "overrides": [] + }, "gridPos": { "h": 8, "w": 8, @@ -700,9 +759,51 @@ "show": true }, "links": [], + "options": { + "calculate": false, + "calculation": {}, + "cellGap": 2, + "cellValues": {}, + "color": { + "exponent": 0.5, + "fill": "#b4ff00", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "OrRd", + "steps": 128 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "ge" + }, + "showValue": "never", + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.3.1", "reverseYBuckets": false, "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum by (le)(increase(wso2_integration_proxy_latency_seconds{service_name=~\"$service\", instance=~\"$instance\", job=~\"$job\", le=~\".+\"}[$__rate_interval]))", "format": "heatmap", "hide": false, @@ -711,8 +812,6 @@ "refId": "A" } ], - "timeFrom": null, - "timeShift": null, "title": "Response Time", "tooltip": { "show": true, @@ -722,58 +821,53 @@ "xAxis": { "show": true }, - "xBucketNumber": null, - "xBucketSize": null, "yAxis": { - "decimals": null, "format": "s", "logBase": 1, - "max": null, - "min": null, - "show": true, - "splitFactor": null + "show": true }, - "yBucketBound": "upper", - "yBucketNumber": null, - "yBucketSize": null + "yBucketBound": "upper" } ], "refresh": "30s", - "schemaVersion": 31, - "style": "dark", - "tags": [], + "schemaVersion": 39, + "tags": [ + "wso2-enterprise-integrator-integration" + ], "templating": { "list": [ { "current": { "selected": false, - "text": "Cortex", - "value": "Cortex" + "text": "default", + "value": "default" }, - "description": null, - "error": null, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"proxy\"}, job)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -792,14 +886,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "$datasource", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"proxy\", job=~\"$job\"}, service_name)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "service", + "label": "Service", "multi": true, "name": "service", "options": [], @@ -818,14 +916,18 @@ }, { "allValue": ".+", - "current": {}, - "datasource": "${datasource}", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "${datasource}" + }, "definition": "label_values(wso2_integration_service_up{service_type=\"proxy\", service_name=~\"$service\", job=~\"$job\"}, instance)", - "description": null, - "error": null, "hide": 0, "includeAll": true, - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -833,7 +935,7 @@ "query": "label_values(wso2_integration_service_up{service_type=\"proxy\", service_name=~\"$service\", job=~\"$job\"}, instance)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -861,5 +963,6 @@ "timezone": "", "title": "WSO2 Proxy Service Metrics", "uid": "68SKM8I7z", - "version": 7 + "version": 2, + "weekStart": "" } \ No newline at end of file diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_aggregation.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_aggregation.json index 9cb38aa16..084a74dbc 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_aggregation.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_aggregation.json @@ -665,7 +665,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -690,7 +690,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -722,7 +722,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_ondemandquery.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_ondemandquery.json index 00634e383..f0e137e7d 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_ondemandquery.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_ondemandquery.json @@ -337,7 +337,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -362,7 +362,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -394,7 +394,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_overall.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_overall.json index cdefff8ff..cfe988c83 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_overall.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_overall.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -21,13 +24,14 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 2, - "id": 86, - "iteration": 1642009394026, + "id": 10, "links": [], "liveNow": false, "panels": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -36,100 +40,124 @@ }, "id": 445, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Server Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 6, "w": 19, "x": 0, "y": 1 }, - "hiddenSeries": false, "id": 18, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.3.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "up{job=~\"integrations/wso2-streaming-integrator\", instance=~\"$instance\"}", "instant": false, "legendFormat": "{{instance}}", "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Servers Up/Down", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 5, @@ -139,6 +167,8 @@ "id": 441, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Server Statistics", "showHeadings": false, @@ -147,10 +177,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -160,7 +193,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -215,11 +250,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(count by (app,instance) (siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"})))", "instant": true, "refId": "A" @@ -229,7 +268,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -237,7 +278,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -289,8 +333,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -401,8 +447,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -448,8 +496,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -471,8 +521,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -490,7 +542,9 @@ "id": 468, "interval": "1s", "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -499,11 +553,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_source_throughput_total{job=~\"$job\", instance=~\"$instance\",type=\"source\",operation!=\"inMemory\"}) by (instance)", "format": "table", @@ -513,7 +569,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(jvm_os_system_load_average{job=~\"$job\", instance=~\"$instance\"}) by (instance)", "format": "table", @@ -523,7 +581,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(jvm_os_cpu_load_system{job=~\"$job\", instance=~\"$instance\"}) by (insance)", "format": "table", @@ -533,7 +593,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(jvm_memory_heap_usage{job=~\"$job\", instance=~\"$instance\"}) by (instance)", "format": "table", @@ -565,221 +627,277 @@ "type": "table" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 12 }, - "hiddenSeries": false, "id": 10, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.3.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_source_throughput_total{type=\"source\",operation!=\"inMemory\",job=~\"$job\", instance=~\"$instance\"})", "instant": false, "legendFormat": "overall throughput{instance=\"{{instance}}\" }", "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Overall Throughput", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" }, "overrides": [] }, - "fill": 2, - "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 12 }, - "hiddenSeries": false, "id": 8, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.3.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "jvm_os_system_load_average{job=~\"$job\", instance=~\"$instance\"}", "legendFormat": "system load average{instance=\"{{instance}}\" }", "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "System Load Average", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 0, "y": 18 }, - "hiddenSeries": false, "id": 12, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.3.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_os_cpu_load_process{job=~\"$job\", instance=~\"$instance\"}", "interval": "", @@ -787,85 +905,94 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Process CPU Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { - "links": [] + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" }, "overrides": [] }, - "fill": 1, - "fillGradient": 0, "gridPos": { "h": 6, "w": 12, "x": 12, "y": 18 }, - "hiddenSeries": false, "id": 14, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", "options": { - "alertThreshold": true + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } }, - "percentage": false, - "pluginVersion": "8.3.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": true, "expr": "jvm_memory_heap_usage{job=~\"$job\", instance=~\"$instance\"}", "interval": "", @@ -873,38 +1000,13 @@ "refId": "A" } ], - "thresholds": [], - "timeRegions": [], "title": "Memory Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "logBase": 1, - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } + "type": "timeseries" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -959,11 +1061,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(jvm_threads_count{job=~\"$job\", instance=~\"$instance\"})", "format": "time_series", "instant": false, @@ -974,7 +1080,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1029,11 +1137,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(jvm_threads_blocked_count{job=~\"$job\", instance=~\"$instance\"})", "format": "time_series", "instant": false, @@ -1044,7 +1156,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1099,11 +1213,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(jvm_memory_heap_used{job=~\"$job\", instance=~\"$instance\"})", "format": "time_series", "instant": false, @@ -1114,7 +1232,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1170,11 +1290,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(jvm_os_file_descriptor_open_count{job=~\"$job\", instance=~\"$instance\"})", "instant": false, "intervalFactor": 1, @@ -1185,7 +1309,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1194,15 +1320,30 @@ }, "id": 444, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Stream Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1210,7 +1351,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1262,8 +1406,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1326,7 +1472,9 @@ }, "id": 282, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -1335,11 +1483,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -1365,7 +1515,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 5, @@ -1375,6 +1527,8 @@ "id": 442, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Stream Statistics", "showHeadings": false, @@ -1383,10 +1537,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -1395,7 +1552,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -1451,11 +1610,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}))", "instant": true, "refId": "A" @@ -1465,7 +1628,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1474,15 +1639,30 @@ }, "id": 446, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Query Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1490,7 +1670,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1546,8 +1729,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1619,8 +1804,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1637,7 +1824,9 @@ }, "id": 380, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -1646,11 +1835,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_query_memory{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -1660,7 +1851,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_query_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -1686,7 +1879,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 5, @@ -1696,6 +1891,8 @@ "id": 447, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Query Statistics", "showHeadings": false, @@ -1704,10 +1901,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -1716,7 +1916,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -1772,11 +1974,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(siddhi_query_memory{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}))", "instant": true, "refId": "A" @@ -1786,7 +1992,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -1795,15 +2003,30 @@ }, "id": 448, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Source & Source Mapper Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1811,7 +2034,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1867,8 +2093,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1936,8 +2164,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1996,11 +2226,13 @@ "h": 7, "w": 20, "x": 0, - "y": 45 + "y": 44 }, "id": 466, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2009,11 +2241,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_sourcemapper_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element,operation,operationType)", "format": "table", @@ -2023,7 +2257,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_source_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element,operation)", "format": "table", @@ -2055,16 +2291,20 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 4, "x": 20, - "y": 45 + "y": 44 }, "id": 449, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Source Statistics", "showHeadings": false, @@ -2073,10 +2313,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -2085,7 +2328,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -2124,7 +2369,7 @@ "h": 4, "w": 4, "x": 20, - "y": 48 + "y": 47 }, "id": 368, "links": [], @@ -2141,11 +2386,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(siddhi_source_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}))", "instant": true, "refId": "A" @@ -2155,24 +2404,41 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 52 + "y": 51 }, "id": 450, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Sink Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -2180,7 +2446,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -2236,8 +2505,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2305,8 +2576,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2365,11 +2638,13 @@ "h": 7, "w": 20, "x": 0, - "y": 53 + "y": 52 }, "id": 469, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2378,11 +2653,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_sinkmapper_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element,operation,operationType)", "format": "table", @@ -2392,7 +2669,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_sink_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -2424,16 +2703,20 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 4, "x": 20, - "y": 53 + "y": 52 }, "id": 453, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Sink Statistics", "showHeadings": false, @@ -2442,10 +2725,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -2454,7 +2740,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -2493,7 +2781,7 @@ "h": 4, "w": 4, "x": 20, - "y": 56 + "y": 55 }, "id": 374, "links": [], @@ -2510,11 +2798,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(siddhi_sink_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}))", "instant": true, "refId": "A" @@ -2524,24 +2816,41 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 60 + "y": 59 }, "id": 456, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Table Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -2549,7 +2858,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -2605,8 +2917,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2674,8 +2988,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2711,11 +3027,13 @@ "h": 7, "w": 19, "x": 0, - "y": 61 + "y": 60 }, "id": 386, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2724,11 +3042,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_table_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element,operation)", "format": "table", @@ -2738,7 +3058,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_table_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element,operation)", "format": "table", @@ -2760,16 +3082,20 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 5, "x": 19, - "y": 61 + "y": 60 }, "id": 457, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi Table Statistics", "showHeadings": false, @@ -2778,10 +3104,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -2790,7 +3119,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -2829,7 +3160,7 @@ "h": 4, "w": 5, "x": 19, - "y": 64 + "y": 63 }, "id": 385, "links": [], @@ -2846,11 +3177,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(count by (element) (siddhi_table_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\",element!~\".*SECONDS|.*MINUTES|.*HOURS|.*DAYS|.*MONTHS|.*YEARS\"})))", "instant": true, "refId": "A" @@ -2860,24 +3195,41 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 68 + "y": 67 }, "id": 460, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "
Aggregation Statistics
\n\n\n\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -2885,7 +3237,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -2941,8 +3296,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3014,8 +3371,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3037,8 +3396,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3051,11 +3412,13 @@ "h": 7, "w": 19, "x": 0, - "y": 69 + "y": 68 }, "id": 421, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -3064,11 +3427,13 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_aggregation_memory{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -3078,7 +3443,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_aggregation_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -3088,7 +3455,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_aggregation_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app,element)", "format": "table", @@ -3120,16 +3489,20 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 3, "w": 5, "x": 19, - "y": 69 + "y": 68 }, "id": 461, "links": [], "options": { + "includeVars": false, + "keepTime": false, "maxItems": 10, "query": "Siddhi aggregation Statistics", "showHeadings": false, @@ -3138,10 +3511,13 @@ "showStarred": false, "tags": [] }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -3150,7 +3526,9 @@ "type": "dashlist" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "", "fieldConfig": { "defaults": { @@ -3189,7 +3567,7 @@ "h": 4, "w": 5, "x": 19, - "y": 72 + "y": 71 }, "id": 418, "links": [], @@ -3206,11 +3584,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(count(count by (element) (siddhi_aggregation_throughput_total{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"})))", "instant": true, "refId": "A" @@ -3220,12 +3602,14 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 76 + "y": 75 }, "id": 465, "options": { @@ -3233,11 +3617,21 @@ "mode": "html" }, "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -3245,15 +3639,16 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -3301,8 +3696,10 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3361,7 +3758,7 @@ "h": 7, "w": 19, "x": 0, - "y": 78 + "y": 76 }, "id": 416, "options": { @@ -3378,7 +3775,9 @@ "repeatDirection": "h", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_ondemandquery_latency{job=~\"$job\", instance=~\"$instance\",app=~\"$application\"}) by (app)", "format": "table", @@ -3410,12 +3809,14 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 7, "w": 5, "x": 19, - "y": 78 + "y": 76 }, "id": 463, "links": [], @@ -3432,6 +3833,9 @@ "tags": [], "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "", "refId": "A" } @@ -3440,45 +3844,45 @@ "type": "dashlist" } ], - "refresh": "", - "schemaVersion": 32, - "style": "dark", + "refresh": "30s", + "schemaVersion": 39, "tags": [ - "prometheus", - "siddhi" + "wso2-streaming-integrator-integration" ], "templating": { "list": [ { "current": { "selected": false, - "text": "Prometheus", - "value": "Prometheus" + "text": "default", + "value": "default" }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { + "allValue": ".+", "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total,job)", "hide": 2, "includeAll": true, - "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -3486,7 +3890,7 @@ "query": "label_values(siddhi_stream_throughput_total,job)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3496,17 +3900,19 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\"},instance)", "hide": 0, "includeAll": true, - "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -3524,6 +3930,7 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": true, "text": [ @@ -3533,11 +3940,12 @@ "$__all" ] }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"},app)", "hide": 0, "includeAll": true, - "allValue":".+", "label": "Application", "multi": true, "name": "application", @@ -3546,7 +3954,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"},app)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3556,16 +3964,18 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, type)", "hide": 2, "includeAll": true, - "allValue":".+", "label": "Type", "multi": true, "name": "type", @@ -3574,7 +3984,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, type)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3584,16 +3994,18 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, metrics)", "hide": 2, "includeAll": true, - "allValue":".+", "label": "Metrics", "multi": true, "name": "metrics", @@ -3602,7 +4014,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, metrics)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3612,16 +4024,18 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, element)", "hide": 2, "includeAll": true, - "allValue":".+", "label": "Element", "multi": true, "name": "element", @@ -3630,7 +4044,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, element)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3640,16 +4054,18 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": false, - "text": "0", - "value": "0" + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" }, - "datasource": "$datasource", "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, quantile)", "hide": 2, "includeAll": true, - "allValue":".+", "label": "Quantile", "multi": true, "name": "quantile", @@ -3658,7 +4074,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, quantile)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3670,10 +4086,12 @@ { "current": { "selected": false, - "text": "contains", - "value": "contains" + "text": "All", + "value": "$__all" + }, + "datasource": { + "uid": "$datasource" }, - "datasource": "$datasource", "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, operation)", "hide": 2, "includeAll": true, @@ -3685,7 +4103,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\", instance=~\"$instance\"}, operation)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -3693,11 +4111,11 @@ "tagsQuery": "", "type": "query", "useTags": false - } + } ] }, "time": { - "from": "now-6h", + "from": "now-30m", "to": "now" }, "timepicker": { @@ -3718,6 +4136,6 @@ "timezone": "", "title": "WSO2 Siddhi Overall Statistics", "uid": "262-rPbWz", - "version": 11, + "version": 2, "weekStart": "" -} +} \ No newline at end of file diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_query.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_query.json index b234faf62..a594acfbe 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_query.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_query.json @@ -531,7 +531,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -556,7 +556,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -588,7 +588,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_server.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_server.json index 767bc5243..4938c1500 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_server.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_server.json @@ -1900,7 +1900,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -1925,7 +1925,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -1957,7 +1957,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_sink.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_sink.json index 0988b3bb4..83838eeb7 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_sink.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_sink.json @@ -572,7 +572,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -597,7 +597,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -629,7 +629,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_source.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_source.json index 78ed28d5f..4241fcb54 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_source.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_source.json @@ -587,7 +587,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -612,7 +612,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -644,7 +644,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_stream.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_stream.json index ea0845ed4..fbf908d1a 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_stream.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_stream.json @@ -404,7 +404,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -425,7 +425,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -453,7 +453,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/Siddhi_table.json b/wso2-streaming-integrator-mixin/dashboards/Siddhi_table.json index 57c4abb4f..fa9bda36c 100644 --- a/wso2-streaming-integrator-mixin/dashboards/Siddhi_table.json +++ b/wso2-streaming-integrator-mixin/dashboards/Siddhi_table.json @@ -537,7 +537,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -562,7 +562,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -594,7 +594,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], diff --git a/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_apps.json b/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_apps.json index 21fcf2220..fa16eb0e0 100644 --- a/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_apps.json +++ b/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_apps.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -21,14 +24,15 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 2, - "id": 80, - "iteration": 1642009511908, + "id": 8, "links": [], "liveNow": false, "panels": [ { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -37,11 +41,21 @@ }, "id": 23, "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Overview", "type": "row" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -96,12 +110,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_total_reads{job=~\"$job\",instance=~\"$instance\",app=~\"$app\", type=~\"file|cdc|kafka|http\"}) ", "format": "time_series", @@ -115,13 +132,18 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -133,6 +155,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 2, "pointSize": 5, @@ -230,15 +253,20 @@ "max" ], "displayMode": "table", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "pluginVersion": "8.3.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum by (app) (rate(siddhi_total_reads{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval]))", "instant": false, "intervalFactor": 1, @@ -246,6 +274,9 @@ "refId": "B" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(siddhi_total_reads{job=~\"$job\",instance=~\"$instance\",app=~\"$app\", type=\"file\"}[$__rate_interval])", "hide": true, "instant": false, @@ -254,6 +285,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum by (app) (rate(siddhi_total_writes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval]))", "instant": false, "intervalFactor": 1, @@ -261,6 +295,9 @@ "refId": "C" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "rate(siddhi_total_writes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\", type=~\"rdbms\"}[$__rate_interval])", "hide": true, "instant": false, @@ -273,7 +310,9 @@ "type": "timeseries" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -329,12 +368,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(siddhi_total_reads{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval]))", "format": "time_series", @@ -349,7 +391,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -404,12 +448,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_total_writes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\", type=~\"file|rdbms|kafka|http\"})", "format": "time_series", @@ -424,7 +471,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -480,11 +529,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(rate(siddhi_total_writes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval]))", "format": "time_series", "hide": false, @@ -496,7 +549,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Total errors occurred while consuming & publishing events", "fieldConfig": { "defaults": { @@ -552,12 +607,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "(sum(siddhi_store_rdbms_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_file_source_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_cdc_source_listening_mode_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_cdc_source_polling_mode_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_file_sink_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_kafka_source_error_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_kafka_sink_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0))", "format": "time_series", @@ -572,7 +630,9 @@ "type": "stat" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "description": "Number of dropped events due to invalid mapping.", "fieldConfig": { "defaults": { @@ -628,11 +688,15 @@ "fields": "", "values": false }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "(sum(siddhi_total_reads{job=~\"$job\",instance=~\"$instance\",app=~\"$app\", type=~\"file|cdc|kafka\"}) or vector(0)) - ((sum(siddhi_file_source_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_cdc_source_listening_mode_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) +(sum(siddhi_cdc_source_polling_mode_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0)) + (sum(siddhi_kafka_source_per_topic_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) or vector(0))) ", "format": "time_series", "hide": false, @@ -645,7 +709,9 @@ }, { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -654,11 +720,21 @@ }, "id": 4, "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Sources", "type": "row" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -667,15 +743,30 @@ }, "id": 46, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "

HTTP

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -683,7 +774,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -837,8 +931,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -898,7 +995,9 @@ }, "id": 52, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -907,10 +1006,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_source_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -921,7 +1022,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(siddhi_http_source_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval])) by (url, stream_name)", "format": "table", @@ -932,7 +1035,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_source_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -942,7 +1047,9 @@ "refId": "G" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_source_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -952,7 +1059,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_source_request_size{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name) / sum(siddhi_http_source_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -985,7 +1094,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -1001,15 +1112,30 @@ } ], "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "

Kafka

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1017,7 +1143,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1068,7 +1197,7 @@ "id": "custom.align" } ] - }, + }, { "matcher": { "id": "byName", @@ -1122,8 +1251,11 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -1271,8 +1403,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1364,7 +1498,9 @@ }, "id": 45, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -1373,33 +1509,48 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_kafka_source_read_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", "instant": true, "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(rate(siddhi_kafka_source_read_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval])) by (stream_id)", "format": "table", "instant": true, "refId": "D" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_kafka_source_per_stream_last_message_consumed_at{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", "instant": true, "refId": "C" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_kafka_source_per_stream_with_partition_consumer_lag{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id) / 1000", "format": "table", "instant": true, "refId": "G" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_kafka_source_error_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", "instant": true, @@ -1428,7 +1579,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -1437,15 +1590,30 @@ }, "id": 50, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "

File

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1453,7 +1621,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1658,8 +1829,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -1799,8 +1973,10 @@ "value": "none" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -1817,7 +1993,9 @@ }, "id": 25, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -1826,10 +2004,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_source_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_name, mode, stream_name, file_path, app)", "format": "table", @@ -1840,7 +2020,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_source_file_size{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -1851,7 +2033,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_source_file_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -1862,7 +2046,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_source_elapse_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -1873,7 +2059,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_source_started_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -1884,7 +2072,9 @@ "refId": "E" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum((siddhi_file_source_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} - ignoring(file_name, mode, stream_name)siddhi_file_source_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) + siddhi_file_source_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -1917,7 +2107,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -1926,15 +2118,30 @@ }, "id": 28, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "\n

CDC

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -1942,7 +2149,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -1979,8 +2189,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -2269,8 +2482,10 @@ "value": "none" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2287,7 +2502,9 @@ }, "id": 31, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2296,10 +2513,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_listening_mode_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url, A_db_type, C_database, D_tablename, B_host, app)", "format": "table", @@ -2310,7 +2529,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(siddhi_cdc_source_listening_mode_events_per_table{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval])) by (db_url)", "format": "table", @@ -2321,7 +2542,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_listening_mode_db_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2332,7 +2555,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_listening_mode_idle_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2343,7 +2568,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_listening_mode_last_receive_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2354,7 +2581,9 @@ "refId": "E" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_listening_mode_events_per_table{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} - ignoring(tablename)siddhi_cdc_source_listening_mode_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} + siddhi_cdc_source_listening_mode_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2387,7 +2616,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -2395,7 +2626,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -2432,8 +2666,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -2605,8 +2842,10 @@ "value": "none" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -2740,7 +2979,9 @@ }, "id": 39, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2749,10 +2990,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url, A_db_type, C_database, D_tablename, B_host, app)", "format": "table", @@ -2763,7 +3006,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_events_in_last_polling_interval{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2774,7 +3019,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_db_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2785,7 +3032,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_idle_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2796,7 +3045,9 @@ "refId": "F" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_last_receive_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2807,7 +3058,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_cdc_source_polling_mode_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} - ignoring(A_db_type, B_host, C_database, D_tablename)siddhi_cdc_source_polling_mode_total_valid_events_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} + siddhi_cdc_source_polling_mode_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", @@ -2841,7 +3094,9 @@ }, { "collapsed": false, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 1, "w": 24, @@ -2850,11 +3105,21 @@ }, "id": 8, "panels": [], + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "title": "Destinations", "type": "row" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -2863,15 +3128,30 @@ }, "id": 47, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "\n

HTTP

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -2879,7 +3159,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -3006,8 +3289,10 @@ "value": "locale" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3076,8 +3361,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -3160,7 +3448,9 @@ }, "id": 55, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -3169,10 +3459,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_sink_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -3183,7 +3475,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_sink_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -3194,7 +3488,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(siddhi_http_sink_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval])) by (url, stream_name)", "format": "table", @@ -3205,7 +3501,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_sink_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -3215,7 +3513,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_sink_request_size{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name) / sum(siddhi_http_sink_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -3225,7 +3525,9 @@ "refId": "E" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_http_sink_average_latency{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (url, stream_name)", "format": "table", @@ -3257,7 +3559,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -3266,15 +3570,30 @@ }, "id": 35, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "\n

Kafka

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -3282,7 +3601,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -3349,8 +3671,10 @@ "value": "short" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3372,8 +3696,10 @@ "value": "percentunit" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -3568,7 +3894,9 @@ }, "id": 49, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -3577,10 +3905,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_kafka_sink_current_offset{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", @@ -3590,7 +3920,9 @@ "refId": "F" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_kafka_sink_write_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", @@ -3600,7 +3932,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(rate(siddhi_kafka_sink_write_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}[$__rate_interval])) by (stream_id)", "format": "table", @@ -3610,7 +3944,9 @@ "refId": "G" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "avg(siddhi_kafka_sink_per_stream_last_message_size_in_bytes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", @@ -3620,7 +3956,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "avg(siddhi_kafka_sink_per_stream_last_message_latency_in_millis{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", @@ -3630,7 +3968,9 @@ "refId": "E" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_kafka_sink_error_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id) ", "format": "table", @@ -3640,7 +3980,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "(sum(siddhi_kafka_sink_error_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id) / sum(siddhi_kafka_sink_write_count_per_stream{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)) ", "format": "table", @@ -3650,7 +3992,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_kafka_sink_per_stream_last_message_published_at{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (stream_id)", "format": "table", @@ -3682,7 +4026,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -3691,15 +4037,30 @@ }, "id": 53, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "\n

File

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "fieldConfig": { "defaults": { "color": { @@ -3707,7 +4068,10 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { @@ -3810,7 +4174,7 @@ "id": "custom.align" } ] - }, + }, { "matcher": { "id": "byName", @@ -3922,8 +4286,11 @@ "value": 2 }, { - "id": "custom.displayMode", - "value": "color-background" + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } }, { "id": "custom.align" @@ -4063,8 +4430,10 @@ "value": "none" }, { - "id": "custom.displayMode", - "value": "color-text" + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } }, { "id": "custom.align" @@ -4081,7 +4450,9 @@ }, "id": 33, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -4090,10 +4461,12 @@ }, "showHeader": true }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", "targets": [ { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_event_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_name, mode, stream_name, file_path,app)", "format": "table", @@ -4104,7 +4477,9 @@ "refId": "B" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_file_size{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -4115,7 +4490,9 @@ "refId": "C" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_file_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -4126,7 +4503,9 @@ "refId": "D" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_lines_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -4136,7 +4515,9 @@ "refId": "A" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_elapsed_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (file_path)", "format": "table", @@ -4146,7 +4527,9 @@ "refId": "E" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "exemplar": false, "expr": "sum(siddhi_file_sink_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} + siddhi_file_sink_dropped_events{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"} ) by (file_path)", "format": "table", @@ -4178,7 +4561,9 @@ "type": "table" }, { - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "gridPos": { "h": 2, "w": 24, @@ -4187,276 +4572,406 @@ }, "id": 34, "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, "content": "\n

RDBMS

\n", "mode": "html" }, - "pluginVersion": "8.3.3", + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "refId": "A" + } + ], "transparent": true, "type": "text" }, { - "columns": [], - "datasource": "$datasource", - "fontSize": "120%", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 95 - }, - "id": 37, - "pageSize": 5, - "showHeader": true, - "sort": { - "col": 2, - "desc": true + "datasource": { + "uid": "$datasource" }, - "styles": [ - { - "alias": "Status", - "align": "auto", - "colorMode": "cell", - "colors": [ - "#37872D", - "#FF780A", - "#C4162A" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #B", - "thresholds": [ - "1", - "2" - ], - "type": "string", - "unit": "locale", - "valueMaps": [ - { - "text": "Processing", - "value": "0" - }, - { - "text": "Idle", - "value": "1" - }, - { - "text": "Error", - "value": "2" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - { - "text": "Connected", - "value": "-1" - } - ] - }, - { - "alias": "Total Changes", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "mappingType": 1, - "pattern": "Value #A", - "thresholds": [], - "type": "number", - "unit": "none" - }, - { - "alias": "", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Time", - "thresholds": [], - "type": "hidden", - "unit": "short" - }, - { - "alias": "Database Type", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "A_db_type", - "thresholds": [], - "type": "string", - "unit": "short" - }, - { - "alias": "Database URL", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "link": false, - "linkTargetBlank": true, - "linkTooltip": "CDC Listening Mode:$__cell", - "linkUrl": "/d/nhe5jbqWk/siddhi-io-cdc-listening-mode?orgId=1&var-app=$app&var-db_url=$__cell&from=now-30m&to=now&refresh=5s", - "mappingType": 1, - "pattern": "db_url", - "thresholds": [], - "type": "hidden", - "unit": "short" - }, - { - "alias": "Last Change On", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "LT MMMM D, YYYY", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #E", - "thresholds": [], - "type": "date", - "unit": "short" - }, - { - "alias": "Idle Time", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 0, - "mappingType": 1, - "pattern": "Value #C", - "preserveFormat": false, - "sanitize": false, - "thresholds": [], - "type": "number", - "unit": "ms" - }, - { - "alias": "Table", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "link": true, - "linkTargetBlank": true, - "linkTooltip": "RDBMS Statistics Dashboard/$__cell_5", - "linkUrl": "/d/3tPjCPgMz/wso2-streaming-integrator-rdbms-statistics?var-app=$app&orgId=1&refresh=5s&from=now-30m&to=now", - "mappingType": 1, - "pattern": "D_tablename", - "thresholds": [], - "type": "string", - "unit": "short" - }, - { - "alias": "Database", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "C_database", - "thresholds": [], - "type": "number", - "unit": "short" - }, - { - "alias": "JDBC URL", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "B_shortenUrl", - "preserveFormat": false, - "sanitize": false, - "thresholds": [], - "type": "string", - "unit": "short" - }, - { - "alias": "Processing Time", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 0, - "mappingType": 1, - "pattern": "Value #D", - "thresholds": [], - "type": "number", - "unit": "ms" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } }, - { - "alias": "", - "align": "auto", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value #B" + }, + "properties": [ + { + "id": "displayName", + "value": "Status" + }, + { + "id": "unit", + "value": "locale" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-background" + } + }, + { + "id": "custom.align" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "#37872D", + "value": null + }, + { + "color": "#FF780A", + "value": 1 + }, + { + "color": "#C4162A", + "value": 2 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #A" + }, + "properties": [ + { + "id": "displayName", + "value": "Total Changes" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "A_db_type" + }, + "properties": [ + { + "id": "displayName", + "value": "Database Type" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "db_url" + }, + "properties": [ + { + "id": "displayName", + "value": "Database URL" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #E" + }, + "properties": [ + { + "id": "displayName", + "value": "Last Change On" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "unit", + "value": "time: LT MMMM D, YYYY" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #C" + }, + "properties": [ + { + "id": "displayName", + "value": "Idle Time" + }, + { + "id": "unit", + "value": "ms" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "D_tablename" + }, + "properties": [ + { + "id": "displayName", + "value": "Table" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "links", + "value": [ + { + "targetBlank": true, + "title": "RDBMS Statistics Dashboard/$__cell_5", + "url": "/d/3tPjCPgMz/wso2-streaming-integrator-rdbms-statistics?var-app=$app&orgId=1&refresh=5s&from=now-30m&to=now" + } + ] + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "C_database" + }, + "properties": [ + { + "id": "displayName", + "value": "Database" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "B_shortenUrl" + }, + "properties": [ + { + "id": "displayName", + "value": "JDBC URL" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #D" + }, + "properties": [ + { + "id": "displayName", + "value": "Processing Time" + }, + { + "id": "unit", + "value": "ms" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "app" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #F" + }, + "properties": [ + { + "id": "displayName", + "value": "Total Errors" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 95 + }, + "id": 37, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "app", - "thresholds": [], - "type": "hidden", - "unit": "short" + "show": false }, - { - "alias": "Total Errors", - "align": "auto", - "colorMode": "value", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 0, - "mappingType": 1, - "pattern": "Value #F", - "thresholds": [], - "type": "number", - "unit": "none" - } - ], + "showHeader": true + }, + "pluginVersion": "10.2.3", "targets": [ { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_total_writes{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url, A_db_type, C_database, D_tablename, B_shortenUrl, app)", "format": "table", "hide": false, @@ -4464,6 +4979,9 @@ "refId": "A" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_db_status{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", "hide": false, @@ -4471,6 +4989,9 @@ "refId": "B" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_idle_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", "hide": false, @@ -4478,12 +4999,18 @@ "refId": "C" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_processing_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", "instant": true, "refId": "D" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_last_change_time{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", "hide": false, @@ -4491,6 +5018,9 @@ "refId": "E" }, { + "datasource": { + "uid": "$datasource" + }, "expr": "sum(siddhi_store_rdbms_total_error_count{job=~\"$job\",instance=~\"$instance\",app=~\"$app\"}) by (db_url)", "format": "table", "hide": false, @@ -4499,35 +5029,64 @@ } ], "title": "RDBMS Statistics", - "transform": "table", - "type": "table-old" + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + }, + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "A_db_type", + "B_shortenUrl", + "C_database", + "D_tablename", + "db_url", + "Value #A", + "Value #B", + "Value #C", + "Value #D", + "Value #E", + "Value #F" + ] + } + } + } + ], + "type": "table" } ], - "refresh": "5s", - "schemaVersion": 32, - "style": "dark", - "tags": [], + "refresh": "30s", + "schemaVersion": 39, + "tags": [ + "wso2-streaming-integrator-integration" + ], "templating": { "list": [ { "current": { "selected": false, - "text": "Prometheus", - "value": "Prometheus" + "text": "default", + "value": "default" }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "refresh": 1, - "regex": "", + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", "skipUrlSync": false, "type": "datasource" }, { + "allValue": ".+", "current": { "selected": true, "text": [ @@ -4537,12 +5096,13 @@ "$__all" ] }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total,job)", "hide": 0, "includeAll": true, - "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -4560,6 +5120,7 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": true, "text": [ @@ -4569,12 +5130,13 @@ "$__all" ] }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\"},instance)", "hide": 0, "includeAll": true, - "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [], @@ -4592,6 +5154,7 @@ "useTags": false }, { + "allValue": ".+", "current": { "selected": true, "text": [ @@ -4601,11 +5164,12 @@ "$__all" ] }, - "datasource": "$datasource", + "datasource": { + "uid": "$datasource" + }, "definition": "label_values(siddhi_stream_throughput_total{job=~\"$job\",instance=~\"$instance\"}, app)", "hide": 0, "includeAll": true, - "allValue":".+", "label": "App Name", "multi": true, "name": "app", @@ -4614,7 +5178,7 @@ "query": "label_values(siddhi_stream_throughput_total{job=~\"$job\",instance=~\"$instance\"}, app)", "refId": "StandardVariableQuery" }, - "refresh": 1, + "refresh": 2, "regex": "", "skipUrlSync": false, "sort": 0, @@ -4646,6 +5210,6 @@ "timezone": "", "title": "WSO2 Streaming Integrator App Statistics", "uid": "JrLwmmmGz", - "version": 3, + "version": 2, "weekStart": "" -} +} \ No newline at end of file diff --git a/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_overall.json b/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_overall.json index b874f369d..e2badd9c4 100644 --- a/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_overall.json +++ b/wso2-streaming-integrator-mixin/dashboards/StreamingIntegrator_overall.json @@ -625,7 +625,7 @@ }, "hide": 0, "includeAll": false, - "label": "Data Source", + "label": "Data source", "multi": false, "name": "datasource", "options": [], @@ -650,7 +650,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "job", + "label": "Job", "multi": true, "name": "job", "options": [], @@ -682,7 +682,7 @@ "hide": 0, "includeAll": true, "allValue":".+", - "label": "instance", + "label": "Instance", "multi": true, "name": "instance", "options": [],