jsonnet: add separated kubernetes mixin and custom kube prometheus alerts
This commit is contained in:
@@ -14,17 +14,20 @@ local kp =
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
{ ['setup/0namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } +
|
{ ['setup/0namespace-namespace']: kp.kubePrometheus.namespace } +
|
||||||
{
|
{
|
||||||
['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]
|
['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]
|
||||||
for name in std.filter((function(name) name != 'serviceMonitor'), std.objectFields(kp.prometheusOperator))
|
for name in std.filter((function(name) name != 'serviceMonitor' && name != 'prometheusRule'), std.objectFields(kp.prometheusOperator))
|
||||||
} +
|
} +
|
||||||
// serviceMonitor is separated so that it can be created after the CRDs are ready
|
// serviceMonitor and prometheusRule are separated so that they can be created after the CRDs are ready
|
||||||
{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +
|
{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +
|
||||||
|
{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +
|
||||||
|
{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +
|
||||||
{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
|
{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
|
||||||
{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
|
{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
|
||||||
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
|
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
|
||||||
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
|
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
|
||||||
{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
|
{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
|
||||||
{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } +
|
{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } +
|
||||||
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }
|
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +
|
||||||
|
{ ['kubernetes-' + name]: kp.kubernetesMixin[name] for name in std.objectFields(kp.kubernetesMixin) }
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
local alertmanager = import './alertmanager/alertmanager.libsonnet';
|
local alertmanager = import './alertmanager/alertmanager.libsonnet';
|
||||||
local blackboxExporter = import './blackbox-exporter/blackbox-exporter.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 kubeStateMetrics = import './kube-state-metrics/kube-state-metrics.libsonnet';
|
||||||
|
local kubernetesMixin = import './mixin/kubernetes.libsonnet';
|
||||||
local nodeExporter = import './node-exporter/node-exporter.libsonnet';
|
local nodeExporter = import './node-exporter/node-exporter.libsonnet';
|
||||||
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
|
local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet';
|
||||||
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
|
local prometheusOperator = import './prometheus-operator/prometheus-operator.libsonnet';
|
||||||
local prometheus = import './prometheus/prometheus.libsonnet';
|
local prometheus = import './prometheus/prometheus.libsonnet';
|
||||||
local prometheusOperator = import './prometheus-operator/prometheus-operator.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') +
|
(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
|
||||||
{
|
{
|
||||||
@@ -69,25 +70,18 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
ruleLabels: $._config.ruleLabels,
|
ruleLabels: $._config.ruleLabels,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
mixins+:: monitoringMixins({
|
kubernetesMixin: kubernetesMixin({
|
||||||
namespace: $._config.namespace,
|
namespace: $._config.namespace,
|
||||||
|
mixin+: {
|
||||||
|
ruleLabels: $._config.ruleLabels,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
|
kubePrometheus: customMixin({
|
||||||
// FIXME(paulfantom) Remove this variable by moving each mixin to its own component
|
namespace: $._config.namespace,
|
||||||
// Example: node_exporter mixin could be added in ./node-exporter/node-exporter.libsonnet
|
mixin+: {
|
||||||
allRules::
|
ruleLabels: $._config.ruleLabels,
|
||||||
//$.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+:: {
|
|
||||||
namespace: {
|
namespace: {
|
||||||
apiVersion: 'v1',
|
apiVersion: 'v1',
|
||||||
kind: 'Namespace',
|
kind: 'Namespace',
|
||||||
@@ -147,9 +141,9 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet';
|
|||||||
},
|
},
|
||||||
// FIXME(paulfantom): Same as with rules and alerts.
|
// FIXME(paulfantom): Same as with rules and alerts.
|
||||||
// This should be gathering all dashboards from components without having to enumerate all dashboards.
|
// This should be gathering all dashboards from components without having to enumerate all dashboards.
|
||||||
dashboards:
|
dashboards: {},
|
||||||
//$.mixins.nodeExporter.grafanaDashboards +
|
//$.mixins.nodeExporter.grafanaDashboards +
|
||||||
$.mixins.kubernetes.grafanaDashboards,
|
//$.mixins.kubernetes.grafanaDashboards,
|
||||||
//$.mixins.prometheus.grafanaDashboards,
|
//$.mixins.prometheus.grafanaDashboards,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
42
jsonnet/kube-prometheus/mixin/custom.libsonnet
Normal file
42
jsonnet/kube-prometheus/mixin/custom.libsonnet
Normal 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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
49
jsonnet/kube-prometheus/mixin/kubernetes.libsonnet
Normal file
49
jsonnet/kube-prometheus/mixin/kubernetes.libsonnet
Normal 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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -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.+"',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user