From c90a23005c138edcf4e7f0a0d9c8b7fa7e745bba Mon Sep 17 00:00:00 2001 From: Piotr Milewski Date: Thu, 12 Feb 2026 17:11:56 +0100 Subject: prometheus: add valkey exporter support Add prometheus-valkey-exporter deployment to enable monitoring of Valkey servers. Depends-On: https://review.opendev.org/c/openstack/kolla/+/976650 Change-Id: I0ff56028f34a0ad21c4c122da3f27cf73d0e0b00 Signed-off-by: Piotr Milewski --- ansible/group_vars/all/prometheus.yml | 2 ++ ansible/inventory/all-in-one | 3 +++ ansible/inventory/multinode | 3 +++ ansible/roles/prometheus/defaults/main.yml | 17 +++++++++++++++++ ansible/roles/prometheus/handlers/main.yml | 13 +++++++++++++ .../templates/prometheus-valkey-exporter.json.j2 | 12 ++++++++++++ ansible/roles/prometheus/templates/prometheus.yml.j2 | 13 +++++++++++++ ansible/site.yml | 1 + 8 files changed, 64 insertions(+) create mode 100644 ansible/roles/prometheus/templates/prometheus-valkey-exporter.json.j2 (limited to 'ansible') diff --git a/ansible/group_vars/all/prometheus.yml b/ansible/group_vars/all/prometheus.yml index 388825907..0eeca4e7c 100644 --- a/ansible/group_vars/all/prometheus.yml +++ b/ansible/group_vars/all/prometheus.yml @@ -22,6 +22,7 @@ enable_prometheus_rabbitmq_exporter: "{{ enable_prometheus | bool and enable_rab enable_prometheus_libvirt_exporter: "{{ enable_prometheus | bool and enable_nova | bool and nova_compute_virt_type in ['kvm', 'qemu'] }}" enable_prometheus_etcd_integration: "{{ enable_prometheus | bool and enable_etcd | bool }}" enable_prometheus_proxysql_exporter: "{{ enable_prometheus | bool and enable_proxysql | bool }}" +enable_prometheus_valkey_exporter: "{{ enable_prometheus | bool and enable_valkey | bool }}" prometheus_alertmanager_user: "admin" prometheus_ceph_exporter_interval: "{{ prometheus_scrape_interval }}" @@ -56,6 +57,7 @@ prometheus_fluentd_integration_port: "24231" prometheus_libvirt_exporter_port: "9177" prometheus_etcd_integration_port: "{{ etcd_client_port }}" proxysql_prometheus_exporter_port: "6070" +prometheus_valkey_exporter_port: "9121" # Prometheus alertmanager ports prometheus_alertmanager_internal_fqdn: "{{ kolla_internal_fqdn }}" diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one index ce3b26f16..5fa8ba959 100644 --- a/ansible/inventory/all-in-one +++ b/ansible/inventory/all-in-one @@ -543,6 +543,9 @@ monitoring [prometheus-libvirt-exporter:children] compute +[prometheus-valkey-exporter:children] +valkey + [masakari-api:children] control diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode index 40db78c1e..4aaec0785 100644 --- a/ansible/inventory/multinode +++ b/ansible/inventory/multinode @@ -561,6 +561,9 @@ monitoring [prometheus-libvirt-exporter:children] compute +[prometheus-valkey-exporter:children] +valkey + [masakari-api:children] control diff --git a/ansible/roles/prometheus/defaults/main.yml b/ansible/roles/prometheus/defaults/main.yml index 5c4ad787a..03eaae027 100644 --- a/ansible/roles/prometheus/defaults/main.yml +++ b/ansible/roles/prometheus/defaults/main.yml @@ -121,6 +121,13 @@ prometheus_services: image: "{{ prometheus_libvirt_exporter_image_full }}" volumes: "{{ prometheus_libvirt_exporter_default_volumes + prometheus_libvirt_exporter_extra_volumes }}" dimensions: "{{ prometheus_libvirt_exporter_dimensions }}" + prometheus-valkey-exporter: + container_name: "prometheus_valkey_exporter" + group: "prometheus-valkey-exporter" + enabled: "{{ enable_prometheus_valkey_exporter | bool }}" + image: "{{ prometheus_valkey_exporter_image_full }}" + volumes: "{{ prometheus_valkey_exporter_default_volumes + prometheus_valkey_exporter_extra_volumes }}" + dimensions: "{{ prometheus_valkey_exporter_dimensions }}" #################### # Prometheus Server @@ -398,6 +405,10 @@ prometheus_libvirt_exporter_image: "{{ docker_image_url }}prometheus-libvirt-exp prometheus_libvirt_exporter_tag: "{{ prometheus_tag }}" prometheus_libvirt_exporter_image_full: "{{ prometheus_libvirt_exporter_image }}:{{ prometheus_libvirt_exporter_tag }}" +prometheus_valkey_exporter_image: "{{ docker_image_url }}prometheus-valkey-exporter" +prometheus_valkey_exporter_tag: "{{ prometheus_tag }}" +prometheus_valkey_exporter_image_full: "{{ prometheus_valkey_exporter_image }}:{{ prometheus_valkey_exporter_tag }}" + prometheus_server_dimensions: "{{ default_container_dimensions }}" prometheus_mysqld_exporter_dimensions: "{{ default_container_dimensions }}" prometheus_memcached_exporter_dimensions: "{{ default_container_dimensions }}" @@ -406,6 +417,7 @@ prometheus_openstack_exporter_dimensions: "{{ default_container_dimensions }}" prometheus_elasticsearch_exporter_dimensions: "{{ default_container_dimensions }}" prometheus_blackbox_exporter_dimensions: "{{ default_container_dimensions }}" prometheus_libvirt_exporter_dimensions: "{{ default_container_dimensions }}" +prometheus_valkey_exporter_dimensions: "{{ default_container_dimensions }}" prometheus_server_default_volumes: - "{{ node_config_directory }}/prometheus-server/:{{ container_config_directory }}/:ro" @@ -441,6 +453,10 @@ prometheus_libvirt_exporter_default_volumes: - "{{ node_config_directory }}/prometheus-libvirt-exporter/:{{ container_config_directory }}/:ro" - "/etc/localtime:/etc/localtime:ro" - "/run/libvirt:/run/libvirt:ro" +prometheus_valkey_exporter_default_volumes: + - "{{ node_config_directory }}/prometheus-valkey-exporter/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}" prometheus_extra_volumes: "{{ default_extra_volumes }}" prometheus_server_extra_volumes: "{{ prometheus_extra_volumes }}" @@ -451,6 +467,7 @@ prometheus_openstack_exporter_extra_volumes: "{{ prometheus_extra_volumes }}" prometheus_elasticsearch_exporter_extra_volumes: "{{ prometheus_extra_volumes }}" prometheus_blackbox_exporter_extra_volumes: "{{ prometheus_extra_volumes }}" prometheus_libvirt_exporter_extra_volumes: "{{ prometheus_extra_volumes }}" +prometheus_valkey_exporter_extra_volumes: "{{ prometheus_extra_volumes }}" prometheus_openstack_exporter_disabled_volume: "{{ '--disable-service.volume' if not enable_cinder | bool else '' }}" prometheus_openstack_exporter_disabled_dns: "{{ '--disable-service.dns' if not enable_designate | bool else '' }}" diff --git a/ansible/roles/prometheus/handlers/main.yml b/ansible/roles/prometheus/handlers/main.yml index 386031040..f83129840 100644 --- a/ansible/roles/prometheus/handlers/main.yml +++ b/ansible/roles/prometheus/handlers/main.yml @@ -104,3 +104,16 @@ image: "{{ service.image }}" volumes: "{{ service.volumes }}" dimensions: "{{ service.dimensions }}" + +- name: Restart prometheus-valkey-exporter container + vars: + service_name: "prometheus-valkey-exporter" + service: "{{ prometheus_services[service_name] }}" + become: true + kolla_container: + action: "recreate_or_restart_container" + common_options: "{{ docker_common_options }}" + name: "{{ service.container_name }}" + image: "{{ service.image }}" + volumes: "{{ service.volumes }}" + dimensions: "{{ service.dimensions }}" diff --git a/ansible/roles/prometheus/templates/prometheus-valkey-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-valkey-exporter.json.j2 new file mode 100644 index 000000000..e3d3f45b0 --- /dev/null +++ b/ansible/roles/prometheus/templates/prometheus-valkey-exporter.json.j2 @@ -0,0 +1,12 @@ +{ + "command": "/opt/valkey-exporter -redis.addr=redis://{{ api_interface_address | put_address_in_context('url') }}:{{ valkey_server_port }} -redis.password={{ valkey_master_password }} -web.listen-address={{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_valkey_exporter_port }}", + "config_files": [ + {% if kolla_copy_ca_into_containers | bool %} + { + "source": "{{ container_config_directory }}/ca-certificates", + "dest": "/var/lib/kolla/share/ca-certificates", + "owner": "root", + "perm": "0600" + }{% endif %} + ] +} diff --git a/ansible/roles/prometheus/templates/prometheus.yml.j2 b/ansible/roles/prometheus/templates/prometheus.yml.j2 index 1aa75fa2c..f07e89cea 100644 --- a/ansible/roles/prometheus/templates/prometheus.yml.j2 +++ b/ansible/roles/prometheus/templates/prometheus.yml.j2 @@ -266,6 +266,19 @@ scrape_configs: {% endfor %} {% endif %} +{% if enable_prometheus_valkey_exporter | bool %} + - job_name: valkey_exporter + static_configs: +{% for host in groups["prometheus-valkey-exporter"] %} + - targets: + - '{{ 'api' | kolla_address(host, override_var='prometheus_target_address') | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_valkey_exporter_port'] }}' +{% if hostvars[host].prometheus_instance_label | default(false, true) %} + labels: + instance: "{{ hostvars[host].prometheus_instance_label }}" +{% endif %} +{% endfor %} +{% endif %} + alerting: alertmanagers: - static_configs: diff --git a/ansible/site.yml b/ansible/site.yml index 4167c041b..634039653 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -460,6 +460,7 @@ - prometheus-elasticsearch-exporter - prometheus-blackbox-exporter - prometheus-libvirt-exporter + - prometheus-valkey-exporter - "&enable_prometheus_True" serial: '{{ kolla_serial|default("0") }}' max_fail_percentage: >- -- cgit v1.2.3