update monitoring stack to latest
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Tobias Brunner 2020-05-12 19:42:23 +02:00
parent 7a98de6d1f
commit 301e297d45
56 changed files with 16130 additions and 15701 deletions

View file

@ -18,7 +18,7 @@
"subdir": "Documentation/etcd-mixin" "subdir": "Documentation/etcd-mixin"
} }
}, },
"version": "4a64198a9f424549c64d6c2eeb92eed8ff3a7bd8", "version": "ab494956bffb94b5e5cb088cebcf7572aad70d4a",
"sum": "pk7mLpdUrHuJKkj2vhD6LGMU7P+oYYooBXAeZyZa398=" "sum": "pk7mLpdUrHuJKkj2vhD6LGMU7P+oYYooBXAeZyZa398="
}, },
{ {
@ -28,8 +28,8 @@
"subdir": "jsonnet/kube-prometheus" "subdir": "jsonnet/kube-prometheus"
} }
}, },
"version": "d07466766d46710e54a627f913eea5661382331a", "version": "f58d7b5695072bfcc15039969fd491a90b011aa8",
"sum": "vFv2xVX1SALKIOlQmcIvQ2pDKXqAbdBJ6zdGIrZUcis=" "sum": "0LX0oFnq5YHb3XNWxoakJiJQWFkf38bEWA1226nk0BU="
}, },
{ {
"source": { "source": {
@ -38,8 +38,8 @@
"subdir": "jsonnet/prometheus-operator" "subdir": "jsonnet/prometheus-operator"
} }
}, },
"version": "00cbd4911f931380cf9e19d771d7ebae1ec0a807", "version": "d0a871b710de7b764c05ced98dbd1eb32a681790",
"sum": "PfB8G2nfy3e/BrXS1ayymsRRFJvQLWT+oY5aqLS0tE8=" "sum": "cIOKRTNBUOl3a+QsaA/NjClmZAhyVJHlDFReKlXJBAs="
}, },
{ {
"source": { "source": {
@ -48,8 +48,8 @@
"subdir": "grafonnet" "subdir": "grafonnet"
} }
}, },
"version": "f1ceb29c053445881cf47c8761225d463273f7e2", "version": "7f971cae3e4dc5dc26d1a1991868e4810f73d6fb",
"sum": "PQ1u4FqaLkqmYF1tE/BNx6Db8roTei0uqo+SKCwRlbo=" "sum": "/7/gQuDrIcbpbpFCMWhe63RtZ66iT5ECTlJdhVTtUTM="
}, },
{ {
"source": { "source": {
@ -58,7 +58,7 @@
"subdir": "grafana-builder" "subdir": "grafana-builder"
} }
}, },
"version": "d851699bb178b62deabb5532cdb9e48c1a83b1b9", "version": "461d09cbda1bf520f94628c8159b444d4467862f",
"sum": "slxrtftVDiTlQK22ertdfrg4Epnq97gdrLI63ftUfaE=" "sum": "slxrtftVDiTlQK22ertdfrg4Epnq97gdrLI63ftUfaE="
}, },
{ {
@ -79,8 +79,8 @@
"subdir": "" "subdir": ""
} }
}, },
"version": "90a6d132e3c9558c0690153c9b404b16b4754139", "version": "37f8263d17bc9d429fece3d345365650587bc56c",
"sum": "RZn1B0sbrPEKenxKIrXGdDN3NGb9OesQ+IA5whAP4ik=" "sum": "n8CG7muquuYMFV03s5D3GA1JVyDLSFifcNRs2JpNfvA="
}, },
{ {
"source": { "source": {
@ -89,7 +89,7 @@
"subdir": "lib/promgrafonnet" "subdir": "lib/promgrafonnet"
} }
}, },
"version": "90a6d132e3c9558c0690153c9b404b16b4754139", "version": "37f8263d17bc9d429fece3d345365650587bc56c",
"sum": "VhgBM39yv0f4bKv8VfGg4FXkg573evGDRalip9ypKbc=" "sum": "VhgBM39yv0f4bKv8VfGg4FXkg573evGDRalip9ypKbc="
}, },
{ {
@ -99,7 +99,7 @@
"subdir": "jsonnet/kube-state-metrics" "subdir": "jsonnet/kube-state-metrics"
} }
}, },
"version": "765afc98be4b2a53b3b12c48df2cf93379932a29", "version": "1d132e7e728face5ba35be3f3310139c98f3a001",
"sum": "cJjGZaLBjcIGrLHZLjRPU9c3KL+ep9rZTb9dbALSKqA=" "sum": "cJjGZaLBjcIGrLHZLjRPU9c3KL+ep9rZTb9dbALSKqA="
}, },
{ {
@ -109,7 +109,7 @@
"subdir": "jsonnet/kube-state-metrics-mixin" "subdir": "jsonnet/kube-state-metrics-mixin"
} }
}, },
"version": "765afc98be4b2a53b3b12c48df2cf93379932a29", "version": "1d132e7e728face5ba35be3f3310139c98f3a001",
"sum": "E1GGavnf9PCWBm4WVrxWnc0FIj72UcbcweqGioWrOdU=" "sum": "E1GGavnf9PCWBm4WVrxWnc0FIj72UcbcweqGioWrOdU="
}, },
{ {
@ -129,7 +129,7 @@
"subdir": "documentation/prometheus-mixin" "subdir": "documentation/prometheus-mixin"
} }
}, },
"version": "0e2004f6fbe9eeddcd0c0084e401b5acb61760a4", "version": "da217cbde262c056e5582a56d0ef7d353f7a163b",
"sum": "kRb3XBTe/AALDcaTFfyuiKqzhxtLvihBkVkvJ5cUd/I=", "sum": "kRb3XBTe/AALDcaTFfyuiKqzhxtLvihBkVkvJ5cUd/I=",
"name": "prometheus" "name": "prometheus"
}, },

View file

