Skip to content

Commit 6ea714c

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 e73cc2a commit 6ea714c

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
@@ -431,6 +431,7 @@ placement_api_port: "8780"
431431
placement_api_listen_port: "{{ placement_api_port }}"
432432

433433
prometheus_port: "9091"
434+
prometheus_libvirt_exporter_port: "9177"
434435
prometheus_node_exporter_port: "9100"
435436
prometheus_mysqld_exporter_port: "9104"
436437
prometheus_haproxy_exporter_port: "9101"
@@ -1093,6 +1094,7 @@ use_common_mariadb_user: "no"
10931094
# Prometheus
10941095
############
10951096
enable_prometheus_server: "{{ enable_prometheus | bool }}"
1097+
enable_prometheus_libvirt_exporter: "no"
10961098
enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
10971099
enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
10981100
enable_prometheus_node_exporter: "{{ enable_prometheus | bool }}"
@@ -1105,6 +1107,7 @@ enable_prometheus_elasticsearch_exporter: "{{ enable_prometheus | bool and enabl
11051107
enable_prometheus_blackbox_exporter: "{{ enable_prometheus | bool }}"
11061108

11071109
prometheus_alertmanager_user: "admin"
1110+
prometheus_libvirt_exporter_interval: "60s"
11081111
prometheus_openstack_exporter_interval: "60s"
11091112
prometheus_elasticsearch_exporter_interval: "60s"
11101113
prometheus_cmdline_extras:

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
@@ -330,6 +330,7 @@ nova_libvirt_default_volumes:
330330
- "/sys/fs/cgroup:/sys/fs/cgroup"
331331
- "kolla_logs:/var/log/kolla/"
332332
- "libvirtd:/var/lib/libvirt"
333+
- "{% if enable_prometheus_libvirt_exporter | bool %}libvirtd_run:/var/run/libvirt{% endif %}"
333334
- "{{ nova_instance_datadir_volume }}:/var/lib/nova/"
334335
- "{% if enable_shared_var_lib_nova_mnt | bool %}/var/lib/nova/mnt:/var/lib/nova/mnt:shared{% endif %}"
335336
- "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
@@ -23,6 +23,13 @@ prometheus_services:
2323
pid_mode: "host"
2424
volumes: "{{ prometheus_node_exporter_default_volumes + prometheus_node_exporter_extra_volumes }}"
2525
dimensions: "{{ prometheus_node_exporter_dimensions }}"
26+
prometheus-libvirt-exporter:
27+
container_name: "prometheus_libvirt_exporter"
28+
group: "prometheus-libvirt-exporter"
29+
enabled: "{{ enable_prometheus_libvirt_exporter | bool }}"
30+
image: "{{ prometheus_libvirt_exporter_image_full }}"
31+
volumes: "{{ prometheus_libvirt_exporter_default_volumes + prometheus_libvirt_exporter_extra_volumes }}"
32+
dimensions: "{{ prometheus_libvirt_exporter_dimensions }}"
2633
prometheus-mysqld-exporter:
2734
container_name: prometheus_mysqld_exporter
2835
group: prometheus-mysqld-exporter
@@ -123,6 +130,10 @@ prometheus_server_image: "{{ docker_registry ~ '/' if docker_registry else '' }}
123130
prometheus_server_tag: "{{ prometheus_tag }}"
124131
prometheus_server_image_full: "{{ prometheus_server_image }}:{{ prometheus_server_tag }}"
125132

133+
prometheus_libvirt_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-libvirt-exporter"
134+
prometheus_libvirt_exporter_tag: "{{ prometheus_tag }}"
135+
prometheus_libvirt_exporter_image_full: "{{ prometheus_libvirt_exporter_image }}:{{ prometheus_libvirt_exporter_tag }}"
136+
126137
prometheus_haproxy_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-haproxy-exporter"
127138
prometheus_haproxy_exporter_tag: "{{ prometheus_tag }}"
128139
prometheus_haproxy_exporter_image_full: "{{ prometheus_haproxy_exporter_image }}:{{ prometheus_haproxy_exporter_tag }}"
@@ -161,6 +172,7 @@ prometheus_blackbox_exporter_tag: "{{ prometheus_tag }}"
161172
prometheus_blackbox_exporter_image_full: "{{ prometheus_blackbox_exporter_image }}:{{ prometheus_blackbox_exporter_tag }}"
162173

163174
prometheus_server_dimensions: "{{ default_container_dimensions }}"
175+
prometheus_libvirt_exporter_dimensions: "{{ default_container_dimensions }}"
164176
prometheus_haproxy_exporter_dimensions: "{{ default_container_dimensions }}"
165177
prometheus_mysqld_exporter_dimensions: "{{ default_container_dimensions }}"
166178
prometheus_node_exporter_dimensions: "{{ default_container_dimensions }}"
@@ -177,6 +189,10 @@ prometheus_server_default_volumes:
177189
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
178190
- "prometheus:/var/lib/prometheus"
179191
- "kolla_logs:/var/log/kolla/"
192+
prometheus_libvirt_exporter_default_volumes:
193+
- "{{ node_config_directory }}/prometheus-libvirt-exporter/:{{ container_config_directory }}/:ro"
194+
- "/etc/localtime:/etc/localtime:ro"
195+
- "libvirtd_run:/var/run/libvirt:ro"
180196
prometheus_haproxy_exporter_default_volumes:
181197
- "{{ node_config_directory }}/prometheus-haproxy-exporter/:{{ container_config_directory }}/:ro"
182198
- "/etc/localtime:/etc/localtime:ro"
@@ -233,6 +249,7 @@ prometheus_blackbox_exporter_default_volumes:
233249
- "kolla_logs:/var/log/kolla/"
234250

235251
prometheus_extra_volumes: "{{ default_extra_volumes }}"
252+
prometheus_libvirt_exporter_extra_volumes: "{{ prometheus_extra_volumes }}"
236253
prometheus_server_extra_volumes: "{{ prometheus_extra_volumes }}"
237254
prometheus_haproxy_exporter_extra_volumes: "{{ prometheus_extra_volumes }}"
238255
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
@@ -126,6 +126,17 @@ scrape_configs:
126126
replacement: '{{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_blackbox_exporter_port }}'
127127
{% endif %}
128128

129+
130+
{% if enable_prometheus_libvirt_exporter | bool %}
131+
- job_name: libvirt_exporter
132+
scrape_interval: {{ prometheus_libvirt_exporter_interval }}
133+
static_configs:
134+
- targets:
135+
{% for host in groups["prometheus-libvirt-exporter"] %}
136+
- '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_libvirt_exporter_port'] }}'
137+
{% endfor %}
138+
{% endif %}
139+
129140
{% if enable_prometheus_alertmanager | bool %}
130141
alerting:
131142
alertmanagers:

etc/kolla/globals.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,7 @@
654654
# Prometheus
655655
############
656656
#enable_prometheus_server: "{{ enable_prometheus | bool }}"
657+
#enable_prometheus_libvirt_exporter: "no"
657658
#enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}"
658659
#enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}"
659660
#enable_prometheus_node_exporter: "{{ enable_prometheus | bool }}"

0 commit comments

Comments
 (0)