Prometheus Monitoring Mixins Using Jsonnet to Package Together - - PowerPoint PPT Presentation

prometheus monitoring mixins
SMART_READER_LITE
LIVE PREVIEW

Prometheus Monitoring Mixins Using Jsonnet to Package Together - - PowerPoint PPT Presentation

Prometheus Monitoring Mixins Using Jsonnet to Package Together Dashboards and Alerts Tom Wilkie @tom_wilkie August 2018 sum(container_memory_working_set_bytes{ id=/, kubernetes_io_hostname=~^$Node$ }) /


slide-1
SLIDE 1

Prometheus Monitoring Mixins

Using Jsonnet to Package Together Dashboards and Alerts Tom Wilkie @tom_wilkie August 2018

slide-2
SLIDE 2
slide-3
SLIDE 3
slide-4
SLIDE 4

sum(container_memory_working_set_bytes{ id=“/“, kubernetes_io_hostname=~”^$Node$” }) / sum(machine_memory_bytes{ kubernetes_io_hostname=~”^$Node$” })

slide-5
SLIDE 5

Dashboards and alerts should not be opinionated about labels - this should be configuration.

slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8

Want:

  • configurable
  • extensible
  • reusable
slide-9
SLIDE 9

Configurable & Extensible

slide-10
SLIDE 10
  • YAML & JSON
  • envsubst, m4, jinja etc
  • Go, Python
slide-11
SLIDE 11

from grafanalib.core import * dashboard = Dashboard( title="Frontend Stats", rows=[ Row(panels=[ Graph( title="Frontend QPS", dataSource='My Prometheus', targets=[ Target( expr='sum(irate(nginx_http_requests_total{job="default/ frontend",status=~"1.."}[1m]))', legendFormat="1xx", refId='A', ), ...

https://github.com/weaveworks/grafanalib

slide-12
SLIDE 12

jsonnet

A data templating language for app and tool developers. A simple extension of JSON.

http://jsonnet.org/ @sparkprime

slide-13
SLIDE 13
slide-14
SLIDE 14

Jsonnet Demo

slide-15
SLIDE 15

Configurable & Extensible (II)

slide-16
SLIDE 16

{ _config+:: {...}, grafanaDashboards+:: { “dashboard-name.json”: {...}, }, prometheusAlerts+:: [...], prometheusRules+:: [...], }

slide-17
SLIDE 17

{ _config+:: { // Selectors are inserted between {} in Prometheus queries. kubeStateMetricsSelector: 'job="default/kube-state-metrics"', ... }, }

slide-18
SLIDE 18

{ prometheusAlerts+:: { groups+: [{ name: 'kubernetes-apps', rules: [{ alert: 'KubePodCrashLooping', 'for': '1h', expr: ||| rate(kube_pod_container_status_restarts_total {%(kubeStateMetricsSelector)s}[15m]) > 0 ||| % $._config, ...

slide-19
SLIDE 19

groups:

  • name: kubernetes-apps

rules:

  • alert: KubePodCrashLooping

expr: | rate(kube_pod_container_status_restarts_total {job=“default/kube-state-metrics”}[15m]) > 0 for: 1h ...

slide-20
SLIDE 20

Reusable

slide-21
SLIDE 21
slide-22
SLIDE 22

jsonnet-bundler

A jsonnet package manager.

https://github.com/jsonnet-bundler/jsonnet-bundler

slide-23
SLIDE 23

$ go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb $ jb init $ jb install github.com/kubernetes-monitoring/kubernetes-mixin Cloning into 'vendor'... $ $ tree vendor vendor ├── grafonnet │ └── ... └── kubernetes-mixin └── ...

slide-24
SLIDE 24

https://goo.gl/JMxwC3 https://goo.gl/JocRm6

slide-25
SLIDE 25

…since KubeCon

slide-26
SLIDE 26

Application Mixin

CoreOS Etcd github.com/coreos/etcd/pull/9640 Hashicorp Consul github.com/kausalco/public/consul-mixin Hashicorp Vault github.com/grapeshot/vault_exporter/vault-mixin Kubernetes github.com/kubernetes-monitoring/kubernetes-mixin

slide-27
SLIDE 27

Now up to 9 contributors. @metalmatze became a committer. Contributions from Google, MongoDB, San Diego Supercomputer Centre. Used in all future versions of OpenShift.

slide-28
SLIDE 28

But wait! We have new mixins…

Prometheus mixin: https://github.com/prometheus/prometheus/pull/4474 node_exporter mixin: https://github.com/prometheus/node_exporter/pull/941 And…

slide-29
SLIDE 29
slide-30
SLIDE 30

Thanks for listening. Questions?

Tom Wilkie @tom_wilkie May 2018

Photo credits: https://unsplash.com/photos/dmkmrNptMpw https://unsplash.com/photos/nlMYrApFE7s