From afa18e3e6b0a16377cb5e90d55a2c372dc1b069c Mon Sep 17 00:00:00 2001 From: Joe Adams Date: Sun, 21 Apr 2024 16:49:50 -0400 Subject: [PATCH] Start work on mixin dashboards Signed-off-by: Joe Adams --- .gitignore | 1 + elasticsearch_mixin/README.md | 20 ++++++++ elasticsearch_mixin/config.libsonnet | 6 +++ elasticsearch_mixin/dashboards.jsonnet | 3 ++ .../dashboards/cluster.libsonnet | 20 ++++++++ .../dashboards/dashboards.libsonnet | 1 + elasticsearch_mixin/dashboards/g.libsonnet | 1 + .../dashboards/variables.libsonnet | 15 ++++++ elasticsearch_mixin/jsonnetfile.json | 15 ++++++ elasticsearch_mixin/jsonnetfile.lock.json | 46 +++++++++++++++++++ elasticsearch_mixin/mixin.libsonnet | 3 ++ 11 files changed, 131 insertions(+) create mode 100644 elasticsearch_mixin/README.md create mode 100644 elasticsearch_mixin/config.libsonnet create mode 100644 elasticsearch_mixin/dashboards.jsonnet create mode 100644 elasticsearch_mixin/dashboards/cluster.libsonnet create mode 100644 elasticsearch_mixin/dashboards/dashboards.libsonnet create mode 100644 elasticsearch_mixin/dashboards/g.libsonnet create mode 100644 elasticsearch_mixin/dashboards/variables.libsonnet create mode 100644 elasticsearch_mixin/jsonnetfile.json create mode 100644 elasticsearch_mixin/jsonnetfile.lock.json create mode 100644 elasticsearch_mixin/mixin.libsonnet diff --git a/.gitignore b/.gitignore index e470da31..9687f990 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ elasticsearch_exporter *-stamp .tarballs /vendor +vendor/ diff --git a/elasticsearch_mixin/README.md b/elasticsearch_mixin/README.md new file mode 100644 index 00000000..dec45492 --- /dev/null +++ b/elasticsearch_mixin/README.md @@ -0,0 +1,20 @@ +# Elasticsearch Exporter Mixin + +This is a mixin for the elasticsearch_exporter to define dashboards, alerts, and monitoring queries for use with this exporter. + +Good example of upstream mixin for reference: https://github.com/kubernetes-monitoring/kubernetes-mixin + + +## Development + +### JSONNET +```go install github.com/google/go-jsonnet/cmd/jsonnet@latest``` + +### JSONNET BUNDLER +jsonnet bundler is a package manager for jsonnet + +```go install -a github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest``` + + +### Grafonnet +```jb install github.com/grafana/grafonnet/gen/grafonnet-latest@main``` diff --git a/elasticsearch_mixin/config.libsonnet b/elasticsearch_mixin/config.libsonnet new file mode 100644 index 00000000..3cf4a4f9 --- /dev/null +++ b/elasticsearch_mixin/config.libsonnet @@ -0,0 +1,6 @@ +{ + _config+:: { + dashboardNamePrefix: 'Elasticsearch Exporter / ', + dashboardTags: ['elasticsearch-exporter-mixin'], + }, +} diff --git a/elasticsearch_mixin/dashboards.jsonnet b/elasticsearch_mixin/dashboards.jsonnet new file mode 100644 index 00000000..d606bd6c --- /dev/null +++ b/elasticsearch_mixin/dashboards.jsonnet @@ -0,0 +1,3 @@ +local dashboards = (import 'mixin.libsonnet').grafanaDashboards; + +{ [name]: dashboards[name] for name in std.objectFields(dashboards)} diff --git a/elasticsearch_mixin/dashboards/cluster.libsonnet b/elasticsearch_mixin/dashboards/cluster.libsonnet new file mode 100644 index 00000000..abf8b9e5 --- /dev/null +++ b/elasticsearch_mixin/dashboards/cluster.libsonnet @@ -0,0 +1,20 @@ +local g = import 'g.libsonnet'; + +local dashboard = g.dashboard; + +local variables = import './variables.libsonnet'; + +{ + grafanaDashboards+:: { + 'cluster.json': + dashboard.new('%s Cluster' % $._config.dashboardNamePrefix) + + dashboard.withTags($._config.dashboardTags) + + dashboard.withRefresh('1m') + + dashboard.time.withFrom(value='now-1h') + + dashboard.graphTooltip.withSharedCrosshair() + + dashboard.withVariables([ + variables.datasource, + variables.cluster, + ]) + } +} diff --git a/elasticsearch_mixin/dashboards/dashboards.libsonnet b/elasticsearch_mixin/dashboards/dashboards.libsonnet new file mode 100644 index 00000000..16802c25 --- /dev/null +++ b/elasticsearch_mixin/dashboards/dashboards.libsonnet @@ -0,0 +1 @@ +(import 'cluster.libsonnet') diff --git a/elasticsearch_mixin/dashboards/g.libsonnet b/elasticsearch_mixin/dashboards/g.libsonnet new file mode 100644 index 00000000..71fdb755 --- /dev/null +++ b/elasticsearch_mixin/dashboards/g.libsonnet @@ -0,0 +1 @@ +import "github.com/grafana/grafonnet/gen/grafonnet-latest/main.libsonnet" diff --git a/elasticsearch_mixin/dashboards/variables.libsonnet b/elasticsearch_mixin/dashboards/variables.libsonnet new file mode 100644 index 00000000..c8d5715a --- /dev/null +++ b/elasticsearch_mixin/dashboards/variables.libsonnet @@ -0,0 +1,15 @@ +local g = import './g.libsonnet'; +local var = g.dashboard.variable; + +{ + datasource: + var.datasource.new('datasource', 'prometheus'), + + cluster: + var.query.new('cluster') + + var.query.withDatasourceFromVariable(self.datasource) + + var.query.queryTypes.withLabelValues( + 'cluster', + 'elasticsearch_cluster_health_status', + ) +} diff --git a/elasticsearch_mixin/jsonnetfile.json b/elasticsearch_mixin/jsonnetfile.json new file mode 100644 index 00000000..2414c867 --- /dev/null +++ b/elasticsearch_mixin/jsonnetfile.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-latest" + } + }, + "version": "main" + } + ], + "legacyImports": true +} diff --git a/elasticsearch_mixin/jsonnetfile.lock.json b/elasticsearch_mixin/jsonnetfile.lock.json new file mode 100644 index 00000000..31b59c22 --- /dev/null +++ b/elasticsearch_mixin/jsonnetfile.lock.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-latest" + } + }, + "version": "1c56af39815c4903e47c27194444456f005f65df", + "sum": "GxEO83uxgsDclLp/fmlUJZDbSGpeUZY6Ap3G2cgdL1g=" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet.git", + "subdir": "gen/grafonnet-v10.4.0" + } + }, + "version": "1c56af39815c4903e47c27194444456f005f65df", + "sum": "DKj+Sn+rlI48g/aoJpzkfPge46ya0jLk5kcZoiZ2X/I=" + }, + { + "source": { + "git": { + "remote": "https://github.com/jsonnet-libs/docsonnet.git", + "subdir": "doc-util" + } + }, + "version": "6ac6c69685b8c29c54515448eaca583da2d88150", + "sum": "BrAL/k23jq+xy9oA7TWIhUx07dsA/QLm3g7ktCwe//U=" + }, + { + "source": { + "git": { + "remote": "https://github.com/jsonnet-libs/xtd.git", + "subdir": "" + } + }, + "version": "63d430b69a95741061c2f7fc9d84b1a778511d9c", + "sum": "qiZi3axUSXCVzKUF83zSAxklwrnitMmrDK4XAfjPMdE=" + } + ], + "legacyImports": false +} diff --git a/elasticsearch_mixin/mixin.libsonnet b/elasticsearch_mixin/mixin.libsonnet new file mode 100644 index 00000000..7083cb16 --- /dev/null +++ b/elasticsearch_mixin/mixin.libsonnet @@ -0,0 +1,3 @@ +// (import 'alerts/alerts.libsonnet') + +(import 'dashboards/dashboards.libsonnet') + +(import 'config.libsonnet')