Skip to content

marcusramberg/ansible-prometheus

 
 

Repository files navigation

williamyeh.prometheus for Ansible Galaxy

Circle CI Build Status

Summary

Role name in Ansible Galaxy: williamyeh.prometheus

This Ansible role has the following features for Prometheus:

  • Install specific versions of Prometheus server, Node exporter, Alertmanager.
  • Handlers for restart/reload/stop events;
  • Bare bone configuration (real configuration should be left to user's template files; see Usage section below).

To keep this role simple, this role only installs 3 components: Prometheus server, Node exporter, and Alertmanager. Use the following roles if you want to install other Prometheus exporters:

Role Variables

Mandatory variables

The components to be installed:

# Supported components:
#
#   [Server components]
#     - "prometheus"
#     - "alertmanager"
#
#   [Exporter components]
#     - "node_exporter"
#
prometheus_components

Optional variables: general settings

User-configurable defaults:

# user and group
prometheus_user:   prometheus
prometheus_group:  prometheus


# directory for executable files
prometheus_install_path:   /opt/prometheus

# directory for configuration files
prometheus_config_path:    /etc/prometheus

# directory for logs
prometheus_log_path:       /var/log/prometheus

# directory for PID files
prometheus_pid_path:       /var/run/prometheus



# directory for temporary files
prometheus_download_path:  /tmp


# version of helper utility "gosu"
gosu_version:  1.9

Optional variables: systemd or not

If the Linux distributions are equipped with systemd, this role will use this mechanism accordingly. You can disable this (i.e., use traditional SysV-style init script) by defining the following variable(s) to false:

# currently, only node_exporter is supported.
prometheus_node_exporter_use_systemd

Optional variables: Prometheus server

User-configurable defaults:

# which version?
prometheus_version:  1.0.0



# directory for rule files
prometheus_rule_path:  {{ prometheus_config_path }}/rules

# directory for file_sd files
prometheus_file_sd_config_path:  {{ prometheus_config_path }}/tgroups

# directory for runtime database
prometheus_db_path:   /var/lib/prometheus

User-installable configuration file (see doc for details):

# main conf template relative to `playbook_dir`;
# to be installed to "{{ prometheus_config_path }}/prometheus.yml"
prometheus_conf_main

User-installable rule files (see doc for details):

# rule files to be installed to "{{ prometheus_rule_path }}" directory;
# dict fields:
#   - key: memo for this rule
#   - value:
#     - src:  file relative to `playbook_dir`
#     - dest: target file relative to `{{ prometheus_rule_path }}`
prometheus_rule_files

Alertmanager to be triggered:

prometheus_alertmanager_url

Additional command-line arguments, if any (use prometheus --help to see the full list of arguments):

prometheus_opts

Optional variables: Node exporter

User-configurable defaults:

# which version?
prometheus_node_exporter_version:  0.12.0

Additional command-line arguments, if any (use node_exporter --help to see the full list of arguments):

prometheus_node_exporter_opts

Optional variables: Alertmanager

User-configurable defaults:

# which version?
prometheus_alertmanager_version:  0.3.0

# directory for runtime database (currently for `silences.json`)
prometheus_alertmanager_db_path: /var/lib/alertmanager

User-installable alertmanager conf file (see doc for details):

# main conf template relative to `playbook_dir`;
# to be installed to "{{ prometheus_config_path }}/alertmanager.yml"
prometheus_alertmanager_conf

Additional command-line arguments, if any (use alertmanager --help to see the full list of arguments):

prometheus_alertmanager_opts

Optional: building from source tree

(Credit: Robbie Trencheny)

For aforementioned prometheus_components, you can optionally download/compile from the master branch of Prometheus repositories by setting the respective version to git.

It will install a temporary Golang compiler in the prometheus_workdir directory (defined in defaults/main.yml).

For example, get the latest code for all components by assigning all *_version variables to git:

prometheus_version: git
prometheus_node_exporter_version: git
prometheus_alertmanager_version: git

If you'd like to force rebuild each time, enable the following variable (default is false):

prometheus_rebuild: true

Handlers

Prometheus server:

  • restart prometheus

  • reload prometheus

  • stop prometheus

Node exporter:

  • restart node_exporter

  • reload node_exporter (actually, the same as restart)

  • stop node_exporter

Alertmanager:

  • restart alertmanager

  • reload alertmanager

  • stop alertmanager

Usage

Step 1: add role

Add role name williamyeh.prometheus to your playbook file.

Step 2: add variables

Set vars in your playbook file, if necessary.

Simple example:

---
# file: simple-playbook.yml

- hosts: all
  become: True
  roles:
    - williamyeh.prometheus

  vars:
    prometheus_components: [ "prometheus", "alertmanager" ]

    prometheus_alertmanager_url: "http://localhost:9093/"

Step 3: copy user's config files, if necessary

More practical example:

---
# file: complex-playbook.yml

- hosts: all
  become: True
  roles:
    - williamyeh.prometheus

  vars:
    prometheus_components:
      - prometheus
      - node_exporter
      - alertmanager

    prometheus_rule_files:
      this_is_rule_1_InstanceDown:
        src:  some/path/basic.rules
        dest: basic.rules

    prometheus_alertmanager_conf: some/path/alertmanager.yml.j2

Step 4: browse the default Prometheus pages

Open the page in your browser:

  • Prometheus - http://HOST:9090 or http://HOST:9090/consoles/node.html

  • Alertmanager - http://HOST:9093

Dependencies

None.

Contributors

License

MIT License. See the LICENSE file for details.

About

An Ansible role that installs Prometheus, in the format for Ansible Galaxy.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 100.0%