Add role to deploy prometheus
This patch adds the ansible role to deploy the prometheus service which can be used to collect performance metrics accross the environment Partially-Implements: blueprint prometheus Change-Id: I908b9c9dad63ab5c9b80be1e3a80a4fc8191cb9e
This commit is contained in:

committed by
Mark Giles

parent
cbb13ce522
commit
4d1f37359d
@@ -89,7 +89,8 @@ Kolla-Ansible deploys containers for the following infrastructure components:
|
|||||||
- `Ceph <http://ceph.com/>`__ implementation for Cinder, Glance and Nova.
|
- `Ceph <http://ceph.com/>`__ implementation for Cinder, Glance and Nova.
|
||||||
- `Collectd <https://collectd.org/>`__,
|
- `Collectd <https://collectd.org/>`__,
|
||||||
`Telegraf <https://docs.influxdata.com/telegraf/>`__,
|
`Telegraf <https://docs.influxdata.com/telegraf/>`__,
|
||||||
`InfluxDB <https://influxdata.com/time-series-platform/influxdb/>`__, and
|
`InfluxDB <https://influxdata.com/time-series-platform/influxdb/>`__,
|
||||||
|
`Prometheus <https://prometheus.io/>`__, and
|
||||||
`Grafana <http://grafana.org/>`__ for performance monitoring.
|
`Grafana <http://grafana.org/>`__ for performance monitoring.
|
||||||
- `Elasticsearch <https://www.elastic.co/de/products/elasticsearch/>`__ and
|
- `Elasticsearch <https://www.elastic.co/de/products/elasticsearch/>`__ and
|
||||||
`Kibana <https://www.elastic.co/de/products/kibana/>`__ to search, analyze,
|
`Kibana <https://www.elastic.co/de/products/kibana/>`__ to search, analyze,
|
||||||
|
@@ -262,6 +262,11 @@ panko_api_port: "8977"
|
|||||||
|
|
||||||
placement_api_port: "8780"
|
placement_api_port: "8780"
|
||||||
|
|
||||||
|
prometheus_port: "9091"
|
||||||
|
prometheus_node_exporter_port: "9100"
|
||||||
|
prometheus_mysqld_exporter_port: "9104"
|
||||||
|
prometheus_haproxy_exporter_port: "9101"
|
||||||
|
|
||||||
qdrouterd_port: "31459"
|
qdrouterd_port: "31459"
|
||||||
|
|
||||||
rabbitmq_port: "5672"
|
rabbitmq_port: "5672"
|
||||||
@@ -507,6 +512,7 @@ num_nova_fake_per_node: 5
|
|||||||
|
|
||||||
# Monitoring options are specified here
|
# Monitoring options are specified here
|
||||||
enable_collectd: "no"
|
enable_collectd: "no"
|
||||||
|
enable_prometheus: "no"
|
||||||
|
|
||||||
# Clean images options are specified here
|
# Clean images options are specified here
|
||||||
enable_destroy_images: "no"
|
enable_destroy_images: "no"
|
||||||
@@ -770,3 +776,10 @@ use_preconfigured_databases: "no"
|
|||||||
# whether to use a common, preconfigured user
|
# whether to use a common, preconfigured user
|
||||||
# for all component databases
|
# for all component databases
|
||||||
use_common_mariadb_user: "no"
|
use_common_mariadb_user: "no"
|
||||||
|
|
||||||
|
############
|
||||||
|
# Prometheus
|
||||||
|
############
|
||||||
|
enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
|
||||||
|
enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
|
||||||
|
enable_prometheus_node_exporter: "yes"
|
||||||
|
@@ -159,6 +159,9 @@ control
|
|||||||
[influxdb:children]
|
[influxdb:children]
|
||||||
monitoring
|
monitoring
|
||||||
|
|
||||||
|
[prometheus:children]
|
||||||
|
monitoring
|
||||||
|
|
||||||
[magnum:children]
|
[magnum:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
@@ -641,3 +644,17 @@ blazar
|
|||||||
|
|
||||||
[blazar-manager:children]
|
[blazar-manager:children]
|
||||||
blazar
|
blazar
|
||||||
|
|
||||||
|
# Prometheus
|
||||||
|
[prometheus-node-exporter:children]
|
||||||
|
monitoring
|
||||||
|
control
|
||||||
|
compute
|
||||||
|
network
|
||||||
|
storage
|
||||||
|
|
||||||
|
[prometheus-mysqld-exporter:children]
|
||||||
|
mariadb
|
||||||
|
|
||||||
|
[prometheus-haproxy-exporter:children]
|
||||||
|
haproxy
|
||||||
|
@@ -78,6 +78,9 @@ compute
|
|||||||
[influxdb:children]
|
[influxdb:children]
|
||||||
monitoring
|
monitoring
|
||||||
|
|
||||||
|
[prometheus:children]
|
||||||
|
monitoring
|
||||||
|
|
||||||
[kafka:children]
|
[kafka:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
@@ -660,3 +663,17 @@ blazar
|
|||||||
|
|
||||||
[blazar-manager:children]
|
[blazar-manager:children]
|
||||||
blazar
|
blazar
|
||||||
|
|
||||||
|
# Prometheus
|
||||||
|
[prometheus-node-exporter:children]
|
||||||
|
monitoring
|
||||||
|
control
|
||||||
|
compute
|
||||||
|
network
|
||||||
|
storage
|
||||||
|
|
||||||
|
[prometheus-mysqld-exporter:children]
|
||||||
|
mariadb
|
||||||
|
|
||||||
|
[prometheus-haproxy-exporter:children]
|
||||||
|
haproxy
|
||||||
|
@@ -7,7 +7,7 @@ global
|
|||||||
daemon
|
daemon
|
||||||
log {{ syslog_server }}:{{ syslog_udp_port }} {{ syslog_haproxy_facility }}
|
log {{ syslog_server }}:{{ syslog_udp_port }} {{ syslog_haproxy_facility }}
|
||||||
maxconn 4000
|
maxconn 4000
|
||||||
stats socket /var/lib/kolla/haproxy/haproxy.sock
|
stats socket /var/lib/kolla/haproxy/haproxy.sock group kolla mode 660
|
||||||
{% if kolla_enable_tls_external | bool %}
|
{% if kolla_enable_tls_external | bool %}
|
||||||
ssl-default-bind-ciphers DEFAULT:!MEDIUM:!3DES
|
ssl-default-bind-ciphers DEFAULT:!MEDIUM:!3DES
|
||||||
ssl-default-bind-options no-sslv3 no-tlsv10
|
ssl-default-bind-options no-sslv3 no-tlsv10
|
||||||
@@ -1196,6 +1196,18 @@ listen blazar_api_external
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_prometheus | bool %}
|
||||||
|
listen prometheus_server
|
||||||
|
bind {{ kolla_internal_vip_address }}:{{ prometheus_port }}
|
||||||
|
http-request del-header X-Forwarded-Proto
|
||||||
|
{% for http_option in haproxy_listen_http_extra %}
|
||||||
|
{{ http_option }}
|
||||||
|
{% endfor %}
|
||||||
|
{% for host in groups['prometheus'] %}
|
||||||
|
server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ prometheus_port }} check inter 2000 rise 2 fall 5
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# (NOTE): This defaults section deletes forwardfor as recommended by:
|
# (NOTE): This defaults section deletes forwardfor as recommended by:
|
||||||
# https://marc.info/?l=haproxy&m=141684110710132&w=1
|
# https://marc.info/?l=haproxy&m=141684110710132&w=1
|
||||||
|
|
||||||
|
72
ansible/roles/prometheus/defaults/main.yml
Normal file
72
ansible/roles/prometheus/defaults/main.yml
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
project_name: "prometheus"
|
||||||
|
|
||||||
|
prometheus_services:
|
||||||
|
prometheus-server:
|
||||||
|
container_name: prometheus_server
|
||||||
|
group: prometheus
|
||||||
|
enabled: true
|
||||||
|
image: "{{ prometheus_server_image_full }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/prometheus-server/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "prometheus:/var/lib/prometheus"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
prometheus-node-exporter:
|
||||||
|
container_name: prometheus_node_exporter
|
||||||
|
group: prometheus-node-exporter
|
||||||
|
enabled: "{{ enable_prometheus_node_exporter | bool }}"
|
||||||
|
image: "{{ prometheus_node_exporter_image_full }}"
|
||||||
|
pid_mode: "host"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/prometheus-node-exporter/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
- "/proc:/host/proc:ro"
|
||||||
|
- "/sys:/host/sys:ro"
|
||||||
|
prometheus-mysqld-exporter:
|
||||||
|
container_name: prometheus_mysqld_exporter
|
||||||
|
group: prometheus-mysqld-exporter
|
||||||
|
enabled: "{{ enable_prometheus_mysqld_exporter | bool }}"
|
||||||
|
image: "{{ prometheus_mysqld_exporter_image_full }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/prometheus-mysqld-exporter/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
prometheus-haproxy-exporter:
|
||||||
|
container_name: prometheus_haproxy_exporter
|
||||||
|
group: prometheus-haproxy-exporter
|
||||||
|
enabled: "{{ enable_prometheus_haproxy_exporter | bool }}"
|
||||||
|
image: "{{ prometheus_haproxy_exporter_image_full }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/prometheus-haproxy-exporter/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
- "haproxy_socket:/var/lib/kolla/haproxy"
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Database
|
||||||
|
####################
|
||||||
|
prometheus_mysql_exporter_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}prometheus{% endif %}"
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Docker
|
||||||
|
####################
|
||||||
|
prometheus_install_type: "{{ kolla_install_type }}"
|
||||||
|
prometheus_tag: "{{ openstack_release }}"
|
||||||
|
|
||||||
|
prometheus_server_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-server"
|
||||||
|
prometheus_server_tag: "{{ prometheus_tag }}"
|
||||||
|
prometheus_server_image_full: "{{ prometheus_server_image }}:{{ prometheus_server_tag }}"
|
||||||
|
|
||||||
|
prometheus_haproxy_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-haproxy-exporter"
|
||||||
|
prometheus_haproxy_exporter_tag: "{{ prometheus_tag }}"
|
||||||
|
prometheus_haproxy_exporter_image_full: "{{ prometheus_haproxy_exporter_image }}:{{ prometheus_haproxy_exporter_tag }}"
|
||||||
|
|
||||||
|
prometheus_mysqld_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-mysqld-exporter"
|
||||||
|
prometheus_mysqld_exporter_tag: "{{ prometheus_tag }}"
|
||||||
|
prometheus_mysqld_exporter_image_full: "{{ prometheus_mysqld_exporter_image }}:{{ prometheus_mysqld_exporter_tag }}"
|
||||||
|
|
||||||
|
prometheus_node_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-node-exporter"
|
||||||
|
prometheus_node_exporter_tag: "{{ prometheus_tag }}"
|
||||||
|
prometheus_node_exporter_image_full: "{{ prometheus_node_exporter_image }}:{{ prometheus_node_exporter_tag }}"
|
79
ansible/roles/prometheus/handlers/main.yml
Normal file
79
ansible/roles/prometheus/handlers/main.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
- name: Restart prometheus-server container
|
||||||
|
vars:
|
||||||
|
service_name: "prometheus-server"
|
||||||
|
service: "{{ prometheus_services[service_name] }}"
|
||||||
|
config_json: "{{ prometheus_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
prometheus_container: "{{ check_prometheus_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
- config_json.changed | bool
|
||||||
|
or prometheus_confs.changed | bool
|
||||||
|
or prometheus_container.changed | bool
|
||||||
|
|
||||||
|
- name: Restart prometheus-node-exporter container
|
||||||
|
vars:
|
||||||
|
service_name: "prometheus-node-exporter"
|
||||||
|
service: "{{ prometheus_services[service_name] }}"
|
||||||
|
config_json: "{{ prometheus_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
prometheus_container: "{{ check_prometheus_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
pid_mode: "{{ service.pid_mode | default(emit) }}"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
- config_json.changed | bool
|
||||||
|
or prometheus_container.changed | bool
|
||||||
|
|
||||||
|
- name: Restart prometheus-mysqld-exporter container
|
||||||
|
vars:
|
||||||
|
service_name: "prometheus-mysqld-exporter"
|
||||||
|
service: "{{ prometheus_services[service_name] }}"
|
||||||
|
config_json: "{{ prometheus_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
prometheus_container: "{{ check_prometheus_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
- config_json.changed | bool
|
||||||
|
or prometheus_conf_mycnf.changed | bool
|
||||||
|
or prometheus_container.changed | bool
|
||||||
|
|
||||||
|
- name: Restart prometheus-haproxy-exporter container
|
||||||
|
vars:
|
||||||
|
service_name: "prometheus-haproxy-exporter"
|
||||||
|
service: "{{ prometheus_services[service_name] }}"
|
||||||
|
config_json: "{{ prometheus_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
prometheus_container: "{{ check_prometheus_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
- config_json.changed | bool
|
||||||
|
or prometheus_container.changed | bool
|
3
ansible/roles/prometheus/meta/main.yml
Normal file
3
ansible/roles/prometheus/meta/main.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- { role: common }
|
19
ansible/roles/prometheus/tasks/bootstrap.yml
Normal file
19
ansible/roles/prometheus/tasks/bootstrap.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Creating prometheus database user and setting permissions
|
||||||
|
kolla_toolbox:
|
||||||
|
module_name: mysql_user
|
||||||
|
module_args:
|
||||||
|
login_host: "{{ database_address }}"
|
||||||
|
login_port: "{{ database_port }}"
|
||||||
|
login_user: "{{ database_user }}"
|
||||||
|
login_password: "{{ database_password }}"
|
||||||
|
name: "{{ prometheus_mysql_exporter_database_user }}"
|
||||||
|
password: "{{ prometheus_mysql_exporter_database_password }}"
|
||||||
|
host: "%"
|
||||||
|
priv: "*.*:PROCESS,REPLICATION CLIENT,SELECT"
|
||||||
|
append_privs: "yes"
|
||||||
|
run_once: True
|
||||||
|
delegate_to: "{{ groups['prometheus-mysqld-exporter'][0] }}"
|
||||||
|
when:
|
||||||
|
- enable_prometheus_mysqld_exporter | bool
|
||||||
|
- not use_preconfigured_databases | bool
|
74
ansible/roles/prometheus/tasks/config.yml
Normal file
74
ansible/roles/prometheus/tasks/config.yml
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
- name: Ensuring config directories exist
|
||||||
|
file:
|
||||||
|
path: "{{ node_config_directory }}/{{ item.key }}"
|
||||||
|
state: "directory"
|
||||||
|
owner: "{{ config_owner_user }}"
|
||||||
|
group: "{{ config_owner_group }}"
|
||||||
|
mode: "0770"
|
||||||
|
become: true
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ prometheus_services }}"
|
||||||
|
|
||||||
|
- name: Copying over config.json files
|
||||||
|
template:
|
||||||
|
src: "{{ item.key }}.json.j2"
|
||||||
|
dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
|
||||||
|
register: prometheus_config_jsons
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ prometheus_services }}"
|
||||||
|
notify:
|
||||||
|
- Restart {{ item.key }} container
|
||||||
|
|
||||||
|
- name: Copying over prometheus config file
|
||||||
|
vars:
|
||||||
|
service: "{{ prometheus_services['prometheus-server']}}"
|
||||||
|
template:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "{{ node_config_directory }}/prometheus-server/prometheus.yml"
|
||||||
|
register: prometheus_confs
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
with_first_found:
|
||||||
|
- "{{ node_custom_config }}/prometheus/{{ inventory_hostname }}/prometheus.yml"
|
||||||
|
- "{{ node_custom_config }}/prometheus/prometheus.yml"
|
||||||
|
- "{{ role_path }}/templates/prometheus.yml.j2"
|
||||||
|
notify:
|
||||||
|
- Restart prometheus-server container
|
||||||
|
|
||||||
|
- name: Copying over my.cnf for mysqld_exporter
|
||||||
|
vars:
|
||||||
|
service: "{{ prometheus_services['prometheus-mysqld-exporter']}}"
|
||||||
|
merge_configs:
|
||||||
|
sources:
|
||||||
|
- "{{ node_custom_config }}/prometheus-mysqld-exporter/{{ inventory_hostname }}/my.cnf"
|
||||||
|
- "{{ node_custom_config }}/prometheus-mysqld-exporter/my.cnf"
|
||||||
|
- "{{ role_path }}/templates/my.cnf.j2"
|
||||||
|
dest: "{{ node_config_directory }}/prometheus-mysqld-exporter/my.cnf"
|
||||||
|
register: prometheus_conf_mycnf
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
notify:
|
||||||
|
- Restart prometheus-mysqld-exporter container
|
||||||
|
|
||||||
|
- name: Check prometheus containers
|
||||||
|
kolla_docker:
|
||||||
|
action: "compare_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ item.value.container_name }}"
|
||||||
|
image: "{{ item.value.image }}"
|
||||||
|
volumes: "{{ item.value.volumes }}"
|
||||||
|
register: check_prometheus_containers
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ prometheus_services }}"
|
||||||
|
notify:
|
||||||
|
- Restart {{ item.key }} container
|
7
ansible/roles/prometheus/tasks/deploy.yml
Normal file
7
ansible/roles/prometheus/tasks/deploy.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- include: config.yml
|
||||||
|
|
||||||
|
- include: bootstrap.yml
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
meta: flush_handlers
|
2
ansible/roles/prometheus/tasks/main.yml
Normal file
2
ansible/roles/prometheus/tasks/main.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
- include: "{{ action }}.yml"
|
56
ansible/roles/prometheus/tasks/precheck.yml
Normal file
56
ansible/roles/prometheus/tasks/precheck.yml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
- name: Get container facts
|
||||||
|
kolla_container_facts:
|
||||||
|
name:
|
||||||
|
- prometheus
|
||||||
|
- prometheus_node_exporter
|
||||||
|
- prometheus_haproxy_exporter
|
||||||
|
- prometheus_mysqld_exporter
|
||||||
|
register: container_facts
|
||||||
|
|
||||||
|
- name: Checking free port for Prometheus
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ prometheus_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when:
|
||||||
|
- container_facts['prometheus'] is not defined
|
||||||
|
- inventory_hostname in groups['prometheus']
|
||||||
|
|
||||||
|
- name: Checking free port for Prometheus node_exporter
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ prometheus_node_exporter_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when:
|
||||||
|
- container_facts['prometheus_node_exporter'] is not defined
|
||||||
|
- inventory_hostname in groups['prometheus-node-exporter']
|
||||||
|
- enable_prometheus_node_exporter | bool
|
||||||
|
|
||||||
|
- name: Checking free port for Prometheus mysqld_exporter
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ prometheus_mysqld_exporter_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when:
|
||||||
|
- container_facts['prometheus_mysqld_exporter'] is not defined
|
||||||
|
- inventory_hostname in groups['prometheus-mysqld-exporter']
|
||||||
|
- enable_prometheus_mysqld_exporter | bool
|
||||||
|
|
||||||
|
- name: Checking free port for Prometheus haproxy_exporter
|
||||||
|
wait_for:
|
||||||
|
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
|
||||||
|
port: "{{ prometheus_haproxy_exporter_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when:
|
||||||
|
- container_facts['prometheus_mysqld_exporter'] is not defined
|
||||||
|
- inventory_hostname in groups['prometheus-haproxy-exporter']
|
||||||
|
- enable_prometheus_haproxy_exporter | bool
|
10
ansible/roles/prometheus/tasks/pull.yml
Normal file
10
ansible/roles/prometheus/tasks/pull.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- name: Pulling prometheus images
|
||||||
|
kolla_docker:
|
||||||
|
action: "pull_image"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
image: "{{ item.value.image }}"
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ prometheus_services }}"
|
2
ansible/roles/prometheus/tasks/reconfigure.yml
Normal file
2
ansible/roles/prometheus/tasks/reconfigure.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
- include: deploy.yml
|
5
ansible/roles/prometheus/tasks/upgrade.yml
Normal file
5
ansible/roles/prometheus/tasks/upgrade.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- include: config.yml
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
meta: flush_handlers
|
5
ansible/roles/prometheus/templates/my.cnf.j2
Normal file
5
ansible/roles/prometheus/templates/my.cnf.j2
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[client]
|
||||||
|
host={{ database_address }}
|
||||||
|
port={{ database_port }}
|
||||||
|
user={{ prometheus_mysql_exporter_database_user }}
|
||||||
|
password={{ prometheus_mysql_exporter_database_password }}
|
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"command": "/opt/haproxy_exporter/haproxy_exporter -haproxy.scrape-uri unix:/var/lib/kolla/haproxy/haproxy.sock -web.listen-address {{ api_interface_address }}:{{ prometheus_haproxy_exporter_port }}",
|
||||||
|
"config_files": [],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/prometheus",
|
||||||
|
"owner": "prometheus:kolla",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"command": "/opt/mysqld_exporter/mysqld_exporter -config.my-cnf /etc/prometheus/my.cnf -web.listen-address {{ api_interface_address }}:{{ prometheus_mysqld_exporter_port }}",
|
||||||
|
"config_files": [
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/my.cnf",
|
||||||
|
"dest": "/etc/prometheus/my.cnf",
|
||||||
|
"owner": "prometheus",
|
||||||
|
"perm": "0600"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/prometheus",
|
||||||
|
"owner": "prometheus:kolla",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"command": "/opt/node_exporter/node_exporter -collector.procfs /host/proc -collector.sysfs /host/sys -web.listen-address {{ api_interface_address }}:{{ prometheus_node_exporter_port }}",
|
||||||
|
"config_files": [],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/prometheus",
|
||||||
|
"owner": "prometheus:kolla",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
23
ansible/roles/prometheus/templates/prometheus-server.json.j2
Normal file
23
ansible/roles/prometheus/templates/prometheus-server.json.j2
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"command": "/opt/prometheus/prometheus -config.file /etc/prometheus/prometheus.yml -web.listen-address {{ api_interface_address }}:{{ prometheus_port }} -log.format logger:stdout -storage.local.path /var/lib/prometheus",
|
||||||
|
"config_files": [
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/prometheus.yml",
|
||||||
|
"dest": "/etc/prometheus/prometheus.yml",
|
||||||
|
"owner": "prometheus",
|
||||||
|
"perm": "0600"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/data",
|
||||||
|
"owner": "prometheus:kolla",
|
||||||
|
"recurse": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/prometheus",
|
||||||
|
"owner": "prometheus:kolla",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
41
ansible/roles/prometheus/templates/prometheus.yml.j2
Normal file
41
ansible/roles/prometheus/templates/prometheus.yml.j2
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
global:
|
||||||
|
scrape_interval: 60s
|
||||||
|
scrape_timeout: 10s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
external_labels:
|
||||||
|
monitor: 'kolla'
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: prometheus
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for host in groups['prometheus'] %}
|
||||||
|
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ prometheus_port }}'
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if enable_prometheus_node_exporter | bool %}
|
||||||
|
- job_name: node
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for host in groups['prometheus-node-exporter'] %}
|
||||||
|
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_node_exporter_port'] }}'
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_prometheus_mysqld_exporter | bool %}
|
||||||
|
- job_name: mysqld
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for host in groups['prometheus-mysqld-exporter'] %}
|
||||||
|
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_mysqld_exporter_port'] }}'
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_prometheus_haproxy_exporter | bool %}
|
||||||
|
- job_name: haproxy
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for host in groups['prometheus-haproxy-exporter'] %}
|
||||||
|
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_haproxy_exporter_port'] }}'
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
@@ -157,6 +157,19 @@
|
|||||||
tags: mariadb,
|
tags: mariadb,
|
||||||
when: enable_mariadb | bool }
|
when: enable_mariadb | bool }
|
||||||
|
|
||||||
|
- name: Apply role prometheus
|
||||||
|
gather_facts: false
|
||||||
|
hosts:
|
||||||
|
- prometheus
|
||||||
|
- prometheus-node-exporter
|
||||||
|
- prometheus-mysqld-exporter
|
||||||
|
- prometheus-haproxy-exporter
|
||||||
|
serial: '{{ serial|default("0") }}'
|
||||||
|
roles:
|
||||||
|
- { role: prometheus,
|
||||||
|
tags: prometheus,
|
||||||
|
when: enable_prometheus | bool }
|
||||||
|
|
||||||
- name: Apply role iscsi
|
- name: Apply role iscsi
|
||||||
gather_facts: false
|
gather_facts: false
|
||||||
hosts:
|
hosts:
|
||||||
|
@@ -220,6 +220,7 @@ kolla_internal_vip_address: "10.10.10.254"
|
|||||||
#enable_ovs_dpdk: "no"
|
#enable_ovs_dpdk: "no"
|
||||||
#enable_osprofiler: "no"
|
#enable_osprofiler: "no"
|
||||||
#enable_panko: "no"
|
#enable_panko: "no"
|
||||||
|
#enable_prometheus: "no"
|
||||||
#enable_qdrouterd: "no"
|
#enable_qdrouterd: "no"
|
||||||
#enable_rally: "no"
|
#enable_rally: "no"
|
||||||
#enable_redis: "no"
|
#enable_redis: "no"
|
||||||
@@ -430,3 +431,10 @@ tempest_floating_network_name:
|
|||||||
#xenserver_himn_ip:
|
#xenserver_himn_ip:
|
||||||
#xenserver_username:
|
#xenserver_username:
|
||||||
#xenserver_connect_protocol:
|
#xenserver_connect_protocol:
|
||||||
|
|
||||||
|
############
|
||||||
|
# Prometheus
|
||||||
|
############
|
||||||
|
#enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
|
||||||
|
#enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
|
||||||
|
#enable_prometheus_node_exporter: "yes"
|
||||||
|
@@ -244,3 +244,8 @@ redis_master_password:
|
|||||||
# XenAPI options
|
# XenAPI options
|
||||||
################
|
################
|
||||||
xenserver_password:
|
xenserver_password:
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Prometheus options
|
||||||
|
####################
|
||||||
|
prometheus_mysql_exporter_database_password:
|
||||||
|
6
releasenotes/notes/prometheus-dbb1aee8c88943c4.yaml
Normal file
6
releasenotes/notes/prometheus-dbb1aee8c88943c4.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Deploy prometheus (prometheus.io) as the timeseries database.
|
||||||
|
Containers for node_exporter, haproxy_exporter and mysqld_exporter are
|
||||||
|
provided and added to prometheus as scrape targets.
|
@@ -154,6 +154,9 @@ control
|
|||||||
[influxdb:children]
|
[influxdb:children]
|
||||||
monitoring
|
monitoring
|
||||||
|
|
||||||
|
[prometheus:children]
|
||||||
|
monitoring
|
||||||
|
|
||||||
[magnum:children]
|
[magnum:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
@@ -620,3 +623,17 @@ vitrage
|
|||||||
|
|
||||||
[vitrage-ml:children]
|
[vitrage-ml:children]
|
||||||
vitrage
|
vitrage
|
||||||
|
|
||||||
|
# Prometheus
|
||||||
|
[prometheus-node-exporter:children]
|
||||||
|
monitoring
|
||||||
|
control
|
||||||
|
compute
|
||||||
|
network
|
||||||
|
storage
|
||||||
|
|
||||||
|
[prometheus-mysqld-exporter:children]
|
||||||
|
mariadb
|
||||||
|
|
||||||
|
[prometheus-haproxy-exporter:children]
|
||||||
|
haproxy
|
||||||
|
Reference in New Issue
Block a user