This module supports below Prometheus architectures:
- x86_64/amd64
- i386
- armv71 (Tested on raspberry pi 3)
The prometheus::ipmi_exporter
class has a dependency on saz/sudo Puppet module.
This module automates the install and configuration of Prometheus monitoring tool: Prometheus web site
- Installs the prometheus daemon, alertmanager or exporters(via url or package)
- The package method was implemented, but currently there isn't any package for prometheus
- Optionally installs a user to run it under (per exporter)
- Installs a configuration file for prometheus daemon (/etc/prometheus/prometheus.yaml) or for alertmanager (/etc/prometheus/alert.rules)
- Manages the services via upstart, sysv, or systemd
- Optionally creates alert rules
class { 'prometheus::server':
version => '2.52.0',
alerts => {
'groups' => [
{
'name' => 'alert.rules',
'rules' => [
{
'alert' => 'InstanceDown',
'expr' => 'up == 0',
'for' => '5m',
'labels' => {
'severity' => 'page',
},
'annotations' => {
'summary' => 'Instance {{ $labels.instance }} down',
'description' => '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
}
},
],
},
],
},
scrape_configs => [
{
'job_name' => 'prometheus',
'scrape_interval' => '10s',
'scrape_timeout' => '10s',
'static_configs' => [
{
'targets' => [ 'localhost:9090' ],
'labels' => {
'alias' => 'Prometheus',
}
}
],
},
],
}
include prometheus::node_exporter
or:
class { 'prometheus::node_exporter':
version => '0.27.0',
collectors_disable => ['loadavg', 'mdadm'],
}
Real Prometheus >=2.0.0 setup example including alertmanager and slack_configs.
class { 'prometheus':
manage_prometheus_server => true,
version => '2.52.0',
alerts => {
'groups' => [
{
'name' => 'alert.rules',
'rules' => [
{
'alert' => 'InstanceDown',
'expr' => 'up == 0',
'for' => '5m',
'labels' => {'severity' => 'page'},
'annotations' => {
'summary' => 'Instance {{ $labels.instance }} down',
'description' => '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
},
},
],
},
],
},
scrape_configs => [
{
'job_name' => 'prometheus',
'scrape_interval' => '10s',
'scrape_timeout' => '10s',
'static_configs' => [
{
'targets' => ['localhost:9090'],
'labels' => {'alias' => 'Prometheus'}
}
],
},
{
'job_name' => 'node',
'scrape_interval' => '5s',
'scrape_timeout' => '5s',
'static_configs' => [
{
'targets' => ['nodexporter.domain.com:9100'],
'labels' => {'alias' => 'Node'}
},
],
},
],
alertmanagers_config => [
{
'static_configs' => [{'targets' => ['localhost:9093']}],
},
],
}
class { 'prometheus::alertmanager':
version => '0.27.0',
route => {
'group_by' => ['alertname', 'cluster', 'service'],
'group_wait' => '30s',
'group_interval' => '5m',
'repeat_interval' => '3h',
'receiver' => 'slack',
},
receivers => [
{
'name' => 'slack',
'slack_configs' => [
{
'api_url' => 'https://hooks.slack.com/services/ABCDEFG123456',
'channel' => '#channel',
'send_resolved' => true,
'username' => 'username'
},
],
},
],
}
And if you want to use Hiera to declare the values instead, you can simply include the prometheus
class and set your Hiera data as shown below:
Puppet Code
include prometheus
Hiera Data (in yaml)
---
prometheus::manage_prometheus_server: true
prometheus::version: '2.52.0'
prometheus::alerts:
groups:
- name: 'alert.rules'
rules:
- alert: 'InstanceDown'
expr: 'up == 0'
for: '5m'
labels:
severity: 'page'
annotations:
summary: 'Instance {{ $labels.instance }} down'
description: '{{ $labels.instance }} of job {{ $labels.job }} has been
down for more than 5 minutes.'
prometheus::scrape_configs:
- job_name: 'prometheus'
scrape_interval: '10s'
scrape_timeout: '10s'
static_configs:
- targets:
- 'localhost:9090'
labels:
alias: 'Prometheus'
- job_name: 'node'
scrape_interval: '10s'
scrape_timeout: '10s'
static_configs:
- targets:
- 'nodexporter.domain.com:9100'
labels:
alias: 'Node'
prometheus::alertmanagers_config:
- static_configs:
- targets:
- 'localhost:9093'
prometheus::alertmanager::version: '0.27.0'
prometheus::alertmanager::route:
group_by:
- 'alertname'
- 'cluster'
- 'service'
group_wait: '30s'
group_interval: '5m'
repeat_interval: '3h'
receiver: 'slack'
prometheus::alertmanager::receivers:
- name: 'slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/ABCDEFG123456'
channel: "#channel"
send_resolved: true
username: 'username'
Postfix is not supported on Archlinux because it relies on puppet-postfix, which does not support Archlinux.
See https://voxpupuli.org/docs/how_to_run_tests/ for information on how to run test locally.
This plugin was originally authored by brutus333