What is your
application doing
right now?
Matthias Grüter
@mattgruter
It will happen to you!
Nagios
Monit
Consul
Pingdom
Munin
Curl
InfluxDB
Bosun
Graphite
Prometheus
Dashing
JMX
Riemann
Librato
Codahale Metrics
Collectd
...
Nagios
Monit
Consul
Pingdom
Munin
Curl
InfluxDB
Bosun
Graphite
Prometheus
Dashing
JMX
Riemann
Librato
Codahale Metrics
Collectd
...
Enter Prometheus
promotheus.io
by SoundCloud
Client Libraries: Java, Ruby, Go, Python, Bash, Node…
Exporters: Docker, Mesos, AWS CloudWatch, JMX, StatsD
Out-of-the-Box: etcd, cAdvisor, Kubernetes
Pushgateway
Scrape
Query
http_requests_total
http_requests_total{env=”prod”}
http_requests_total{name=~”worker”}
job: {
name: "container-exporter"
scrape_interval: "5s"
target_group: {
target: "http://exporter:9104/metrics"
}
}
prometheus.conf
[...]
rule_file: "/etc/prometheus/prometheus.rules"
prometheus.conf
ALERT InstanceDown
IF up == 0
FOR 5m
WITH {}
SUMMARY "Instance {{$labels.instance}} down"
DESCRIPTION "{{$labels.instance}} has been down
for more than 5 minutes."
prometheus.rules
notification_config {
name: "alerts"
slack_config {
webhook_url: <URL>
send_resolved: true
}
}
aggregation_rule {
repeat_rate_seconds: 300
notification_config_name: "alert"
}
Prometheus Alert Manager
Qubit Coins
job: {
name: "balance"
scrape_interval: "5s"
target_group: {
labels: {
label: {
name: "zone"
value: "eu-central-1"
}
label: {
name: "env"
value: "prod"
}
}
target: "http://webapp:8080/metrics"
}
}
prometheus.conf
static final Gauge numberOfCoins = Gauge.build()
.name("coins")
.help("Number of coins").register();
// …
numberOfCoins.set(42);
Java
● Gauges
● Summary
● Counter
● Histogram
What is your application doing right now? An introduction to Prometheus

What is your application doing right now? An introduction to Prometheus