@ -6,7 +6,7 @@ metadata:
namespace: monitoring namespace: monitoring
spec: spec:
encryptedData: encryptedData:
alertmanager.yaml: AgB6MMnL2RsryYbKhQIyJvqXopB4wtUdotRShqk32jFScXUaJKMxPFF8t1Uhwpt1UPcjdrzOElEdHVX9nYj2LK+KGa23L5IV6ZACfjFLbHsn2PHA/kWDNCS7hLaAahSO2ByfoAnoGQp8OejsYDCSsp4NtkM+ooNgw1mGbO/yVNZZRDzccVLZFwJchsR0+26KEqzL3eHtsG40e7lf71uxBgYhvggukEeDfuuPDkKG4YeFJSQ7clURFhckbe+/MmnP+MHw7K9xkdlANl4Tu+e2+njm32PuZ34PKUrLQJBFSHG3DpGjPJBxBZbV7GP+T+VK5GQHrUZOewjgp5e4fDrqZvOVoASPJqY1C961bLjhwsTC8uzdJVHE78LR29hWnjlDBEbQdNsGwDoAHG0yBiC5N0rWfm+XNLh1+e96IF4OKp0/BVqNJaxrs6jlmTDMQEp4Q8JwVTqNSKfFr2jMMW0uI3ggqPAXnWDsLWLd9pD6gpbqGHELmG7dmPi2FQWBlnLXf4VllFbYzRpLZ12hKILBzWuhY6OkCSXfb/bbLyfxyjO8rWvgKxcm9RpjdwtiU4+wT6KKc1/x9nSvqqgaXq81ecHZr8EbJz6nAE/+0Qm1WhQ5wB89RtbX0K4D3i0e7P7JEB3mrSwdSxUd1JLyVKesWKwDiIiwpA7ljD6cTgmLS/00be1eHreqSJ0SLSODBkIadIH4Kc0tyO3/dbdRTkQC3pTQp5q7gVfJzPEGcmZFG0OUHHDXgigS4VUDalpTnaXXDj0Gjuq0+rf1Gu3ZuVC1QKwZ3W26eUrUz4NLtRDtJNYTgsrtJs+T3T3iQHjoO53vTp1TFDX6zGTaJd7yzis5CZWVIn4K8t1rcR/MexzR/Dk46HBLVJXuL0uN17RvFuKsCIFy0rR0BH8qbmWUwiqEfjDG4csBPgH5xAHWGVJHfPStILSZbDoZ/twms391umr+eVeZrSyjgb/W9MSsikqTJaMRH6gHByqljm5/fdmnF3G+Pe6wT8UTM4E1gSOwfmVaow2sqLCT0wdL/ZVOaJBPIG5MIBS7nSQ9nMsDVCmQp7TUD/XNp0M9hYB96AbJOElONQq+0aPzfMgyZElsAMO6Odkr8FBSitMe8lSz2WJvjF7XWPvOQrj1eaXOwNKawArvBjwMqEX5lnMcjHKFgSAOzeWjcEdnTFpifg6kmQn9hO2HKwNggXO8evT9undrnm8qj6vPcc+oXEgs2RlYk5pHUbf4V+O1KxVSBWJCIC2sXyacHI3Emkb5qkTw+Wv4BXla2JJSbLWn9o1hgOI88xpyZpnFG4A1Y/XVQa2002TFccF78UjxcFSA2c1XL0uQxJFkERNxwinrCPjXqA1i7CnCYH53ZpAGj/TqwAzZSZ1FN3L1s+Ro0ASiN/92ppeHhXGPhhTLhj1i4rr2qQ1XhixDSMQLgctAN0ebe2lnjG07yZodRaZbHHl4GfYfcxLCqemwHg5xVzbS4XP+70/hoWes9UVygK9rkzTUUN9IbbtZpgpGplnT3MymbqbYbrlAU59U/vSpxS6K3RUiTMz5IK6p5u7baMYeVuthUy3LU9r07P+vicwAlEQ6jEWKXQD1Q/Vhc5H0wUgZrTBcgo2w9JwT4QUhO1qzIKiUmMEWn1bDh1GaurRZtMRgjP5sfWGMGtUqMCVmAZvUbYsr8k6+1nn93xmn78QNOabtth8Ayfp6vHYeF4h3xA== alertmanager.yaml: AgBXsELNPdwcMBR9vl4ZCj18D3aQHjsVXITCD2cshBl+o9fKHUkCYg2u9TOvt26Osi1rLo9ZV1QZthNBbp/65g+0l9lUXbWMeCHy80fCc0ISWf1+MN+L6Yeh71sNYY81HfaLoDWY48roanGN4IIF0hcEryVKfY9gOUzDkEag7ZY4lJ60/irUzUlTIEdak6IlwzGKpaokn0yitpbYRR1rkxIpdQ7jVJhCE5fSEw0xXU7NYuqOpKeYEZkHFCEMnLVnzIAVtMpJ0asLTnRFIj4hZa13USsX/Lm98Q41QTO0FpTNMurlCLgQPDTI5pdKJzyDFFOsMBwscO5T35ykXHcybsf6ykZ12gOlfhjfbU746/jCB3j5H0pGLmTRS1kChGaJOLpyXyTQeGpk79aJKOyn2ZaLxLpkfgFlK6amLH8QfOUJSTiCWvpMks38wnWlYKngT36kogUROY/72vBJKrz1bMkwOR+4ed4i+3KV/6K6d6vcMemmrXtgT8Z+2656vjLTDDIM1ztogACDI+urS49OigXiutzJlqbMGh2/IcSOeDaFO42qe1m4fDONAs4t0asuXmBv+eYbFffyRxVzkt5Or8jX1UUuy3ynzwHjjA+/PCVo5co32oL+kKQtM2FdYaNoHcikSNDog/XkUaTetE6WQAyS8o5+fT6SitirGOmQJyazYW71QT6O1aBW0vhowhcsvHxsV/5sfhZ7+M1SAdn/gI3VEYS46NNk4U3jg2u6JAXNbE4nObevS71HqcSRQjyPR+Od1DuCYiUm6HBk2lsIOZOstcLrhRpiKH7fNzEIlZUsWPwrosWMB+quks8tb1E2Xy4y8DkIyQ4hK9frNOfvORavjNUaBphw55A0/Bb9iXRIZ51KbtpqtEJWzO9Fhbu0iEoYLnkzx1h8JbSy+oHjPRIZJAwMdtLoWfc5liMrYaQu5/Y6qWWinnmZRKusQJLSgQIBcWQsJjwLZbbL/wvUU9Un6BBsMbH8sHdmqh1a8QPspFwFmOcxWWNrloHgACQfkDoh27LnMCFa7qloKI4JsQcp3uASiaOUEaU1Zidty3Y2zc8pvTY5iJhiagXIm7AnJLPzpmApqd6rniuan4IqR/rRW1yKXzvgRFW1B05tKSlg4XaZ87safhG8AAE2v0m3AStD7B68Ol7LGusGBiJcPJeGrDYWXae4TG+QcESdJ1GeulERjGtCgDvqCl/ylNYsR9Ud3wwk773JkIaq72OAi02pT01iruLYKAKIGZUyZOAwmWbkLvAMPB6HdKOq/oP/7uaylZu8YeuIFmj5gxv1fU2NQZecFQOwMww0D++6P8AhHRIeagSBAg3XFXhTNIzmOhqawdGNru2pfWSIBM32cGuJOdRQB+tYcEnaB/OFFSfAaiMbMTIgHhxHTHujPvyHIUXzG9CXSca+XjflP7e4KiBk3ztunWFlX/Dc42XHMIH+4vGTgYsMhZJl9Dyou/417Tr40vaSFQqfn6TaYQxH4zYbZt3dL3n9VtNlMRfPRDyjHEcuRib1DPPU4soI5jTVN6irfZ27IqFQNSqHsEBhhUV29M5T9UpuAhxR6l1O0WFEnumJbm4U72PEA2v5L/ooR4yKdO3/61MbCYjgI+nfFkxkj1Zd1yx789byhj5zeJCnTXw0SJvpSYCcQAAwd3a54qwO341NMwwKhvG57gBCy4j6fMtQY78fwbCFdCfGX7kKYfjdaw==
template: template:
metadata: metadata:
creationTimestamp: null creationTimestamp: null

View file

