Skip to content

Commit d896b8c

Browse files
dougszumskijovial
authored andcommitted
Add support for deploying Prometheus libvirt exporter
Add support for deploying the Kolla Prometheus libvirt exporter image to facilitate gathering metrics from the Nova libvirt service. Partially-Implements: blueprint libvirt-exporter (cherry picked from commit edcd41a) (cherry picked from commit ab84608) Change-Id: Ife0a9ac6e4f03802543d0812d552c30ddb982b9e (cherry picked from commit 1422e0e)
1 parent 67ee60e commit d896b8c

File tree

11 files changed

+85
-0
lines changed

11 files changed

+85
-0
lines changed

ansible/group_vars/all.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ placement_api_port: "8780"
449449
placement_api_listen_port: "{{ placement_api_port }}"
450450

451451
prometheus_port: "9091"
452+
prometheus_libvirt_exporter_port: "9177"
452453
prometheus_node_exporter_port: "9100"
453454
prometheus_mysqld_exporter_port: "9104"
454455
prometheus_haproxy_exporter_port: "9101"
@@ -1115,6 +1116,7 @@ use_common_mariadb_user: "no"
11151116
# Prometheus
11161117
############
11171118
enable_prometheus_server: "{{ enable_prometheus | bool }}"
1119+
enable_prometheus_libvirt_exporter: "no"
11181120
enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
11191121
enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
11201122
enable_prometheus_node_exporter: "{{ enable_prometheus | bool }}"
@@ -1128,6 +1130,7 @@ enable_prometheus_blackbox_exporter: "{{ enable_prometheus | bool }}"
11281130
enable_prometheus_rabbitmq_exporter: "{{ enable_prometheus | bool and enable_rabbitmq | bool }}"
11291131

11301132
prometheus_alertmanager_user: "admin"
1133+
prometheus_libvirt_exporter_interval: "60s"
11311134
prometheus_openstack_exporter_interval: "60s"
11321135
prometheus_openstack_exporter_timeout: "10s"
11331136
prometheus_elasticsearch_exporter_interval: "60s"

ansible/inventory/all-in-one

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,9 @@ compute
732732
network
733733
storage
734734

735+
[prometheus-libvirt-exporter:children]
736+
compute
737+
735738
[prometheus-mysqld-exporter:children]
736739
mariadb
737740

ansible/inventory/multinode

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,9 @@ compute
750750
network
751751
storage
752752

753+
[prometheus-libvirt-exporter:children]
754+
compute
755+
753756
[prometheus-mysqld-exporter:children]
754757
mariadb
755758

ansible/roles/nova-cell/defaults/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ nova_libvirt_default_volumes:
328328
- "/sys/fs/cgroup:/sys/fs/cgroup"
329329
- "kolla_logs:/var/log/kolla/"
330330
- "libvirtd:/var/lib/libvirt"
331+
- "{% if enable_prometheus_libvirt_exporter | bool %}libvirtd_run:/var/run/libvirt{% endif %}"
331332
- "{{ nova_instance_datadir_volume }}:/var/lib/nova/"
332333
- "{% if enable_shared_var_lib_nova_mnt | bool %}/var/lib/nova/mnt:/var/lib/nova/mnt:shared{% endif %}"
333334
- "nova_libvirt_qemu:/etc/libvirt/qemu"

ansible/roles/prometheus/defaults/main.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ prometheus_services:
2121
pid_mode: "host"
2222
volumes: "{{ prometheus_node_exporter_default_volumes + prometheus_node_exporter_extra_volumes }}"
2323
dimensions: "{{ prometheus_node_exporter_dimensions }}"
24+
prometheus-libvirt-exporter:
25+
container_name: "prometheus_libvirt_exporter"
26+
group: "prometheus-libvirt-exporter"
27+
enabled: "{{ enable_prometheus_libvirt_exporter | bool }}"
28+
image: "{{ prometheus_libvirt_exporter_image_full }}"
29+
volumes: "{{ prometheus_libvirt_exporter_default_volumes + prometheus_libvirt_exporter_extra_volumes }}"
30+
dimensions: "{{ prometheus_libvirt_exporter_dimensions }}"
2431
prometheus-mysqld-exporter:
2532
container_name: prometheus_mysqld_exporter
2633
group: prometheus-mysqld-exporter
@@ -121,6 +128,10 @@ prometheus_server_image: "{{ docker_registry ~ '/' if docker_registry else '' }}
121128
prometheus_server_tag: "{{ prometheus_tag }}"
122129
prometheus_server_image_full: "{{ prometheus_server_image }}:{{ prometheus_server_tag }}"
123130

131+
prometheus_libvirt_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-libvirt-exporter"
132+
prometheus_libvirt_exporter_tag: "{{ prometheus_tag }}"
133+
prometheus_libvirt_exporter_image_full: "{{ prometheus_libvirt_exporter_image }}:{{ prometheus_libvirt_exporter_tag }}"
134+
124135
prometheus_haproxy_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-haproxy-exporter"
125136
prometheus_haproxy_exporter_tag: "{{ prometheus_tag }}"
126137
prometheus_haproxy_exporter_image_full: "{{ prometheus_haproxy_exporter_image }}:{{ prometheus_haproxy_exporter_tag }}"
@@ -159,6 +170,7 @@ prometheus_blackbox_exporter_tag: "{{ prometheus_tag }}"
159170
prometheus_blackbox_exporter_image_full: "{{ prometheus_blackbox_exporter_image }}:{{ prometheus_blackbox_exporter_tag }}"
160171

