jsonnet: add separated kubernetes mixin and custom kube prometheus alerts

This commit is contained in:
paulfantom
2021-01-14 16:58:14 +01:00
parent ba052559cf
commit e556dbfd88
12 changed files with 112 additions and 59 deletions

View File

@@ -1,13 +1,14 @@
local alertmanager = import './alertmanager/alertmanager.libsonnet';
local blackboxExporter = import './blackbox-exporter/blackbox-exporter.libsonnet';
local customMixin = import './mixin/custom.libsonnet';
local kubeStateMetrics = import './kube-state-metrics/kube-state-metrics.libsonnet';
local kubernetesMixin = import './mixin/kubernetes.libsonnet';
local nodeExporter = import './node-exporter/node-exporter.libsonnet';
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
local prometheus = import './prometheus/prometheus.libsonnet';
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
{
@@ -69,25 +70,18 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
ruleLabels: $._config.ruleLabels,
},
}),
mixins+:: monitoringMixins({
kubernetesMixin: kubernetesMixin({
namespace: $._config.namespace,
mixin+: {
ruleLabels: $._config.ruleLabels,
},
}),
// FIXME(paulfantom) Remove this variable by moving each mixin to its own component
// Example: node_exporter mixin could be added in ./node-exporter/node-exporter.libsonnet
allRules::
//$.mixins.nodeExporter.prometheusRules +
$.mixins.kubernetes.prometheusRules +
$.mixins.base.prometheusRules +
//$.mixins.kubeStateMetrics.prometheusAlerts +
//$.mixins.nodeExporter.prometheusAlerts +
//$.mixins.alertmanager.prometheusAlerts +
//$.mixins.prometheusOperator.prometheusAlerts +
$.mixins.kubernetes.prometheusAlerts +
//$.mixins.prometheus.prometheusAlerts +
$.mixins.base.prometheusAlerts,
kubePrometheus+:: {
kubePrometheus: customMixin({
namespace: $._config.namespace,
mixin+: {
ruleLabels: $._config.ruleLabels,
},
}) + {
namespace: {
apiVersion: 'v1',
kind: 'Namespace',
@@ -147,9 +141,9 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
},
// FIXME(paulfantom): Same as with rules and alerts.
// This should be gathering all dashboards from components without having to enumerate all dashboards.
dashboards:
dashboards: {},
//$.mixins.nodeExporter.grafanaDashboards +
$.mixins.kubernetes.grafanaDashboards,
//$.mixins.kubernetes.grafanaDashboards,
//$.mixins.prometheus.grafanaDashboards,
},
},

View File

@@ -0,0 +1,42 @@
local defaults = {
name: 'kube-prometheus',
namespace: error 'must provide namespace',
commonLabels:: {
'app.kubernetes.io/name': 'kube-prometheus',
'app.kubernetes.io/component': 'exporter',
'app.kubernetes.io/part-of': 'kube-prometheus',
},
mixin: {
ruleLabels: {},
_config: {
nodeExporterSelector: 'job="node-exporter"',
hostNetworkInterfaceSelector: 'device!~"veth.+"',
},
},
};
function(params) {
local m = self,
config:: defaults + params,
local alertsandrules = (import './alerts/alerts.libsonnet') + (import './rules/rules.libsonnet'),
mixin:: alertsandrules {
_config+:: m.config.mixin._config,
},
prometheusRule: {
apiVersion: 'monitoring.coreos.com/v1',
kind: 'PrometheusRule',
metadata: {
labels: m.config.commonLabels + m.config.mixin.ruleLabels,
name: m.config.name + '-rules',
namespace: m.config.namespace,
},
spec: {
local r = if std.objectHasAll(m.mixin, 'prometheusRules') then m.mixin.prometheusRules else {},
local a = if std.objectHasAll(m.mixin, 'prometheusAlerts') then m.mixin.prometheusAlerts else {},
groups: a + r,
},
},
}

View File

@@ -0,0 +1,49 @@
local defaults = {
name: 'kubernetes',
namespace: error 'must provide namespace',
commonLabels:: {
'app.kubernetes.io/name': 'kube-prometheus',
'app.kubernetes.io/component': 'exporter',
'app.kubernetes.io/part-of': 'kube-prometheus',
},
mixin: {
ruleLabels: {},
_config: {
cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"',
kubeletSelector: 'job="kubelet", metrics_path="/metrics"',
kubeStateMetricsSelector: 'job="kube-state-metrics"',
nodeExporterSelector: 'job="node-exporter"',
kubeSchedulerSelector: 'job="kube-scheduler"',
kubeControllerManagerSelector: 'job="kube-controller-manager"',
kubeApiserverSelector: 'job="apiserver"',
podLabel: 'pod',
runbookURLPattern: 'https://github.com/prometheus-operator/kube-prometheus/wiki/%s',
diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
hostNetworkInterfaceSelector: 'device!~"veth.+"',
},
},
};
function(params) {
local m = self,
config:: defaults + params,
mixin:: (import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') {
_config+:: m.config.mixin._config,
},
prometheusRule: {
apiVersion: 'monitoring.coreos.com/v1',
kind: 'PrometheusRule',
metadata: {
labels: m.config.commonLabels + m.config.mixin.ruleLabels,
name: m.config.name + '-rules',
namespace: m.config.namespace,
},
spec: {
local r = if std.objectHasAll(m.mixin, 'prometheusRules') then m.mixin.prometheusRules else {},
local a = if std.objectHasAll(m.mixin, 'prometheusAlerts') then m.mixin.prometheusAlerts else {},
groups: a + r,
},
},
}

View File

@@ -1,35 +0,0 @@
local defaults = {
namespace: error 'must provide namespace',
};
function(params) {
local m = self,
config:: defaults + params,
base+:
(import '../alerts/general.libsonnet') +
(import '../alerts/node.libsonnet') +
(import '../rules/node-rules.libsonnet') +
(import '../rules/general.libsonnet') {
_config+:: {
nodeExporterSelector: 'job="node-exporter"',
hostNetworkInterfaceSelector: 'device!~"veth.+"',
},
},
kubernetes:
(import 'github.com/kubernetes-monitoring/kubernetes-mixin/mixin.libsonnet') {
_config+:: {
cadvisorSelector: 'job="kubelet", metrics_path="/metrics/cadvisor"',
kubeletSelector: 'job="kubelet", metrics_path="/metrics"',
kubeStateMetricsSelector: 'job="kube-state-metrics"',
nodeExporterSelector: 'job="node-exporter"',
kubeSchedulerSelector: 'job="kube-scheduler"',
kubeControllerManagerSelector: 'job="kube-controller-manager"',
kubeApiserverSelector: 'job="apiserver"',
podLabel: 'pod',
runbookURLPattern: 'https://github.com/prometheus-operator/kube-prometheus/wiki/%s',
diskDeviceSelector: 'device=~"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+"',
hostNetworkInterfaceSelector: 'device!~"veth.+"',
},
},
}