@ -25,7 +25,7 @@ spec:
- --metrics-relist-interval=1m - --metrics-relist-interval=1m
- --prometheus-url=http://prometheus-k8s.monitoring.svc:9090/ - --prometheus-url=http://prometheus-k8s.monitoring.svc:9090/
- --secure-port=6443 - --secure-port=6443
image: quay.io/coreos/k8s-prometheus-adapter-amd64:v0.5.0 image: quay.io/coreos/k8s-prometheus-adapter-amd64:v0.7.0
name: prometheus-adapter name: prometheus-adapter
ports: ports:
- containerPort: 6443 - containerPort: 6443

View file

@ -4,7 +4,7 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
namespace: monitoring namespace: monitoring
spec: spec:
@ -19,4 +19,4 @@ spec:
matchLabels: matchLabels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0

View file

@ -524,31 +524,31 @@ spec:
sum by (cluster, namespace, pod, container) ( sum by (cluster, namespace, pod, container) (
rate(container_cpu_usage_seconds_total{job="kubelet", metrics_path="/metrics/cadvisor", image!="", container!="POD"}[5m]) rate(container_cpu_usage_seconds_total{job="kubelet", metrics_path="/metrics/cadvisor", image!="", container!="POD"}[5m])
) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) ( ) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) (
1, max by(cluster, namespace, pod, node) (kube_pod_info) 1, max by(cluster, namespace, pod, node) (kube_pod_info{node!=""})
) )
record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate
- expr: | - expr: |
container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", image!=""} container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
record: node_namespace_pod_container:container_memory_working_set_bytes record: node_namespace_pod_container:container_memory_working_set_bytes
- expr: | - expr: |
container_memory_rss{job="kubelet", metrics_path="/metrics/cadvisor", image!=""} container_memory_rss{job="kubelet", metrics_path="/metrics/cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
record: node_namespace_pod_container:container_memory_rss record: node_namespace_pod_container:container_memory_rss
- expr: | - expr: |
container_memory_cache{job="kubelet", metrics_path="/metrics/cadvisor", image!=""} container_memory_cache{job="kubelet", metrics_path="/metrics/cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
record: node_namespace_pod_container:container_memory_cache record: node_namespace_pod_container:container_memory_cache
- expr: | - expr: |
container_memory_swap{job="kubelet", metrics_path="/metrics/cadvisor", image!=""} container_memory_swap{job="kubelet", metrics_path="/metrics/cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
record: node_namespace_pod_container:container_memory_swap record: node_namespace_pod_container:container_memory_swap
- expr: | - expr: |
@ -663,12 +663,12 @@ spec:
- name: node.rules - name: node.rules
rules: rules:
- expr: | - expr: |
sum(min(kube_pod_info) by (cluster, node)) sum(min(kube_pod_info{node!=""}) by (cluster, node))
record: ':kube_pod_info_node_count:' record: ':kube_pod_info_node_count:'
- expr: | - expr: |
topk by(namespace, pod) (1, topk by(namespace, pod) (1,
max by (node, namespace, pod) ( max by (node, namespace, pod) (
label_replace(kube_pod_info{job="kube-state-metrics"}, "pod", "$1", "pod", "(.*)") label_replace(kube_pod_info{job="kube-state-metrics",node!=""}, "pod", "$1", "pod", "(.*)")
)) ))
record: 'node_namespace_pod:kube_pod_info:' record: 'node_namespace_pod:kube_pod_info:'
- expr: | - expr: |
@ -977,7 +977,7 @@ spec:
}}) is restarting {{ printf "%.2f" $value }} times / 5 minutes. }}) is restarting {{ printf "%.2f" $value }} times / 5 minutes.
runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping
expr: | expr: |
rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[15m]) * 60 * 5 > 0 rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[5m]) * 60 * 5 > 0
for: 15m for: 15m
labels: labels:
severity: warning severity: warning
@ -987,7 +987,13 @@ spec:
state for longer than 15 minutes. state for longer than 15 minutes.
runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready
expr: | expr: |
sum by (namespace, pod) (max by(namespace, pod) (kube_pod_status_phase{job="kube-state-metrics", phase=~"Pending|Unknown"}) * on(namespace, pod) group_left(owner_kind) max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})) > 0 sum by (namespace, pod) (
max by(namespace, pod) (
kube_pod_status_phase{job="kube-state-metrics", phase=~"Pending|Unknown"}
) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (
1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})
)
) > 0
for: 15m for: 15m
labels: labels:
severity: warning severity: warning
@ -1472,8 +1478,7 @@ spec:
message: '{{ $labels.node }} is unreachable and some workloads may be rescheduled.' message: '{{ $labels.node }} is unreachable and some workloads may be rescheduled.'
runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodeunreachable runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodeunreachable
expr: | expr: |
kube_node_spec_taint{job="kube-state-metrics",key="node.kubernetes.io/unreachable",effect="NoSchedule"} == 1 (kube_node_spec_taint{job="kube-state-metrics",key="node.kubernetes.io/unreachable",effect="NoSchedule"} unless ignoring(key,value) kube_node_spec_taint{job="kube-state-metrics",key="ToBeDeletedByClusterAutoscaler"}) == 1
for: 2m
labels: labels:
severity: warning severity: warning
- alert: KubeletTooManyPods - alert: KubeletTooManyPods

View file

