# vim:ft=ansible:
---
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
    # Default Prometheus job to monitor itself
  - job_name: "prometheus"
    static_configs:
      - targets: ['localhost:9090']

    # This is shipped by the Ansible role that deploys Prometheus
  - job_name: "blackbox-ssh"
    metrics_path: /probe
    params:
      module: [ssh_banner]
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
        - "{{ host }}:22"
{% endfor %}
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox:9115
  - job_name: "blackbox-http"
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
{% set vars = hostvars[host] %}
{% for service in vars.services %}
{% for tag in service.tags %}
{# #}
{% if tag.slug == "nagios-checkhttps" %}
{% for port in service.ports %}
        - "https://{{ service.name }}:{{ port }}"
{% endfor %}
{% endif %}
{# #}
{% if tag.slug == "nagios-checkmatrix" %}
{% for port in service.ports %}
        - "https://{{ service.name }}:{{ port }}/health"
{% endfor %}
{% endif %}
{# #}
{% endfor %}
{% endfor %}
{% endfor %}
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox:9115
  - job_name: "blackbox-exporter"
    static_configs:
      - targets: ['blackbox:9115']

    # This job manages Minecraft servers, when we have them
  - job_name: "minecraft"
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
{% set vars = hostvars[host] %}
{% for service in vars.services %}
{% for tag in service.tags %}
{# #}
{% if tag.slug == "nagios-checkminecraft" %}
{% for port in service.ports %}
        - "{{ host }}:{{ port }}"
{% endfor %}
{% endif %}
{# #}
{% endfor %}
{% endfor %}
{% endfor %}

    # This job takes in information from Netbox on the generic "prom-metrics" tag
    # It's useful for all sorts of stuff
  - job_name: "generic"
    scheme: "https"
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
{% set vars = hostvars[host] %}
{% for service in vars.services %}
{% for tag in service.tags %}
{# #}
{% if tag.slug == "prom-metrics" %}
{% for port in service.ports %}
        - "{{ service.name }}:{{ port }}"
{% endfor %}
{% endif %}
{# #}
{% endfor %}
{% endfor %}
{% endfor %}

    # This one does the same thing but for HTTP-only clients
  - job_name: "generic-http"
    scheme: "http"
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
{% set vars = hostvars[host] %}
{% for service in vars.services %}
{% for tag in service.tags %}
{# #}
{% if tag.slug == "prom-metrics-http" %}
{% for port in service.ports %}
        - "{{ service.name }}:{{ port }}"
{% endfor %}
{% endif %}
{# #}
{% endfor %}
{% endfor %}
{% endfor %}
    # These two jobs are included for every node in our inventory
  - job_name: "node-exporter"
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
          - '{{ host }}:9100'
{% endfor %}
  - job_name: "cadvisor-exporter"
    static_configs:
      - targets:
{% for host in groups['tags_nagios'] %}
          - '{{ host }}:9101'
{% endfor %}

    # This container is used on every psql machine
  - job_name: "psql-exporter"
    static_configs:
      - targets:
{% for host in groups['tags_nagios-checkpgsql'] %}
          - '{{ host }}:9102'
{% endfor %}