Prometheus: first bits of a role.

This commit is contained in:
Andrea Dell'Amico 2018-01-10 17:44:57 +01:00
parent 844b9bd386
commit c8769c3989
8 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,13 @@
---
prometheus_install: True
prometheus_version: 2.0.0
prometheus_dir: 'prometheus-{{ prometheus_version }}.linux-amd64'
prometheus_file: '{{ prometheus_dir }}.tar.gz'
prometheus_download_url: 'https://github.com/prometheus/prometheus/releases/download/v{{ prometheus_version }}/{{ prometheus_file }}'
prometheus_user: prometheus
prometheus_home: /opt/prometheus
prometheus_dist_dir: '{{ prometheus_home }}/dist'
prometheus_confdir: '/opt/prometheus/conf'
prometheus_cmd: '{{ prometheus_dist_dir }}/{{ prometheus_dir }}/prometheus'
prometheus_loglevel: info
prometheus_http_port: 9090

View File

@ -0,0 +1,20 @@
description "Prometheus"
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [016]
respawn
respawn limit 10 5
setuid prometheus
setgid prometheus
script
. /etc/default/prometheus
export GOMAXPROCS
export PROMETHEUS_CMD
export PROMETHEUS_LOGDIR
export PROMETHEUS_DATADIR
export PROMETHEUS_LOGLEVEL
export PROMETHEUS_CONF
exec $PROMETHEUS_CMD --config.file=$PROMETHEUS_CONF --storage.tsdb.path="$PROMETHEUS_DATADIR" --log.level=$PROMETHEUS_LOGLEVEL > $PROMETHEUS_LOGDIR/prometheus.log 2>&1
end script

View File

@ -0,0 +1,6 @@
---
- name: Restart prometheus
service: name=prometheus state=restarted
- name: Reload prometheus
service: name=prometheus state=reloaded

3
prometheus/meta/main.yml Normal file
View File

@ -0,0 +1,3 @@
---
dependencies:
- role: '../../library/roles/nginx'

55
prometheus/tasks/main.yml Normal file
View File

@ -0,0 +1,55 @@
---
- block:
- name: Create the user under prometheus will run
user: name={{ prometheus_user }} home={{ prometheus_home }} createhome=no shell=/usr/sbin/nologin system=yes
- name: Create the prometheus server base and conf directories
file: dest={{ item }} state=directory owner=root group=root
with_items:
- '{{ prometheus_home }}'
- '{{ prometheus_confdir }}'
- '{{ prometheus_dist_dir }}'
- name: Create the prometheus directory structure
file: dest={{ prometheus_home }}/{{ item }} state=directory owner={{ prometheus_user }} group={{ prometheus_user }}
with_items:
- data
- logs
- name: Download prometheus
get_url: url={{ prometheus_download_url }} dest=/srv/
- name: Unarchive the prometheus distribution
unarchive: src=/srv/{{ prometheus_file }} dest={{ prometheus_dist_dir }} remote_src=yes
args:
creates: '{{ prometheus_dist_dir }}/{{ prometheus_dir }}/prometheus'
notify: Restart prometheus
- name: Install the prometheus configuration
template: src=prometheus.yml.j2 dest={{ prometheus_confdir }}/prometheus.yml
notify: Reload prometheus
- name: Install the prometheus upstart script
copy: src=prometheus.upstart dest=/etc/init/prometheus.conf mode=0644 owner=root group=root
- name: Install the prometheus defaults
template: src=prometheus.default.j2 dest=/etc/default/prometheus mode=0644 owner=root group=root
- name: Ensure that prometheus is started and enabled
service: name=prometheus state=started enabled=yes
tags: prometheus
when: prometheus_install
- block:
- name: Ensure that prometheus is stopped and disabled
service: name=prometheus state=stopped enabled=no
- name: Remove the prometheus init script
file: dest=/etc/init/prometheus.conf state=absent
- name: Remove all the prometheus files
file: dest={{ prometheus_home }} state=absent
tags: prometheus
when: not prometheus_install

View File

@ -0,0 +1,8 @@
GOMAXPROCS={{ ansible_processor_vcpus }}
PROMETHEUS_CMD={{ prometheus_cmd }}
PROMETHEUS_LOGDIR={{ prometheus_home }}/logs
PROMETHEUS_DATADIR={{ prometheus_home }}/data
PROMETHEUS_LOGLEVEL={{ prometheus_loglevel }}
PROMETHEUS_CONF={{ prometheus_confdir }}/prometheus.yml

View File

@ -0,0 +1,29 @@
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 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'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']

20
prometheus/vars/main.yml Normal file
View File

@ -0,0 +1,20 @@
---
nginx_letsencrypt_managed: True
nginx_use_common_virthost: True
nginx_virthosts:
- virthost_name: '{{ ansible_fqdn }}'
listen: '{{ http_port }}'
server_name: '{{ ansible_fqdn }}'
server_aliases: ''
index: index.html
ssl_enabled: True
ssl_only: True
ssl_letsencrypt_certs: '{{ nginx_letsencrypt_managed }}'
root: '{{ nginx_webroot }}'
server_tokens: 'off'
proxy_standard_setup: True
locations:
- location: /
target: http://localhost:{{ prometheus_http_port }}