From 5a5770d65cfd70700c4251be96e8804bdb36d322 Mon Sep 17 00:00:00 2001 From: "Mytnyk, Volodymyr" Date: Mon, 6 Nov 2017 12:29:06 +0100 Subject: [PATCH] ves: Add YAML configuration format description - Clean-up Change-Id: I2dc3d5924683832ffa0085ea2a2db9ed14f42f5a Signed-off-by: Mytnyk, Volodymyr --- .../userguide/array-item-parse-workflow.png | Bin 0 -> 24192 bytes docs/release/userguide/collectd.ves.userguide.rst | 549 ++++++++++++++++++++- docs/release/userguide/parse-work-flow.png | Bin 0 -> 3949 bytes .../userguide/value-item-parse-workflow.png | Bin 0 -> 31526 bytes 4 files changed, 538 insertions(+), 11 deletions(-) create mode 100644 docs/release/userguide/array-item-parse-workflow.png create mode 100644 docs/release/userguide/parse-work-flow.png create mode 100644 docs/release/userguide/value-item-parse-workflow.png diff --git a/docs/release/userguide/array-item-parse-workflow.png b/docs/release/userguide/array-item-parse-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..22cbefff143e071abfa7c163184844dbd9d7bf7d GIT binary patch literal 24192 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 VJ*pxBAb!`bOBZ!76sTK0_#dUSWikK& literal 0 HcmV?d00001 diff --git a/docs/release/userguide/collectd.ves.userguide.rst b/docs/release/userguide/collectd.ves.userguide.rst index e7fcf738..1f69b6ad 100644 --- a/docs/release/userguide/collectd.ves.userguide.rst +++ b/docs/release/userguide/collectd.ves.userguide.rst @@ -5,7 +5,11 @@ ========================== VES Application User Guide ========================== -The Barometer repository contains a python based application for VES. + +The Barometer repository contains a python based application for VES (VNF Event +Stream) which receives the `collectd`_ specific metrics via `Kafka`_ bus, +normalizes the metric data into the VES message and sends it into the VES +collector. The application currently supports pushing platform relevant metrics through the additional measurements field for VES. @@ -186,9 +190,6 @@ collectd configuration file as following: Start collectd process as a service as described in :ref:`install-collectd-as-a-service`. -.. Start collectd process as a service as described in `Barometer User Guide - `_. - Setup VES Test Collector ------------------------ @@ -233,7 +234,7 @@ Install dependencies: $ sudo pip install pyyaml -Clone Barometer repo: +Clone Barometer repo and start the VES application: .. code:: bash @@ -339,10 +340,536 @@ configuration options are described below: (default: ``localhost``) -VES notification support ------------------------- +VES YAML configuration format +----------------------------- + +The format of the VES message is generated by the VES application based on the +YAML schema configuration file provided by user via ``--events-schema`` +command-line option of the application. + +.. note:: Use ``--help`` option of VES application to see the + description of all available options + +.. note:: The detailed installation guide of the VES application is described in + the `VES Application User Guide`_. + +The message defined by YAML schema should correspond to format defined in +`VES shema definition`_. + +.. warning:: This section doesn't explain the YAML language itself, so the + knowledge of the YAML language is required before continue reading it! + +Since, the VES message output is a JSON format, it's recommended to understand +how YAML document is converted to JSON before starting to create a new YAML +definition for the VES. E.g.: + +The following YAML document: + +.. code:: yaml + + --- + additionalMeasurements: + plugin: somename + instance: someinstance + +will be converted to JSON like this: + +.. code:: json + + { + "additionalMeasurements": { + "instance": "someinstance", + "plugin": "somename" + } + } + +.. note:: The `YAML syntax` section of `PyYAML documentation`_ can be used + as a reference for this. + + +VES message types +----------------- + +The VES agent can generate two type of messages which are sent to the VES +collector. Each message type must be specified in the YAML configuration file +using a specific YAML tag. + +Measurements + This type is used to send a message defined in YAML configuration to the VES + collector with a specified interval (default is 20 sec and it's configurable + via command line option of the application). This type can be specified in + the configuration using ``!Measurements`` tag. For instance: + + .. code:: yaml + + --- + # My comments + My Host Measurements: !Measurements + ... # message definition + +Events + This type is used to send a message defined in YAML configuration to the VES + collector when collectd notification is received from Kafka bus (collectd + ``write_kafka`` plugin). This type can be specified in the configuration + using ``!Events`` tag. For instance: + + .. code:: yaml + + --- + # My comments + My Events: !Events + ... # event definition + + +Collectd metrics in VES +----------------------- + +The VES application caches collectd metrics received via Kafka bus. The data +is stored in a table format. It's important to know it before mapping collectd +metric values to message defined in YAML configuration file. + +VES collectd metric cache example: + ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| host | plugin | plugin_instance | type | type_instace | time | value | ds_name | interval | ++===========+===========+====================+===========+================+===================+========+=========+==========+ +| localhost | cpu | | percent | user | 1509535512.30567 | 16 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| localhost | memory | | memory | free | 1509535573.448014 | 798456 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| localhost | interface | | eth0 | if_packets | 1509544183.956496 | 253 | rx | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| 7ec333e7 | virt | Ubuntu-12.04.5-LTS | percent | virt_cpu_total | 1509544402.378035 | 0.2 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| 7ec333e7 | virt | Ubuntu-12.04.5-LTS | memory | rss | 1509544638.55119 | 123405 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| 7ec333e7 | virt | Ubuntu-12.04.5-LTS | if_octets | vnet1 | 1509544646.27108 | 67 | tx | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| cc659a52 | virt | Ubuntu-16.04 | percent | virt_cpu_total | 1509544745.617207 | 0.3 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| cc659a52 | virt | Ubuntu-16.04 | memory | rss | 1509544754.329411 | 4567 | value | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ +| cc659a52 | virt | Ubuntu-16.04 | if_octets | vnet0 | 1509544760.720381 | 0 | rx | 10 | ++-----------+-----------+--------------------+-----------+----------------+-------------------+--------+---------+----------+ + +It's possible from YAML configuration file to refer to any field of any row of +the table via special YAML tags like ``ValueItem`` or ``ArrayItem``. See the +`Collectd metric reference`_ reference for more details. + +.. note:: The `collectd data types file`_ contains map of ``type`` to + ``ds_name`` field. It can be used to get possible value for ``ds_name`` + field. See the `collectd data types description`_ for more details on + collectd data types. + + +Aging of collectd metric +~~~~~~~~~~~~~~~~~~~~~~~~ + +If the metric will not be updated by the collectd during the double metric +interval time, it will be removed (aged) from VES internal cache. + + +VES YAML references +------------------- + +There are four type of references supported by the YAML format: System, +Config, Collectd metric and Collectd notification. The format of the reference +is the following: + +.. code:: yaml + + "{.}" + +.. note:: Possible values for ```` and ```` are + described in farther sections. + + +System reference +~~~~~~~~~~~~~~~~ + +This reference is used to get system statistics like time, date etc. The system +reference (```` = ``system``) can be used in any place of the YAML +configuration file. This type of reference provides the following attributes: + +``hostname`` + The name of the host where VES application is running. + +``id`` + Unique ID during VES application runtime. + +``time`` + Current time in seconds since the Epoch. For example ``1509641411.631951``. + +``date`` + Current date in ISO 8601 format, ``YYYY-MM-DD``. For instance ``2017-11-02``. + + +For example: + +.. code:: yaml + + Date: "{system.date}" + + +Config reference +~~~~~~~~~~~~~~~~ + +This reference is used to get VES configuration described in `VES application +configuration description`_ sectoin. The reference (```` = ``config``) +can be used in any place of the YAML configuration file. This type of reference +provides the following attributes: + +``interval`` + Measurements dispatch interval. It referenses to ``SendEventInterval`` + configuration of the VES application. + + +For example: + +.. code:: yaml + + Interval: "{config.interval}" + + +Collectd metric reference +~~~~~~~~~~~~~~~~~~~~~~~~~ + +This reference is used to get the attribute value of collectd metric from the +VES cache. The reference (```` = ``vl``) can be used ONLY inside +``Measurements``, ``ValueItem`` and ``ArrayItem`` tags. Using the reference +inside a helper tag is also allowed if the helper tag is located inside the +tag where the reference is allowed (e.g.: ``ArrayItem``). The +```` name corresponds to the table field name described in +`Collectd metrics in VES`_ section. For example: + +.. code:: yaml + + name: "{vl.type}-{vl.type_instance}" + + +Collectd notification reference +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This reference is used to get the attribute value of received collectd +notification. The reference (```` = ``n``) can be used ONLY inside +``Events`` tag. Using the reference inside a helper tag is also allowed if +the helper tag is located inside the ``Events`` tag. This type of reference +provides the following attributes: + +``host`` + The hostname of received collectd notification. + +``plugin`` + The plugin name of received collectd notification. + +``plugin_instance`` + The plugin instance of the received collectd notification. + +``type`` + The type name of the received collectd notification. + +``type_instance`` + The type instance of the received collectd notification. + +``severity`` + The severity of the received collectd notification. + +``message`` + The message of the received collectd notification. + + +.. note:: The exact value for each attribute depends on the collectd plugin + which may generate the notification. Please refer to the + `collectd plugin description`_ document to get more details on the specific + collectd plugin. + +YAML config example: + +.. code:: yaml + + sourceId: "{n.plugin_instance}" + + +Collectd metric mapping YAML tags +--------------------------------- + +This section describes the YAML tags used to map collectd metric values in the +YAML configuration file. + + +Measurements tag +~~~~~~~~~~~~~~~~ + +This tag is a YAML map which is used to define the VES measurement message. It's +allowed to be used multiple times in the document (e.g.: you can define multiple +VES messages in one YAML document). This tag works in the same way as `ArrayItem +tag`_ does and all keys have the same description/rules. + + +ValueItem tag +~~~~~~~~~~~~~ + +This tag is used to select a collectd metric and get its attribute value using +`Collectd metric reference`_. The type of this tag is a YAML array of maps with +the possible keys described below. + +``SELECT`` (required) + Is a YAML map which describes the select metric criteria. Each key name of the + map must correspond to the table field name described in `Collectd metrics in VES`_ + section. + +``VALUE`` (optional) + Describes the value to be assigned. If not provided, the default + ``!Number "{vl.value}"`` expression is used. + +``DEFAULT`` (optional) + Describes the default value which will be assigned if no metric is selected + by ``SELECT`` criteria. + + +ValueItem tag description example: + +.. code:: yaml + + memoryFree: !ValueItem + - SELECT: + plugin: memory + type: memory + type_instance: rss + - VALUE: !Bytes2Kibibytes "{vl.value}" + - DEFAULT: 0 + +The tag process workflow is described on the figure below. + +.. figure:: value-item-parse-workflow.png + + YAML ValueItem tag process workflow + + +ArrayItem tag +~~~~~~~~~~~~~ + +This tag is used to select a list of collectd metrics and generate a YAML array +of YAML items described by ``ITEM-DESC`` key. If no collectd metrics are +selected by the given criteria, the empty array will be returned. + +``SELECT`` (optional) + Is a YAML map which describes the select metrics criteria. Each key name of + the map must correspond to the table field name described in `Collectd + metrics in VES`_ section. The value of the key may be regular expression. To + enable regular expression in the value, the YAML string containing ``/`` char + at the beginning and at the end should be used. For example: + + .. code:: yaml + + plugin: "/^(?!virt).*$/" # selected all metrics except ``virt`` plugin + + The VES application uses the python RE library to work with regular + expression specified in the YAML configuration. Please refer to `python + regular expression syntax`_ documentation for more details on a syntax + used by the VES. + + Multiple ``SELECT`` keys are allowed by the tag. If nor ``SELECT`` or + ``INDEX-KEY`` key is specified, the VES error is generated. + +``INDEX-KEY`` (optional) + Is a YAML array which describes the unique fields to be selected by the tag. + Each element of array is a YAML string which should be one of the table field + name described in `Collectd metrics in VES`_ section. Please note, if this + key is used, only fields specified by the key can be used as a collectd + reference in the ``ITEM-DESC`` key. + +``ITEM-DESC`` (required) + Is a YAML map which describes each element of the YAML array generated by + the tag. Using ``ArrayItem`` tags and other `Helper YAML tags`_ are also + allowed in the definition of the key. + +In the example below, the ArrayItem tag is used to generate an array of +``ITEM-DESC`` items for each collectd metrics except ``virt`` plugin with +unique ``plugin``, ``plugin_instance`` attribute values. + +.. code:: yaml + + Measurements: !ArrayItem + - SELECT: + plugin: "/^(?!virt).*$/" + - INDEX-KEY: + - plugin + - plugin_instance + - ITEM-DESC: + name: !StripExtraDash "{vl.plugin}-{vl.plugin_instance}" + +The tag process workflow is described on the figure below. + +.. figure:: array-item-parse-workflow.png + + YAML ArrayItem tag process workflow + + +Collectd event mapping YAML tags +-------------------------------- + +This section describes the YAML tags used to map the collectd notification to +the VES event message in the YAML configuration file. + + +Events tag +~~~~~~~~~~ + +This tag is a YAML map which is used to define the VES event message. It's +allowed to be used multiple times in the document (e.g.: you can map multiple +collectd notification into VES message in one YAML document). The possible +keys of the tag are described below. + +``CONDITION`` (optional) + Is a YAML map which describes the select metric criteria. Each key name of + the map must correspond to the name of attribute provided by `Collectd + notification reference`_. If no such key provided, any collectd notification + will map the defined YAML message. + +``ITEM-DESC`` (required) + Is a YAML map which describes the message generated by this tag. Only `Helper + YAML tags`_ are allowed in the definition of the key. + +The example of the VES event message which will be generate by the VES +application when collectd notification of the ``virt`` plugin is triggered +is described below. + +.. code:: yaml + + --- + Virt Event: !Events + - ITEM-DESC: + event: + commonEventHeader: + domain: fault + eventType: Notification + sourceId: &event_sourceId "{n.plugin_instance}" + sourceName: *event_sourceId + lastEpochMicrosec: !Number "{n.time}" + startEpochMicrosec: !Number "{n.time}" + faultFields: + alarmInterfaceA: !StripExtraDash "{n.plugin}-{n.plugin_instance}" + alarmCondition: "{n.severity}" + faultFieldsVersion: 1.1 + - CONDITION: + plugin: virt + + +Helper YAML tags +---------------- + +This section describes the YAML tags used as utilities for formatting the output +message. The YAML configuration process workflow is described on the figure +below. + +.. figure:: parse-work-flow.png + + YAML configuration process workflow + + +Convert string to number tag +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``!Number`` tag is used in YAML configuration file to convert string value into +the number type. For instance: + +.. code:: yaml + + lastEpochMicrosec: !Number "3456" + +The output of the tag will be the JSON number. + +.. code:: json + + { + lastEpochMicrosec: 3456 + } + + +Convert bytes to Kibibytes tag +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``!Bytes2Kibibytes`` tag is used in YAML configuration file to convert +bytes into kibibytes (1 kibibyte = 1024 bytes). For instance: + +.. code:: yaml + + memoryConfigured: !Bytes2Kibibytes 4098 + memoryConfigured: !Bytes2Kibibytes "1024" + +The output of the tag will be the JSON number. + +.. code:: json + + { + memoryConfigured: 4 + memoryConfigured: 1 + } + + +Convert one value to another tag +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``!MapValue`` tag is used in YAML configuration file to map one value +into another value defined in the configuration. For instance: + +.. code:: yaml + + Severity: !MapValue + VALUE: Failure + TO: + Failure: Critical + Error: Warnign + +The output of the tag will be the mapped value. + +.. code:: json + + { + Severity: Critical + } + + +Strip extra dash tag +~~~~~~~~~~~~~~~~~~~~ + +The ``!StripExtraDash`` tag is used in YAML configuration file to strip extra +dashes in the string (dashes at the beginning, at the end and double dashes). +For example: + +.. code:: yaml + + name: !StripExtraDash string-with--extra-dashes- + +The output of the tag will be the JSON string with extra dashes removed. + +.. code:: json + + { + name: string-with-extra-dashes + } + + +Limitations +----------- + +#. Only one document can be defined in the same YAML configuration file. + +#. The collectd notification is not supported by `Kafka collectd plugin`_. Due to + this limitation, the collectd notifications cannot be received by the VES + application and the defined YAML event will not be generated and sent to the + VES collector. Please note, that VES YAML format already supports the events + definition and the format is descibed in the document. + -The VES application already supports YAML notification definitions but due to -the collectd Kafka plugin limitations, collectd notifications cannot be received -by the VES application. Thus, the VES notification (defined by YAML) will not be -generated and sent to VES collector. +.. _collectd: http://collectd.org/ +.. _Kafka: https://kafka.apache.org/ +.. _`VES`: https://wiki.opnfv.org/display/fastpath/VES+plugin+updates +.. _`VES shema definition`: https://gerrit.onap.org/r/gitweb?p=demo.git;a=tree;f=vnfs/VES5.0/evel/evel-test-collector/docs/att_interface_definition;hb=refs/heads/master +.. _`PyYAML documentation`: https://pyyaml.org/wiki/PyYAMLDocumentation +.. _`collectd plugin description`: https://github.com/collectd/collectd/blob/master/src/collectd.conf.pod +.. _`collectd data types file`: https://github.com/collectd/collectd/blob/master/src/types.db +.. _`collectd data types description`: https://github.com/collectd/collectd/blob/master/src/types.db.pod +.. _`python regular expression syntax`: https://docs.python.org/2/library/re.html#regular-expression-syntax +.. _`Kafka collectd plugin`: https://collectd.org/wiki/index.php/Plugin:Write_Kafka diff --git a/docs/release/userguide/parse-work-flow.png b/docs/release/userguide/parse-work-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..59cb70a86a4bf606c0fcd433e23967ea398f5966 GIT binary patch literal 3949 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 H=o~f#9nvK&rF0`O2ugQ1NP{$z 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 fBc(MCFGvstfDe<>Uk&8U6IYDY% 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

5@sd24IU8 zcF7JX>pB0c_pguUXzeF`jMWvzt}2StV+1>y1)r{|=Hm({!>r+3su}0AISmI9P8D94 zEr+=}igSJM_Q?#xmC}dE**2*=$}H`cU}?&9ln+j-85Eh{3%=JB^XJb* zQAa=qLn6EAtG?GE(m}#h^4*UphQOH2uB4XctA!K|by)PMYL6a33iifz+Z#_AFlJ3W8^Mp>_n}5$W(m??7-A= z&)GJ?pK$h#pyxt;2qyQw^Y^r$A{=jj39w3tH5ecb_shF7gCjhXfiL0BJs&MVZN6-fEN1Y@@t6yp41Fdsg5KHyL@lnKXSo|DIPCN)omroB&m^?Z4`e}iU@-uHmm$O{X zT!TgR&CYp?n*!qVk5u@OLXOR`?tN;q(Jyl%?+#TK7KsPQ_w<7yVQpafS{ki&_jSn& zJUbmQEt)R4htwh7;})z>acb!@-IN-cgvYB-09$?O$uaxPjo;E{ z9m72ID(!i^>ZX78^$^2o+>$KqXOD3vj;l^#E%445^su#v=$qNJ5A^7zR98iad9*l+ z(TCF|yuNkbw6_KJ?I9V6Jc=e(08O?E2Bd*IZEigbi@(RBmMAXJS(;qyR;JQR{UM!I zgTc}BMZq*Be){>)>eUVZeuQ7v&LYeHqU8J+!TMl)xTK>GL;pyJWUNe}sR=$Rr~jvJ=*`$CgbG^vZ6?39oIF1x**!f;ex3Gt_d-_3;&u=rw}E#ij>0W933TJG~XP% zKFZ>zNm+as1nSMn9~5eQYXr1I35mYp;p?94QD@�SU|#`R?|E!yGv0TIktmqPxz> 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 literal 0 HcmV?d00001 -- 2.16.6