From 9cf2ce9ffc320b9cf3dd02495b5af3d0e68b21c8 Mon Sep 17 00:00:00 2001 From: paulfantom <pawel@krupa.net.pl> Date: Wed, 13 Jan 2021 09:53:03 +0100 Subject: [PATCH] jsonnet: create function responsible for prometheus objects Signed-off-by: paulfantom <pawel@krupa.net.pl> --- .../kube-prometheus/kube-prometheus.libsonnet | 59 +- .../prometheus/prometheus.libsonnet | 812 +++++++++--------- 2 files changed, 439 insertions(+), 432 deletions(-) diff --git a/jsonnet/kube-prometheus/kube-prometheus.libsonnet b/jsonnet/kube-prometheus/kube-prometheus.libsonnet index 58392cc0..d5811aef 100644 --- a/jsonnet/kube-prometheus/kube-prometheus.libsonnet +++ b/jsonnet/kube-prometheus/kube-prometheus.libsonnet @@ -5,16 +5,15 @@ local blackboxExporter = import './blackbox-exporter/blackbox-exporter.libsonnet local kubeStateMetrics = import './kube-state-metrics/kube-state-metrics.libsonnet'; local nodeExporter = import './node-exporter/node-exporter.libsonnet'; local prometheusAdapter = import './prometheus-adapter/prometheus-adapter.libsonnet'; +local prometheus = import './prometheus/prometheus.libsonnet'; local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; (import 'github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet') + (import 'github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet') + -(import './prometheus/prometheus.libsonnet') + - { alertmanager: alertmanager({ - name: 'main', + name: $._config.alertmanagerName, namespace: $._config.namespace, version: '0.21.0', image: 'quay.io/prometheus/alertmanager:v0.21.0', @@ -34,6 +33,14 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; version: '1.0.1', image: 'quay.io/prometheus/node-exporter:v1.0.1', }), + prometheus: prometheus({ + namespace: $._config.namespace, + version: '2.24.0', + image: 'quay.io/prometheus/prometheus:v2.24.0', + name: $._config.prometheusName, + alertmanagerName: $._config.alertmanagerName, + rules: $.allRules, + }), prometheusAdapter: prometheusAdapter({ namespace: $._config.namespace, version: '0.8.2', @@ -42,9 +49,24 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; }), mixins+:: monitoringMixins({ namespace: $._config.namespace, - alertmanagerName: 'main', - prometheusName: 'k8s', + alertmanagerName: $._config.alertmanagerName, + prometheusName: $._config.prometheusName, }), + + // 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+:: { namespace: { apiVersion: 'v1', @@ -143,6 +165,8 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; } + { _config+:: { namespace: 'default', + prometheusName: 'k8s', + alertmanagerName: 'main', versions+:: { grafana: '7.3.5', kubeRbacProxy: 'v0.8.0' }, imageRepos+:: { kubeRbacProxy: 'quay.io/brancz/kube-rbac-proxy' }, @@ -187,24 +211,6 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; }, }, - local 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, - - local allDashboards = - $.mixins.nodeExporter.grafanaDashboards + - $.mixins.kubernetes.grafanaDashboards + - $.mixins.prometheus.grafanaDashboards, - - prometheus+:: { rules: allRules }, grafana+:: { labels: { 'app.kubernetes.io/name': 'grafana', @@ -212,7 +218,12 @@ local monitoringMixins = import './mixins/monitoring-mixins.libsonnet'; 'app.kubernetes.io/component': 'grafana', 'app.kubernetes.io/part-of': 'kube-prometheus', }, - dashboards: allDashboards, + // FIXME(paulfantom): Same as with rules and alerts. + // This should be gathering all dashboards from components without having to enumerate all dashboards. + dashboards: + $.mixins.nodeExporter.grafanaDashboards + + $.mixins.kubernetes.grafanaDashboards + + $.mixins.prometheus.grafanaDashboards, }, }, } diff --git a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet index fc99add3..e1b66923 100644 --- a/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet +++ b/jsonnet/kube-prometheus/prometheus/prometheus.libsonnet @@ -1,488 +1,484 @@ local relabelings = import 'kube-prometheus/dropping-deprecated-metrics-relabelings.libsonnet'; -{ - _config+:: { - namespace: 'default', - - versions+:: { prometheus: 'v2.22.1' }, - imageRepos+:: { prometheus: 'quay.io/prometheus/prometheus' }, - alertmanager+:: { name: 'main' }, +local defaults = { + local defaults = self, + namespace: error 'must provide namespace', + version: error 'must provide version', + image: error 'must provide image', + resources: { + requests: { memory: '400Mi' }, + }, - prometheus+:: { - name: 'k8s', - replicas: 2, - rules: {}, - namespaces: ['default', 'kube-system', $._config.namespace], - labels: { - 'app.kubernetes.io/name': 'prometheus', - 'app.kubernetes.io/version': $._config.versions.prometheus, - 'app.kubernetes.io/component': 'prometheus', - 'app.kubernetes.io/part-of': 'kube-prometheus', - }, - selectorLabels: { - [labelName]: $._config.prometheus.labels[labelName] - for labelName in std.objectFields($._config.prometheus.labels) - if !std.setMember(labelName, ['app.kubernetes.io/version']) - }, - }, + name: error 'must provide name', + alertmanagerName: error 'must provide alertmanagerName', + namespaces: ['default', 'kube-system', defaults.namespace], + replicas: 2, + rules: { + groups: [], + }, + commonLabels:: { + 'app.kubernetes.io/name': 'prometheus', + 'app.kubernetes.io/version': defaults.version, + 'app.kubernetes.io/component': 'prometheus', + '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']) + } + { prometheus: defaults.name }, +}; - prometheus+:: { - local p = self, - name:: $._config.prometheus.name, - namespace:: $._config.namespace, - roleBindingNamespaces:: $._config.prometheus.namespaces, - replicas:: $._config.prometheus.replicas, - prometheusRules:: $._config.prometheus.rules, - alertmanagerName:: $.alertmanager.service.metadata.name, +function(params) { + local p = self, + config:: defaults + params, + // Safety check + assert std.isObject(p.config.resources), - serviceAccount: { - apiVersion: 'v1', - kind: 'ServiceAccount', - metadata: { - name: 'prometheus-' + p.name, - namespace: p.namespace, - labels: $._config.prometheus.labels, - }, - }, - - service: { - apiVersion: 'v1', - kind: 'Service', - metadata: { - name: 'prometheus-' + p.name, - namespace: p.namespace, - labels: { prometheus: p.name } + $._config.prometheus.labels, - }, - spec: { - ports: [ - { name: 'web', targetPort: 'web', port: 9090 }, - ], - selector: { app: 'prometheus', prometheus: p.name } + $._config.prometheus.selectorLabels, - sessionAffinity: 'ClientIP', - }, + serviceAccount: { + apiVersion: 'v1', + kind: 'ServiceAccount', + metadata: { + name: 'prometheus-' + p.config.name, + namespace: p.config.namespace, + labels: p.config.commonLabels, }, + }, - rules: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'PrometheusRule', - metadata: { - labels: { - prometheus: p.name, - role: 'alert-rules', - } + $._config.prometheus.labels, - name: 'prometheus-' + p.name + '-rules', - namespace: p.namespace, - }, - spec: { - groups: p.prometheusRules.groups, - }, + service: { + apiVersion: 'v1', + kind: 'Service', + metadata: { + name: 'prometheus-' + p.config.name, + namespace: p.config.namespace, + labels: { prometheus: p.config.name } + p.config.commonLabels, }, - - roleBindingSpecificNamespaces: - local newSpecificRoleBinding(namespace) = { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'RoleBinding', - metadata: { - name: 'prometheus-' + p.name, - namespace: namespace, - labels: $._config.prometheus.labels, - }, - roleRef: { - apiGroup: 'rbac.authorization.k8s.io', - kind: 'Role', - name: 'prometheus-' + p.name, - }, - subjects: [{ - kind: 'ServiceAccount', - name: 'prometheus-' + p.name, - namespace: p.namespace, - }], - }; - { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'RoleBindingList', - items: [newSpecificRoleBinding(x) for x in p.roleBindingNamespaces], - }, - - clusterRole: { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'ClusterRole', - metadata: { - name: 'prometheus-' + p.name, - labels: $._config.prometheus.labels, - }, - rules: [ - { - apiGroups: [''], - resources: ['nodes/metrics'], - verbs: ['get'], - }, - { - nonResourceURLs: ['/metrics'], - verbs: ['get'], - }, + spec: { + ports: [ + { name: 'web', targetPort: 'web', port: 9090 }, ], + selector: { app: 'prometheus' } + p.config.selectorLabels, + sessionAffinity: 'ClientIP', }, + }, - roleConfig: { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'Role', - metadata: { - name: 'prometheus-' + p.name + '-config', - namespace: p.namespace, - labels: $._config.prometheus.labels, - }, - rules: [{ - apiGroups: [''], - resources: ['configmaps'], - verbs: ['get'], - }], + rules: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'PrometheusRule', + metadata: { + labels: { + prometheus: p.config.name, + role: 'alert-rules', + } + p.config.commonLabels, + name: 'prometheus-' + p.config.name + '-rules', + namespace: p.config.namespace, + }, + spec: { + groups: p.config.rules.groups, }, + }, - roleBindingConfig: { + roleBindingSpecificNamespaces: + local newSpecificRoleBinding(namespace) = { apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'RoleBinding', metadata: { - name: 'prometheus-' + p.name + '-config', - namespace: p.namespace, - labels: $._config.prometheus.labels, + name: 'prometheus-' + p.config.name, + namespace: namespace, + labels: p.config.commonLabels, }, roleRef: { apiGroup: 'rbac.authorization.k8s.io', kind: 'Role', - name: 'prometheus-' + p.name + '-config', + name: 'prometheus-' + p.config.name, }, subjects: [{ kind: 'ServiceAccount', - name: 'prometheus-' + p.name, - namespace: p.namespace, + name: 'prometheus-' + p.config.name, + namespace: p.config.namespace, }], + }; + { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'RoleBindingList', + items: [newSpecificRoleBinding(x) for x in p.config.namespaces], }, - clusterRoleBinding: { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'ClusterRoleBinding', - metadata: { - name: 'prometheus-' + p.name, - labels: $._config.prometheus.labels, + clusterRole: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'ClusterRole', + metadata: { + name: 'prometheus-' + p.config.name, + labels: p.config.commonLabels, + }, + rules: [ + { + apiGroups: [''], + resources: ['nodes/metrics'], + verbs: ['get'], }, - roleRef: { - apiGroup: 'rbac.authorization.k8s.io', - kind: 'ClusterRole', - name: 'prometheus-' + p.name, + { + nonResourceURLs: ['/metrics'], + verbs: ['get'], }, - subjects: [{ - kind: 'ServiceAccount', - name: 'prometheus-' + p.name, - namespace: p.namespace, - }], + ], + }, + + roleConfig: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'Role', + metadata: { + name: 'prometheus-' + p.config.name + '-config', + namespace: p.config.namespace, + labels: p.config.commonLabels, }, + rules: [{ + apiGroups: [''], + resources: ['configmaps'], + verbs: ['get'], + }], + }, - roleSpecificNamespaces: - local newSpecificRole(namespace) = { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'Role', - metadata: { - name: 'prometheus-' + p.name, - namespace: namespace, - labels: $._config.prometheus.labels, - }, - rules: [ - { - apiGroups: [''], - resources: ['services', 'endpoints', 'pods'], - verbs: ['get', 'list', 'watch'], - }, - { - apiGroups: ['extensions'], - resources: ['ingresses'], - verbs: ['get', 'list', 'watch'], - }, - ], - }; - { - apiVersion: 'rbac.authorization.k8s.io/v1', - kind: 'RoleList', - items: [newSpecificRole(x) for x in p.roleBindingNamespaces], - }, + roleBindingConfig: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'RoleBinding', + metadata: { + name: 'prometheus-' + p.config.name + '-config', + namespace: p.config.namespace, + labels: p.config.commonLabels, + }, + roleRef: { + apiGroup: 'rbac.authorization.k8s.io', + kind: 'Role', + name: 'prometheus-' + p.config.name + '-config', + }, + subjects: [{ + kind: 'ServiceAccount', + name: 'prometheus-' + p.config.name, + namespace: p.config.namespace, + }], + }, - prometheus: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'Prometheus', + clusterRoleBinding: { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'ClusterRoleBinding', + metadata: { + name: 'prometheus-' + p.config.name, + labels: p.config.commonLabels, + }, + roleRef: { + apiGroup: 'rbac.authorization.k8s.io', + kind: 'ClusterRole', + name: 'prometheus-' + p.config.name, + }, + subjects: [{ + kind: 'ServiceAccount', + name: 'prometheus-' + p.config.name, + namespace: p.config.namespace, + }], + }, + + roleSpecificNamespaces: + local newSpecificRole(namespace) = { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'Role', metadata: { - name: p.name, - namespace: p.namespace, - labels: { prometheus: p.name } + $._config.prometheus.labels, + name: 'prometheus-' + p.config.name, + namespace: namespace, + labels: p.config.commonLabels, }, - spec: { - replicas: p.replicas, - version: $._config.versions.prometheus, - image: $._config.imageRepos.prometheus + ':' + $._config.versions.prometheus, - podMetadata: { - labels: $._config.prometheus.labels, - }, - serviceAccountName: 'prometheus-' + p.name, - serviceMonitorSelector: {}, - podMonitorSelector: {}, - probeSelector: {}, - serviceMonitorNamespaceSelector: {}, - podMonitorNamespaceSelector: {}, - probeNamespaceSelector: {}, - nodeSelector: { 'kubernetes.io/os': 'linux' }, - ruleSelector: { - matchLabels: { - role: 'alert-rules', - prometheus: p.name, - }, - }, - resources: { - requests: { memory: '400Mi' }, - }, - alerting: { - alertmanagers: [{ - namespace: p.namespace, - name: p.alertmanagerName, - port: 'web', - }], + rules: [ + { + apiGroups: [''], + resources: ['services', 'endpoints', 'pods'], + verbs: ['get', 'list', 'watch'], }, - securityContext: { - runAsUser: 1000, - runAsNonRoot: true, - fsGroup: 2000, + { + apiGroups: ['extensions'], + resources: ['ingresses'], + verbs: ['get', 'list', 'watch'], }, - }, + ], + }; + { + apiVersion: 'rbac.authorization.k8s.io/v1', + kind: 'RoleList', + items: [newSpecificRole(x) for x in p.config.namespaces], }, - serviceMonitor: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'prometheus', - namespace: p.namespace, - labels: $._config.prometheus.labels, + prometheus: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'Prometheus', + metadata: { + name: p.config.name, + namespace: p.config.namespace, + labels: { prometheus: p.config.name } + p.config.commonLabels, + }, + spec: { + replicas: p.config.replicas, + version: p.config.version, + image: p.config.image, + podMetadata: { + labels: p.config.commonLabels, }, - spec: { - selector: { - matchLabels: { prometheus: p.name } + $._config.prometheus.selectorLabels, + serviceAccountName: 'prometheus-' + p.config.name, + serviceMonitorSelector: {}, + podMonitorSelector: {}, + probeSelector: {}, + serviceMonitorNamespaceSelector: {}, + podMonitorNamespaceSelector: {}, + probeNamespaceSelector: {}, + nodeSelector: { 'kubernetes.io/os': 'linux' }, + ruleSelector: { + matchLabels: { + role: 'alert-rules', + prometheus: p.config.name, }, - endpoints: [{ + }, + resources: p.config.resources, + alerting: { + alertmanagers: [{ + namespace: p.config.namespace, + name: 'alertmanager-' + p.config.alertmanagerName, port: 'web', - interval: '30s', }], }, + securityContext: { + runAsUser: 1000, + runAsNonRoot: true, + fsGroup: 2000, + }, }, + }, - serviceMonitorKubeScheduler: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'kube-scheduler', - namespace: p.namespace, - labels: { 'app.kubernetes.io/name': 'kube-scheduler' }, - }, - spec: { - jobLabel: 'app.kubernetes.io/name', - endpoints: [{ - port: 'https-metrics', - interval: '30s', - scheme: 'https', - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - tlsConfig: { insecureSkipVerify: true }, - }], - selector: { - matchLabels: { 'app.kubernetes.io/name': 'kube-scheduler' }, - }, - namespaceSelector: { - matchNames: ['kube-system'], - }, + serviceMonitor: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'prometheus', + namespace: p.config.namespace, + labels: p.config.commonLabels, + }, + spec: { + selector: { + matchLabels: p.config.selectorLabels, }, + endpoints: [{ + port: 'web', + interval: '30s', + }], }, + }, - serviceMonitorKubelet: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'kubelet', - namespace: p.namespace, - labels: { 'app.kubernetes.io/name': 'kubelet' }, + serviceMonitorKubeScheduler: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'kube-scheduler', + namespace: p.config.namespace, + labels: { 'app.kubernetes.io/name': 'kube-scheduler' }, + }, + spec: { + jobLabel: 'app.kubernetes.io/name', + endpoints: [{ + port: 'https-metrics', + interval: '30s', + scheme: 'https', + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + tlsConfig: { insecureSkipVerify: true }, + }], + selector: { + matchLabels: { 'app.kubernetes.io/name': 'kube-scheduler' }, }, - spec: { - jobLabel: 'k8s-app', - endpoints: [ - { - port: 'https-metrics', - scheme: 'https', - interval: '30s', - honorLabels: true, - tlsConfig: { insecureSkipVerify: true }, - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - metricRelabelings: relabelings, - relabelings: [{ - sourceLabels: ['__metrics_path__'], - targetLabel: 'metrics_path', - }], - }, - { - port: 'https-metrics', - scheme: 'https', - path: '/metrics/cadvisor', - interval: '30s', - honorLabels: true, - honorTimestamps: false, - tlsConfig: { - insecureSkipVerify: true, - }, - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - relabelings: [{ - sourceLabels: ['__metrics_path__'], - targetLabel: 'metrics_path', - }], - metricRelabelings: [ - // Drop a bunch of metrics which are disabled but still sent, see - // https://github.com/google/cadvisor/issues/1925. - { - sourceLabels: ['__name__'], - regex: 'container_(network_tcp_usage_total|network_udp_usage_total|tasks_state|cpu_load_average_10s)', - action: 'drop', - }, - ], - }, - { - port: 'https-metrics', - scheme: 'https', - path: '/metrics/probes', - interval: '30s', - honorLabels: true, - tlsConfig: { insecureSkipVerify: true }, - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - relabelings: [{ - sourceLabels: ['__metrics_path__'], - targetLabel: 'metrics_path', - }], - }, - ], - selector: { - matchLabels: { 'k8s-app': 'kubelet' }, - }, - namespaceSelector: { - matchNames: ['kube-system'], - }, + namespaceSelector: { + matchNames: ['kube-system'], }, }, + }, - serviceMonitorKubeControllerManager: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'kube-controller-manager', - namespace: p.namespace, - labels: { 'app.kubernetes.io/name': 'kube-controller-manager' }, - }, - spec: { - jobLabel: 'app.kubernetes.io/name', - endpoints: [{ + serviceMonitorKubelet: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'kubelet', + namespace: p.config.namespace, + labels: { 'app.kubernetes.io/name': 'kubelet' }, + }, + spec: { + jobLabel: 'k8s-app', + endpoints: [ + { port: 'https-metrics', - interval: '30s', scheme: 'https', + interval: '30s', + honorLabels: true, + tlsConfig: { insecureSkipVerify: true }, bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + metricRelabelings: relabelings, + relabelings: [{ + sourceLabels: ['__metrics_path__'], + targetLabel: 'metrics_path', + }], + }, + { + port: 'https-metrics', + scheme: 'https', + path: '/metrics/cadvisor', + interval: '30s', + honorLabels: true, + honorTimestamps: false, tlsConfig: { insecureSkipVerify: true, }, - metricRelabelings: relabelings + [ + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + relabelings: [{ + sourceLabels: ['__metrics_path__'], + targetLabel: 'metrics_path', + }], + metricRelabelings: [ + // Drop a bunch of metrics which are disabled but still sent, see + // https://github.com/google/cadvisor/issues/1925. { sourceLabels: ['__name__'], - regex: 'etcd_(debugging|disk|request|server).*', + regex: 'container_(network_tcp_usage_total|network_udp_usage_total|tasks_state|cpu_load_average_10s)', action: 'drop', }, ], - }], - selector: { - matchLabels: { 'app.kubernetes.io/name': 'kube-controller-manager' }, }, - namespaceSelector: { - matchNames: ['kube-system'], + { + port: 'https-metrics', + scheme: 'https', + path: '/metrics/probes', + interval: '30s', + honorLabels: true, + tlsConfig: { insecureSkipVerify: true }, + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + relabelings: [{ + sourceLabels: ['__metrics_path__'], + targetLabel: 'metrics_path', + }], }, + ], + selector: { + matchLabels: { 'k8s-app': 'kubelet' }, + }, + namespaceSelector: { + matchNames: ['kube-system'], }, }, + }, - serviceMonitorApiserver: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'kube-apiserver', - namespace: p.namespace, - labels: { 'app.kubernetes.io/name': 'apiserver' }, - }, - spec: { - jobLabel: 'component', - selector: { - matchLabels: { - component: 'apiserver', - provider: 'kubernetes', - }, - }, - namespaceSelector: { - matchNames: ['default'], + serviceMonitorKubeControllerManager: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'kube-controller-manager', + namespace: p.config.namespace, + labels: { 'app.kubernetes.io/name': 'kube-controller-manager' }, + }, + spec: { + jobLabel: 'app.kubernetes.io/name', + endpoints: [{ + port: 'https-metrics', + interval: '30s', + scheme: 'https', + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + tlsConfig: { + insecureSkipVerify: true, }, - endpoints: [{ - port: 'https', - interval: '30s', - scheme: 'https', - tlsConfig: { - caFile: '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt', - serverName: 'kubernetes', + metricRelabelings: relabelings + [ + { + sourceLabels: ['__name__'], + regex: 'etcd_(debugging|disk|request|server).*', + action: 'drop', }, - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - metricRelabelings: relabelings + [ - { - sourceLabels: ['__name__'], - regex: 'etcd_(debugging|disk|server).*', - action: 'drop', - }, - { - sourceLabels: ['__name__'], - regex: 'apiserver_admission_controller_admission_latencies_seconds_.*', - action: 'drop', - }, - { - sourceLabels: ['__name__'], - regex: 'apiserver_admission_step_admission_latencies_seconds_.*', - action: 'drop', - }, - { - sourceLabels: ['__name__', 'le'], - regex: 'apiserver_request_duration_seconds_bucket;(0.15|0.25|0.3|0.35|0.4|0.45|0.6|0.7|0.8|0.9|1.25|1.5|1.75|2.5|3|3.5|4.5|6|7|8|9|15|25|30|50)', - action: 'drop', - }, - ], - }], + ], + }], + selector: { + matchLabels: { 'app.kubernetes.io/name': 'kube-controller-manager' }, + }, + namespaceSelector: { + matchNames: ['kube-system'], }, }, + }, - serviceMonitorCoreDNS: { - apiVersion: 'monitoring.coreos.com/v1', - kind: 'ServiceMonitor', - metadata: { - name: 'coredns', - namespace: p.namespace, - labels: { 'app.kubernetes.io/name': 'coredns' }, - }, - spec: { - jobLabel: 'app.kubernetes.io/name', - selector: { - matchLabels: { 'app.kubernetes.io/name': 'kube-dns' }, + serviceMonitorApiserver: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'kube-apiserver', + namespace: p.config.namespace, + labels: { 'app.kubernetes.io/name': 'apiserver' }, + }, + spec: { + jobLabel: 'component', + selector: { + matchLabels: { + component: 'apiserver', + provider: 'kubernetes', }, - namespaceSelector: { - matchNames: ['kube-system'], + }, + namespaceSelector: { + matchNames: ['default'], + }, + endpoints: [{ + port: 'https', + interval: '30s', + scheme: 'https', + tlsConfig: { + caFile: '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt', + serverName: 'kubernetes', }, - endpoints: [{ - port: 'metrics', - interval: '15s', - bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', - }], + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + metricRelabelings: relabelings + [ + { + sourceLabels: ['__name__'], + regex: 'etcd_(debugging|disk|server).*', + action: 'drop', + }, + { + sourceLabels: ['__name__'], + regex: 'apiserver_admission_controller_admission_latencies_seconds_.*', + action: 'drop', + }, + { + sourceLabels: ['__name__'], + regex: 'apiserver_admission_step_admission_latencies_seconds_.*', + action: 'drop', + }, + { + sourceLabels: ['__name__', 'le'], + regex: 'apiserver_request_duration_seconds_bucket;(0.15|0.25|0.3|0.35|0.4|0.45|0.6|0.7|0.8|0.9|1.25|1.5|1.75|2.5|3|3.5|4.5|6|7|8|9|15|25|30|50)', + action: 'drop', + }, + ], + }], + }, + }, + + serviceMonitorCoreDNS: { + apiVersion: 'monitoring.coreos.com/v1', + kind: 'ServiceMonitor', + metadata: { + name: 'coredns', + namespace: p.config.namespace, + labels: { 'app.kubernetes.io/name': 'coredns' }, + }, + spec: { + jobLabel: 'app.kubernetes.io/name', + selector: { + matchLabels: { 'app.kubernetes.io/name': 'kube-dns' }, + }, + namespaceSelector: { + matchNames: ['kube-system'], }, + endpoints: [{ + port: 'metrics', + interval: '15s', + bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token', + }], }, }, } -- GitLab