diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index 7ecf845374..ae8111dce5 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -272,6 +272,7 @@ prometheus_port: "9091" prometheus_node_exporter_port: "9100" prometheus_mysqld_exporter_port: "9104" prometheus_haproxy_exporter_port: "9101" +prometheus_memcached_exporter_port: "9150" qdrouterd_port: "31459" @@ -801,3 +802,4 @@ use_common_mariadb_user: "no" enable_prometheus_haproxy_exporter: "{{ enable_haproxy | bool }}" enable_prometheus_mysqld_exporter: "{{ enable_mariadb | bool }}" enable_prometheus_node_exporter: "yes" +enable_prometheus_memcached_exporter: "{{ enable_memcached | bool }}" diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one index b0fdd5ec05..1e11824aae 100644 --- a/ansible/inventory/all-in-one +++ b/ansible/inventory/all-in-one @@ -668,3 +668,6 @@ mariadb [prometheus-haproxy-exporter:children] haproxy + +[prometheus-memcached-exporter:children] +memcached diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode index 0755114ba9..2fd60ec6aa 100644 --- a/ansible/inventory/multinode +++ b/ansible/inventory/multinode @@ -687,3 +687,6 @@ mariadb [prometheus-haproxy-exporter:children] haproxy + +[prometheus-memcached-exporter:children] +memcached diff --git a/ansible/roles/prometheus/defaults/main.yml b/ansible/roles/prometheus/defaults/main.yml index 198c54d729..a423a67537 100644 --- a/ansible/roles/prometheus/defaults/main.yml +++ b/ansible/roles/prometheus/defaults/main.yml @@ -43,6 +43,15 @@ prometheus_services: - "/etc/localtime:/etc/localtime:ro" - "kolla_logs:/var/log/kolla/" - "haproxy_socket:/var/lib/kolla/haproxy" + prometheus-memcached-exporter: + container_name: prometheus_memcached_exporter + group: prometheus-memcached-exporter + enabled: "{{ enable_prometheus_memcached_exporter | bool }}" + image: "{{ prometheus_memcached_exporter_image_full }}" + volumes: + - "{{ node_config_directory }}/prometheus-memcached-exporter/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "kolla_logs:/var/log/kolla/" #################### # Database @@ -70,3 +79,7 @@ prometheus_mysqld_exporter_image_full: "{{ prometheus_mysqld_exporter_image }}:{ 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 }}" + +prometheus_memcached_exporter_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ prometheus_install_type }}-prometheus-memcached-exporter" +prometheus_memcached_exporter_tag: "{{ prometheus_tag }}" +prometheus_memcached_exporter_image_full: "{{ prometheus_memcached_exporter_image }}:{{ prometheus_memcached_exporter_tag }}" diff --git a/ansible/roles/prometheus/handlers/main.yml b/ansible/roles/prometheus/handlers/main.yml index 37369b811f..93dbfa170a 100644 --- a/ansible/roles/prometheus/handlers/main.yml +++ b/ansible/roles/prometheus/handlers/main.yml @@ -77,3 +77,22 @@ - service.enabled | bool - config_json.changed | bool or prometheus_container.changed | bool + +- name: Restart prometheus-memcached-exporter container + vars: + service_name: "prometheus-memcached-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: + - kolla_action != "config" + - inventory_hostname in groups[service.group] + - service.enabled | bool + - config_json.changed | bool + or prometheus_container.changed | bool diff --git a/ansible/roles/prometheus/tasks/precheck.yml b/ansible/roles/prometheus/tasks/precheck.yml index 419d360e88..804cffdb8c 100644 --- a/ansible/roles/prometheus/tasks/precheck.yml +++ b/ansible/roles/prometheus/tasks/precheck.yml @@ -54,3 +54,15 @@ - container_facts['prometheus_mysqld_exporter'] is not defined - inventory_hostname in groups['prometheus-haproxy-exporter'] - enable_prometheus_haproxy_exporter | bool + +- name: Checking free port for Prometheus memcached_exporter + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ prometheus_memcached_exporter_port }}" + connect_timeout: 1 + timeout: 1 + state: stopped + when: + - container_facts['prometheus_memcached_exporter'] is not defined + - inventory_hostname in groups['prometheus-memcached-exporter'] + - enable_prometheus_memcached_exporter | bool diff --git a/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 new file mode 100644 index 0000000000..3a1c2bbaf9 --- /dev/null +++ b/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 @@ -0,0 +1,11 @@ +{ + "command": "/opt/memcached_exporter/memcached_exporter --web.listen-address {{ api_interface_address }}:{{ prometheus_memcached_exporter_port }} --memcached.address {{ api_interface_address }}:{{ memcached_port }}", + "config_files": [], + "permissions": [ + { + "path": "/var/log/kolla/prometheus", + "owner": "prometheus:kolla", + "recurse": true + } + ] +} diff --git a/ansible/roles/prometheus/templates/prometheus.yml.j2 b/ansible/roles/prometheus/templates/prometheus.yml.j2 index a033dfc4e1..7e3dbe70b8 100644 --- a/ansible/roles/prometheus/templates/prometheus.yml.j2 +++ b/ansible/roles/prometheus/templates/prometheus.yml.j2 @@ -39,3 +39,12 @@ scrape_configs: - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_haproxy_exporter_port'] }}' {% endfor %} {% endif %} + +{% if enable_prometheus_memcached_exporter | bool %} + - job_name: memcached + static_configs: + - targets: +{% for host in groups['prometheus-memcached-exporter'] %} + - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_memcached_exporter_port'] }}' +{% endfor %} +{% endif %}