diff --git a/etc/kayobe/ansible/deploy-radosgw-usage-exporter.yml b/etc/kayobe/ansible/deploy-radosgw-usage-exporter.yml new file mode 100644 index 000000000..8a5a1d2f3 --- /dev/null +++ b/etc/kayobe/ansible/deploy-radosgw-usage-exporter.yml @@ -0,0 +1,68 @@ +--- +- name: Deploy RADOS gateway usage exporter + hosts: monitoring + gather_facts: false + vars: + venv: "{{ virtualenv_path }}/openstack" + tasks: + - name: Check ec2 credential for admin + command: > + {{ venv }}/bin/openstack + ec2 credentials list --user admin + --format json + environment: "{{ openstack_auth_env }}" + delegate_to: localhost + register: credential_check + run_once: true + when: stackhpc_enable_radosgw_usage_exporter + + - name: Create ec2 credential if there's none + command: > + {{ venv }}/bin/openstack + ec2 credentials create --user admin + --format json + environment: "{{ openstack_auth_env }}" + delegate_to: localhost + run_once: true + when: + - "{{ credential_check.stdout == [] }}" + - stackhpc_enable_radosgw_usage_exporter + + - name: Query ec2 credential for admin + command: > + {{ venv }}/bin/openstack + ec2 credentials list --user admin + --format json + environment: "{{ openstack_auth_env }}" + delegate_to: localhost + register: credential + run_once: true + when: stackhpc_enable_radosgw_usage_exporter + + - name: Get object storage endpoint + command: > + {{ venv }}/bin/openstack + endpoint list --service object-store --interface internal + --format json + environment: "{{ openstack_auth_env }}" + delegate_to: localhost + register: endpoint + run_once: true + when: stackhpc_enable_radosgw_usage_exporter + + - name: Ensure radosgw_usage_exporter container is running + community.docker.docker_container: + name: radosgw_usage_exporter + image: ghcr.io/stackhpc/radosgw_usage_exporter:0.1.0 + network_mode: host + env: + RADOSGW_SERVER: "{{ radosgw_server }}" + ADMIN_ENTRY: admin + ACCESS_KEY: "{{ ec2.Access }}" + SECRET_KEY: "{{ ec2.Secret }}" + vars: + ec2: "{{ credential.stdout | from_json | first }}" + host: "{{ endpoint.stdout | from_json | first }}" + radosgw_server: "{{ host.URL | regex_replace('(https?://)([^:/]+):([0-9]+)/.*', '\\1\\2:\\3') }}" # Drop Swift api address + become: true + when: stackhpc_enable_radosgw_usage_exporter diff --git a/etc/kayobe/hooks/overcloud-service-deploy/post.d/deploy-radosgw-usage-exporter.yml b/etc/kayobe/hooks/overcloud-service-deploy/post.d/deploy-radosgw-usage-exporter.yml new file mode 120000 index 000000000..3d939329a --- /dev/null +++ b/etc/kayobe/hooks/overcloud-service-deploy/post.d/deploy-radosgw-usage-exporter.yml @@ -0,0 +1 @@ +../../../ansible/deploy-radosgw-usage-exporter.yml \ No newline at end of file diff --git a/etc/kayobe/kolla/config/prometheus/prometheus.yml.d/80-radosgw-exporter.yml b/etc/kayobe/kolla/config/prometheus/prometheus.yml.d/80-radosgw-exporter.yml new file mode 100644 index 000000000..304736a80 --- /dev/null +++ b/etc/kayobe/kolla/config/prometheus/prometheus.yml.d/80-radosgw-exporter.yml @@ -0,0 +1,21 @@ +# yamllint disable-file +--- +{% if stackhpc_enable_radosgw_usage_exporter | bool %} +{% raw %} +scrape_configs: + - job_name: ceph_radosgw_usage_exporter + honor_labels: true + scrape_interval: 15s + metric_relabel_configs: + - replacement: ${1} + source_labels: [owner,user] + target_label: tenant_id + separator: "" + regex: (.+) + static_configs: + - targets: + {% for host in groups['monitoring'] %} + - "{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{% endraw %}{{ stackhpc_radosgw_usage_exporter_port }}{% raw %}" + {% endfor %} +{% endraw %} +{% endif %} diff --git a/etc/kayobe/stackhpc-monitoring.yml b/etc/kayobe/stackhpc-monitoring.yml index e8e0bb91f..18a625ca6 100644 --- a/etc/kayobe/stackhpc-monitoring.yml +++ b/etc/kayobe/stackhpc-monitoring.yml @@ -20,6 +20,12 @@ alertmanager_warn_network_bond_single_link: true # targets being templated during deployment. stackhpc_enable_os_capacity: true +# Whether the RADOS gateway usage exporter is enabled. +# Enabling this will result in templating radosge_usage_exporter endpoint as +# Prometheus scrape targets during deployment. +stackhpc_enable_radosgw_usage_exporter: false +stackhpc_radosgw_usage_exporter_port: 9242 + # Whether TLS certificate verification is enabled for the OpenStack Capacity # exporter during Keystone authentication. stackhpc_os_capacity_openstack_verify: true