mirror of
				https://github.com/prometheus-operator/kube-prometheus.git
				synced 2025-11-04 01:51:01 +01:00 
			
		
		
		
	jsonnet: create function responsible for alertmanager objects
Signed-off-by: paulfantom <pawel@krupa.net.pl>
This commit is contained in:
		
							parent
							
								
									a36c6042e5
								
							
						
					
					
						commit
						ea3fee466e
					
				@ -1,163 +1,163 @@
 | 
				
			|||||||
{
 | 
					local defaults = {
 | 
				
			||||||
  _config+:: {
 | 
					  local defaults = self,
 | 
				
			||||||
    namespace: 'default',
 | 
					  namespace: error 'must provide namespace',
 | 
				
			||||||
 | 
					  image: error 'must provide image',
 | 
				
			||||||
    versions+:: {
 | 
					  version: error 'must provide version',
 | 
				
			||||||
      alertmanager: 'v0.21.0',
 | 
					  resources: {},
 | 
				
			||||||
 | 
					  commonLabels:: {
 | 
				
			||||||
 | 
					    'app.kubernetes.io/name': 'alertmanager',
 | 
				
			||||||
 | 
					    'app.kubernetes.io/version': defaults.version,
 | 
				
			||||||
 | 
					    'app.kubernetes.io/component': 'alert-router',
 | 
				
			||||||
 | 
					    'app.kubernetes.io/part-of': 'kube-prometheus',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  selectorLabels:: {
 | 
				
			||||||
 | 
					    [labelName]: defaults.commonLabels[labelName]
 | 
				
			||||||
 | 
					    for labelName in std.objectFields(defaults.commonLabels)
 | 
				
			||||||
 | 
					    if !std.setMember(labelName, ['app.kubernetes.io/version'])
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  name: error 'must provide name',
 | 
				
			||||||
 | 
					  config: {
 | 
				
			||||||
 | 
					    global: {
 | 
				
			||||||
 | 
					      resolve_timeout: '5m',
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    inhibit_rules: [{
 | 
				
			||||||
    imageRepos+:: {
 | 
					      source_match: {
 | 
				
			||||||
      alertmanager: 'quay.io/prometheus/alertmanager',
 | 
					        severity: 'critical',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      target_match_re: {
 | 
				
			||||||
 | 
					        severity: 'warning|info',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      equal: ['namespace', 'alertname'],
 | 
				
			||||||
 | 
					    }, {
 | 
				
			||||||
 | 
					      source_match: {
 | 
				
			||||||
 | 
					        severity: 'warning',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      target_match_re: {
 | 
				
			||||||
 | 
					        severity: 'info',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      equal: ['namespace', 'alertname'],
 | 
				
			||||||
 | 
					    }],
 | 
				
			||||||
 | 
					    route: {
 | 
				
			||||||
 | 
					      group_by: ['namespace'],
 | 
				
			||||||
 | 
					      group_wait: '30s',
 | 
				
			||||||
 | 
					      group_interval: '5m',
 | 
				
			||||||
 | 
					      repeat_interval: '12h',
 | 
				
			||||||
 | 
					      receiver: 'Default',
 | 
				
			||||||
 | 
					      routes: [
 | 
				
			||||||
 | 
					        { receiver: 'Watchdog', match: { alertname: 'Watchdog' } },
 | 
				
			||||||
 | 
					        { receiver: 'Critical', match: { severity: 'critical' } },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    receivers: [
 | 
				
			||||||
 | 
					      { name: 'Default' },
 | 
				
			||||||
 | 
					      { name: 'Watchdog' },
 | 
				
			||||||
 | 
					      { name: 'Critical' },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  replicas: 3,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    alertmanager+:: {
 | 
					
 | 
				
			||||||
      name: 'main',
 | 
					
 | 
				
			||||||
      config: {
 | 
					
 | 
				
			||||||
        global: {
 | 
					function(params) {
 | 
				
			||||||
          resolve_timeout: '5m',
 | 
					  local am = self,
 | 
				
			||||||
        },
 | 
					  config:: defaults + params,
 | 
				
			||||||
        inhibit_rules: [{
 | 
					  // Safety check
 | 
				
			||||||
          source_match: {
 | 
					  assert std.isObject(am.config.resources),
 | 
				
			||||||
            severity: 'critical',
 | 
					
 | 
				
			||||||
          },
 | 
					  secret: {
 | 
				
			||||||
          target_match_re: {
 | 
					    apiVersion: 'v1',
 | 
				
			||||||
            severity: 'warning|info',
 | 
					    kind: 'Secret',
 | 
				
			||||||
          },
 | 
					    type: 'Opaque',
 | 
				
			||||||
          equal: ['namespace', 'alertname'],
 | 
					    metadata: {
 | 
				
			||||||
        }, {
 | 
					      name: 'alertmanager-' + am.config.name,
 | 
				
			||||||
          source_match: {
 | 
					      namespace: am.config.namespace,
 | 
				
			||||||
            severity: 'warning',
 | 
					      labels: { alertmanager: am.config.name } + am.config.commonLabels,
 | 
				
			||||||
          },
 | 
					    },
 | 
				
			||||||
          target_match_re: {
 | 
					    stringData: {
 | 
				
			||||||
            severity: 'info',
 | 
					      'alertmanager.yaml': if std.type(am.config.config) == 'object'
 | 
				
			||||||
          },
 | 
					      then
 | 
				
			||||||
          equal: ['namespace', 'alertname'],
 | 
					        std.manifestYamlDoc(am.config.config)
 | 
				
			||||||
        }],
 | 
					      else
 | 
				
			||||||
        route: {
 | 
					        am.config.config,
 | 
				
			||||||
          group_by: ['namespace'],
 | 
					 | 
				
			||||||
          group_wait: '30s',
 | 
					 | 
				
			||||||
          group_interval: '5m',
 | 
					 | 
				
			||||||
          repeat_interval: '12h',
 | 
					 | 
				
			||||||
          receiver: 'Default',
 | 
					 | 
				
			||||||
          routes: [
 | 
					 | 
				
			||||||
            { receiver: 'Watchdog', match: { alertname: 'Watchdog' } },
 | 
					 | 
				
			||||||
            { receiver: 'Critical', match: { severity: 'critical' } },
 | 
					 | 
				
			||||||
          ],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        receivers: [
 | 
					 | 
				
			||||||
          { name: 'Default' },
 | 
					 | 
				
			||||||
          { name: 'Watchdog' },
 | 
					 | 
				
			||||||
          { name: 'Critical' },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      replicas: 3,
 | 
					 | 
				
			||||||
      labels: {
 | 
					 | 
				
			||||||
        'app.kubernetes.io/name': 'alertmanager',
 | 
					 | 
				
			||||||
        'app.kubernetes.io/version': $._config.versions.alertmanager,
 | 
					 | 
				
			||||||
        'app.kubernetes.io/component': 'alert-router',
 | 
					 | 
				
			||||||
        'app.kubernetes.io/part-of': 'kube-prometheus',
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      selectorLabels: {
 | 
					 | 
				
			||||||
        [labelName]: $._config.alertmanager.labels[labelName]
 | 
					 | 
				
			||||||
        for labelName in std.objectFields($._config.alertmanager.labels)
 | 
					 | 
				
			||||||
        if !std.setMember(labelName, ['app.kubernetes.io/version'])
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  alertmanager+:: {
 | 
					  serviceAccount: {
 | 
				
			||||||
    secret: {
 | 
					    apiVersion: 'v1',
 | 
				
			||||||
      apiVersion: 'v1',
 | 
					    kind: 'ServiceAccount',
 | 
				
			||||||
      kind: 'Secret',
 | 
					    metadata: {
 | 
				
			||||||
      type: 'Opaque',
 | 
					      name: 'alertmanager-' + am.config.name,
 | 
				
			||||||
      metadata: {
 | 
					      namespace: am.config.namespace,
 | 
				
			||||||
        name: 'alertmanager-' + $._config.alertmanager.name,
 | 
					      labels: { alertmanager: am.config.name } + am.config.commonLabels,
 | 
				
			||||||
        namespace: $._config.namespace,
 | 
					 | 
				
			||||||
        labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels,
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      stringData: {
 | 
					 | 
				
			||||||
        'alertmanager.yaml': if std.type($._config.alertmanager.config) == 'object'
 | 
					 | 
				
			||||||
        then
 | 
					 | 
				
			||||||
          std.manifestYamlDoc($._config.alertmanager.config)
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          $._config.alertmanager.config,
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serviceAccount: {
 | 
					  service: {
 | 
				
			||||||
      apiVersion: 'v1',
 | 
					    apiVersion: 'v1',
 | 
				
			||||||
      kind: 'ServiceAccount',
 | 
					    kind: 'Service',
 | 
				
			||||||
      metadata: {
 | 
					    metadata: {
 | 
				
			||||||
        name: 'alertmanager-' + $._config.alertmanager.name,
 | 
					      name: 'alertmanager-' + am.config.name,
 | 
				
			||||||
        namespace: $._config.namespace,
 | 
					      namespace: am.config.namespace,
 | 
				
			||||||
        labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels,
 | 
					      labels: { alertmanager: am.config.name } + am.config.commonLabels,
 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    spec: {
 | 
				
			||||||
    service: {
 | 
					      ports: [
 | 
				
			||||||
      apiVersion: 'v1',
 | 
					        { name: 'web', targetPort: 'web', port: 9093 },
 | 
				
			||||||
      kind: 'Service',
 | 
					      ],
 | 
				
			||||||
      metadata: {
 | 
					      selector: {
 | 
				
			||||||
        name: 'alertmanager-' + $._config.alertmanager.name,
 | 
					        app: 'alertmanager',
 | 
				
			||||||
        namespace: $._config.namespace,
 | 
					        alertmanager: am.config.name,
 | 
				
			||||||
        labels: { alertmanager: $._config.alertmanager.name } + $._config.alertmanager.labels,
 | 
					      } + am.config.selectorLabels,
 | 
				
			||||||
      },
 | 
					      sessionAffinity: 'ClientIP',
 | 
				
			||||||
      spec: {
 | 
					 | 
				
			||||||
        ports: [
 | 
					 | 
				
			||||||
          { name: 'web', targetPort: 'web', port: 9093 },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        selector: {
 | 
					 | 
				
			||||||
          app: 'alertmanager',
 | 
					 | 
				
			||||||
          alertmanager: $._config.alertmanager.name,
 | 
					 | 
				
			||||||
        } + $._config.alertmanager.selectorLabels,
 | 
					 | 
				
			||||||
        sessionAffinity: 'ClientIP',
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serviceMonitor: {
 | 
					  serviceMonitor: {
 | 
				
			||||||
      apiVersion: 'monitoring.coreos.com/v1',
 | 
					    apiVersion: 'monitoring.coreos.com/v1',
 | 
				
			||||||
      kind: 'ServiceMonitor',
 | 
					    kind: 'ServiceMonitor',
 | 
				
			||||||
      metadata: {
 | 
					    metadata: {
 | 
				
			||||||
        name: 'alertmanager',
 | 
					      name: 'alertmanager',
 | 
				
			||||||
        namespace: $._config.namespace,
 | 
					      namespace: am.config.namespace,
 | 
				
			||||||
        labels: $._config.alertmanager.labels,
 | 
					      labels: am.config.commonLabels,
 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      spec: {
 | 
					 | 
				
			||||||
        selector: {
 | 
					 | 
				
			||||||
          matchLabels: {
 | 
					 | 
				
			||||||
            alertmanager: $._config.alertmanager.name,
 | 
					 | 
				
			||||||
          } + $._config.alertmanager.selectorLabels,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        endpoints: [
 | 
					 | 
				
			||||||
          { port: 'web', interval: '30s' },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    spec: {
 | 
				
			||||||
    alertmanager: {
 | 
					      selector: {
 | 
				
			||||||
      apiVersion: 'monitoring.coreos.com/v1',
 | 
					        matchLabels: {
 | 
				
			||||||
      kind: 'Alertmanager',
 | 
					          alertmanager: am.config.name,
 | 
				
			||||||
      metadata: {
 | 
					        } + am.config.selectorLabels,
 | 
				
			||||||
        name: $._config.alertmanager.name,
 | 
					 | 
				
			||||||
        namespace: $._config.namespace,
 | 
					 | 
				
			||||||
        labels: {
 | 
					 | 
				
			||||||
          alertmanager: $._config.alertmanager.name,
 | 
					 | 
				
			||||||
        } + $._config.alertmanager.labels,
 | 
					 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      spec: {
 | 
					      endpoints: [
 | 
				
			||||||
        replicas: $._config.alertmanager.replicas,
 | 
					        { port: 'web', interval: '30s' },
 | 
				
			||||||
        version: $._config.versions.alertmanager,
 | 
					      ],
 | 
				
			||||||
        image: $._config.imageRepos.alertmanager + ':' + $._config.versions.alertmanager,
 | 
					    },
 | 
				
			||||||
        podMetadata: {
 | 
					  },
 | 
				
			||||||
          labels: $._config.alertmanager.labels,
 | 
					
 | 
				
			||||||
        },
 | 
					  alertmanager: {
 | 
				
			||||||
        nodeSelector: { 'kubernetes.io/os': 'linux' },
 | 
					    apiVersion: 'monitoring.coreos.com/v1',
 | 
				
			||||||
        serviceAccountName: 'alertmanager-' + $._config.alertmanager.name,
 | 
					    kind: 'Alertmanager',
 | 
				
			||||||
        securityContext: {
 | 
					    metadata: {
 | 
				
			||||||
          runAsUser: 1000,
 | 
					      name: am.config.name,
 | 
				
			||||||
          runAsNonRoot: true,
 | 
					      namespace: am.config.namespace,
 | 
				
			||||||
          fsGroup: 2000,
 | 
					      labels: {
 | 
				
			||||||
        },
 | 
					        alertmanager: am.config.name,
 | 
				
			||||||
 | 
					      } + am.config.commonLabels,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    spec: {
 | 
				
			||||||
 | 
					      replicas: am.config.replicas,
 | 
				
			||||||
 | 
					      version: am.config.version,
 | 
				
			||||||
 | 
					      image: am.config.image,
 | 
				
			||||||
 | 
					      podMetadata: {
 | 
				
			||||||
 | 
					        labels: am.config.commonLabels,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      resources: am.config.resources,
 | 
				
			||||||
 | 
					      nodeSelector: { 'kubernetes.io/os': 'linux' },
 | 
				
			||||||
 | 
					      serviceAccountName: 'alertmanager-' + am.config.name,
 | 
				
			||||||
 | 
					      securityContext: {
 | 
				
			||||||
 | 
					        runAsUser: 1000,
 | 
				
			||||||
 | 
					        runAsNonRoot: true,
 | 
				
			||||||
 | 
					        fsGroup: 2000,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,13 @@
 | 
				
			|||||||
local kubeRbacProxyContainer = import './kube-rbac-proxy/containerMixin.libsonnet';
 | 
					local kubeRbacProxyContainer = import './kube-rbac-proxy/containerMixin.libsonnet';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodeExporter = import './node-exporter/node-exporter.libsonnet';
 | 
					local nodeExporter = import './node-exporter/node-exporter.libsonnet';
 | 
				
			||||||
 | 
					local alertmanager = import './alertmanager/alertmanager.libsonnet';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
 | 
					(import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') +
 | 
				
			||||||
(import './kube-state-metrics/kube-state-metrics.libsonnet') +
 | 
					(import './kube-state-metrics/kube-state-metrics.libsonnet') +
 | 
				
			||||||
(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') +
 | 
					(import 'github.com/kubernetes/kube-state-metrics/jsonnet/kube-state-metrics-mixin/mixin.libsonnet') +
 | 
				
			||||||
(import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') +
 | 
					(import 'github.com/prometheus/node_exporter/docs/node-mixin/mixin.libsonnet') +
 | 
				
			||||||
(import './blackbox-exporter/blackbox-exporter.libsonnet') +
 | 
					(import './blackbox-exporter/blackbox-exporter.libsonnet') +
 | 
				
			||||||
(import './alertmanager/alertmanager.libsonnet') +
 | 
					 | 
				
			||||||
(import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') +
 | 
					(import 'github.com/prometheus/alertmanager/doc/alertmanager-mixin/mixin.libsonnet') +
 | 
				
			||||||
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') +
 | 
					(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') +
 | 
				
			||||||
(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') +
 | 
					(import 'github.com/prometheus-operator/prometheus-operator/jsonnet/mixin/mixin.libsonnet') +
 | 
				
			||||||
@ -23,6 +23,12 @@ local nodeExporter = import './node-exporter/node-exporter.libsonnet';
 | 
				
			|||||||
    version: '1.0.1',
 | 
					    version: '1.0.1',
 | 
				
			||||||
    image: 'quay.io/prometheus/node-exporter:v1.0.1',
 | 
					    image: 'quay.io/prometheus/node-exporter:v1.0.1',
 | 
				
			||||||
  }),
 | 
					  }),
 | 
				
			||||||
 | 
					  alertmanager: alertmanager({
 | 
				
			||||||
 | 
					    name: 'main',
 | 
				
			||||||
 | 
					    namespace: $._config.namespace,
 | 
				
			||||||
 | 
					    version: '0.21.0',
 | 
				
			||||||
 | 
					    image: 'quay.io/prometheus/alertmanager:v0.21.0',
 | 
				
			||||||
 | 
					  }),
 | 
				
			||||||
  kubePrometheus+:: {
 | 
					  kubePrometheus+:: {
 | 
				
			||||||
    namespace: {
 | 
					    namespace: {
 | 
				
			||||||
      apiVersion: 'v1',
 | 
					      apiVersion: 'v1',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user