diff --git a/alloy-modules/compose/integrations/alloy.alloy b/alloy-modules/compose/integrations/alloy.alloy new file mode 100644 index 00000000..0f708943 --- /dev/null +++ b/alloy-modules/compose/integrations/alloy.alloy @@ -0,0 +1,101 @@ +/* +Module Components: component_alloy +*/ + +declare "component_alloy" { + + /***************************************************************** + * ARGUMENTS + *****************************************************************/ + argument "forward_to" { + comment = "Must be a list(MetricssReceiver) where collected metrics should be forwarded to" + } + + argument "job_label" { + optional = true + default = "integrations/alloy-check" + } + + argument "instance_name" { + optional = true + } + + argument "keep_metrics" { + optional = true + default = "(prometheus_target_sync_length_seconds_sum|prometheus_target_scrapes_.*|prometheus_target_interval.*|prometheus_sd_discovered_targets|alloy_build.*|prometheus_remote_write_wal_samples_appended_total|process_start_time_seconds)" + } + + argument "scrape_interval" { + comment = "How often to scrape metrics from the targets (default: 60s)" + optional = true + default = "60s" + } + + argument "scrape_timeout" { + comment = "How long before a scrape times out (default: 10s)" + optional = true + default = "10s" + } + + /*************************************************************** + * Integrations cAdvisor + ****************************************************************/ + prometheus.exporter.self "integrations_alloy" { } + + /*************************************************************** + * Discovery Relabelings (pre-scrape) + ****************************************************************/ + discovery.relabel "integrations_alloy" { + targets = prometheus.exporter.unix.integrations_alloy.targets + + rule { + target_label = "job" + replacement = argument.job_label.value + } + + rule { + target_label = "instance" + replacement = coalesce(argument.instance_name.value, constants.hostname) + } + + rule { + target_label = "alloy_hostname" + replacement = constants.hostname + } + } + + /*************************************************************** + * Prometheus Scrape Integrations Targets + ****************************************************************/ + prometheus.scrape "integrations_alloy" { + targets = concat( + discovery.relabel.integrations_alloy.output, + ) + + enable_protobuf_negotiation = true + scrape_classic_histograms = true + + scrape_interval = argument.scrape_interval.value + scrape_timeout = argument.scrape_timeout.value + + clustering { + enabled = true + } + + forward_to = [prometheus.relabel.integrations_alloy.receiver] + } + + /*************************************************************** + * Prometheus Metric Relabelings (post-scrape) + ****************************************************************/ + prometheus.relabel "integrations_alloy" { + forward_to = argument.forward_to.value + + // keep only metrics that match the keep_metrics regex + rule { + source_labels = ["__name__"] + regex = argument.keep_metrics.value + action = "keep" + } + } +} diff --git a/alloy-modules/compose/integrations/cadvisor.alloy b/alloy-modules/compose/integrations/cadvisor.alloy index a5dd0836..caa8b0b1 100644 --- a/alloy-modules/compose/integrations/cadvisor.alloy +++ b/alloy-modules/compose/integrations/cadvisor.alloy @@ -13,7 +13,7 @@ declare "component_cadvisor" { argument "job_label" { optional = true - default = "integrations/cadvisor" + default = "integrations/docker/cadvisor" } argument "instance_name" { @@ -60,8 +60,6 @@ declare "component_cadvisor" { allowlisted_container_labels = [ "com.docker.compose.project", "com.docker.compose.service", - "metrics.grafana.com/job", - "prometheus.io/job", ] // only show stats for docker containers @@ -123,29 +121,17 @@ declare "component_cadvisor" { prometheus.relabel "integrations_cadvisor" { forward_to = argument.forward_to.value - // drop unused metric label - rule { - action = "labeldrop" - regex = "id" - } - - // keep only metrics that match the keep_metrics regex - rule { - source_labels = ["__name__"] - regex = argument.keep_metrics.value - action = "keep" - } + // rule { + // action = "labeldrop" + // regex = "id" + // } - // set a default job label to be the namespace/service_name - rule { - action = "replace" - source_labels = [ - "container_label_com_docker_compose_service", - ] - regex = "^(?:;*)?([^;]+).*$" - replacement = argument.namespace.value + "/$1" - target_label = "job" - } + // // keep only metrics that match the keep_metrics regex + // rule { + // source_labels = ["__name__"] + // regex = argument.keep_metrics.value + // action = "keep" + // } rule { action = "replace" @@ -166,18 +152,5 @@ declare "component_cadvisor" { replacement = "$1" target_label = "container" } - - // allow resources to declare their the job label value to use when collecting their metrics, the default value is "", - rule { - action = "replace" - source_labels = [ - "container_label_metrics_agent_grafana_com_job", - "container_label_prometheus_io_job", - ] - separator = ";" - regex = "^(?:;*)?([^;]+).*$" - replacement = "$1" - target_label = "job" - } } } diff --git a/alloy-modules/compose/integrations/memcached.alloy b/alloy-modules/compose/integrations/memcached.alloy index fbf7fecc..584f2e4c 100644 --- a/alloy-modules/compose/integrations/memcached.alloy +++ b/alloy-modules/compose/integrations/memcached.alloy @@ -25,7 +25,7 @@ declare "component_memcached" { argument "job_label" { optional = true - default = "integrations/memcached" + default = "integrations/docker/memcached" } argument "instance_name" { diff --git a/alloy-modules/compose/integrations/node-exporter.alloy b/alloy-modules/compose/integrations/node-exporter.alloy index de7754d5..e5680d14 100644 --- a/alloy-modules/compose/integrations/node-exporter.alloy +++ b/alloy-modules/compose/integrations/node-exporter.alloy @@ -13,7 +13,7 @@ declare "component_node_exporter" { argument "job_label" { optional = true - default = "integrations/node-exporter" + default = "integrations/docker/node-exporter" } argument "instance_name" { @@ -22,7 +22,7 @@ declare "component_node_exporter" { argument "keep_metrics" { optional = true - default = "(up|node_exporter_build_info|node_time_seconds|node_boot_time_seconds|node_load.*|node_cpu.*|node_memory.*|node_disk.*|node_filesystem.*|process_cpu_seconds_total|process_resident_memory_bytes)" + default = "(up|node_uname_info|node_exporter_build_info|node_time_seconds|node_boot_time_seconds|node_load.*|node_cpu.*|node_memory.*|node_disk.*|node_filesystem.*|process_cpu_seconds_total|process_resident_memory_bytes)" } argument "scrape_interval" { diff --git a/alloy-modules/compose/logs/keep-labels.alloy b/alloy-modules/compose/logs/keep-labels.alloy index 46f1217c..3b40f551 100644 --- a/alloy-modules/compose/logs/keep-labels.alloy +++ b/alloy-modules/compose/logs/keep-labels.alloy @@ -22,6 +22,7 @@ declare "keep_labels" { "cluster", "namespace", "pod", + "instance", "container", "component", "env", diff --git a/alloy-modules/compose/logs/labels-scrape.alloy b/alloy-modules/compose/logs/labels-scrape.alloy index ba083ab9..80ca6eb3 100644 --- a/alloy-modules/compose/logs/labels-scrape.alloy +++ b/alloy-modules/compose/logs/labels-scrape.alloy @@ -20,16 +20,21 @@ declare "labels_scrape" { comment = "Must be a list(LogsReceiver) where collected logs should be forwarded to" } + argument "job_label" { + optional = true + default = "integrations/docker/cadvisor" + } + + argument "instance_name" { + optional = true + } + argument "label_prefix" { comment = "The label_prefix to use Auto-Scraping (default: logs.grafana.com)" default = "logs.grafana.com" optional = true } - /* - Hidden Arguments - These arguments are used to set reusable variables to avoid repeating logic - */ argument "__sd_label" { optional = true comment = "The logic is used to transform the label_prefix argument into a valid label name by removing unsupported characters." @@ -102,14 +107,14 @@ declare "labels_scrape" { rule { action = "replace" source_labels = ["__meta_docker_container_id"] - replacement = "integrations/docker-desktop" + replacement = argument.job_label.value target_label = "job" } rule { action = "replace" source_labels = ["__meta_docker_container_id"] - replacement = constants.hostname + replacement = coalesce(argument.instance_name.value, constants.hostname) target_label = "instance" } @@ -161,13 +166,6 @@ declare "labels_scrape" { target_label = "namespace" } - // set a source label - rule { - action = "replace" - replacement = "docker" - target_label = "source" - } - rule { replacement = "docker" target_label = "tmp_container_runtime" @@ -179,6 +177,7 @@ declare "labels_scrape" { targets = discovery.relabel.label_logs_filter.output relabel_rules = discovery.relabel.label_logs_filter.rules + labels = {"source" = "docker"} forward_to = [loki.process.parse.receiver] } diff --git a/alloy-modules/compose/metrics/integrations-scrape.alloy b/alloy-modules/compose/metrics/integrations-scrape.alloy index 86625df6..ac5becf7 100644 --- a/alloy-modules/compose/metrics/integrations-scrape.alloy +++ b/alloy-modules/compose/metrics/integrations-scrape.alloy @@ -40,7 +40,6 @@ declare "integrations_scrape" { integrate.component_cadvisor "default" { forward_to = argument.forward_to.value - job_label = "integrations/docker-desktop" scrape_interval = coalesce(argument.scrape_interval.value, "60s") scrape_timeout = coalesce(argument.scrape_timeout.value, "10s") } @@ -51,7 +50,6 @@ declare "integrations_scrape" { integrate.component_node_exporter "default" { forward_to = argument.forward_to.value - job_label = "integrations/docker-desktop" scrape_interval = coalesce(argument.scrape_interval.value, "60s") scrape_timeout = coalesce(argument.scrape_timeout.value, "10s") } @@ -62,11 +60,10 @@ declare "integrations_scrape" { integrate.component_memcached "primary" { forward_to = argument.forward_to.value - job_label = "integrations/docker/memcached" - instance_name = "primary" memcached_address = "memcached:11211" memcached_timeout = "5s" + instance_name = "primary" scrape_interval = coalesce(argument.scrape_interval.value, "60s") scrape_timeout = coalesce(argument.scrape_timeout.value, "10s") } diff --git a/docker-compose/common/compose-include/mimir.yaml b/docker-compose/common/compose-include/mimir.yaml index cb26fd30..16d297f9 100644 --- a/docker-compose/common/compose-include/mimir.yaml +++ b/docker-compose/common/compose-include/mimir.yaml @@ -16,7 +16,7 @@ services: - -config.expand-env=true healthcheck: test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8080/ready || exit 1" ] - interval: 2s + interval: 3s timeout: 1s retries: 15 # expose 38080 port so we can directly access mimir inside container diff --git a/monitoring-mixins/docker-mixin/Makefile b/monitoring-mixins/docker-mixin/Makefile new file mode 100644 index 00000000..0c6cbc61 --- /dev/null +++ b/monitoring-mixins/docker-mixin/Makefile @@ -0,0 +1,65 @@ +.DEFAULT_GOAL := help + +include ../../.bingo/Variables.mk + +# path to jsonnetfmt +JSONNET_FMT := $(JSONNETFMT) -n 2 --max-blank-lines 2 --string-style s --comment-style s +# path to the mixin +MIXIN_OUT_PATH := deploy + +CURRENT_DIR = $(notdir $(shell pwd)) + +.PHONY: fmt +fmt: ## Format the mixin files + @find . -type f -name '*.libsonnet' | xargs -n 1 -- $(JSONNET_FMT) -i + +.PHONY: update +update: $(JB) ## update mixin + $(JB) update + +define build_mixin_func + $(eval $@_MIXIN_OUTPUT = $(1)) + @mkdir -p "${$@_MIXIN_OUTPUT}"; \ + find "${$@_MIXIN_OUTPUT}" ! -name "kustomization.yaml" ! -name "prometheus-alerts.yaml" ! -name "prometheus-rules.yaml" -type f -delete + @$(MIXTOOL) generate all --output-alerts "${$@_MIXIN_OUTPUT}/alerts.yaml" --output-rules "${$@_MIXIN_OUTPUT}/rules.yaml" --directory "${$@_MIXIN_OUTPUT}/dashboards_out" "${$@_MIXIN_OUTPUT}.libsonnet" + @mv ${$@_MIXIN_OUTPUT}/alerts.yaml ${$@_MIXIN_OUTPUT}/${CURRENT_DIR}-alerts.yaml + @mv ${$@_MIXIN_OUTPUT}/rules.yaml ${$@_MIXIN_OUTPUT}/${CURRENT_DIR}-rules.yaml +endef + + +.PHONY: build +build: $(MIXTOOL) ## Generates the mixin files + $(foreach mixin,$(MIXIN_OUT_PATH),$(call build_mixin_func, $(mixin))) + +.PHONY: check +check: $(MIXTOOL) build fmt ## Build, fmt and check the mixin files + @../../tools/find-diff-or-untracked.sh . "$(MIXIN_OUT_PATH)" || (echo "Please build and fmt mixin by running 'make build fmt'" && false); \ + # jb install && \ + # $(MIXTOOL) lint mixin.libsonnet + +##@ Dashboards & k8s + +.PHONY: manifests +manifests: $(KUSTOMIZE) build ## Generates dashboards for k8s + $(KUSTOMIZE) build deploy > deploy/manifests/k8s-all-in-one.yaml + +# NOTE: dashboards_out has been deprecated, please use build instead +dashboards_out: + @mkdir -p deploy/dashboards_out deploy/manifests + jsonnet -J vendor -e '(import "mixin.libsonnet").grafanaDashboards' -m deploy/dashboards_out + +prom_alerts.yaml: + jsonnet -J vendor -S -e 'std.manifestYamlDoc((import "mixin.libsonnet").prometheusAlerts)' > deploy/$@ + +prom_rules.yaml: + jsonnet -J vendor -S -e 'std.manifestYamlDoc((import "mixin.libsonnet").prometheusRules)' > deploy/$@ + +##@ General + +.PHONY: help +help: ## Display this help. Thanks to https://www.thapaliya.com/en/writings/well-documented-makefiles/ +ifeq ($(OS),Windows_NT) + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \n"} /^[a-zA-Z_-]+:.*?##/ { printf " %-40s %s\n", $$1, $$2 } /^##@/ { printf "\n%s\n", substr($$0, 5) } ' $(MAKEFILE_LIST) +else + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-40s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) +endif diff --git a/monitoring-mixins/docker-mixin/deploy.libsonnet b/monitoring-mixins/docker-mixin/deploy.libsonnet new file mode 100644 index 00000000..3e1f8e2b --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy.libsonnet @@ -0,0 +1,10 @@ +(import 'mixin.libsonnet') + { + // Config overrides + _config+:: { + dashboardTags: ['docker'], + dashboardPeriod: 'now-1h', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + enableLokiLogs: true, + }, +} diff --git a/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker-logs.json b/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker-logs.json new file mode 100644 index 00000000..c6ef42d3 --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker-logs.json @@ -0,0 +1,754 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [ + "docker" + ], + "targetBlank": false, + "title": "Docker Dashboards", + "type": "dashboards", + "url": "" + } + ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 2 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Overview", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines including errors and warnings.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(192, 216, 255)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 2 + }, + "id": 3, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}[$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Log Lines", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines of level: warning.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 152, 48)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 2 + }, + "id": 4, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\" [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Warnings", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines of level: error.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(242, 73, 92)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 2 + }, + "id": 5, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Errors", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Percentage of log lines with level: Error out of total log lines.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 166, 176)", + "value": 0 + }, + { + "color": "rgb(255, 115, 131)", + "value": 25 + }, + { + "color": "rgb(196, 22, 42)", + "value": 50 + } + ] + }, + "unit": "percent" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 2 + }, + "id": 6, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum( count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]) ) / sum( count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} [$__interval]) )", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Error Percentage", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of bytes for log lines including errors and warnings.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(184, 119, 217)", + "value": 0 + } + ] + }, + "unit": "bytes" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 2 + }, + "id": 7, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(bytes_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Bytes Used", + "transparent": false, + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 50, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + } + }, + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "displayName", + "value": "Lines" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "displayName", + "value": "Warnings" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "displayName", + "value": "Errors" + }, + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 8, + "interval": "10s", + "maxDataPoints": 25, + "options": { + "barRadius": 0.25, + "barWidth": 0.69999999999999996, + "groupWidth": 0.5, + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom" + }, + "orientation": "auto", + "showValue": "never", + "stacking": "none", + "tooltip": { + "mode": "multi", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}[$__interval]))", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\" [$__interval]))", + "hide": false, + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]))", + "hide": false, + "refId": "C" + } + ], + "title": "Historical Logs / Warnings / Errors", + "type": "barchart" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 12 + }, + "id": 9, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 10, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\"", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Errors", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 20 + }, + "id": 11, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 12, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\"", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Warnings", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Warnings", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 28 + }, + "id": 13, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 14, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Full Log File", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Complete Log File", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "1m", + "rows": [ ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "docker" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": "Prometheus Data Source", + "name": "prometheus_datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": "Loki Data Source", + "name": "loki_datasource", + "options": [ ], + "query": "loki", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "options": [ ], + "query": "label_values(machine_scrape_error, job)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [ ], + "query": "label_values(machine_scrape_error{job=~\"$job\"}, instance)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Container", + "multi": true, + "name": "container", + "options": [ ], + "query": "label_values(container_last_seen{job=~\"$job\", instance=~\"$instance\"}, name)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "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": "default", + "title": "Docker Logs", + "uid": "integration-docker-logs", + "version": 0 + } \ No newline at end of file diff --git a/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker.json b/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker.json new file mode 100644 index 00000000..5de77f2d --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/dashboards_out/docker.json @@ -0,0 +1,1277 @@ +{ + "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": 3, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [ + "docker-integration" + ], + "targetBlank": false, + "title": "Docker Dashboards", + "type": "dashboards", + "url": "" + } + ], + "liveNow": false, + "panels": [ + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Overview", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Total number of running containers last seen by the exporter.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 4 + }, + "id": 3, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "count(container_last_seen{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Containers", + "type": "stat" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Total number of distinct images found across running containers", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 4, + "y": 4 + }, + "id": 4, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "count (sum by (image) (container_last_seen{job=~\"$job\", instance=~\"$instance\", name=~\"$container\", image=~\".+\"}))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Images", + "type": "stat" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cumulative cpu time consumed in seconds.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 8, + "y": 4 + }, + "id": 5, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum (rate(container_cpu_usage_seconds_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Utilization by Containers", + "type": "gauge" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Memory reserved by the containers on the machine.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 12, + "y": 4 + }, + "id": 6, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_spec_memory_reservation_limit_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) / avg(machine_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory Reserved by Containers", + "type": "gauge" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Current memory usage in bytes, including all memory regardless of when it was accessed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 16, + "y": 4 + }, + "id": 7, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_memory_usage_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) / avg(machine_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory Utilization by Containers", + "type": "gauge" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 8, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Compute", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cpu time consumed in seconds by container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "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": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 9, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "avg by (name) (rate(container_cpu_usage_seconds_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Current memory usage in bytes, including all memory regardless of when it was accessed by container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "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": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 10, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (container_memory_usage_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 11, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Network", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cumulative count of bytes transmitted.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*tx/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 12, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (rate(container_network_receive_bytes_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}} rx", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (rate(container_network_transmit_bytes_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}} tx", + "refId": "B" + } + ], + "title": "Bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "TCP sockets on containers by state.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 13, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_network_tcp_usage_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) by (tcp_state) > 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{tcp_state}}", + "refId": "A" + } + ], + "title": "TCP Sockets By State", + "type": "timeseries" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 14, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Storage", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "displayName": "", + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #A" + }, + "properties": [ + { + "id": "displayName", + "value": "Disk Usage" + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #B" + }, + "properties": [ + { + "id": "displayName", + "value": "Inode Usage" + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "device" + }, + "properties": [ + { + "id": "displayName", + "value": "Device" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instance" + }, + "properties": [ + { + "id": "displayName", + "value": "Instance" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 15, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (instance, device) (container_fs_usage_bytes{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"} / container_fs_limit_bytes{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "1 - sum by (instance, device) (container_fs_inodes_free{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"} / container_fs_inodes_total{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B" + } + ], + "transformations": [ + { + "id": "merge", + "options": { } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "device": false + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], + "type": "table" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [ + "docker-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" + }, + { + "allValue": ".+", + "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(machine_scrape_error, 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": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [ ], + "query": "label_values(machine_scrape_error{job=~\"$job\"}, instance)", + "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": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Container", + "multi": true, + "name": "container", + "options": [ ], + "query": "label_values(container_last_seen{job=~\"$job\", instance=~\"$instance\"}, name)", + "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": "default", + "title": "Docker Overview", + "uid": "integration-docker-overview", + "version": 1, + "weekStart": "" + } \ No newline at end of file diff --git a/monitoring-mixins/docker-mixin/deploy/docker-mixin-alerts.yaml b/monitoring-mixins/docker-mixin/deploy/docker-mixin-alerts.yaml new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/docker-mixin-alerts.yaml @@ -0,0 +1 @@ +{} diff --git a/monitoring-mixins/docker-mixin/deploy/docker-mixin-rules.yaml b/monitoring-mixins/docker-mixin/deploy/docker-mixin-rules.yaml new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/docker-mixin-rules.yaml @@ -0,0 +1 @@ +{} diff --git a/monitoring-mixins/docker-mixin/deploy/kustomization.yaml b/monitoring-mixins/docker-mixin/deploy/kustomization.yaml new file mode 100644 index 00000000..0270082e --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/kustomization.yaml @@ -0,0 +1,24 @@ +# ---------------------------------------------------- +# apiVersion and kind of Kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: monitoring-system + +resources: +- prometheus-alerts.yaml + +generatorOptions: + disableNameSuffixHash: true + labels: + grafana_dashboard: "1" + annotations: + grafana_dashboard_folder: "/dashboards/Docker Desktop Mixin" + +configMapGenerator: +- name: docker.json + files: + - dashboards_out/docker.json +- name: docker-logs.json + files: + - dashboards_out/docker-logs.json diff --git a/monitoring-mixins/docker-mixin/deploy/manifests/k8s-all-in-one.yaml b/monitoring-mixins/docker-mixin/deploy/manifests/k8s-all-in-one.yaml new file mode 100644 index 00000000..4830c320 --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/manifests/k8s-all-in-one.yaml @@ -0,0 +1,2061 @@ +apiVersion: v1 +data: + docker-logs.json: |- + { + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [ + "docker" + ], + "targetBlank": false, + "title": "Docker Dashboards", + "type": "dashboards", + "url": "" + } + ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 2 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Overview", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines including errors and warnings.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(192, 216, 255)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 2 + }, + "id": 3, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}[$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Log Lines", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines of level: warning.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 152, 48)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 2 + }, + "id": 4, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\" [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Warnings", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of log lines of level: error.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(242, 73, 92)", + "value": 0 + } + ] + }, + "unit": "short" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 2 + }, + "id": 5, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Errors", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Percentage of log lines with level: Error out of total log lines.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(255, 166, 176)", + "value": 0 + }, + { + "color": "rgb(255, 115, 131)", + "value": 25 + }, + { + "color": "rgb(196, 22, 42)", + "value": 50 + } + ] + }, + "unit": "percent" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 2 + }, + "id": 6, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum( count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]) ) / sum( count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} [$__interval]) )", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Error Percentage", + "transparent": false, + "type": "stat" + }, + { + "datasource": "$loki_datasource", + "description": "Total number of bytes for log lines including errors and warnings.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(184, 119, 217)", + "value": 0 + } + ] + }, + "unit": "bytes" + } + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 2 + }, + "id": 7, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "7", + "targets": [ + { + "expr": "sum(bytes_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Bytes Used", + "transparent": false, + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 50, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + } + }, + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "displayName", + "value": "Lines" + }, + { + "id": "color", + "value": { + "fixedColor": "super-light-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "displayName", + "value": "Warnings" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "displayName", + "value": "Errors" + }, + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 8, + "interval": "10s", + "maxDataPoints": 25, + "options": { + "barRadius": 0.25, + "barWidth": 0.69999999999999996, + "groupWidth": 0.5, + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom" + }, + "orientation": "auto", + "showValue": "never", + "stacking": "none", + "tooltip": { + "mode": "multi", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}[$__interval]))", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\" [$__interval]))", + "hide": false, + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "${loki_datasource}" + }, + "expr": "sum(count_over_time({job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\" [$__interval]))", + "hide": false, + "refId": "C" + } + ], + "title": "Historical Logs / Warnings / Errors", + "type": "barchart" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 12 + }, + "id": 9, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 10, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Error\"", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Errors", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 20 + }, + "id": 11, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 12, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"} |= \"Warning\"", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Warnings", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Warnings", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 0, + "w": 0, + "x": 0, + "y": 28 + }, + "id": 13, + "panels": [ + { + "datasource": "$loki_datasource", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 14, + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": true + }, + "span": 12, + "targets": [ + { + "expr": "{job=~\"$job\", instance=~\"$instance\", container=~\"$container\"}", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Full Log File", + "type": "logs" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Complete Log File", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "1m", + "rows": [ ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "docker" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": "Prometheus Data Source", + "name": "prometheus_datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": "Loki Data Source", + "name": "loki_datasource", + "options": [ ], + "query": "loki", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "options": [ ], + "query": "label_values(machine_scrape_error, job)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [ ], + "query": "label_values(machine_scrape_error{job=~\"$job\"}, instance)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": { }, + "datasource": "$prometheus_datasource", + "hide": 0, + "includeAll": true, + "label": "Container", + "multi": true, + "name": "container", + "options": [ ], + "query": "label_values(container_last_seen{job=~\"$job\", instance=~\"$instance\"}, name)", + "refresh": 1, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "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": "default", + "title": "Docker Logs", + "uid": "integration-docker-logs", + "version": 0 + } +kind: ConfigMap +metadata: + annotations: + grafana_dashboard_folder: /dashboards/Docker Desktop Mixin + labels: + grafana_dashboard: "1" + name: docker-logs.json + namespace: monitoring-system +--- +apiVersion: v1 +data: + docker.json: |- + { + "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": 3, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": true, + "tags": [ + "docker-integration" + ], + "targetBlank": false, + "title": "Docker Dashboards", + "type": "dashboards", + "url": "" + } + ], + "liveNow": false, + "panels": [ + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Overview", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Total number of running containers last seen by the exporter.", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 4 + }, + "id": 3, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "count(container_last_seen{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Containers", + "type": "stat" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Total number of distinct images found across running containers", + "fieldConfig": { + "defaults": { + "links": [ ], + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 4, + "y": 4 + }, + "id": 4, + "links": [ ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "count (sum by (image) (container_last_seen{job=~\"$job\", instance=~\"$instance\", name=~\"$container\", image=~\".+\"}))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Images", + "type": "stat" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cumulative cpu time consumed in seconds.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 8, + "y": 4 + }, + "id": 5, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum (rate(container_cpu_usage_seconds_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Utilization by Containers", + "type": "gauge" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Memory reserved by the containers on the machine.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 12, + "y": 4 + }, + "id": 6, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_spec_memory_reservation_limit_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) / avg(machine_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory Reserved by Containers", + "type": "gauge" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Current memory usage in bytes, including all memory regardless of when it was accessed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.80000000000000004 + }, + { + "color": "#d44a3a", + "value": 0.90000000000000002 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 16, + "y": 4 + }, + "id": 7, + "links": [ ], + "maxDataPoints": 100, + "options": { + "minVizHeight": 200, + "minVizWidth": 200, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_memory_usage_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) / avg(machine_memory_bytes{job=~\"$job\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory Utilization by Containers", + "type": "gauge" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 8, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Compute", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cpu time consumed in seconds by container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "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": "percentunit" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 9, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "avg by (name) (rate(container_cpu_usage_seconds_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Current memory usage in bytes, including all memory regardless of when it was accessed by container.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "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": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 10, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (container_memory_usage_bytes{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}}", + "refId": "A" + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 11, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Network", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "Cumulative count of bytes transmitted.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 0, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*tx/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 12, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (rate(container_network_receive_bytes_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}} rx", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (name) (rate(container_network_transmit_bytes_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{name}} tx", + "refId": "B" + } + ], + "title": "Bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "description": "TCP sockets on containers by state.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 13, + "links": [ ], + "options": { + "legend": { + "calcs": [ ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum(container_network_tcp_usage_total{job=~\"$job\", instance=~\"$instance\", name=~\"$container\"}) by (tcp_state) > 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{tcp_state}}", + "refId": "A" + } + ], + "title": "TCP Sockets By State", + "type": "timeseries" + }, + { + "collapse": false, + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 14, + "panels": [ ], + "showTitle": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$prometheus_datasource" + }, + "refId": "A" + } + ], + "title": "Storage", + "titleSize": "h6", + "type": "row" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "displayName": "", + "mappings": [ ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #A" + }, + "properties": [ + { + "id": "displayName", + "value": "Disk Usage" + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #B" + }, + "properties": [ + { + "id": "displayName", + "value": "Inode Usage" + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "device" + }, + "properties": [ + { + "id": "displayName", + "value": "Device" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instance" + }, + "properties": [ + { + "id": "displayName", + "value": "Instance" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 15, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "sum by (instance, device) (container_fs_usage_bytes{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"} / container_fs_limit_bytes{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "uid": "$prometheus_datasource" + }, + "expr": "1 - sum by (instance, device) (container_fs_inodes_free{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"} / container_fs_inodes_total{job=~\"$job\", instance=~\"$instance\", id=\"/\", device=~\"/dev/.+\"})", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B" + } + ], + "transformations": [ + { + "id": "merge", + "options": { } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "device": false + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], + "type": "table" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [ + "docker-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" + }, + { + "allValue": ".+", + "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(machine_scrape_error, 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": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [ ], + "query": "label_values(machine_scrape_error{job=~\"$job\"}, instance)", + "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": "$prometheus_datasource" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Container", + "multi": true, + "name": "container", + "options": [ ], + "query": "label_values(container_last_seen{job=~\"$job\", instance=~\"$instance\"}, name)", + "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": "default", + "title": "Docker Overview", + "uid": "integration-docker-overview", + "version": 1, + "weekStart": "" + } +kind: ConfigMap +metadata: + annotations: + grafana_dashboard_folder: /dashboards/Docker Desktop Mixin + labels: + grafana_dashboard: "1" + name: docker.json + namespace: monitoring-system +--- +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: docker-mixin-alerts + namespace: monitoring-system +spec: null diff --git a/monitoring-mixins/docker-mixin/deploy/prometheus-alerts.yaml b/monitoring-mixins/docker-mixin/deploy/prometheus-alerts.yaml new file mode 100644 index 00000000..3e1e92ef --- /dev/null +++ b/monitoring-mixins/docker-mixin/deploy/prometheus-alerts.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: docker-mixin-alerts + namespace: monitoring-system +spec: diff --git a/monitoring-mixins/docker-mixin/jsonnetfile.json b/monitoring-mixins/docker-mixin/jsonnetfile.json new file mode 100644 index 00000000..ed5b4f06 --- /dev/null +++ b/monitoring-mixins/docker-mixin/jsonnetfile.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "docker-mixin" + } + }, + "version": "master" + } + ], + "legacyImports": true +} diff --git a/monitoring-mixins/docker-mixin/jsonnetfile.lock.json b/monitoring-mixins/docker-mixin/jsonnetfile.lock.json new file mode 100644 index 00000000..404838b5 --- /dev/null +++ b/monitoring-mixins/docker-mixin/jsonnetfile.lock.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet-lib.git", + "subdir": "grafonnet" + } + }, + "version": "a1d61cce1da59c71409b99b5c7568511fec661ea", + "sum": "342u++/7rViR/zj2jeJOjshzglkZ1SY+hFNuyCBFMdc=" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "docker-mixin" + } + }, + "version": "488dcce689954bfaad5a3cff66fd2fe9b28f7c14", + "sum": "MUHOofPmJ1x2OwJmLMJzdHfxkufY2NfXDvEpWDC0OMA=" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "grafana-builder" + } + }, + "version": "488dcce689954bfaad5a3cff66fd2fe9b28f7c14", + "sum": "+z5VY+bPBNqXcmNAV8xbJcbsRA+pro1R3IM7aIY8OlU=" + } + ], + "legacyImports": false +} diff --git a/monitoring-mixins/docker-mixin/mixin.libsonnet b/monitoring-mixins/docker-mixin/mixin.libsonnet new file mode 100644 index 00000000..3aaf04e3 --- /dev/null +++ b/monitoring-mixins/docker-mixin/mixin.libsonnet @@ -0,0 +1 @@ +import 'docker-mixin/mixin.libsonnet' \ No newline at end of file