First release
This commit is contained in:
commit
702998db40
46 changed files with 1238 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.vagrant
|
||||||
|
.tox
|
||||||
|
.cache
|
||||||
|
__pycache__
|
||||||
|
*~
|
5
AUTHORS
Normal file
5
AUTHORS
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
=======
|
||||||
|
Authors
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Ricardo Hernandez (richerve)
|
7
CHANGELOG.rst
Normal file
7
CHANGELOG.rst
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
prometheus formula
|
||||||
|
==================
|
||||||
|
|
||||||
|
201610 (2016-10-04)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- First release
|
9
FORMULA
Normal file
9
FORMULA
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
name: prometheus
|
||||||
|
os: Ubuntu
|
||||||
|
os_family: Debian
|
||||||
|
version: 201610
|
||||||
|
release: 1
|
||||||
|
summary: Prometheus saltstack formula
|
||||||
|
description: Prometheus saltstack formula
|
||||||
|
top_level_dir: prometheus
|
||||||
|
recommended:
|
14
LICENSE
Normal file
14
LICENSE
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
Copyright (c) 2016 Ricardo Hernandez
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
46
README.rst
Normal file
46
README.rst
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
============================
|
||||||
|
Prometheus saltstack formula
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See the full `Salt Formulas installation and usage instructions
|
||||||
|
<http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.
|
||||||
|
|
||||||
|
Features
|
||||||
|
========
|
||||||
|
|
||||||
|
- Install and configure prometheus server, node_exporter and alertmanager
|
||||||
|
|
||||||
|
Compatibility
|
||||||
|
=============
|
||||||
|
|
||||||
|
- prometheus >= 1.0
|
||||||
|
- saltstack = 2016.3.3
|
||||||
|
|
||||||
|
Available states
|
||||||
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
|
||||||
|
``prometheus.server``
|
||||||
|
|
||||||
|
``prometheus.exportes.node``
|
||||||
|
|
||||||
|
``prometheus.alertmanager``
|
||||||
|
|
||||||
|
Running
|
||||||
|
=======
|
||||||
|
|
||||||
|
$ salt node state.apply prometheus
|
||||||
|
|
||||||
|
Ideas and future development
|
||||||
|
============================
|
||||||
|
|
||||||
|
Template
|
||||||
|
========
|
||||||
|
|
||||||
|
This formula was created from a cookiecutter template.
|
||||||
|
|
||||||
|
See https://github.com/richerve/saltstack-formula-cookiecutter.
|
1
VERSION
Normal file
1
VERSION
Normal file
|
@ -0,0 +1 @@
|
||||||
|
201609
|
66
pillar.example
Normal file
66
pillar.example
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
prometheus:
|
||||||
|
server:
|
||||||
|
version: 1.1.3.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/prometheus/releases/download/v1.1.3/prometheus-1.1.3.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=839293afa9bfce47c476a0bdfd01a780
|
||||||
|
args:
|
||||||
|
config_file: /etc/prometheus/prometheus.yml
|
||||||
|
storage:
|
||||||
|
local_path: /var/lib/prometheus/metrics
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
- job_name: 'node'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9100']
|
||||||
|
alertmanager:
|
||||||
|
version: 0.4.2.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/alertmanager/releases/download/v0.4.2/alertmanager-0.4.2.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=715878f14ab091769c989ecdb2db9f15
|
||||||
|
args:
|
||||||
|
config_file: /etc/alertmanager/alertmanager.yml
|
||||||
|
storage:
|
||||||
|
path: /var/lib/alertmanager
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
smtp_smarthost: "localhost:25"
|
||||||
|
smtp_from: 'alertmanager@example.org'
|
||||||
|
smtp_auth_username: 'alertmanager'
|
||||||
|
smtp_auth_password: 'password'
|
||||||
|
templates:
|
||||||
|
- "/etc/alertmanager/template/*.tmpl"
|
||||||
|
route:
|
||||||
|
group_by: ['alertname', 'cluster', 'service']
|
||||||
|
group_wait: 30s
|
||||||
|
group_interval: 5m
|
||||||
|
repeat_interval: 3h
|
||||||
|
receiver: team-X-mails
|
||||||
|
routes:
|
||||||
|
- match_re:
|
||||||
|
service: ^(foo1|foo2|baz)$
|
||||||
|
receiver: team-X-mails
|
||||||
|
inhibit_rules:
|
||||||
|
- source_match:
|
||||||
|
severity: 'critical'
|
||||||
|
target_match:
|
||||||
|
severity: 'warning'
|
||||||
|
equal: ['alertname', 'cluster', 'service']
|
||||||
|
receivers:
|
||||||
|
- name: 'team-X-mails'
|
||||||
|
email_configs:
|
||||||
|
- to: 'team-X+alerts@example.org'
|
||||||
|
exporters:
|
||||||
|
node:
|
||||||
|
version: 0.12.0.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/node_exporter/releases/download/0.12.0/node_exporter-0.12.0.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=efe49b6fae4b1a5cb75b24a60a35e1fc
|
73
prometheus/alertmanager.sls
Normal file
73
prometheus/alertmanager.sls
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
{% from "prometheus/map.jinja" import prometheus with context %}
|
||||||
|
{%- set version_path = prometheus.alertmanager.install_dir ~ "/alertmanager-" ~ prometheus.alertmanager.version %}
|
||||||
|
|
||||||
|
include:
|
||||||
|
- prometheus.user
|
||||||
|
|
||||||
|
alertmanager_tarball:
|
||||||
|
archive.extracted:
|
||||||
|
- name: {{ prometheus.alertmanager.install_dir }}
|
||||||
|
- source: {{ prometheus.alertmanager.source }}
|
||||||
|
- source_hash: {{ prometheus.alertmanager.source_hash }}
|
||||||
|
- archive_format: tar
|
||||||
|
- if_missing: {{ version_path }}
|
||||||
|
|
||||||
|
alertmanager_bin_link:
|
||||||
|
alternatives.install:
|
||||||
|
- name: alertmanager
|
||||||
|
- link: /usr/bin/alertmanager
|
||||||
|
- path: {{ version_path }}/alertmanager
|
||||||
|
- priority: 10
|
||||||
|
- require:
|
||||||
|
- archive: alertmanager_tarball
|
||||||
|
|
||||||
|
alertmanager_config:
|
||||||
|
file.managed:
|
||||||
|
- name: {{ prometheus.alertmanager.args.config_file }}
|
||||||
|
- source: salt://prometheus/files/config.jinja
|
||||||
|
- template: jinja
|
||||||
|
- user: prometheus
|
||||||
|
- group: prometheus
|
||||||
|
- makedirs: True
|
||||||
|
- defaults:
|
||||||
|
data: {{ prometheus.alertmanager.config }}
|
||||||
|
|
||||||
|
alertmanager_defaults:
|
||||||
|
file.managed:
|
||||||
|
- name: /etc/default/alertmanager
|
||||||
|
- source: salt://prometheus/files/default-alertmanager.jinja
|
||||||
|
- template: jinja
|
||||||
|
- defaults:
|
||||||
|
config_file: {{ prometheus.alertmanager.args.config_file }}
|
||||||
|
storage_path: {{ prometheus.alertmanager.args.storage.path }}
|
||||||
|
|
||||||
|
alertmanager_storage_path:
|
||||||
|
file.directory:
|
||||||
|
- name: {{ prometheus.alertmanager.args.storage.path }}
|
||||||
|
- user: prometheus
|
||||||
|
- group: prometheus
|
||||||
|
- makedirs: True
|
||||||
|
- watch:
|
||||||
|
- file: alertmanager_defaults
|
||||||
|
|
||||||
|
alertmanager_service_unit:
|
||||||
|
file.managed:
|
||||||
|
{%- if grains.get('init') == 'systemd' %}
|
||||||
|
- name: /etc/systemd/system/alertmanager.service
|
||||||
|
- source: salt://prometheus/files/alertmanager.systemd.jinja
|
||||||
|
{%- elif grains.get('init') == 'upstart' %}
|
||||||
|
- name: /etc/init/alertmanager.conf
|
||||||
|
- source: salt://prometheus/files/alertmanager.upstart.jinja
|
||||||
|
{%- endif %}
|
||||||
|
- watch:
|
||||||
|
- file: alertmanager_defaults
|
||||||
|
- require_in:
|
||||||
|
- file: alertmanager_service
|
||||||
|
|
||||||
|
alertmanager_service:
|
||||||
|
service.running:
|
||||||
|
- name: alertmanager
|
||||||
|
- enable: True
|
||||||
|
- reload: True
|
||||||
|
- watch:
|
||||||
|
- file: alertmanager_config
|
66
prometheus/defaults.yaml
Normal file
66
prometheus/defaults.yaml
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
prometheus:
|
||||||
|
server:
|
||||||
|
version: 1.1.3.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/prometheus/releases/download/v1.1.3/prometheus-1.1.3.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=839293afa9bfce47c476a0bdfd01a780
|
||||||
|
args:
|
||||||
|
config_file: /etc/prometheus/prometheus.yml
|
||||||
|
storage:
|
||||||
|
local_path: /var/lib/prometheus/metrics
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
- job_name: 'node'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9100']
|
||||||
|
alertmanager:
|
||||||
|
version: 0.4.2.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/alertmanager/releases/download/v0.4.2/alertmanager-0.4.2.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=715878f14ab091769c989ecdb2db9f15
|
||||||
|
args:
|
||||||
|
config_file: /etc/alertmanager/alertmanager.yml
|
||||||
|
storage:
|
||||||
|
path: /var/lib/alertmanager
|
||||||
|
config:
|
||||||
|
global:
|
||||||
|
smtp_smarthost: "localhost:25"
|
||||||
|
smtp_from: 'alertmanager@example.org'
|
||||||
|
smtp_auth_username: 'alertmanager'
|
||||||
|
smtp_auth_password: 'password'
|
||||||
|
templates:
|
||||||
|
- "/etc/alertmanager/template/*.tmpl"
|
||||||
|
route:
|
||||||
|
group_by: ['alertname', 'cluster', 'service']
|
||||||
|
group_wait: 30s
|
||||||
|
group_interval: 5m
|
||||||
|
repeat_interval: 3h
|
||||||
|
receiver: team-X-mails
|
||||||
|
routes:
|
||||||
|
- match_re:
|
||||||
|
service: ^(foo1|foo2|baz)$
|
||||||
|
receiver: team-X-mails
|
||||||
|
inhibit_rules:
|
||||||
|
- source_match:
|
||||||
|
severity: 'critical'
|
||||||
|
target_match:
|
||||||
|
severity: 'warning'
|
||||||
|
equal: ['alertname', 'cluster', 'service']
|
||||||
|
receivers:
|
||||||
|
- name: 'team-X-mails'
|
||||||
|
email_configs:
|
||||||
|
- to: 'team-X+alerts@example.org'
|
||||||
|
exporters:
|
||||||
|
node:
|
||||||
|
version: 0.12.0.linux-amd64
|
||||||
|
install_dir: /opt
|
||||||
|
source: https://github.com/prometheus/node_exporter/releases/download/0.12.0/node_exporter-0.12.0.linux-amd64.tar.gz
|
||||||
|
source_hash: md5=efe49b6fae4b1a5cb75b24a60a35e1fc
|
48
prometheus/exporters/node.sls
Normal file
48
prometheus/exporters/node.sls
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{% from "prometheus/map.jinja" import prometheus with context %}
|
||||||
|
{%- set version_path = prometheus.exporters.node.install_dir ~ "/node_exporter-" ~ prometheus.exporters.node.version %}
|
||||||
|
|
||||||
|
include:
|
||||||
|
- prometheus.user
|
||||||
|
|
||||||
|
node_exporter_tarball:
|
||||||
|
archive.extracted:
|
||||||
|
- name: {{ prometheus.exporters.node.install_dir }}
|
||||||
|
- source: {{ prometheus.exporters.node.source }}
|
||||||
|
- source_hash: {{ prometheus.exporters.node.source_hash }}
|
||||||
|
- archive_format: tar
|
||||||
|
- if_missing: {{ version_path }}
|
||||||
|
|
||||||
|
node_exporter_bin_link:
|
||||||
|
alternatives.install:
|
||||||
|
- name: node_exporter
|
||||||
|
- link: /usr/bin/node_exporter
|
||||||
|
- path: {{ version_path }}/node_exporter
|
||||||
|
- priority: 10
|
||||||
|
- require:
|
||||||
|
- archive: node_exporter_tarball
|
||||||
|
|
||||||
|
node_exporter_defaults:
|
||||||
|
file.managed:
|
||||||
|
- name: /etc/default/node_exporter
|
||||||
|
- source: salt://prometheus/files/default-node_exporter.jinja
|
||||||
|
- template: jinja
|
||||||
|
|
||||||
|
node_exporter_service_unit:
|
||||||
|
file.managed:
|
||||||
|
{%- if grains.get('init') == 'systemd' %}
|
||||||
|
- name: /etc/systemd/system/node_exporter.service
|
||||||
|
- source: salt://prometheus/files/node_exporter.systemd.jinja
|
||||||
|
{%- elif grains.get('init') == 'upstart' %}
|
||||||
|
- name: /etc/init/node_exporter.conf
|
||||||
|
- source: salt://prometheus/files/node_exporter.upstart.jinja
|
||||||
|
{%- endif %}
|
||||||
|
- require_in:
|
||||||
|
- file: node_exporter_service
|
||||||
|
|
||||||
|
node_exporter_service:
|
||||||
|
service.running:
|
||||||
|
- name: node_exporter
|
||||||
|
- enable: True
|
||||||
|
- reload: True
|
||||||
|
- watch:
|
||||||
|
- file: node_exporter_defaults
|
18
prometheus/files/alertmanager.systemd.jinja
Normal file
18
prometheus/files/alertmanager.systemd.jinja
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[Unit]
|
||||||
|
Description=The Alertmanager handles alerts sent by client applications such as the Prometheus server
|
||||||
|
Documentation=https://prometheus.io/docs/alerting/alertmanager/
|
||||||
|
Wants=basic.target
|
||||||
|
After=basic.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
EnvironmentFile=/etc/default/alertmanager
|
||||||
|
ExecStart=/usr/bin/alertmanager $ARGS
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
Restart=always
|
||||||
|
RestartSec=42s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
30
prometheus/files/alertmanager.upstart.jinja
Normal file
30
prometheus/files/alertmanager.upstart.jinja
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Prometheus Alert Manager (Upstart unit)
|
||||||
|
description "The Alertmanager handles alerts sent by client applications such as the Prometheus server."
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [06]
|
||||||
|
|
||||||
|
env ALERTMANAGER=/usr/bin/alertmanager
|
||||||
|
env USER=prometheus
|
||||||
|
env GROUP=prometheus
|
||||||
|
env DEFAULTS=/etc/default/alertmanager
|
||||||
|
env RUNDIR=/var/run/alertmanager
|
||||||
|
env PID_FILE=/var/run/alertmanager/alertmanager.pid
|
||||||
|
pre-start script
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
mkdir -p $RUNDIR || true
|
||||||
|
chmod 0750 $RUNDIR || true
|
||||||
|
chown $USER:$GROUP $RUNDIR || true
|
||||||
|
end script
|
||||||
|
|
||||||
|
script
|
||||||
|
# read settings like GOMAXPROCS from "/etc/default/alertmanager", if available.
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
export GOMAXPROCS=${GOMAXPROCS:-2}
|
||||||
|
exec start-stop-daemon -c $USER -g $GROUP -p $PID_FILE -x $ALERTMANAGER -S -- $ARGS
|
||||||
|
end script
|
||||||
|
|
||||||
|
respawn
|
||||||
|
respawn limit 10 10
|
||||||
|
kill timeout 10
|
1
prometheus/files/config.jinja
Normal file
1
prometheus/files/config.jinja
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{ data|yaml(False) }}
|
25
prometheus/files/default-alertmanager.jinja
Normal file
25
prometheus/files/default-alertmanager.jinja
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# Set the command-line arguments to pass to the server.
|
||||||
|
ARGS="-config.file {{config_file}} -storage.path {{ storage_path }}"
|
||||||
|
|
||||||
|
# The alert manager supports the following options:
|
||||||
|
# -config.file string
|
||||||
|
# Alertmanager configuration file name.
|
||||||
|
# (default "/etc/prometheus/alertmanager.yml")
|
||||||
|
# -log.level value
|
||||||
|
# Only log messages with the given severity or above.
|
||||||
|
# Valid levels: [debug, info, warn, error, fatal]. (default info)
|
||||||
|
# -storage.path string
|
||||||
|
# Base path for data storage.
|
||||||
|
# (default "/var/lib/prometheus/alertmanager/")
|
||||||
|
# -web.external-url string
|
||||||
|
# The URL under which Alertmanager is externally reachable (for example,
|
||||||
|
# if Alertmanager is served via a reverse proxy). Used for generating
|
||||||
|
# relative and absolute links back to Alertmanager itself. If the URL has
|
||||||
|
# a path portion, it will be used to prefix all HTTP endpoints served by
|
||||||
|
# Alertmanager. If omitted, relevant URL components will be derived
|
||||||
|
# automatically.
|
||||||
|
# -web.listen-address string
|
||||||
|
# Address to listen on for the web interface and API. (default ":9093")
|
||||||
|
# -web.local-assets string
|
||||||
|
# Path to static assets/templates directory.
|
||||||
|
# (default "/usr/share/prometheus/alertmanager/")
|
2
prometheus/files/default-node_exporter.jinja
Normal file
2
prometheus/files/default-node_exporter.jinja
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Set the command-line arguments to pass to the server.
|
||||||
|
ARGS=""
|
178
prometheus/files/default-prometheus.jinja
Normal file
178
prometheus/files/default-prometheus.jinja
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
# Set the command-line arguments to pass to the server.
|
||||||
|
ARGS="-config.file {{config_file}} -storage.local.path {{storage_local_path}} -web.console.libraries {{web_console_libraries}} -web.console.templates {{web_console_templates}}"
|
||||||
|
|
||||||
|
# Prometheus supports the following options:
|
||||||
|
|
||||||
|
# -config.file "/etc/prometheus/prometheus.yml"
|
||||||
|
# Prometheus configuration file name.
|
||||||
|
#
|
||||||
|
# == ALERTMANAGER ==
|
||||||
|
#
|
||||||
|
# -alertmanager.notification-queue-capacity 10000
|
||||||
|
# The capacity of the queue for pending alert manager notifications.
|
||||||
|
#
|
||||||
|
# -alertmanager.timeout 10s
|
||||||
|
# Alert manager HTTP API timeout.
|
||||||
|
#
|
||||||
|
# -alertmanager.url
|
||||||
|
# The URL of the alert manager to send notifications to.
|
||||||
|
#
|
||||||
|
# == LOG ==
|
||||||
|
#
|
||||||
|
# -log.format
|
||||||
|
# If set use a syslog logger or JSON logging. Example:
|
||||||
|
# logger:syslog?appname=bob&local=7 or logger:stdout?json=true. Defaults to
|
||||||
|
# stderr.
|
||||||
|
#
|
||||||
|
# -log.level "info"
|
||||||
|
# Only log messages with the given severity or above. Valid levels:
|
||||||
|
# [debug, info, warn, error, fatal].
|
||||||
|
#
|
||||||
|
# == QUERY ==
|
||||||
|
#
|
||||||
|
# -query.max-concurrency 20
|
||||||
|
# Maximum number of queries executed concurrently.
|
||||||
|
#
|
||||||
|
# -query.staleness-delta 5m0s
|
||||||
|
# Staleness delta allowance during expression evaluations.
|
||||||
|
#
|
||||||
|
# -query.timeout 2m0s
|
||||||
|
# Maximum time a query may take before being aborted.
|
||||||
|
#
|
||||||
|
# == STORAGE ==
|
||||||
|
#
|
||||||
|
# -storage.local.checkpoint-dirty-series-limit 5000
|
||||||
|
# If approx. that many time series are in a state that would require
|
||||||
|
# a recovery operation after a crash, a checkpoint is triggered, even if
|
||||||
|
# the checkpoint interval hasn't passed yet. A recovery operation requires
|
||||||
|
# a disk seek. The default limit intends to keep the recovery time below
|
||||||
|
# 1min even on spinning disks. With SSD, recovery is much faster, so you
|
||||||
|
# might want to increase this value in that case to avoid overly frequent
|
||||||
|
# checkpoints.
|
||||||
|
#
|
||||||
|
# -storage.local.checkpoint-interval 5m0s
|
||||||
|
# The period at which the in-memory metrics and the chunks not yet
|
||||||
|
# persisted to series files are checkpointed.
|
||||||
|
#
|
||||||
|
# -storage.local.chunk-encoding-version 1
|
||||||
|
# Which chunk encoding version to use for newly created chunks.
|
||||||
|
# Currently supported is 0 (delta encoding) and 1 (double-delta encoding).
|
||||||
|
#
|
||||||
|
# -storage.local.dirty false
|
||||||
|
# If set, the local storage layer will perform crash recovery even if
|
||||||
|
# the last shutdown appears to be clean.
|
||||||
|
#
|
||||||
|
# -storage.local.index-cache-size.fingerprint-to-metric 10485760
|
||||||
|
# The size in bytes for the fingerprint to metric index cache.
|
||||||
|
#
|
||||||
|
# -storage.local.index-cache-size.fingerprint-to-timerange 5242880
|
||||||
|
# The size in bytes for the metric time range index cache.
|
||||||
|
#
|
||||||
|
# -storage.local.index-cache-size.label-name-to-label-values 10485760
|
||||||
|
# The size in bytes for the label name to label values index cache.
|
||||||
|
#
|
||||||
|
# -storage.local.index-cache-size.label-pair-to-fingerprints 20971520
|
||||||
|
# The size in bytes for the label pair to fingerprints index cache.
|
||||||
|
#
|
||||||
|
# -storage.local.max-chunks-to-persist 524288
|
||||||
|
# How many chunks can be waiting for persistence before sample
|
||||||
|
# ingestion will be throttled. Many chunks waiting to be persisted will
|
||||||
|
# increase the checkpoint size.
|
||||||
|
#
|
||||||
|
# -storage.local.memory-chunks 1048576
|
||||||
|
# How many chunks to keep in memory. While the size of a chunk is
|
||||||
|
# 1kiB, the total memory usage will be significantly higher than this value
|
||||||
|
# * 1kiB. Furthermore, for various reasons, more chunks might have to be
|
||||||
|
# kept in memory temporarily. Sample ingestion will be throttled if the
|
||||||
|
# configured value is exceeded by more than 10%.
|
||||||
|
#
|
||||||
|
# -storage.local.path "/var/lib/prometheus/metrics"
|
||||||
|
# Base path for metrics storage.
|
||||||
|
#
|
||||||
|
# -storage.local.pedantic-checks false
|
||||||
|
# If set, a crash recovery will perform checks on each series file.
|
||||||
|
# This might take a very long time.
|
||||||
|
#
|
||||||
|
# -storage.local.retention 360h0m0s
|
||||||
|
# How long to retain samples in the local storage.
|
||||||
|
#
|
||||||
|
# -storage.local.series-file-shrink-ratio 0.1
|
||||||
|
# A series file is only truncated (to delete samples that have
|
||||||
|
# exceeded the retention period) if it shrinks by at least the provided
|
||||||
|
# ratio. This saves I/O operations while causing only a limited storage
|
||||||
|
# space overhead. If 0 or smaller, truncation will be performed even for a
|
||||||
|
# single dropped chunk, while 1 or larger will effectively prevent any
|
||||||
|
# truncation.
|
||||||
|
#
|
||||||
|
# -storage.local.series-sync-strategy "adaptive"
|
||||||
|
# When to sync series files after modification. Possible values:
|
||||||
|
# 'never', 'always', 'adaptive'. Sync'ing slows down storage performance
|
||||||
|
# but reduces the risk of data loss in case of an OS crash. With the
|
||||||
|
# 'adaptive' strategy, series files are sync'd for as long as the storage
|
||||||
|
# is not too much behind on chunk persistence.
|
||||||
|
#
|
||||||
|
# -storage.remote.graphite-address
|
||||||
|
# The host:port of the remote Graphite server to send samples to.
|
||||||
|
# None, if empty.
|
||||||
|
#
|
||||||
|
# -storage.remote.graphite-prefix
|
||||||
|
# The prefix to prepend to all metrics exported to Graphite. None, if
|
||||||
|
# empty.
|
||||||
|
#
|
||||||
|
# -storage.remote.graphite-transport "tcp"
|
||||||
|
# Transport protocol to use to communicate with Graphite. 'tcp', if
|
||||||
|
# empty.
|
||||||
|
#
|
||||||
|
# -storage.remote.influxdb-url
|
||||||
|
# The URL of the remote InfluxDB server to send samples to. None, if
|
||||||
|
# empty.
|
||||||
|
#
|
||||||
|
# -storage.remote.influxdb.database "prometheus"
|
||||||
|
# The name of the database to use for storing samples in InfluxDB.
|
||||||
|
#
|
||||||
|
# -storage.remote.influxdb.retention-policy "default"
|
||||||
|
# The InfluxDB retention policy to use.
|
||||||
|
#
|
||||||
|
# -storage.remote.influxdb.username
|
||||||
|
# The username to use when sending samples to InfluxDB. The
|
||||||
|
# corresponding password must be provided via the INFLUXDB_PW environment
|
||||||
|
# variable.
|
||||||
|
#
|
||||||
|
# -storage.remote.opentsdb-url
|
||||||
|
# The URL of the remote OpenTSDB server to send samples to. None, if
|
||||||
|
# empty.
|
||||||
|
#
|
||||||
|
# -storage.remote.timeout 30s
|
||||||
|
# The timeout to use when sending samples to the remote storage.
|
||||||
|
#
|
||||||
|
# == WEB ==
|
||||||
|
#
|
||||||
|
# -web.console.libraries "/etc/prometheus/console_libraries"
|
||||||
|
# Path to the console library directory.
|
||||||
|
#
|
||||||
|
# -web.console.templates "/etc/prometheus/consoles"
|
||||||
|
# Path to the console template directory, available at /consoles.
|
||||||
|
#
|
||||||
|
# -web.enable-remote-shutdown false
|
||||||
|
# Enable remote service shutdown.
|
||||||
|
#
|
||||||
|
# -web.external-url
|
||||||
|
# The URL under which Prometheus is externally reachable (for
|
||||||
|
# example, if Prometheus is served via a reverse proxy). Used for
|
||||||
|
# generating relative and absolute links back to Prometheus itself. If the
|
||||||
|
# URL has a path portion, it will be used to prefix all HTTP endpoints
|
||||||
|
# served by Prometheus. If omitted, relevant URL components will be derived
|
||||||
|
# automatically.
|
||||||
|
#
|
||||||
|
# -web.listen-address ":9090"
|
||||||
|
# Address to listen on for the web interface, API, and telemetry.
|
||||||
|
#
|
||||||
|
# -web.local-assets "/usr/share/prometheus/web/"
|
||||||
|
# Path to static assets/templates directory.
|
||||||
|
#
|
||||||
|
# -web.telemetry-path "/metrics"
|
||||||
|
# Path under which to expose metrics.
|
||||||
|
#
|
||||||
|
# -web.user-assets
|
||||||
|
# Path to static asset directory, available at /user.
|
||||||
|
#
|
18
prometheus/files/node_exporter.systemd.jinja
Normal file
18
prometheus/files/node_exporter.systemd.jinja
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Prometheus exporter for machine metrics
|
||||||
|
Documentation=https://github.com/prometheus/node_exporter
|
||||||
|
Wants=basic.target
|
||||||
|
After=basic.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
EnvironmentFile=/etc/default/node_exporter
|
||||||
|
ExecStart=/usr/bin/node_exporter $ARGS
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
Restart=always
|
||||||
|
RestartSec=42s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
30
prometheus/files/node_exporter.upstart.jinja
Normal file
30
prometheus/files/node_exporter.upstart.jinja
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Prometheus Node Exporter (Upstart unit)
|
||||||
|
description "Prometheus exporter for machine metrics"
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [06]
|
||||||
|
|
||||||
|
env NODE_EXPORTER=/usr/bin/node_exporter
|
||||||
|
env USER=prometheus
|
||||||
|
env GROUP=prometheus
|
||||||
|
env DEFAULTS=/etc/default/node_exporter
|
||||||
|
env RUNDIR=/var/run/node_exporter
|
||||||
|
env PID_FILE=/var/run/node_exporter/node_exporter.pid
|
||||||
|
pre-start script
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
mkdir -p $RUNDIR || true
|
||||||
|
chmod 0750 $RUNDIR || true
|
||||||
|
chown $USER:$GROUP $RUNDIR || true
|
||||||
|
end script
|
||||||
|
|
||||||
|
script
|
||||||
|
# read settings like GOMAXPROCS from "/etc/default/node_exporter", if available.
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
export GOMAXPROCS=${GOMAXPROCS:-2}
|
||||||
|
exec start-stop-daemon -c $USER -g $GROUP -p $PID_FILE -x $NODE_EXPORTER -S -- $ARGS
|
||||||
|
end script
|
||||||
|
|
||||||
|
respawn
|
||||||
|
respawn limit 10 10
|
||||||
|
kill timeout 10
|
123
prometheus/files/orig-alertmanager.yml
Normal file
123
prometheus/files/orig-alertmanager.yml
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
global:
|
||||||
|
# The smarthost and SMTP sender used for mail notifications.
|
||||||
|
smtp_smarthost: 'localhost:25'
|
||||||
|
smtp_from: 'alertmanager@example.org'
|
||||||
|
smtp_auth_username: 'alertmanager'
|
||||||
|
smtp_auth_password: 'password'
|
||||||
|
# The auth token for Hipchat.
|
||||||
|
hipchat_auth_token: '1234556789'
|
||||||
|
# Alternative host for Hipchat.
|
||||||
|
hipchat_url: 'https://hipchat.foobar.org/'
|
||||||
|
|
||||||
|
# The directory from which notification templates are read.
|
||||||
|
templates:
|
||||||
|
- '/etc/alertmanager/template/*.tmpl'
|
||||||
|
|
||||||
|
# The root route on which each incoming alert enters.
|
||||||
|
route:
|
||||||
|
# The labels by which incoming alerts are grouped together. For example,
|
||||||
|
# multiple alerts coming in for cluster=A and alertname=LatencyHigh would
|
||||||
|
# be batched into a single group.
|
||||||
|
group_by: ['alertname', 'cluster', 'service']
|
||||||
|
|
||||||
|
# When a new group of alerts is created by an incoming alert, wait at
|
||||||
|
# least 'group_wait' to send the initial notification.
|
||||||
|
# This way ensures that you get multiple alerts for the same group that start
|
||||||
|
# firing shortly after another are batched together on the first
|
||||||
|
# notification.
|
||||||
|
group_wait: 30s
|
||||||
|
|
||||||
|
# When the first notification was sent, wait 'group_interval' to send a batch
|
||||||
|
# of new alerts that started firing for that group.
|
||||||
|
group_interval: 5m
|
||||||
|
|
||||||
|
# If an alert has successfully been sent, wait 'repeat_interval' to
|
||||||
|
# resend them.
|
||||||
|
repeat_interval: 3h
|
||||||
|
|
||||||
|
# A default receiver
|
||||||
|
receiver: team-X-mails
|
||||||
|
|
||||||
|
# All the above attributes are inherited by all child routes and can
|
||||||
|
# overwritten on each.
|
||||||
|
|
||||||
|
# The child route trees.
|
||||||
|
routes:
|
||||||
|
# This routes performs a regular expression match on alert labels to
|
||||||
|
# catch alerts that are related to a list of services.
|
||||||
|
- match_re:
|
||||||
|
service: ^(foo1|foo2|baz)$
|
||||||
|
receiver: team-X-mails
|
||||||
|
# The service has a sub-route for critical alerts, any alerts
|
||||||
|
# that do not match, i.e. severity != critical, fall-back to the
|
||||||
|
# parent node and are sent to 'team-X-mails'
|
||||||
|
routes:
|
||||||
|
- match:
|
||||||
|
severity: critical
|
||||||
|
receiver: team-X-pager
|
||||||
|
- match:
|
||||||
|
service: files
|
||||||
|
receiver: team-Y-mails
|
||||||
|
|
||||||
|
routes:
|
||||||
|
- match:
|
||||||
|
severity: critical
|
||||||
|
receiver: team-Y-pager
|
||||||
|
|
||||||
|
# This route handles all alerts coming from a database service. If there's
|
||||||
|
# no team to handle it, it defaults to the DB team.
|
||||||
|
- match:
|
||||||
|
service: database
|
||||||
|
receiver: team-DB-pager
|
||||||
|
# Also group alerts by affected database.
|
||||||
|
group_by: [alertname, cluster, database]
|
||||||
|
routes:
|
||||||
|
- match:
|
||||||
|
owner: team-X
|
||||||
|
receiver: team-X-pager
|
||||||
|
- match:
|
||||||
|
owner: team-Y
|
||||||
|
receiver: team-Y-pager
|
||||||
|
|
||||||
|
|
||||||
|
# Inhibition rules allow to mute a set of alerts given that another alert is
|
||||||
|
# firing.
|
||||||
|
# We use this to mute any warning-level notifications if the same alert is
|
||||||
|
# already critical.
|
||||||
|
inhibit_rules:
|
||||||
|
- source_match:
|
||||||
|
severity: 'critical'
|
||||||
|
target_match:
|
||||||
|
severity: 'warning'
|
||||||
|
# Apply inhibition if the alertname is the same.
|
||||||
|
equal: ['alertname', 'cluster', 'service']
|
||||||
|
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
- name: 'team-X-mails'
|
||||||
|
email_configs:
|
||||||
|
- to: 'team-X+alerts@example.org'
|
||||||
|
|
||||||
|
- name: 'team-X-pager'
|
||||||
|
email_configs:
|
||||||
|
- to: 'team-X+alerts-critical@example.org'
|
||||||
|
pagerduty_configs:
|
||||||
|
- service_key: <team-X-key>
|
||||||
|
|
||||||
|
- name: 'team-Y-mails'
|
||||||
|
email_configs:
|
||||||
|
- to: 'team-Y+alerts@example.org'
|
||||||
|
|
||||||
|
- name: 'team-Y-pager'
|
||||||
|
pagerduty_configs:
|
||||||
|
- service_key: <team-Y-key>
|
||||||
|
|
||||||
|
- name: 'team-DB-pager'
|
||||||
|
pagerduty_configs:
|
||||||
|
- service_key: <team-DB-key>
|
||||||
|
- name: 'team-X-hipchat'
|
||||||
|
hipchat_configs:
|
||||||
|
- auth_token: <auth_token>
|
||||||
|
room_id: 85
|
||||||
|
message_format: html
|
||||||
|
notify: true
|
30
prometheus/files/orig-prometheus.yml
Normal file
30
prometheus/files/orig-prometheus.yml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# my global config
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s # By default, scrape targets every 15 seconds.
|
||||||
|
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
|
||||||
|
# scrape_timeout is set to the global default (10s).
|
||||||
|
|
||||||
|
# Attach these labels to any time series or alerts when communicating with
|
||||||
|
# external systems (federation, remote storage, Alertmanager).
|
||||||
|
external_labels:
|
||||||
|
monitor: 'codelab-monitor'
|
||||||
|
|
||||||
|
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
|
||||||
|
rule_files:
|
||||||
|
# - "first.rules"
|
||||||
|
# - "second.rules"
|
||||||
|
|
||||||
|
# A scrape configuration containing exactly one endpoint to scrape:
|
||||||
|
# Here it's Prometheus itself.
|
||||||
|
scrape_configs:
|
||||||
|
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
|
||||||
|
# Override the global default and scrape targets from this job every 5 seconds.
|
||||||
|
scrape_interval: 5s
|
||||||
|
|
||||||
|
# metrics_path defaults to '/metrics'
|
||||||
|
# scheme defaults to 'http'.
|
||||||
|
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
18
prometheus/files/prometheus.systemd.jinja
Normal file
18
prometheus/files/prometheus.systemd.jinja
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Monitoring system and time series database
|
||||||
|
Documentation=https://prometheus.io/docs/introduction/overview/
|
||||||
|
Wants=basic.target
|
||||||
|
After=basic.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
EnvironmentFile=/etc/default/prometheus
|
||||||
|
ExecStart=/usr/bin/prometheus $ARGS
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
Restart=always
|
||||||
|
RestartSec=42s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
30
prometheus/files/prometheus.upstart.jinja
Normal file
30
prometheus/files/prometheus.upstart.jinja
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Prometheus Monitoring Framework (Upstart unit)
|
||||||
|
description "Prometheus Monitoring Framework"
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [06]
|
||||||
|
|
||||||
|
env PROMETHEUS=/usr/bin/prometheus
|
||||||
|
env USER=prometheus
|
||||||
|
env GROUP=prometheus
|
||||||
|
env DEFAULTS=/etc/default/prometheus
|
||||||
|
env RUNDIR=/var/run/prometheus
|
||||||
|
env PID_FILE=/var/run/prometheus/prometheus.pid
|
||||||
|
pre-start script
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
mkdir -p $RUNDIR || true
|
||||||
|
chmod 0750 $RUNDIR || true
|
||||||
|
chown $USER:$GROUP $RUNDIR || true
|
||||||
|
end script
|
||||||
|
|
||||||
|
script
|
||||||
|
# read settings like GOMAXPROCS from "/etc/default/prometheus", if available.
|
||||||
|
[ -e $DEFAULTS ] && . $DEFAULTS
|
||||||
|
|
||||||
|
export GOMAXPROCS=${GOMAXPROCS:-2}
|
||||||
|
exec start-stop-daemon -c $USER -g $GROUP -p $PID_FILE -x $PROMETHEUS -S -- $ARGS
|
||||||
|
end script
|
||||||
|
|
||||||
|
respawn
|
||||||
|
respawn limit 10 10
|
||||||
|
kill timeout 10
|
4
prometheus/init.sls
Normal file
4
prometheus/init.sls
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{% from "prometheus/map.jinja" import prometheus with context %}
|
||||||
|
|
||||||
|
include:
|
||||||
|
- prometheus.server
|
3
prometheus/map.jinja
Normal file
3
prometheus/map.jinja
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{% import_yaml 'prometheus/defaults.yaml' as defaults %}
|
||||||
|
|
||||||
|
{% set prometheus = salt['pillar.get']('prometheus', default=defaults.prometheus, merge=True) %}
|
77
prometheus/server.sls
Normal file
77
prometheus/server.sls
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
{% from "prometheus/map.jinja" import prometheus with context %}
|
||||||
|
{%- set version_path = prometheus.server.install_dir ~ "/prometheus-" ~ prometheus.server.version %}
|
||||||
|
|
||||||
|
include:
|
||||||
|
- prometheus.user
|
||||||
|
|
||||||
|
prometheus_server_tarball:
|
||||||
|
archive.extracted:
|
||||||
|
- name: {{ prometheus.server.install_dir }}
|
||||||
|
- source: {{ prometheus.server.source }}
|
||||||
|
- source_hash: {{ prometheus.server.source_hash }}
|
||||||
|
- archive_format: tar
|
||||||
|
- if_missing: {{ version_path }}
|
||||||
|
|
||||||
|
prometheus_bin_link:
|
||||||
|
alternatives.install:
|
||||||
|
- name: prometheus
|
||||||
|
- link: /usr/bin/prometheus
|
||||||
|
- path: {{ version_path }}/prometheus
|
||||||
|
- priority: 10
|
||||||
|
- require:
|
||||||
|
- archive: prometheus_server_tarball
|
||||||
|
|
||||||
|
prometheus_server_config:
|
||||||
|
file.managed:
|
||||||
|
- name: {{ prometheus.server.args.config_file }}
|
||||||
|
- source: salt://prometheus/files/config.jinja
|
||||||
|
- template: jinja
|
||||||
|
- user: prometheus
|
||||||
|
- group: prometheus
|
||||||
|
- makedirs: True
|
||||||
|
- defaults:
|
||||||
|
data: {{ prometheus.server.config }}
|
||||||
|
|
||||||
|
prometheus_defaults:
|
||||||
|
file.managed:
|
||||||
|
- name: /etc/default/prometheus
|
||||||
|
- source: salt://prometheus/files/default-prometheus.jinja
|
||||||
|
- template: jinja
|
||||||
|
- defaults:
|
||||||
|
config_file: {{ prometheus.server.args.config_file }}
|
||||||
|
storage_local_path: {{ prometheus.server.args.storage.local_path }}
|
||||||
|
web_console_libraries: {{ version_path }}/console_libraries
|
||||||
|
web_console_templates: {{ version_path }}/consoles
|
||||||
|
|
||||||
|
{%- if prometheus.server.args.storage.local_path is defined %}
|
||||||
|
prometheus_storage_local_path:
|
||||||
|
file.directory:
|
||||||
|
- name: {{ prometheus.server.args.storage.local_path }}
|
||||||
|
- user: prometheus
|
||||||
|
- group: prometheus
|
||||||
|
- makedirs: True
|
||||||
|
- watch:
|
||||||
|
- file: prometheus_defaults
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
prometheus_service_unit:
|
||||||
|
file.managed:
|
||||||
|
{%- if grains.get('init') == 'systemd' %}
|
||||||
|
- name: /etc/systemd/system/prometheus.service
|
||||||
|
- source: salt://prometheus/files/prometheus.systemd.jinja
|
||||||
|
{%- elif grains.get('init') == 'upstart' %}
|
||||||
|
- name: /etc/init/prometheus.conf
|
||||||
|
- source: salt://prometheus/files/prometheus.upstart.jinja
|
||||||
|
{%- endif %}
|
||||||
|
- watch:
|
||||||
|
- file: prometheus_defaults
|
||||||
|
- require_in:
|
||||||
|
- file: prometheus_service
|
||||||
|
|
||||||
|
prometheus_service:
|
||||||
|
service.running:
|
||||||
|
- name: prometheus
|
||||||
|
- enable: True
|
||||||
|
- reload: True
|
||||||
|
- watch:
|
||||||
|
- file: prometheus_server_config
|
9
prometheus/user.sls
Normal file
9
prometheus/user.sls
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
prometheus_group:
|
||||||
|
group.present:
|
||||||
|
- name: prometheus
|
||||||
|
|
||||||
|
prometheus_user:
|
||||||
|
user.present:
|
||||||
|
- name: prometheus
|
||||||
|
- home: /var/lib/prometheus
|
||||||
|
- gid_from_name: True
|
3
requirements.dev.txt
Normal file
3
requirements.dev.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
pytest
|
||||||
|
pytest-xdist
|
||||||
|
testinfra
|
65
test/cluster/Vagrantfile
vendored
Normal file
65
test/cluster/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
required_plugins = %w( vagrant-hostmanager )
|
||||||
|
required_plugins.each do |plugin|
|
||||||
|
exec "vagrant plugin install #{plugin};vagrant #{ARGV.join(" ")}" unless Vagrant.has_plugin? plugin || ARGV[0] == 'plugin'
|
||||||
|
end
|
||||||
|
|
||||||
|
Vagrant.configure(2) do |config|
|
||||||
|
config.vm.box = "ubuntu/trusty64"
|
||||||
|
|
||||||
|
if Vagrant.has_plugin?("vagrant-cachier")
|
||||||
|
config.cache.scope = :box
|
||||||
|
end
|
||||||
|
|
||||||
|
config.hostmanager.enabled = true
|
||||||
|
config.hostmanager.manage_guest = true
|
||||||
|
config.hostmanager.include_offline = true
|
||||||
|
|
||||||
|
config.vm.provision :shell, inline: "sudo locale-gen en_IE.UTF-8"
|
||||||
|
|
||||||
|
(1..3).each do |m|
|
||||||
|
config.vm.define "min#{m}" do |min|
|
||||||
|
min.vm.network "private_network", ip: "172.16.199.1#{m}"
|
||||||
|
min.vm.hostname = "min#{m}"
|
||||||
|
|
||||||
|
min.vm.provider "virtualbox" do |vb|
|
||||||
|
vb.name = "prometheus-min#{m}"
|
||||||
|
vb.memory = "2048"
|
||||||
|
end
|
||||||
|
|
||||||
|
min.vm.provision :salt do |salt|
|
||||||
|
salt.minion_config = "conf/minion"
|
||||||
|
salt.minion_key = "keys/min#{m}.pem"
|
||||||
|
salt.minion_pub = "keys/min#{m}.pub"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.define :master do |master|
|
||||||
|
master.vm.network "private_network", ip: "172.16.199.10"
|
||||||
|
master.vm.hostname = "salt"
|
||||||
|
master.vm.synced_folder "../../prometheus", "/srv/formulas/prometheus"
|
||||||
|
master.vm.synced_folder "../salt", "/srv/salt"
|
||||||
|
master.vm.synced_folder "../pillar", "/srv/pillar"
|
||||||
|
|
||||||
|
master.vm.provider "virtualbox" do |vb|
|
||||||
|
vb.name = "prometheus-master"
|
||||||
|
vb.memory = "1024"
|
||||||
|
end
|
||||||
|
|
||||||
|
master.vm.provision :shell, inline: "sudo apt-get install -y python-git python-pip"
|
||||||
|
|
||||||
|
master.vm.provision :salt do |salt|
|
||||||
|
salt.run_highstate = false
|
||||||
|
salt.install_master = true
|
||||||
|
salt.master_config = "conf/master"
|
||||||
|
salt.master_key = "keys/master.pem"
|
||||||
|
salt.master_pub = "keys/master.pub"
|
||||||
|
salt.seed_master = {"min1": "keys/min1.pub",
|
||||||
|
"min2": "keys/min2.pub",
|
||||||
|
"min3": "keys/min3.pub"}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
test/cluster/conf/master
Normal file
11
test/cluster/conf/master
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileserver_backend:
|
||||||
|
- roots
|
||||||
|
# - git
|
||||||
|
|
||||||
|
file_roots:
|
||||||
|
base:
|
||||||
|
- /srv/salt
|
||||||
|
- /srv/formulas
|
||||||
|
|
||||||
|
#gitfs_remotes:
|
||||||
|
# - https://github.com/repo/something-formula.git
|
3
test/cluster/conf/minion
Normal file
3
test/cluster/conf/minion
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
grains:
|
||||||
|
roles:
|
||||||
|
- prometheus
|
27
test/cluster/keys/master.pem
Normal file
27
test/cluster/keys/master.pem
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpAIBAAKCAQEAlbO37bcGrTXwDlHA7Oea2ZYS1e6UP6alvifCBfQNyPAqU/qr
|
||||||
|
tZmANExHev6jXjkgB8TKbwdZtg21zCsUfJzY2LAYlbj5iT3HDJ4fRnB0JIs5v6Zq
|
||||||
|
n/u8w2bB+K71TfqpzEFVcEbIQ7bMjfOTSx06XhqnsiDyLqKu7eoWUpCBtJO1+1UF
|
||||||
|
OYNJwVqnrGkab/4MPDSqnuOlNa0QP/OUSLANiw1nts4MFvdaOtFZ7fFCOuYdsocd
|
||||||
|
Ec6LFvzhqUjwSnCunIMndo7hiPUgKxyBogxSaTduPE6zCHeGNCkbov8LiuPYThvC
|
||||||
|
D+ZLZBje09QYPgNU8+iFaoAyOjIrEUja6LAlWwIDAQABAoIBAAR04DHcc/9uDqJu
|
||||||
|
fp7O2kZF+HOT8affbym1B0qkFFD6DViIqtnyIuXrq2kW8YgZjUGN8zTQ9DO+Pr5A
|
||||||
|
PhDjnnT88Q5r/km+pBFVF7tCF8MKvgJdkukGVn0+ruGXW8ghgTKKc1+vS8DwTTCg
|
||||||
|
oq7mxNkOVBWyc2M+BpUgld+JW8MjYuQItbxw8a/PNrJqKAdipFnE3THI0CIZhZEE
|
||||||
|
ja0ExjIJ4c+0bS5hPpq3LenQkeQbtBgeIFfPEm+1yO7ijtkeUEauwU0TAG4ELNOa
|
||||||
|
74biw7fyoI1i1PTSdHfBWJDTWsNm5mhi333bmwH84I6tmq6e6MM061cOKSOxRGYv
|
||||||
|
Z7dAykECgYEAtXQth67J4eLtNuqb4smplbDFLckVPQo5F34/kfy7rFKGWJdUJp4p
|
||||||
|
EzVOXeQ9J6oXYAHjz7yeb7bTYDvqp/rF6g9Ptui09Vt8oRdUYSlTZVBO/hYZkbMt
|
||||||
|
3IUOXC+R4+XVJZvvxkQtO8h70s/v4jL4PdchNqDZ30N5Y2CJCXWcuzsCgYEA0zQl
|
||||||
|
0JS9EB5Xl6U3T9p3I26KQp84TttTeWhUhlraojJZra9BnsXF4bqdzRBVAv0+gmeF
|
||||||
|
t+M9MjxPvGLOgZA0GQ3rJHjRMj5zAYiYFbxCfbvU0kvQ1lLfNameLtRnkQrLBCSN
|
||||||
|
4sTjETxd3HFNqRbGaif5OpV94maYOgzjQlbMXGECgYAi/9q8XiGAmYXJ3uzcjKtS
|
||||||
|
PTt7PlsDYBJtDqPyY75LWcuiEOZhYIZptxF7mMeW+/7wPM0VR7uDrs8Ms+HqLru4
|
||||||
|
DuYAUNh+rvvWEqrq5s64LwpdhiO+b8I708pWS7KnM7CuRWq1YncbHeuMWSFbDxvE
|
||||||
|
ydcVM2dy4g/q9DbahT4K+wKBgQCgOkSh6+VO8CX1ltLSkuOljrv3dQFr2bqHNZ5C
|
||||||
|
W3TYbihYusemo1XPPRtwMf68iNE+bzkj25JWpSi8u5z88CCGDWghwEK8wmHPfQgc
|
||||||
|
HTm4V6JKdFgX8MED3g1ya5OylqSUHQNDUakOL2Tp009egze921uZlUXuV3UPPS2/
|
||||||
|
60eYoQKBgQCqOPv/40dW1CE67y+z2qXWye6GNkUcxCM3A0WW3wRFFXuPfy+4lBSX
|
||||||
|
43+Zq6w6+sAcv4RpKQFF4kjtLGkekAOWgOmQmPafSeUUZ2dtuydVk0Q9GDMaAFHO
|
||||||
|
n1teSXnYfb2vZMz4kQ6a5PyrqKLhwfk7aCaDXYF4NlQTGokxtTqa5w==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
9
test/cluster/keys/master.pub
Normal file
9
test/cluster/keys/master.pub
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlbO37bcGrTXwDlHA7Oea
|
||||||
|
2ZYS1e6UP6alvifCBfQNyPAqU/qrtZmANExHev6jXjkgB8TKbwdZtg21zCsUfJzY
|
||||||
|
2LAYlbj5iT3HDJ4fRnB0JIs5v6Zqn/u8w2bB+K71TfqpzEFVcEbIQ7bMjfOTSx06
|
||||||
|
XhqnsiDyLqKu7eoWUpCBtJO1+1UFOYNJwVqnrGkab/4MPDSqnuOlNa0QP/OUSLAN
|
||||||
|
iw1nts4MFvdaOtFZ7fFCOuYdsocdEc6LFvzhqUjwSnCunIMndo7hiPUgKxyBogxS
|
||||||
|
aTduPE6zCHeGNCkbov8LiuPYThvCD+ZLZBje09QYPgNU8+iFaoAyOjIrEUja6LAl
|
||||||
|
WwIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
27
test/cluster/keys/min1.pem
Normal file
27
test/cluster/keys/min1.pem
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAivO8wR28TXAcKJhZmt+8w9Dc/KpqakkjHVea3ujBweLSmajj
|
||||||
|
qJPwd9DkdzjwygZBLNTYm24DSljBHcolG/tByZxM6/lP8HIWCJqxSaIeW6L0Hwab
|
||||||
|
fyj/OU/mHbNH51HXzwnRkOsNWp1X+wU7cSJyBncA1IrObMw27A814h6y5CbYG6gc
|
||||||
|
mDk3WkljDjx29uzNY+Sd7lPpbLy9p2z5eMh2crCi+mgXrJmWZSLtlXHvDKFQhWZo
|
||||||
|
BJbZzs4hdjAia7y9QScbTra1rIxBYYEwiuOsymCVkGNyX18lCuu4DFop22Qnlbqz
|
||||||
|
Y0LzlYUlSUndLQraTDqh7D5HScUzj83jKie1owIDAQABAoIBAGNXGk1eeu9KBXeo
|
||||||
|
Y/drmcLNIhCprWbLXwVtSlWvRkbdaP9eVVSCX9rpR01NMijdC9+HVEza/BM9HOO1
|
||||||
|
T46PtVr0GbJjDZmzlrkUD0e7VcTh3XIJAUaKAt3wl24IbJGeW5GzTVY0FdoAv5PB
|
||||||
|
C9w4ahjhH4DUs/vojCN8RGOi2vZtGUfRs0slbRTqyHrIjKvhSCUOwJp7ZFGVLP3X
|
||||||
|
3aL2j/5CBy0/0m73EXR2YS68UvB+l8h1XUEYk+mi/SmN4x9QloW8reUCbb4CXmNr
|
||||||
|
3qlYpomQmwBjLsINvXlHgEG+mnqHNBvfCh3mZxcpvcT6wBtc6K1B6o3ThaV1qFbI
|
||||||
|
9/lDJ/ECgYEAu0QN7o/4PIgHSczUWzaC6hImagvJ4PcPH63hNVJaKborwlUrkT5X
|
||||||
|
lQNpSLMyK9kRd7TyABC0sZ9+UdRCHUuC7iXfn4RT98DiyuKpmtM/2ATnKuZ6Zzh3
|
||||||
|
WLRC93/mYz9/mp+GmvDDzeHJxrRK+LP4zsPuk0fXSF6i3Z9PjJ0Rvy8CgYEAvfQC
|
||||||
|
MXV4i5DhG+FnBMTDV0JGjDdyRaupwatowdQ19n9xvEscglQcY/NvJx+Q+lktWCiJ
|
||||||
|
F/BEbxe0C5QDZADat99u7x8rwBIl8o6nJHqzYbbCcUT7e6fIS+8gSpFgOaXtD0n0
|
||||||
|
/SfvYPyJp6aTRZt/aGpwlADqJrjkm2SBGT8I880CgYA59mWNirheHAiNej3cgbHh
|
||||||
|
u35yYnW5ER94QbysYXIQ6lPzEaOrkC1RrT2gR/7mfYifkb058fHL7L8PmvBf2uiK
|
||||||
|
x+RAnpfS3rwT6jZu+qYPOe1HZRFL87lVFm6H5umrnJLljC0AtjcU+acXvuRZuHLx
|
||||||
|
pMmqgpkLCGfGyzG3J0K/9wKBgQCb4SLvnXvn5GOm8okM07+N2vhz1ohy/hVXtidI
|
||||||
|
cLI774fRQj5KAWYu67U6gOADYa0hXFpsh6JRHD2HBtbleQIDxFqP5p+LhhkX/NLS
|
||||||
|
z9JnDIhyVW6eoihvj/OK3dP+Wti4JDPkj6IUkAkSyFKw25Nph3eNLVb5od8QWiDL
|
||||||
|
K/xXvQKBgEWAvAas9yGhgSEhgX9xMyGbll8CLie6Xd9VwqF9gnlkoYLUOcOxME9K
|
||||||
|
CU1j/dryAED1pjtZbkYS40hbzoWiw/Qvt5deQPzbKAn19C/RZK+5EnCNzkUgHlk6
|
||||||
|
5KPMzlXZ3nCwrnAYF12ItziAP3gDlpRbJqQGPCkVruY2teQjQOxU
|
||||||
|
-----END RSA PRIVATE KEY-----
|
9
test/cluster/keys/min1.pub
Normal file
9
test/cluster/keys/min1.pub
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAivO8wR28TXAcKJhZmt+8
|
||||||
|
w9Dc/KpqakkjHVea3ujBweLSmajjqJPwd9DkdzjwygZBLNTYm24DSljBHcolG/tB
|
||||||
|
yZxM6/lP8HIWCJqxSaIeW6L0Hwabfyj/OU/mHbNH51HXzwnRkOsNWp1X+wU7cSJy
|
||||||
|
BncA1IrObMw27A814h6y5CbYG6gcmDk3WkljDjx29uzNY+Sd7lPpbLy9p2z5eMh2
|
||||||
|
crCi+mgXrJmWZSLtlXHvDKFQhWZoBJbZzs4hdjAia7y9QScbTra1rIxBYYEwiuOs
|
||||||
|
ymCVkGNyX18lCuu4DFop22QnlbqzY0LzlYUlSUndLQraTDqh7D5HScUzj83jKie1
|
||||||
|
owIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
27
test/cluster/keys/min2.pem
Normal file
27
test/cluster/keys/min2.pem
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEA1HA3HZrHBBeS22+ocqidpvY4nymcNjnpnytnRWzbPyLJHPmM
|
||||||
|
dPYGkmttaeApUtOFKaqmJ9WQoNvyEdrWgkRuMBl++1LavSqL1GDhxkz/nM/JI3vq
|
||||||
|
VByhyC7EFhMxtvltE8bqIk4CvPM2Ya+1iEL1f8vahigUNQU7TRq6Yi02w4xnL0sb
|
||||||
|
R5J8w/7DX5EvO8Se4mG6+0mb4EWg2UnYWdZO3BHpv0OrrA9uEzF+j02/R6JclFGg
|
||||||
|
3h1COc9aOlJ5q8rrd+4q+et/Q1JBo9cVV+9QiuJg62CwpfI2sPAihEts7SYKpOIn
|
||||||
|
5THt0dCVCv8/JGvBWdBnlcyeNSA/oWPbyMqJOwIDAQABAoIBAEMuHW/iQ2962PlF
|
||||||
|
7TodMoXbNXq32OuZEtVAD4935jmoEXt1O0K9jsR87oPd3JORynmrupG8Stlj1MBq
|
||||||
|
uQ1HAKV7Wpm10PCjZMbLwHpKXUdEunHbPPZOe6bniyED/uPDKwhnDiG9E8aXDyqD
|
||||||
|
O2AU9LfuSnPEdudxeRhgDHMBo2DhEL7ehKLAbpcusOiAQtevunYIKtLmpXKlOZ13
|
||||||
|
GUVgPa04meJaYu2grXAnC3pTMiGoGUO5HO/eDTPUirbZKBBMCLufiGQJq19C5NS4
|
||||||
|
FWj9nLDS1Bl8q+gnlLV6/LBC7Ieojkrv1zwKR5D+W4CskXt76dt1DfBmDCWbX+78
|
||||||
|
dd8biPECgYEA1uB8JCK1QZ+1QxaNzjLqOKLrePJ1O9grOV0NosqALJO6xDch5qnY
|
||||||
|
Fzr6tN39Yhd1dGP9Gyh4KB4t1RBQN4EmHDdbX3NdPmdYXH9MypXmTsap8cJdDVq+
|
||||||
|
iemGuyRP5kmbaL0Yobyjv1s9Ttd9oII5LBHdF9RS8tm1KnPN1oesMVkCgYEA/RhB
|
||||||
|
+6+wqPIMD1vV/iGDc0H8hCFkcn6geN5jui4RlBDNJWvRN5mie097L83Qhm8hxCjX
|
||||||
|
DXLOoRtf7FARUSHC5jT4rRH/0JDlYHwLYjOZ8IedLhKJNcTHYnRu5gHG3vZjC00J
|
||||||
|
a4dKaN+enqrgnmXzbAUgPntTvcQle8vDik47SLMCgYBEsGI+0vGKVtmE5rLSFaiW
|
||||||
|
Dk6jzS34wXOf1MVFIuKyXU845j7qE6VGV85I/yW+s60SVdxVUCyI9ozELYDXHWvn
|
||||||
|
XTLSYniOOE8g0njj0eNbj1pINE+2sylxwLsXG9aG0UTiyIAVQ848n5gLmgtIwhgw
|
||||||
|
pE0/DtqtUzb8qSRFzf0XkQKBgQCoOP9icpxRLtClRL0vdMcSTMGycR96mn++1tIi
|
||||||
|
ZYx5hdFVFhyxgARnQaT3WS1IrYUcBKkr3ytIGhHf2DgqXO5WZM8E+fm2fxh20Pwg
|
||||||
|
AXxIS1tFzDw26Nw9rHYpmvS8LbgXQtUIC5yBqGCdxaYWolzxZ1bPMNmwQDdJ2V3X
|
||||||
|
B7iP0QKBgFFNWvsKcTrKmAe+9XOgH2TH9pzpiLxY6k6qo2psRB6JjNB9O9kVXhUc
|
||||||
|
O49A+IVlhfrTAsT2/ygXhyGLPdDBQUyXu+mquiteg4lgVmzjOveEMXzwgjb94qdH
|
||||||
|
JsDSYLbuG6MfY6BztXALzTCXlo/mgWjY4NZPpDX5qUyfrgts+Xko
|
||||||
|
-----END RSA PRIVATE KEY-----
|
9
test/cluster/keys/min2.pub
Normal file
9
test/cluster/keys/min2.pub
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1HA3HZrHBBeS22+ocqid
|
||||||
|
pvY4nymcNjnpnytnRWzbPyLJHPmMdPYGkmttaeApUtOFKaqmJ9WQoNvyEdrWgkRu
|
||||||
|
MBl++1LavSqL1GDhxkz/nM/JI3vqVByhyC7EFhMxtvltE8bqIk4CvPM2Ya+1iEL1
|
||||||
|
f8vahigUNQU7TRq6Yi02w4xnL0sbR5J8w/7DX5EvO8Se4mG6+0mb4EWg2UnYWdZO
|
||||||
|
3BHpv0OrrA9uEzF+j02/R6JclFGg3h1COc9aOlJ5q8rrd+4q+et/Q1JBo9cVV+9Q
|
||||||
|
iuJg62CwpfI2sPAihEts7SYKpOIn5THt0dCVCv8/JGvBWdBnlcyeNSA/oWPbyMqJ
|
||||||
|
OwIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
27
test/cluster/keys/min3.pem
Normal file
27
test/cluster/keys/min3.pem
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAtir2HZ/CoT93HRHrj1IYPt91X63TAk6u+khbq1mGdf2QmhrW
|
||||||
|
s+OTGFVZh0pMFax0jJvJUIkii4jaehemJUtZzkmqfyS8Sk/Nlzg7FCokjnwqIftM
|
||||||
|
Q2+9PBcY2R3YSOoEuaNMpCbrBzTfrih3rKHM/pRJ/hOIPQ7XaKrqh+/L695AJXPH
|
||||||
|
FYvZx4DOX2RdCoGvuN4utJmGDDpF0jPEp8J/aV9hov/vPC0auuPBiIAGyPsRsI4a
|
||||||
|
IW5ghBZmGBILqkg7WO8Jyg6CVa0bU3ynr64Wltjz4mocH4vV1uOa7gxShXkyKROw
|
||||||
|
sDiOS7GRBKPqKkHpbMGRfBXEafIirS+6xzc2ewIDAQABAoIBAA68zwh6gk51Sfeq
|
||||||
|
GXqQ07FSdrZ045tOLk3FSNVF+uDU0LwG69PF14KidQnC8wDV4N/3QoQndAoB2lsC
|
||||||
|
Ssi9ndhYkViT6j/A0Qso2264Mhjs5qO1JuhVw+N2ouX9yh+r/xHdqjelhmIg3u/C
|
||||||
|
ClyHAoSeDpZlkiIOb1LicPLqbX75awpcSOkuMNtfa3XBW6BPPSgQh8QMF9CRs6fJ
|
||||||
|
xUNBRLjsUFLV6LUESei3DIbZQPwJwX+TzsMVtYTawQHwazNRsTB2yV4JJMA/6NKR
|
||||||
|
Txhr5VMuDhx9yMbsM/ye2r644Ha7RWS0ZxghaJi6XDpfm7GwJBVtFb8r14z9uTa3
|
||||||
|
acDsIsECgYEAy404/uKDq5CGMiATIXBQZkmtKpSBZxGalRAfSqZw5WJFv+Z1pc5I
|
||||||
|
4OxUoq7qS1TRyCXftbZyeo03gzqpCti4CTZovOOtG/+x0UVgUxz7ggpD4h+D/xM4
|
||||||
|
CfrOKizhhaUHJFJqG5RvehWKb/sTWiPSXmyeq3jJ3ZcvsVp2N8nIfdECgYEA5Rs1
|
||||||
|
HqcmNg7LJ9OzqjAerNX0SJBP8Y91F+qqfdF+BhPMByxamspzlWabOmBnSpnJaxUx
|
||||||
|
OX+5JCBhpR/5BtGFKaEgI+ppYHl8iooADWp6SzPd6lXhIJZGVF27qdimvEk73641
|
||||||
|
540hmJlIAymiCbvkyWdoLV0fvEseEz7NME/oBosCgYEAqc8hmjk7oRfLa+uoKgA5
|
||||||
|
gmu6Y8hJ/8MG044EnNEnY6VNDN9kjDMAR2vA24rSeI/FBpTaAQy4ihZfFkIMnbjY
|
||||||
|
Jw9V5yaE1tPD8xJOXmfSRdTsdqrWAih1WpX6AeM5LLXUtG9wh5uYOB/aQrsRlORH
|
||||||
|
bnBtGh2FQjALIIiYEMhsUtECgYAlVBeFlQpeyG5FYPLnCcwVsQ6KPCkqXIthiDSb
|
||||||
|
J2T3LIaTrKBelBnc/8jO7CIoP4JX1i4dBjhuMHB4bQswFzcxHzWTZIAi3ehy0iVM
|
||||||
|
Cks+sYa4xaFWo+V1nYgUFl6kUvJUcZgK0C3nJSJckY37NAgE4LpSmdev4DVYQWVB
|
||||||
|
N+PAHQKBgHLSijHknPIeXUzqmSpnsGy+QHY5bgVp+0lFOwPdl+jUs9ciJL+D5Agu
|
||||||
|
WXXbj+57WAKeGjd9rJhAUimAmTitINSlJ9ggNLqqHb3/2oTNKp5pdSjbCVY5S4pp
|
||||||
|
1lYwCVBwJvXk4SRx11XthNTdCfp3WY1J3chi9srC8P6OXzd9RtQZ
|
||||||
|
-----END RSA PRIVATE KEY-----
|
9
test/cluster/keys/min3.pub
Normal file
9
test/cluster/keys/min3.pub
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtir2HZ/CoT93HRHrj1IY
|
||||||
|
Pt91X63TAk6u+khbq1mGdf2QmhrWs+OTGFVZh0pMFax0jJvJUIkii4jaehemJUtZ
|
||||||
|
zkmqfyS8Sk/Nlzg7FCokjnwqIftMQ2+9PBcY2R3YSOoEuaNMpCbrBzTfrih3rKHM
|
||||||
|
/pRJ/hOIPQ7XaKrqh+/L695AJXPHFYvZx4DOX2RdCoGvuN4utJmGDDpF0jPEp8J/
|
||||||
|
aV9hov/vPC0auuPBiIAGyPsRsI4aIW5ghBZmGBILqkg7WO8Jyg6CVa0bU3ynr64W
|
||||||
|
ltjz4mocH4vV1uOa7gxShXkyKROwsDiOS7GRBKPqKkHpbMGRfBXEafIirS+6xzc2
|
||||||
|
ewIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
12
test/pillar/prometheus.sls
Normal file
12
test/pillar/prometheus.sls
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
prometheus:
|
||||||
|
server:
|
||||||
|
config:
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
- job_name: 'node'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9100']
|
3
test/pillar/top.sls
Normal file
3
test/pillar/top.sls
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
base:
|
||||||
|
'*':
|
||||||
|
- prometheus
|
3
test/salt/top.sls
Normal file
3
test/salt/top.sls
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
base:
|
||||||
|
'*':
|
||||||
|
- prometheus
|
37
test/single/Vagrantfile
vendored
Normal file
37
test/single/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
Vagrant.configure(2) do |config|
|
||||||
|
config.vm.box = "bento/ubuntu-16.04"
|
||||||
|
|
||||||
|
if Vagrant.has_plugin?("vagrant-cachier")
|
||||||
|
config.cache.scope = :box
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provision :shell, inline: "sudo locale-gen en_IE.UTF-8"
|
||||||
|
|
||||||
|
config.vm.network "forwarded_port", guest: 9090, host: 9090, auto_correct: true
|
||||||
|
config.vm.network "forwarded_port", guest: 9100, host: 9100, auto_correct: true
|
||||||
|
config.vm.hostname = "prometheus-formula"
|
||||||
|
config.vm.synced_folder "../../prometheus", "/srv/formulas/prometheus"
|
||||||
|
config.vm.synced_folder "../salt", "/srv/salt"
|
||||||
|
config.vm.synced_folder "../pillar", "/srv/pillar/"
|
||||||
|
# Testing with tox and testinfra
|
||||||
|
# config.vm.synced_folder "../testinfra", "/vagrant/testinfra"
|
||||||
|
|
||||||
|
config.vm.provider "virtualbox" do |vb|
|
||||||
|
vb.name = "prometheus-formula"
|
||||||
|
vb.memory = "1024"
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provision :salt do |salt|
|
||||||
|
salt.masterless = true
|
||||||
|
salt.minion_config = "conf/minion"
|
||||||
|
salt.run_highstate = true
|
||||||
|
end
|
||||||
|
|
||||||
|
#config.vm.provision "shell", inline: "sudo pip install tox"
|
||||||
|
#config.vm.provision "test", type: "shell" do |t|
|
||||||
|
# t.inline = "tox -c /vagrant/tox.ini"
|
||||||
|
#end
|
||||||
|
end
|
13
test/single/conf/minion
Normal file
13
test/single/conf/minion
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
file_client: local
|
||||||
|
|
||||||
|
fileserver_backend:
|
||||||
|
- roots
|
||||||
|
|
||||||
|
file_roots:
|
||||||
|
base:
|
||||||
|
- /srv/salt
|
||||||
|
- /srv/formulas
|
||||||
|
|
||||||
|
grains:
|
||||||
|
roles:
|
||||||
|
- prometheus
|
6
test/single/tox.ini
Normal file
6
test/single/tox.ini
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[tox]
|
||||||
|
skipsdist = True
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
deps = testinfra
|
||||||
|
commands = testinfra -v
|
2
test/testinfra/test_prometheus.py
Normal file
2
test/testinfra/test_prometheus.py
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
def test_prometheus(User):
|
||||||
|
assert User("prometheus").exists
|
Loading…
Reference in a new issue