161172
prometheus_server_dimensions: "{{ default_container_dimensions }}"
173+
prometheus_libvirt_exporter_dimensions: "{{ default_container_dimensions }}"
162174
prometheus_haproxy_exporter_dimensions: "{{ default_container_dimensions }}"
163175
prometheus_mysqld_exporter_dimensions: "{{ default_container_dimensions }}"
164176
prometheus_node_exporter_dimensions: "{{ default_container_dimensions }}"
@@ -175,6 +187,10 @@ prometheus_server_default_volumes:
175187
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
176188
- "prometheus:/var/lib/prometheus"
177189
- "kolla_logs:/var/log/kolla/"
190+
prometheus_libvirt_exporter_default_volumes:
191+
- "{{ node_config_directory }}/prometheus-libvirt-exporter/:{{ container_config_directory }}/:ro"
192+
- "/etc/localtime:/etc/localtime:ro"
193+
- "libvirtd_run:/var/run/libvirt:ro"
178194
prometheus_haproxy_exporter_default_volumes:
179195
- "{{ node_config_directory }}/prometheus-haproxy-exporter/:{{ container_config_directory }}/:ro"
180196
- "/etc/localtime:/etc/localtime:ro"
@@ -231,6 +247,7 @@ prometheus_blackbox_exporter_default_volumes:
231247
- "kolla_logs:/var/log/kolla/"
232248

233249
prometheus_extra_volumes: "{{ default_extra_volumes }}"
250+
prometheus_libvirt_exporter_extra_volumes: "{{ prometheus_extra_volumes }}"
234251
prometheus_server_extra_volumes: "{{ prometheus_extra_volumes }}"
235252
prometheus_haproxy_exporter_extra_volumes: "{{ prometheus_extra_volumes }}"
236253
prometheus_mysqld_exporter_extra_volumes: "{{ prometheus_extra_volumes }}"

ansible/roles/prometheus/handlers/main.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,18 @@
149149
dimensions: "{{ service.dimensions }}"
150150
when:
151151
- kolla_action != "config"
152+
153+
- name: Restart prometheus-libvirt-exporter container
154+
vars:
155+
service_name: "prometheus-libvirt-exporter"
156+
service: "{{ prometheus_services[service_name] }}"
157+
become: true
158+
kolla_docker:
159+
action: "recreate_or_restart_container"
160+
common_options: "{{ docker_common_options }}"
161+
name: "{{ service.container_name }}"
162+
image: "{{ service.image }}"
163+
volumes: "{{ service.volumes }}"
164+
dimensions: "{{ service.dimensions }}"
165+
when:
166+
- kolla_action != "config"

ansible/roles/prometheus/tasks/precheck.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
- prometheus_openstack_exporter
2020
- prometheus_elasticsearch_exporter
2121
- prometheus_blackbox_exporter
22+
- prometheus_libvirt_exporter
2223
register: container_facts
2324

2425
- name: Checking free port for Prometheus server
@@ -149,3 +150,17 @@
149150
- enable_prometheus_blackbox_exporter | bool
150151
with_items:
151152
- "{{ prometheus_blackbox_exporter_port }}"
153+
154+
- name: Checking free ports for Prometheus libvirt-exporter
155+
wait_for:
156+
host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
157+
port: "{{ item }}"
158+
connect_timeout: 1
159+
timeout: 1
160+
state: stopped
161+
when:
162+
- container_facts['prometheus_libvirt_exporter'] is not defined
163+
- inventory_hostname in groups['prometheus-libvirt-exporter']
164+
- enable_prometheus_libvirt_exporter | bool
165+
with_items:
166+
- "{{ prometheus_libvirt_exporter_port }}"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"command": "/opt/libvirt_exporter --web.listen-address={{ api_interface_address }}:{{ prometheus_libvirt_exporter_port }}",
3+
"config_files": []
4+
}

ansible/roles/prometheus/templates/prometheus.yml.j2

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,17 @@ scrape_configs:
174174
replacement: '{{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_blackbox_exporter_port }}'
175175
{% endif %}
176176

177+
178+
{% if enable_prometheus_libvirt_exporter | bool %}
179+
- job_name: libvirt_exporter
180+
scrape_interval: {{ prometheus_libvirt_exporter_interval }}
181+
static_configs:
182+
- targets:
183+
{% for host in groups["prometheus-libvirt-exporter"] %}
184+
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_libvirt_exporter_port'] }}'
185+
{% endfor %}
186+
{% endif %}
187+
177188
{% if enable_prometheus_alertmanager | bool %}
178189
- job_name: alertmanager
179190
static_configs:

etc/kolla/globals.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@
674674
# Prometheus
675675
############
676676
#enable_prometheus_server: "{{ enable_prometheus | bool }}"
677+
#enable_prometheus_libvirt_exporter: "no"
677678
#enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
678679
#enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
679680
#enable_prometheus_node_exporter: "{{ enable_prometheus | bool }}"

0 commit comments

Comments
 (0)