@ -1,4 +1,4 @@
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
@ -13,7 +13,9 @@ spec:
plural: podmonitors plural: podmonitors
singular: podmonitor singular: podmonitor
scope: Namespaced scope: Namespaced
validation: versions:
- name: v1
schema:
openAPIV3Schema: openAPIV3Schema:
description: PodMonitor defines monitoring for a set of pods. description: PodMonitor defines monitoring for a set of pods.
properties: properties:
@ -53,8 +55,8 @@ spec:
podMetricsEndpoints: podMetricsEndpoints:
description: A list of endpoints allowed as part of this PodMonitor. description: A list of endpoints allowed as part of this PodMonitor.
items: items:
description: PodMetricsEndpoint defines a scrapeable endpoint of a description: PodMetricsEndpoint defines a scrapeable endpoint of
Kubernetes Pod serving Prometheus metrics. a Kubernetes Pod serving Prometheus metrics.
properties: properties:
honorLabels: honorLabels:
description: HonorLabels chooses the metric's labels on collisions description: HonorLabels chooses the metric's labels on collisions
@ -68,20 +70,21 @@ spec:
description: Interval at which metrics should be scraped description: Interval at which metrics should be scraped
type: string type: string
metricRelabelings: metricRelabelings:
description: MetricRelabelConfigs to apply to samples before ingestion. description: MetricRelabelConfigs to apply to samples before
ingestion.
items: items:
description: 'RelabelConfig allows dynamic rewriting of the description: 'RelabelConfig allows dynamic rewriting of the
label set, being applied to samples before ingestion. It defines label set, being applied to samples before ingestion. It
`<metric_relabel_configs>`-section of Prometheus configuration. defines `<metric_relabel_configs>`-section of Prometheus
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties: properties:
action: action:
description: Action to perform based on regex matching. description: Action to perform based on regex matching.
Default is 'replace' Default is 'replace'
type: string type: string
modulus: modulus:
description: Modulus to take of the hash of the source label description: Modulus to take of the hash of the source
values. label values.
format: int64 format: int64
type: integer type: integer
regex: regex:
@ -100,8 +103,8 @@ spec:
sourceLabels: sourceLabels:
description: The source labels select values from existing description: The source labels select values from existing
labels. Their content is concatenated using the configured labels. Their content is concatenated using the configured
separator and matched against the configured regular expression separator and matched against the configured regular
for the replace, keep, and drop actions. expression for the replace, keep, and drop actions.
items: items:
type: string type: string
type: array type: array
@ -135,17 +138,17 @@ spec:
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
items: items:
description: 'RelabelConfig allows dynamic rewriting of the description: 'RelabelConfig allows dynamic rewriting of the
label set, being applied to samples before ingestion. It defines label set, being applied to samples before ingestion. It
`<metric_relabel_configs>`-section of Prometheus configuration. defines `<metric_relabel_configs>`-section of Prometheus
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties: properties:
action: action:
description: Action to perform based on regex matching. description: Action to perform based on regex matching.
Default is 'replace' Default is 'replace'
type: string type: string
modulus: modulus:
description: Modulus to take of the hash of the source label description: Modulus to take of the hash of the source
values. label values.
format: int64 format: int64
type: integer type: integer
regex: regex:
@ -164,8 +167,8 @@ spec:
sourceLabels: sourceLabels:
description: The source labels select values from existing description: The source labels select values from existing
labels. Their content is concatenated using the configured labels. Their content is concatenated using the configured
separator and matched against the configured regular expression separator and matched against the configured regular
for the replace, keep, and drop actions. expression for the replace, keep, and drop actions.
items: items:
type: string type: string
type: array type: array
@ -208,24 +211,25 @@ spec:
description: matchExpressions is a list of label selector requirements. description: matchExpressions is a list of label selector requirements.
The requirements are ANDed. The requirements are ANDed.
items: items:
description: A label selector requirement is a selector that contains description: A label selector requirement is a selector that
values, a key, and an operator that relates the key and values. contains values, a key, and an operator that relates the key
and values.
properties: properties:
key: key:
description: key is the label key that the selector applies description: key is the label key that the selector applies
to. to.
type: string type: string
operator: operator:
description: operator represents a key's relationship to a description: operator represents a key's relationship to
set of values. Valid operators are In, NotIn, Exists and a set of values. Valid operators are In, NotIn, Exists
DoesNotExist. and DoesNotExist.
type: string type: string
values: values:
description: values is an array of string values. If the operator description: values is an array of string values. If the
is In or NotIn, the values array must be non-empty. If the operator is In or NotIn, the values array must be non-empty.
operator is Exists or DoesNotExist, the values array must If the operator is Exists or DoesNotExist, the values
be empty. This array is replaced during a strategic merge array must be empty. This array is replaced during a strategic
patch. merge patch.
items: items:
type: string type: string
type: array type: array
@ -239,8 +243,8 @@ spec:
type: string type: string
description: matchLabels is a map of {key,value} pairs. A single description: matchLabels is a map of {key,value} pairs. A single
{key,value} in the matchLabels map is equivalent to an element {key,value} in the matchLabels map is equivalent to an element
of matchExpressions, whose key field is "key", the operator is of matchExpressions, whose key field is "key", the operator
"In", and the values array contains only "value". The requirements is "In", and the values array contains only "value". The requirements
are ANDed. are ANDed.
type: object type: object
type: object type: object
@ -251,9 +255,6 @@ spec:
required: required:
- spec - spec
type: object type: object
version: v1
versions:
- name: v1
served: true served: true
storage: true storage: true
status: status:

View file

@ -1,4 +1,4 @@
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
@ -13,7 +13,9 @@ spec:
plural: prometheusrules plural: prometheusrules
singular: prometheusrule singular: prometheusrule
scope: Namespaced scope: Namespaced
validation: versions:
- name: v1
schema:
openAPIV3Schema: openAPIV3Schema:
description: PrometheusRule defines alerting rules for a Prometheus instance description: PrometheusRule defines alerting rules for a Prometheus instance
properties: properties:
@ -36,8 +38,8 @@ spec:
description: Content of Prometheus rule file description: Content of Prometheus rule file
items: items:
description: 'RuleGroup is a list of sequentially evaluated recording description: 'RuleGroup is a list of sequentially evaluated recording
and alerting rules. Note: PartialResponseStrategy is only used by and alerting rules. Note: PartialResponseStrategy is only used
ThanosRuler and will be ignored by Prometheus instances. Valid by ThanosRuler and will be ignored by Prometheus instances. Valid
values for this field are ''warn'' or ''abort''. More info: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response' values for this field are ''warn'' or ''abort''. More info: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response'
properties: properties:
interval: interval:
@ -82,9 +84,6 @@ spec:
required: required:
- spec - spec
type: object type: object
version: v1
versions:
- name: v1
served: true served: true
storage: true storage: true
status: status:

View file

