diff --git a/ansible/install/group_vars/all.yml b/ansible/install/group_vars/all.yml
index 1d7cc1640..69f731016 100644
--- a/ansible/install/group_vars/all.yml
+++ b/ansible/install/group_vars/all.yml
@@ -356,6 +356,12 @@ ping_interval: 1
# Monitors OSP resources (networks, instances ..) created in DB.
osp_resources_collectd_plugin: true
+#######################################################################
+# OSP individual resources collectd response time plugin on controllers
+#######################################################################
+# Monitors response time for individual OSP resources (networks, subnets, routers ..) created in DB.
+osp_individual_resources_response_time: false
+
########################################################
# OVN compute Plugin for OVN monitoring on computes
########################################################
diff --git a/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2 b/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
index 813675f6b..0d9443bac 100644
--- a/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
+++ b/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
@@ -823,6 +823,540 @@ PreCacheChain "PreCache"
Instance "delete"
+
+
+ Instance "neutron_avg_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "neutron_min_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "neutron_max_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "nova_avg_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete"
+
+
+
+
+ Instance "nova_min_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete"
+
+
+
+
+ Instance "nova_max_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete"
+
+
{% endif %}
# Tail httpd request time
diff --git a/ansible/install/roles/collectd/templates/controller.collectd.conf.j2 b/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
index 75d89750f..ff9f8c780 100644
--- a/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
+++ b/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
@@ -818,6 +818,540 @@ PreCacheChain "PreCache"
Instance "delete"
+
+
+ Instance "neutron_avg_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "neutron_min_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "neutron_max_response_time"
+
+ Regex "POST /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.0.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete"
+
+ {% if osp_individual_resources_response_time %}
+
+ Regex "POST /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_networks"
+
+
+ Regex "PUT /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_networks"
+
+
+ Regex "GET /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_networks"
+
+
+ Regex "DELETE /v2.0/networks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_networks"
+
+
+ Regex "POST /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_routers"
+
+
+ Regex "PUT /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_routers"
+
+
+ Regex "GET /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_routers"
+
+
+ Regex "DELETE /v2.0/routers.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_routers"
+
+
+ Regex "POST /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_subnets"
+
+
+ Regex "PUT /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_subnets"
+
+
+ Regex "GET /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_subnets"
+
+
+ Regex "DELETE /v2.0/subnets.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_subnets"
+
+
+ Regex "POST /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_ports"
+
+
+ Regex "PUT /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_ports"
+
+
+ Regex "GET /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_ports"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_ports"
+
+
+ Regex "POST /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post_trunks"
+
+
+ Regex "PUT /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put_trunks"
+
+
+ Regex "GET /v2.0/trunks.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get_trunks"
+
+
+ Regex "DELETE /v2.0/ports.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete_trunks"
+
+ {% endif %}
+
+
+
+ Instance "nova_avg_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "delete"
+
+
+
+
+ Instance "nova_min_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "delete"
+
+
+
+
+ Instance "nova_max_response_time"
+
+ Regex "POST /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "post"
+
+
+ Regex "PUT /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "put"
+
+
+ Regex "GET /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "get"
+
+
+ Regex "DELETE /v2.1.*time: ([0-9.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "delete"
+
+
{% endif %}
diff --git a/ansible/install/roles/grafana-dashboards/templates/openstack_general_system_performance.yaml.j2 b/ansible/install/roles/grafana-dashboards/templates/openstack_general_system_performance.yaml.j2
index 06365426b..70bf35bc6 100644
--- a/ansible/install/roles/grafana-dashboards/templates/openstack_general_system_performance.yaml.j2
+++ b/ansible/install/roles/grafana-dashboards/templates/openstack_general_system_performance.yaml.j2
@@ -162,6 +162,8 @@ dashboard:
{% if item.template_node_type in controller_groups %}
{% include 'partials/osp_resources.yaml' %}
+
+ {% include 'partials/osp_response_times.yaml' %}
{% endif %}
{% include 'partials/ovn_metrics.yaml' %}
diff --git a/ansible/install/roles/grafana-dashboards/templates/partials/osp_response_times.yaml b/ansible/install/roles/grafana-dashboards/templates/partials/osp_response_times.yaml
new file mode 100644
index 000000000..5415174a8
--- /dev/null
+++ b/ansible/install/roles/grafana-dashboards/templates/partials/osp_response_times.yaml
@@ -0,0 +1,131 @@
+ - title: OSP Resource Response Times
+ collapse: true
+ height: 200px
+ showTitle: true
+ panels:
+ - title: $Cloud - $Node - OSP REST API Average Response Times
+ type: graph
+ legend:
+ alignAsTable: true
+ avg: false
+ current: true
+ max: true
+ min: true
+ rightSide: true
+ show: true
+ total: false
+ values: true
+ nullPointMode: 'null'
+ targets:
+ - target: alias($Cloud.$Node.tail-nova_avg_response_time.response_time-get, 'nova_get')
+ - target: alias($Cloud.$Node.tail-nova_avg_response_time.response_time-post, 'nova_post')
+ - target: alias($Cloud.$Node.tail-nova_avg_response_time.response_time-put, 'nova_put')
+ - target: alias($Cloud.$Node.tail-nova_avg_response_time.response_time-delete, 'nova_delete')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get, 'neutron_get')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post, 'neutron_post')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put, 'neutron_put')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete, 'neutron_delete')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get_networks, 'neutron_get_networks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post_networks, 'neutron_post_networks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put_networks, 'neutron_put_networks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete_networks, 'neutron_delete_networks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get_routers, 'neutron_get_routers')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post_routers, 'neutron_post_routers')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put_routers, 'neutron_put_routers')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete_routers, 'neutron_delete_routers')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get_subnets, 'neutron_get_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post_subnets, 'neutron_post_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put_subnets, 'neutron_put_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete_subnets, 'neutron_delete_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get_ports, 'neutron_get_ports')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post_ports, 'neutron_post_ports')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put_ports, 'neutron_put_ports')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete_ports, 'neutron_delete_ports')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-get_trunks, 'neutron_get_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-post_trunks, 'neutron_post_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-put_trunks, 'neutron_put_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_avg_response_time.response_time-delete_trunks, 'neutron_delete_trunks')
+ - title: $Cloud - $Node - OSP REST API Minimum Response Times
+ type: graph
+ legend:
+ alignAsTable: true
+ avg: false
+ current: true
+ max: true
+ min: true
+ rightSide: true
+ show: true
+ total: false
+ values: true
+ nullPointMode: 'null'
+ targets:
+ - target: alias($Cloud.$Node.tail-nova_min_response_time.response_time-get, 'nova_get')
+ - target: alias($Cloud.$Node.tail-nova_min_response_time.response_time-post, 'nova_post')
+ - target: alias($Cloud.$Node.tail-nova_min_response_time.response_time-put, 'nova_put')
+ - target: alias($Cloud.$Node.tail-nova_min_response_time.response_time-delete, 'nova_delete')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get, 'neutron_get')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post, 'neutron_post')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put, 'neutron_put')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete, 'neutron_delete')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get_networks, 'neutron_get_networks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post_networks, 'neutron_post_networks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put_networks, 'neutron_put_networks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete_networks, 'neutron_delete_networks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get_routers, 'neutron_get_routers')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post_routers, 'neutron_post_routers')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put_routers, 'neutron_put_routers')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete_routers, 'neutron_delete_routers')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get_subnets, 'neutron_get_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post_subnets, 'neutron_post_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put_subnets, 'neutron_put_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete_subnets, 'neutron_delete_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get_ports, 'neutron_get_ports')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post_ports, 'neutron_post_ports')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put_ports, 'neutron_put_ports')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete_ports, 'neutron_delete_ports')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-get_trunks, 'neutron_get_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-post_trunks, 'neutron_post_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-put_trunks, 'neutron_put_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_min_response_time.response_time-delete_trunks, 'neutron_delete_trunks')
+ - title: $Cloud - $Node - OSP REST API Maximum Response Times
+ type: graph
+ legend:
+ alignAsTable: true
+ avg: false
+ current: true
+ max: true
+ min: true
+ rightSide: true
+ show: true
+ total: false
+ values: true
+ nullPointMode: 'null'
+ targets:
+ - target: alias($Cloud.$Node.tail-nova_max_response_time.response_time-get, 'nova_get')
+ - target: alias($Cloud.$Node.tail-nova_max_response_time.response_time-post, 'nova_post')
+ - target: alias($Cloud.$Node.tail-nova_max_response_time.response_time-put, 'nova_put')
+ - target: alias($Cloud.$Node.tail-nova_max_response_time.response_time-delete, 'nova_delete')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get, 'neutron_get')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post, 'neutron_post')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put, 'neutron_put')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete, 'neutron_delete')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get_networks, 'neutron_get_networks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post_networks, 'neutron_post_networks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put_networks, 'neutron_put_networks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete_networks, 'neutron_delete_networks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get_routers, 'neutron_get_routers')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post_routers, 'neutron_post_routers')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put_routers, 'neutron_put_routers')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete_routers, 'neutron_delete_routers')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get_subnets, 'neutron_get_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post_subnets, 'neutron_post_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put_subnets, 'neutron_put_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete_subnets, 'neutron_delete_subnets')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get_ports, 'neutron_get_ports')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post_ports, 'neutron_post_ports')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put_ports, 'neutron_put_ports')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete_ports, 'neutron_delete_ports')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-get_trunks, 'neutron_get_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-post_trunks, 'neutron_post_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-put_trunks, 'neutron_put_trunks')
+ - target: alias($Cloud.$Node.tail-neutron_max_response_time.response_time-delete_trunks, 'neutron_delete_trunks')