summaryrefslogtreecommitdiff
path: root/doc/source/admin/telemetry-dynamic-pollster.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/source/admin/telemetry-dynamic-pollster.rst')
-rw-r--r--doc/source/admin/telemetry-dynamic-pollster.rst207
1 files changed, 207 insertions, 0 deletions
diff --git a/doc/source/admin/telemetry-dynamic-pollster.rst b/doc/source/admin/telemetry-dynamic-pollster.rst
index 2c829836..0ea50ace 100644
--- a/doc/source/admin/telemetry-dynamic-pollster.rst
+++ b/doc/source/admin/telemetry-dynamic-pollster.rst
@@ -376,3 +376,210 @@ following:
* user_id_attribute
* project_id_attribute
* resource_id_attribute
+
+Multi metric dynamic pollsters (handling attribute values with list of objects)
+-------------------------------------------------------------------------------
+
+The initial idea for this feature comes from the `categories` fields that we
+can find in the `summary` object of the RadosGW API. Each user has a
+`categories` attribute in the response; in the `categories` list, we can find
+the object that presents in a granular fashion the consumption of different
+RadosGW API operations such as GET, PUT, POST, and may others.
+
+As follows we present an example of such a JSON response.
+
+.. code-block:: json
+
+ {
+ "entries": [
+ {
+ "buckets": [
+ {
+ "bucket": "",
+ "categories": [
+ {
+ "bytes_received": 0,
+ "bytes_sent": 40,
+ "category": "list_buckets",
+ "ops": 2,
+ "successful_ops": 2
+ }
+ ],
+ "epoch": 1572969600,
+ "owner": "user",
+ "time": "2019-11-21 00:00:00.000000Z"
+ },
+ {
+ "bucket": "-",
+ "categories": [
+ {
+ "bytes_received": 0,
+ "bytes_sent": 0,
+ "category": "get_obj",
+ "ops": 1,
+ "successful_ops": 0
+ }
+ ],
+ "epoch": 1572969600,
+ "owner": "someOtherUser",
+ "time": "2019-11-21 00:00:00.000000Z"
+ }
+ ]
+ }
+ ]
+ "summary": [
+ {
+ "categories": [
+ {
+ "bytes_received": 0,
+ "bytes_sent": 0,
+ "category": "create_bucket",
+ "ops": 2,
+ "successful_ops": 2
+ },
+ {
+ "bytes_received": 0,
+ "bytes_sent": 2120428,
+ "category": "get_obj",
+ "ops": 46,
+ "successful_ops": 46
+ },
+ {
+ "bytes_received": 0,
+ "bytes_sent": 21484,
+ "category": "list_bucket",
+ "ops": 8,
+ "successful_ops": 8
+ },
+ {
+ "bytes_received": 6889056,
+ "bytes_sent": 0,
+ "category": "put_obj",
+ "ops": 46,
+ "successful_ops": 46
+ }
+ ],
+ "total": {
+ "bytes_received": 6889056,
+ "bytes_sent": 2141912,
+ "ops": 102,
+ "successful_ops": 102
+ },
+ "user": "user"
+ },
+ {
+ "categories": [
+ {
+ "bytes_received": 0,
+ "bytes_sent": 0,
+ "category": "create_bucket",
+ "ops": 1,
+ "successful_ops": 1
+ },
+ {
+ "bytes_received": 0,
+ "bytes_sent": 0,
+ "category": "delete_obj",
+ "ops": 23,
+ "successful_ops": 23
+ },
+ {
+ "bytes_received": 0,
+ "bytes_sent": 5371,
+ "category": "list_bucket",
+ "ops": 2,
+ "successful_ops": 2
+ },
+ {
+ "bytes_received": 3444350,
+ "bytes_sent": 0,
+ "category": "put_obj",
+ "ops": 23,
+ "successful_ops": 23
+ }
+ ],
+ "total": {
+ "bytes_received": 3444350,
+ "bytes_sent": 5371,
+ "ops": 49,
+ "successful_ops": 49
+ },
+ "user": "someOtherUser"
+ }
+ ]
+ }
+
+In that context, and having in mind that we have APIs with similar data
+structures, we developed an extension for the dynamic pollster that enables
+multi-metric processing for a single pollster. It works as follows.
+
+The pollster name will contain a placeholder for the variable that
+identifies the "submetric". E.g. `dynamic.radosgw.api.request.{category}`.
+The placeholder `{category}` indicates the object's attribute that is in the
+list of objects that we use to load the sub metric name. Then, we must use a
+special notation in the `value_attribute` configuration to indicate that we are
+dealing with a list of objects. This is achieved via `[]` (brackets); for
+instance, in the `dynamic.radosgw.api.request.{category}`, we can use
+`[categories].ops` as the `value_attribute`. This indicates that the value we
+retrieve is a list of objects, and when the dynamic pollster processes it, we
+want it (the pollster) to load the `ops` value for the sub metrics being
+generated.
+
+Examples on how to create multi-metric pollster to handle data from RadosGW API
+are presented as follows:
+
+.. code-block:: yaml
+
+ ---
+
+ - name: "dynamic.radosgw.api.request.{category}"
+ sample_type: "gauge"
+ unit: "request"
+ value_attribute: "[categories].ops"
+ url_path: "http://rgw.service.stage.i.ewcs.ch/admin/usage"
+ module: "awsauth"
+ authentication_object: "S3Auth"
+ authentication_parameters: "<access_key>, <secret_key>,<rados_gateway_server>"
+ user_id_attribute: "user | value.split('$')[0]"
+ project_id_attribute: "user | value.split('$') | value[0]"
+ resource_id_attribute: "user | value.split('$') | value[0]"
+ response_entries_key: "summary"
+
+ - name: "dynamic.radosgw.api.request.successful_ops.{category}"
+ sample_type: "gauge"
+ unit: "request"
+ value_attribute: "[categories].successful_ops"
+ url_path: "http://rgw.service.stage.i.ewcs.ch/admin/usage"
+ module: "awsauth"
+ authentication_object: "S3Auth"
+ authentication_parameters: "<access_key>, <secret_key>,<rados_gateway_server>"
+ user_id_attribute: "user | value.split('$')[0]"
+ project_id_attribute: "user | value.split('$') | value[0]"
+ resource_id_attribute: "user | value.split('$') | value[0]"
+ response_entries_key: "summary"
+
+ - name: "dynamic.radosgw.api.bytes_sent.{category}"
+ sample_type: "gauge"
+ unit: "request"
+ value_attribute: "[categories].bytes_sent"
+ url_path: "http://rgw.service.stage.i.ewcs.ch/admin/usage"
+ module: "awsauth"
+ authentication_object: "S3Auth"
+ authentication_parameters: "<access_key>, <secret_key>,<rados_gateway_server>"
+ user_id_attribute: "user | value.split('$')[0]"
+ project_id_attribute: "user | value.split('$') | value[0]"
+ resource_id_attribute: "user | value.split('$') | value[0]"
+ response_entries_key: "summary"
+
+ - name: "dynamic.radosgw.api.bytes_received.{category}"
+ sample_type: "gauge"
+ unit: "request"
+ value_attribute: "[categories].bytes_received"
+ url_path: "http://rgw.service.stage.i.ewcs.ch/admin/usage"
+ module: "awsauth"
+ authentication_object: "S3Auth"
+ authentication_parameters: "<access_key>, <secret_key>,<rados_gateway_server>"
+ user_id_attribute: "user | value.split('$')[0]"
+ project_id_attribute: "user | value.split('$') | value[0]"
+ resource_id_attribute: "user | value.split('$') | value[0]"
+ response_entries_key: "summary"