@ -1,4 +1,4 @@
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
annotations: annotations:
@ -13,7 +13,9 @@ spec:
plural: servicemonitors plural: servicemonitors
singular: servicemonitor singular: servicemonitor
scope: Namespaced scope: Namespaced
validation: versions:
- name: v1
schema:
openAPIV3Schema: openAPIV3Schema:
description: ServiceMonitor defines monitoring for a set of services. description: ServiceMonitor defines monitoring for a set of services.
properties: properties:
@ -44,8 +46,8 @@ spec:
basic authentication More info: https://prometheus.io/docs/operating/configuration/#endpoints' basic authentication More info: https://prometheus.io/docs/operating/configuration/#endpoints'
properties: properties:
password: password:
description: The secret in the service monitor namespace that description: The secret in the service monitor namespace
contains the password for authentication. that contains the password for authentication.
properties: properties:
key: key:
description: The key of the secret to select from. Must description: The key of the secret to select from. Must
@ -63,8 +65,8 @@ spec:
- key - key
type: object type: object
username: username:
description: The secret in the service monitor namespace that description: The secret in the service monitor namespace
contains the username for authentication. that contains the username for authentication.
properties: properties:
key: key:
description: The key of the secret to select from. Must description: The key of the secret to select from. Must
@ -91,16 +93,16 @@ spec:
service monitor and accessible by the Prometheus Operator. service monitor and accessible by the Prometheus Operator.
properties: properties:
key: key:
description: The key of the secret to select from. Must be description: The key of the secret to select from. Must
a valid secret key. be a valid secret key.
type: string type: string
name: name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?' TODO: Add other useful fields. apiVersion, kind, uid?'
type: string type: string
optional: optional:
description: Specify whether the Secret or its key must be description: Specify whether the Secret or its key must
defined be defined
type: boolean type: boolean
required: required:
- key - key
@ -117,20 +119,21 @@ spec:
description: Interval at which metrics should be scraped description: Interval at which metrics should be scraped
type: string type: string
metricRelabelings: metricRelabelings:
description: MetricRelabelConfigs to apply to samples before ingestion. description: MetricRelabelConfigs to apply to samples before
ingestion.
items: items:
description: 'RelabelConfig allows dynamic rewriting of the description: 'RelabelConfig allows dynamic rewriting of the
label set, being applied to samples before ingestion. It defines label set, being applied to samples before ingestion. It
`<metric_relabel_configs>`-section of Prometheus configuration. defines `<metric_relabel_configs>`-section of Prometheus
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties: properties:
action: action:
description: Action to perform based on regex matching. description: Action to perform based on regex matching.
Default is 'replace' Default is 'replace'
type: string type: string
modulus: modulus:
description: Modulus to take of the hash of the source label description: Modulus to take of the hash of the source
values. label values.
format: int64 format: int64
type: integer type: integer
regex: regex:
@ -149,8 +152,8 @@ spec:
sourceLabels: sourceLabels:
description: The source labels select values from existing description: The source labels select values from existing
labels. Their content is concatenated using the configured labels. Their content is concatenated using the configured
separator and matched against the configured regular expression separator and matched against the configured regular
for the replace, keep, and drop actions. expression for the replace, keep, and drop actions.
items: items:
type: string type: string
type: array type: array
@ -184,17 +187,17 @@ spec:
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config'
items: items:
description: 'RelabelConfig allows dynamic rewriting of the description: 'RelabelConfig allows dynamic rewriting of the
label set, being applied to samples before ingestion. It defines label set, being applied to samples before ingestion. It
`<metric_relabel_configs>`-section of Prometheus configuration. defines `<metric_relabel_configs>`-section of Prometheus
More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
properties: properties:
action: action:
description: Action to perform based on regex matching. description: Action to perform based on regex matching.
Default is 'replace' Default is 'replace'
type: string type: string
modulus: modulus:
description: Modulus to take of the hash of the source label description: Modulus to take of the hash of the source
values. label values.
format: int64 format: int64
type: integer type: integer
regex: regex:
@ -213,8 +216,8 @@ spec:
sourceLabels: sourceLabels:
description: The source labels select values from existing description: The source labels select values from existing
labels. Their content is concatenated using the configured labels. Their content is concatenated using the configured
separator and matched against the configured regular expression separator and matched against the configured regular
for the replace, keep, and drop actions. expression for the replace, keep, and drop actions.
items: items:
type: string type: string
type: array type: array
@ -242,7 +245,8 @@ spec:
description: TLS configuration to use when scraping the endpoint description: TLS configuration to use when scraping the endpoint
properties: properties:
ca: ca:
description: Stuct containing the CA cert to use for the targets. description: Stuct containing the CA cert to use for the
targets.
properties: properties:
configMap: configMap:
description: ConfigMap containing data to use for the description: ConfigMap containing data to use for the
@ -288,8 +292,8 @@ spec:
to use for the targets. to use for the targets.
type: string type: string
cert: cert:
description: Struct containing the client cert file for the description: Struct containing the client cert file for
targets. the targets.
properties: properties:
configMap: configMap:
description: ConfigMap containing data to use for the description: ConfigMap containing data to use for the
@ -401,24 +405,25 @@ spec:
description: matchExpressions is a list of label selector requirements. description: matchExpressions is a list of label selector requirements.
The requirements are ANDed. The requirements are ANDed.
items: items:
description: A label selector requirement is a selector that contains description: A label selector requirement is a selector that
values, a key, and an operator that relates the key and values. contains values, a key, and an operator that relates the key
and values.
properties: properties:
key: key:
description: key is the label key that the selector applies description: key is the label key that the selector applies
to. to.
type: string type: string
operator: operator:
description: operator represents a key's relationship to a description: operator represents a key's relationship to
set of values. Valid operators are In, NotIn, Exists and a set of values. Valid operators are In, NotIn, Exists
DoesNotExist. and DoesNotExist.
type: string type: string
values: values:
description: values is an array of string values. If the operator description: values is an array of string values. If the
is In or NotIn, the values array must be non-empty. If the operator is In or NotIn, the values array must be non-empty.
operator is Exists or DoesNotExist, the values array must If the operator is Exists or DoesNotExist, the values
be empty. This array is replaced during a strategic merge array must be empty. This array is replaced during a strategic
patch. merge patch.
items: items:
type: string type: string
type: array type: array
@ -432,8 +437,8 @@ spec:
type: string type: string
description: matchLabels is a map of {key,value} pairs. A single description: matchLabels is a map of {key,value} pairs. A single
{key,value} in the matchLabels map is equivalent to an element {key,value} in the matchLabels map is equivalent to an element
of matchExpressions, whose key field is "key", the operator is of matchExpressions, whose key field is "key", the operator
"In", and the values array contains only "value". The requirements is "In", and the values array contains only "value". The requirements
are ANDed. are ANDed.
type: object type: object
type: object type: object
@ -450,9 +455,6 @@ spec:
required: required:
- spec - spec
type: object type: object
version: v1
versions:
- name: v1
served: true served: true
storage: true storage: true
status: status:

View file

@ -4,29 +4,9 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
rules: rules:
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- create
- apiGroups:
- apiextensions.k8s.io
resourceNames:
- alertmanagers.monitoring.coreos.com
- podmonitors.monitoring.coreos.com
- prometheuses.monitoring.coreos.com
- prometheusrules.monitoring.coreos.com
- servicemonitors.monitoring.coreos.com
- thanosrulers.monitoring.coreos.com
resources:
- customresourcedefinitions
verbs:
- get
- update
- apiGroups: - apiGroups:
- monitoring.coreos.com - monitoring.coreos.com
resources: resources:

View file

@ -4,7 +4,7 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io

View file

@ -4,7 +4,7 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
namespace: monitoring namespace: monitoring
spec: spec:
@ -18,15 +18,15 @@ spec:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
spec: spec:
containers: containers:
- args: - args:
- --kubelet-service=kube-system/kubelet - --kubelet-service=kube-system/kubelet
- --logtostderr=true - --logtostderr=true
- --config-reloader-image=jimmidyson/configmap-reload:v0.3.0 - --config-reloader-image=jimmidyson/configmap-reload:v0.3.0
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.38.1 - --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.39.0
image: quay.io/coreos/prometheus-operator:v0.38.1 image: quay.io/coreos/prometheus-operator:v0.39.0
name: prometheus-operator name: prometheus-operator
ports: ports:
- containerPort: 8080 - containerPort: 8080

View file

@ -4,7 +4,7 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
namespace: monitoring namespace: monitoring
spec: spec:

View file

@ -4,6 +4,6 @@ metadata:
labels: labels:
app.kubernetes.io/component: controller app.kubernetes.io/component: controller
app.kubernetes.io/name: prometheus-operator app.kubernetes.io/name: prometheus-operator
app.kubernetes.io/version: v0.38.1 app.kubernetes.io/version: v0.39.0
name: prometheus-operator name: prometheus-operator
namespace: monitoring namespace: monitoring

View file

@ -26,7 +26,7 @@
"subdir": "jsonnet/prometheus-operator" "subdir": "jsonnet/prometheus-operator"
} }
}, },
"version": "release-0.38" "version": "release-0.39"
}, },
{ {
"source": { "source": {

View file

@ -134,6 +134,24 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
versionPriority: 100, versionPriority: 100,
}, },
}, },
customMetricsApiServiceV1Beta2: {
apiVersion: 'apiregistration.k8s.io/v1',
kind: 'APIService',
metadata: {
name: 'v1beta2.custom.metrics.k8s.io',
},
spec: {
service: {
name: $.prometheusAdapter.service.metadata.name,
namespace: $._config.namespace,
},
group: 'custom.metrics.k8s.io',
version: 'v1beta2',
insecureSkipTLSVerify: true,
groupPriorityMinimum: 100,
versionPriority: 200,
},
},
customMetricsClusterRoleServerResources: customMetricsClusterRoleServerResources:
local clusterRole = k.rbac.v1.clusterRole; local clusterRole = k.rbac.v1.clusterRole;
local policyRule = clusterRole.rulesType; local policyRule = clusterRole.rulesType;

View file

@ -18,38 +18,7 @@ local configMapList = k3.core.v1.configMapList;
kubePrometheus+:: { kubePrometheus+:: {
namespace: k.core.v1.namespace.new($._config.namespace), namespace: k.core.v1.namespace.new($._config.namespace),
}, },
prometheusOperator+:: prometheusOperator+:: {
{
'0alertmanagerCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
'0prometheusCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
'0servicemonitorCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
'0podmonitorCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
'0prometheusruleCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
'0thanosrulerCustomResourceDefinition'+: {
spec: std.mergePatch(super.spec, {
preserveUnknownFields: null,
}),
},
service+: { service+: {
spec+: { spec+: {
ports: [ ports: [

View file

@ -5,7 +5,7 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
namespace: 'default', namespace: 'default',
versions+:: { versions+:: {
prometheusAdapter: 'v0.5.0', prometheusAdapter: 'v0.7.0',
}, },
imageRepos+:: { imageRepos+:: {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -15,7 +15,7 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
}, },
versions+:: { versions+:: {
prometheusOperator: 'v0.38.1', prometheusOperator: 'v0.39.0',
prometheusConfigReloader: self.prometheusOperator, prometheusConfigReloader: self.prometheusOperator,
configmapReloader: 'v0.3.0', configmapReloader: 'v0.3.0',
}, },
@ -64,28 +64,6 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
local clusterRole = k.rbac.v1.clusterRole; local clusterRole = k.rbac.v1.clusterRole;
local policyRule = clusterRole.rulesType; local policyRule = clusterRole.rulesType;
local crdCreateRule = policyRule.new() +
policyRule.withApiGroups(['apiextensions.k8s.io']) +
policyRule.withResources([
'customresourcedefinitions',
]) +
policyRule.withVerbs(['create']);
local crdMonitoringRule = policyRule.new() +
policyRule.withApiGroups(['apiextensions.k8s.io']) +
policyRule.withResources([
'customresourcedefinitions',
]) +
policyRule.withResourceNames([
'alertmanagers.monitoring.coreos.com',
'podmonitors.monitoring.coreos.com',
'prometheuses.monitoring.coreos.com',
'prometheusrules.monitoring.coreos.com',
'servicemonitors.monitoring.coreos.com',
'thanosrulers.monitoring.coreos.com',
]) +
policyRule.withVerbs(['get', 'update']);
local monitoringRule = policyRule.new() + local monitoringRule = policyRule.new() +
policyRule.withApiGroups(['monitoring.coreos.com']) + policyRule.withApiGroups(['monitoring.coreos.com']) +
policyRule.withResources([ policyRule.withResources([
@ -146,7 +124,7 @@ local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
]) + ]) +
policyRule.withVerbs(['get', 'list', 'watch']); policyRule.withVerbs(['get', 'list', 'watch']);
local rules = [crdCreateRule, crdMonitoringRule, monitoringRule, appsRule, coreRule, podRule, routingRule, nodeRule, namespaceRule]; local rules = [monitoringRule, appsRule, coreRule, podRule, routingRule, nodeRule, namespaceRule];
clusterRole.new() + clusterRole.new() +
clusterRole.mixin.metadata.withLabels(po.commonLabels) + clusterRole.mixin.metadata.withLabels(po.commonLabels) +

View file

@ -1 +1 @@
{"apiVersion":"apiextensions.k8s.io/v1beta1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.2.4"},"creationTimestamp":null,"name":"prometheusrules.monitoring.coreos.com"},"spec":{"group":"monitoring.coreos.com","names":{"kind":"PrometheusRule","listKind":"PrometheusRuleList","plural":"prometheusrules","singular":"prometheusrule"},"preserveUnknownFields":false,"scope":"Namespaced","validation":{"openAPIV3Schema":{"description":"PrometheusRule defines alerting rules for a Prometheus instance","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"Specification of desired alerting rule definitions for Prometheus.","properties":{"groups":{"description":"Content of Prometheus rule file","items":{"description":"RuleGroup is a list of sequentially evaluated recording and alerting rules. Note: PartialResponseStrategy is only used by ThanosRuler and will be ignored by Prometheus instances. Valid values for this field are 'warn' or 'abort'. More info: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response","properties":{"interval":{"type":"string"},"name":{"type":"string"},"partial_response_strategy":{"type":"string"},"rules":{"items":{"description":"Rule describes an alerting or recording rule.","properties":{"alert":{"type":"string"},"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"expr":{"anyOf":[{"type":"integer"},{"type":"string"}],"x-kubernetes-int-or-string":true},"for":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"record":{"type":"string"}},"required":["expr"],"type":"object"},"type":"array"}},"required":["name","rules"],"type":"object"},"type":"array"}},"type":"object"}},"required":["spec"],"type":"object"}},"version":"v1","versions":[{"name":"v1","served":true,"storage":true}]},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":[],"storedVersions":[]}} {"apiVersion":"apiextensions.k8s.io/v1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.2.4"},"creationTimestamp":null,"name":"prometheusrules.monitoring.coreos.com"},"spec":{"group":"monitoring.coreos.com","names":{"kind":"PrometheusRule","listKind":"PrometheusRuleList","plural":"prometheusrules","singular":"prometheusrule"},"scope":"Namespaced","versions":[{"name":"v1","schema":{"openAPIV3Schema":{"description":"PrometheusRule defines alerting rules for a Prometheus instance","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"description":"Specification of desired alerting rule definitions for Prometheus.","properties":{"groups":{"description":"Content of Prometheus rule file","items":{"description":"RuleGroup is a list of sequentially evaluated recording and alerting rules. Note: PartialResponseStrategy is only used by ThanosRuler and will be ignored by Prometheus instances. Valid values for this field are 'warn' or 'abort'. More info: https://github.com/thanos-io/thanos/blob/master/docs/components/rule.md#partial-response","properties":{"interval":{"type":"string"},"name":{"type":"string"},"partial_response_strategy":{"type":"string"},"rules":{"items":{"description":"Rule describes an alerting or recording rule.","properties":{"alert":{"type":"string"},"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"expr":{"anyOf":[{"type":"integer"},{"type":"string"}],"x-kubernetes-int-or-string":true},"for":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"record":{"type":"string"}},"required":["expr"],"type":"object"},"type":"array"}},"required":["name","rules"],"type":"object"},"type":"array"}},"type":"object"}},"required":["spec"],"type":"object"}},"served":true,"storage":true}]},"status":{"acceptedNames":{"kind":"","plural":""},"conditions":[],"storedVersions":[]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -4,6 +4,8 @@
* Currently the only condition type that exists is a Query condition * Currently the only condition type that exists is a Query condition
* that allows to specify a query letter, time range and an aggregation function. * that allows to specify a query letter, time range and an aggregation function.
* *
* @name alertCondition.new
*
* @param evaluatorParams Value of threshold * @param evaluatorParams Value of threshold
* @param evaluatorType Type of threshold * @param evaluatorType Type of threshold
* @param operatorType Operator between conditions * @param operatorType Operator between conditions
@ -12,6 +14,7 @@
* @param queryTimeEnd End of time range * @param queryTimeEnd End of time range
* @param reducerParams Params of an aggregation function * @param reducerParams Params of an aggregation function
* @param reducerType Name of an aggregation function * @param reducerType Name of an aggregation function
*
* @return A json that represents a condition of alert * @return A json that represents a condition of alert
*/ */
new( new(

View file

@ -1,4 +1,7 @@
{ {
/**
* @name alertlist.new
*/
new( new(
title='', title='',
span=null, span=null,

View file

@ -9,6 +9,11 @@
name: 'Annotations & Alerts', name: 'Annotations & Alerts',
type: 'dashboard', type: 'dashboard',
}, },
/**
* @name annotation.datasource
*/
datasource( datasource(
name, name,
datasource, datasource,

View file

@ -2,6 +2,8 @@
/** /**
* Return a CloudWatch Target * Return a CloudWatch Target
* *
* @name cloudwatch.target
*
* @param region * @param region
* @param namespace * @param namespace
* @param metric * @param metric

View file

@ -1,6 +1,9 @@
local timepickerlib = import 'timepicker.libsonnet'; local timepickerlib = import 'timepicker.libsonnet';
{ {
/**
* @name dashboard.new
*/
new( new(
title, title,
editable=false, editable=false,

View file

@ -3,6 +3,8 @@
* Returns a new dashlist panel that can be added in a row. * Returns a new dashlist panel that can be added in a row.
* It requires the dashlist panel plugin in grafana, which is built-in. * It requires the dashlist panel plugin in grafana, which is built-in.
* *
* @name dashlist.new
*
* @param title The title of the dashlist panel. * @param title The title of the dashlist panel.
* @param description Description of the panel * @param description Description of the panel
* @param query Query to search by * @param query Query to search by

View file

@ -1,4 +1,7 @@
{ {
/**
* @name elasticsearch.target
*/
target( target(
query, query,
timeField, timeField,

View file

@ -1,4 +1,7 @@
{ {
/**
* @name gauge.new
*/
new( new(
title, title,
datasource=null, datasource=null,

View file

@ -3,6 +3,8 @@
* Returns a new graph panel that can be added in a row. * Returns a new graph panel that can be added in a row.
* It requires the graph panel plugin in grafana, which is built-in. * It requires the graph panel plugin in grafana, which is built-in.
* *
* @name graphPanel.new
*
* @param title The title of the graph panel. * @param title The title of the graph panel.
* @param span Width of the panel * @param span Width of the panel
* @param datasource Datasource * @param datasource Datasource

View file

@ -2,6 +2,8 @@
/** /**
* Return an Graphite Target * Return an Graphite Target
* *
* @name graphite.target
*
* @param target Graphite Query. Nested queries are possible by adding the query reference (refId). * @param target Graphite Query. Nested queries are possible by adding the query reference (refId).
* @param targetFull Expanding the @target. Used in nested queries. * @param targetFull Expanding the @target. Used in nested queries.
* @param hide Disable query on graph. * @param hide Disable query on graph.

View file

@ -1,8 +1,10 @@
{ {
/* /**
* Returns a heatmap panel. * Returns a heatmap panel.
* Requires the heatmap panel plugin in Grafana, which is built-in. * Requires the heatmap panel plugin in Grafana, which is built-in.
* *
* @name heatmapPanel.new
*
* @param title The title of the heatmap panel * @param title The title of the heatmap panel
* @param datasource Datasource * @param datasource Datasource
* @param min_span Min span * @param min_span Min span

View file

@ -2,6 +2,8 @@
/** /**
* Return an InfluxDB Target * Return an InfluxDB Target
* *
* @name influxdb.target
*
* @param query Raw InfluxQL statement * @param query Raw InfluxQL statement
* @param alias Alias By pattern * @param alias Alias By pattern
* @param datasource Datasource * @param datasource Datasource

View file

@ -1,4 +1,7 @@
{ {
/**
* @name link.dashboards
*/
dashboards( dashboards(
title, title,
tags, tags,

View file

@ -3,6 +3,8 @@
* Returns a new log panel that can be added in a row. * Returns a new log panel that can be added in a row.
* It requires the log panel plugin in grafana, which is built-in. * It requires the log panel plugin in grafana, which is built-in.
* *
* @name logPanel.new
*
* @param title The title of the log panel. * @param title The title of the log panel.
* @param span Width of the panel * @param span Width of the panel
* @param datasource Datasource * @param datasource Datasource

View file

@ -1,4 +1,7 @@
{ {
/**
* @name loki.target
*/
target( target(
expr, expr,
hide=null, hide=null,

View file

@ -3,6 +3,8 @@
* Returns a new pie chart panel that can be added in a row. * Returns a new pie chart panel that can be added in a row.
* It requires the pie chart panel plugin in grafana, which needs to be explicitly installed. * It requires the pie chart panel plugin in grafana, which needs to be explicitly installed.
* *
* @name pieChartPanel.new
*
* @param title The title of the pie chart panel. * @param title The title of the pie chart panel.
* @param description Description of the panel * @param description Description of the panel
* @param span Width of the panel * @param span Width of the panel

View file

@ -3,6 +3,8 @@
* Returns a new pluginlist panel that can be added in a row. * Returns a new pluginlist panel that can be added in a row.
* It requires the pluginlist panel plugin in grafana, which is built-in. * It requires the pluginlist panel plugin in grafana, which is built-in.
* *
* @name pluginlist.new
*
* @param title The title of the pluginlist panel. * @param title The title of the pluginlist panel.
* @param description Description of the panel * @param description Description of the panel
* @param limit Set maximum items in a list * @param limit Set maximum items in a list

View file

@ -1,4 +1,7 @@
{ {
/**
* @name prometheus.target
*/
target( target(
expr, expr,
format='time_series', format='time_series',

View file

@ -1,4 +1,7 @@
{ {
/**
* @name row.new
*/
new( new(
title='Dashboard Row', title='Dashboard Row',
height=null, height=null,

View file

@ -1,4 +1,7 @@
{ {
/**
* @name singlestat.new
*/
new( new(
title, title,
format='none', format='none',

View file

@ -1,4 +1,7 @@
{ {
/**
* @name sql.target
*/
target( target(
rawSql, rawSql,
datasource=null, datasource=null,

View file

@ -3,6 +3,8 @@
* Returns a new table panel that can be added in a row. * Returns a new table panel that can be added in a row.
* It requires the table panel plugin in grafana, which is built-in. * It requires the table panel plugin in grafana, which is built-in.
* *
* @name table.new
*
* @param title The title of the graph panel. * @param title The title of the graph panel.
* @param span Width of the panel * @param span Width of the panel
* @param height Height of the panel * @param height Height of the panel

View file

@ -1,4 +1,7 @@
{ {
/**
* @name template.new
*/
new( new(
name, name,
datasource, datasource,
@ -34,6 +37,9 @@
type: 'query', type: 'query',
useTags: false, useTags: false,
}, },
/**
* @name template.interval
*/
interval( interval(
name, name,
query, query,
@ -66,6 +72,9 @@
else else
current, current,
}, },
/**
* @name template.datasource
*/
datasource( datasource(
name, name,
query, query,
@ -97,6 +106,9 @@
else else
refresh, refresh,
filterAuto(str):: str != 'auto', filterAuto(str):: str != 'auto',
/**
* @name template.custom
*/
custom( custom(
name, name,
query, query,
@ -131,6 +143,9 @@
query: query, query: query,
type: 'custom', type: 'custom',
}, },
/**
* @name template.text
*/
text( text(
name, name,
label='' label=''

View file

@ -1,4 +1,7 @@
{ {
/**
* @name text.new
*/
new( new(
title='', title='',
span=null, span=null,

View file

@ -1,4 +1,7 @@
{ {
/**
* @name timepicker.new
*/
new( new(
refresh_intervals=[ refresh_intervals=[
'5s', '5s',

View file

@ -12,7 +12,7 @@
rules: [ rules: [
{ {
expr: ||| expr: |||
rate(kube_pod_container_status_restarts_total{%(prefixedNamespaceSelector)s%(kubeStateMetricsSelector)s}[15m]) * 60 * 5 > 0 rate(kube_pod_container_status_restarts_total{%(prefixedNamespaceSelector)s%(kubeStateMetricsSelector)s}[5m]) * 60 * 5 > 0
||| % $._config, ||| % $._config,
labels: { labels: {
severity: 'warning', severity: 'warning',
@ -24,8 +24,18 @@
alert: 'KubePodCrashLooping', alert: 'KubePodCrashLooping',
}, },
{ {
// We wrap kube_pod_owner with the topk() aggregator to ensure that
// every (namespace, pod) tuple is unique even if the "owner_kind"
// label exists for 2 values. This avoids "many-to-many matching
// not allowed" errors when joining with kube_pod_status_phase.
expr: ||| expr: |||
sum by (namespace, pod) (max by(namespace, pod) (kube_pod_status_phase{%(prefixedNamespaceSelector)s%(kubeStateMetricsSelector)s, phase=~"Pending|Unknown"}) * on(namespace, pod) group_left(owner_kind) max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})) > 0 sum by (namespace, pod) (
max by(namespace, pod) (
kube_pod_status_phase{%(prefixedNamespaceSelector)s%(kubeStateMetricsSelector)s, phase=~"Pending|Unknown"}
) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (
1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})
)
) > 0
||| % $._config, ||| % $._config,
labels: { labels: {
severity: 'warning', severity: 'warning',

View file

@ -24,9 +24,8 @@
}, },
{ {
expr: ||| expr: |||
kube_node_spec_taint{%(kubeStateMetricsSelector)s,key="node.kubernetes.io/unreachable",effect="NoSchedule"} == 1 (kube_node_spec_taint{%(kubeStateMetricsSelector)s,key="node.kubernetes.io/unreachable",effect="NoSchedule"} unless ignoring(key,value) kube_node_spec_taint{%(kubeStateMetricsSelector)s,key="ToBeDeletedByClusterAutoscaler"}) == 1
||| % $._config, ||| % $._config,
'for': '2m',
labels: { labels: {
severity: 'warning', severity: 'warning',
}, },

View file

@ -24,7 +24,7 @@
sum by (%(clusterLabel)s, namespace, pod, container) ( sum by (%(clusterLabel)s, namespace, pod, container) (
rate(container_cpu_usage_seconds_total{%(cadvisorSelector)s, image!="", container!="POD"}[5m]) rate(container_cpu_usage_seconds_total{%(cadvisorSelector)s, image!="", container!="POD"}[5m])
) * on (%(clusterLabel)s, namespace, pod) group_left(node) topk by (%(clusterLabel)s, namespace, pod) ( ) * on (%(clusterLabel)s, namespace, pod) group_left(node) topk by (%(clusterLabel)s, namespace, pod) (
1, max by(%(clusterLabel)s, namespace, pod, node) (kube_pod_info) 1, max by(%(clusterLabel)s, namespace, pod, node) (kube_pod_info{node!=""})
) )
||| % $._config, ||| % $._config,
}, },
@ -33,7 +33,7 @@
expr: ||| expr: |||
container_memory_working_set_bytes{%(cadvisorSelector)s, image!=""} container_memory_working_set_bytes{%(cadvisorSelector)s, image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
||| % $._config, ||| % $._config,
}, },
@ -42,7 +42,7 @@
expr: ||| expr: |||
container_memory_rss{%(cadvisorSelector)s, image!=""} container_memory_rss{%(cadvisorSelector)s, image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
||| % $._config, ||| % $._config,
}, },
@ -51,7 +51,7 @@
expr: ||| expr: |||
container_memory_cache{%(cadvisorSelector)s, image!=""} container_memory_cache{%(cadvisorSelector)s, image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
||| % $._config, ||| % $._config,
}, },
@ -60,7 +60,7 @@
expr: ||| expr: |||
container_memory_swap{%(cadvisorSelector)s, image!=""} container_memory_swap{%(cadvisorSelector)s, image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, * on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info) max by(namespace, pod, node) (kube_pod_info{node!=""})
) )
||| % $._config, ||| % $._config,
}, },

View file

@ -15,7 +15,7 @@
// SINCE 2018-02-08 // SINCE 2018-02-08
record: ':kube_pod_info_node_count:', record: ':kube_pod_info_node_count:',
expr: ||| expr: |||
sum(min(kube_pod_info) by (%(clusterLabel)s, node)) sum(min(kube_pod_info{node!=""}) by (%(clusterLabel)s, node))
||| % $._config, ||| % $._config,
}, },
{ {
@ -30,7 +30,7 @@
expr: ||| expr: |||
topk by(namespace, %(podLabel)s) (1, topk by(namespace, %(podLabel)s) (1,
max by (node, namespace, %(podLabel)s) ( max by (node, namespace, %(podLabel)s) (
label_replace(kube_pod_info{%(kubeStateMetricsSelector)s}, "%(podLabel)s", "$1", "pod", "(.*)") label_replace(kube_pod_info{%(kubeStateMetricsSelector)s,node!=""}, "%(podLabel)s", "$1", "pod", "(.*)")
)) ))
||| % $._config, ||| % $._config,
}, },