From c79b21c7762a4b586822a1af3819c06b984a5c72 Mon Sep 17 00:00:00 2001 From: Gordon Kelly Date: Mon, 8 Jan 2018 14:54:45 +0000 Subject: [PATCH] docs: update ves documentation and add steps to run on baremetal nodes Change-Id: I0dad9b8eee5b9cfcce8999d6ffe66fb32e9a382c Signed-off-by: gordonkelly --- docs/release/userguide/collectd-ves-guest.conf | 15 +- docs/release/userguide/collectd-ves-host.conf | 22 +-- .../release/userguide/collectd-ves-hypervisor.conf | 26 +++ docs/release/userguide/collectd.ves.userguide.rst | 216 ++++++++++++++------- docs/release/userguide/ves-app-host-mode.png | Bin 8057 -> 21203 bytes docs/release/userguide/ves-app-hypervisor-mode.png | Bin 0 -> 8057 bytes 6 files changed, 182 insertions(+), 97 deletions(-) create mode 100644 docs/release/userguide/collectd-ves-hypervisor.conf create mode 100644 docs/release/userguide/ves-app-hypervisor-mode.png diff --git a/docs/release/userguide/collectd-ves-guest.conf b/docs/release/userguide/collectd-ves-guest.conf index 2ed814d5..80d2546f 100644 --- a/docs/release/userguide/collectd-ves-guest.conf +++ b/docs/release/userguide/collectd-ves-guest.conf @@ -1,4 +1,11 @@ LoadPlugin logfile +LoadPlugin interface +LoadPlugin memory +LoadPlugin load +LoadPlugin disk +LoadPlugin uuid +LoadPlugin write_kafka + LogLevel info File "/opt/collectd/var/log/collectd.log" @@ -6,20 +13,12 @@ LoadPlugin logfile PrintSeverity false -LoadPlugin cpu ReportByCpu true ReportByState true ValuesPercentage true -LoadPlugin interface -LoadPlugin memory -LoadPlugin load -LoadPlugin disk -LoadPlugin uuid - -LoadPlugin write_kafka Property "metadata.broker.list" "localhost:9092" diff --git a/docs/release/userguide/collectd-ves-host.conf b/docs/release/userguide/collectd-ves-host.conf index 76706b5c..1a03e4e0 100644 --- a/docs/release/userguide/collectd-ves-host.conf +++ b/docs/release/userguide/collectd-ves-host.conf @@ -1,20 +1,12 @@ -LoadPlugin logfile - - LogLevel info - File "/opt/collectd/var/log/collectd.log" - Timestamp true - PrintSeverity false - +LoadPlugin interface +LoadPlugin memory +LoadPlugin disk LoadPlugin cpu - -LoadPlugin virt - - Connection "qemu:///system" - RefreshInterval 60 - HostnameFormat uuid - PluginInstanceFormat name - ExtraStats "cpu_util" + + ReportByCpu true + ReportByState true + ValuesPercentage true LoadPlugin write_kafka diff --git a/docs/release/userguide/collectd-ves-hypervisor.conf b/docs/release/userguide/collectd-ves-hypervisor.conf new file mode 100644 index 00000000..301b0a4d --- /dev/null +++ b/docs/release/userguide/collectd-ves-hypervisor.conf @@ -0,0 +1,26 @@ +LoadPlugin logfile +LoadPlugin cpu +LoadPlugin virt +LoadPlugin write_kafka + + + LogLevel info + File "/opt/collectd/var/log/collectd.log" + Timestamp true + PrintSeverity false + + + + Connection "qemu:///system" + RefreshInterval 60 + HostnameFormat uuid + PluginInstanceFormat name + ExtraStats "cpu_util" + + + + Property "metadata.broker.list" "localhost:9092" + + Format JSON + + diff --git a/docs/release/userguide/collectd.ves.userguide.rst b/docs/release/userguide/collectd.ves.userguide.rst index ea32ceb1..8b666114 100644 --- a/docs/release/userguide/collectd.ves.userguide.rst +++ b/docs/release/userguide/collectd.ves.userguide.rst @@ -8,16 +8,26 @@ VES Application User Guide 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 +normalizes the metric data into the VES message format and sends it into the VES collector. The application currently supports pushing platform relevant metrics through the additional measurements field for VES. Collectd has a ``write_kafka`` plugin that sends collectd metrics and values to -a Kafka Broker. The VES application uses Kafka Consumer to receive metrics -from the Kafka Broker. +a Kafka Broker. The VES message formatting application, ves_app.py, receives metrics from +the Kafka broker, normalises the data to VES message format for forwarding to VES collector. +The VES message formatting application will be simply referred to as the "VES application" +within this userguide +The VES application can be run in host mode (baremetal), hypervisor mode (on a host with a hypervisor +and VMs running) or guest mode(within a VM). The main software blocks that are required to run the +VES application demo are: + + 1. Kafka + 2. Collectd + 3. VES Application + 4. VES Collector Install Kafka Broker -------------------- @@ -85,13 +95,13 @@ Install Kafka Broker .. code:: bash $ sudo pip install kafka-python - $ wget "https://archive.apache.org/dist/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz" - $ tar -xvzf kafka_2.11-0.11.0.0.tgz - $ sed -i -- 's/#delete.topic.enable=true/delete.topic.enable=true/' kafka_2.11-0.11.0.0/config/server.properties - $ sudo nohup kafka_2.11-0.11.0.0/bin/kafka-server-start.sh \ - kafka_2.11-0.11.0.0/config/server.properties > kafka_2.11-0.11.0.0/kafka.log 2>&1 & + $ wget "https://archive.apache.org/dist/kafka/1.0.0/kafka_2.11-1.0.0.tgz" + $ tar -xvzf kafka_2.11-1.0.0.tgz + $ sed -i -- 's/#delete.topic.enable=true/delete.topic.enable=true/' kafka_2.11-1.0.0/config/server.properties + $ sudo nohup kafka_2.11-1.0.0/bin/kafka-server-start.sh \ + kafka_2.11-1.0.0/config/server.properties > kafka_2.11-1.0.0/kafka.log 2>&1 & - .. note:: If Kafka server fails to start, please check if the system IP + .. note:: If Kafka server fails to start, please check if the platform IP address is associated with the hostname in the static host lookup table. If it doesn't exist, use the following command to add it. @@ -108,14 +118,14 @@ Install Kafka Broker .. code:: bash - $ echo "Hello, World" | kafka_2.11-0.11.0.0/bin/kafka-console-producer.sh \ + $ echo "Hello, World" | kafka_2.11-1.0.0/bin/kafka-console-producer.sh \ --broker-list localhost:9092 --topic TopicTest > /dev/null Consumer (Receive "Hello World"): .. code:: bash - $ kafka_2.11-0.11.0.0/bin/kafka-console-consumer.sh --zookeeper \ + $ kafka_2.11-1.0.0/bin/kafka-console-consumer.sh --zookeeper \ localhost:2181 --topic TopicTest --from-beginning --max-messages 1 --timeout-ms 3000 @@ -162,62 +172,112 @@ Build collectd with Kafka support: $ ./configure --with-librdkafka=/usr --without-perl-bindings --enable-perl=no $ make && sudo make install -Configure and start collectd. Create ``/opt/collectd/etc/collectd.conf`` -collectd configuration file as following: +.. note:: + + If installing from git repository ``collectd.conf`` configuration file will be located in + directory ``/opt/collectd/etc/``. If installing from via a package manager ``collectd.conf`` + configuration file will be located in directory ``/etc/collectd/`` -.. note:: The following collectd configuration file allows user to run VES - application in the guest mode. To run the VES in host mode, please follow - the `Configure VES in host mode`_ steps. +Configure and start collectd. Modify Collectd configuration file ``collectd.conf`` +as following: -.. include:: collectd-ves-guest.conf - :code: bash +- Within a VM: `Setup VES application (guest mode)`_ +- On Host with VMs: `Setup VES application (hypervisor mode)`_ +- No Virtualization: `Setup VES application (host mode)`_ Start collectd process as a service as described in :ref:`install-collectd-as-a-service`. +Setup VES application (guest mode) +---------------------------------- -Setup VES Test Collector ------------------------- +In this mode Collectd runs from within a VM and sends metrics to the VES collector. -.. note:: Test Collector setup is required only for VES application testing - purposes. +.. figure:: ves-app-guest-mode.png + + VES guest mode setup Install dependencies: .. code:: bash - $ sudo pip install jsonschema + $ sudo pip install pyyaml python-kafka -Clone VES Test Collector: +Clone Barometer repo and start the VES application: .. code:: bash - $ git clone https://github.com/att/evel-test-collector.git ~/evel-test-collector + $ git clone https://gerrit.opnfv.org/gerrit/barometer + $ cd barometer/3rd_party/collectd-ves-app/ves_app + $ nohup python ves_app.py --events-schema=guest.yaml --config=ves_app_config.conf > ves_app.stdout.log & -Modify VES Test Collector config file to point to existing log directory and -schema file: -.. code:: bash +Modify Collectd configuration file ``collectd.conf`` as following: - $ sed -i.back 's/^\(log_file[ ]*=[ ]*\).*/\1collector.log/' ~/evel-test-collector/config/collector.conf - $ sed -i.back 's/^\(schema_file[ ]*=.*\)event_format_updated.json$/\1CommonEventFormat.json/' ~/evel-test-collector/config/collector.conf +.. include:: collectd-ves-guest.conf + :code: bash -Start VES Test Collector: -.. code:: bash +Start collectd process as a service as described in :ref:`install-collectd-as-a-service`. - $ cd ~/evel-test-collector/code/collector - $ nohup python ./collector.py --config ../../config/collector.conf > collector.stdout.log & +.. note:: + The above configuration is used for a localhost. The VES application can be + configured to use remote VES collector and remote Kafka server. To do + so, the IP addresses/host names needs to be changed in ``collector.conf`` + and ``ves_app_config.conf`` files accordingly. -Setup VES application (guest mode) ----------------------------------- -This mode is used to collect guest VM statistics provided by collectd -and send those metrics into the VES collector. +Setup VES application (hypervisor mode) +---------------------------------------- -.. figure:: ves-app-guest-mode.png +This mode is used to collect hypervisor statistics about guest VMs and to send +those metrics into the VES collector. Also, this mode collects host statistics +and send them as part of the guest VES message. - VES guest mode setup +.. figure:: ves-app-hypervisor-mode.png + + VES hypervisor mode setup + +Running the VES in hypervisor mode looks like steps described in +`Setup VES application (guest mode)`_ but with the following exceptions: + +- The ``hypervisor.yaml`` configuration file should be used instead of ``guest.yaml`` + file when VES application is running. + +- Collectd should be running on hypervisor machine only. + +- Addition ``libvirtd`` dependencies needs to be installed on where + collectd daemon is running. To install those dependencies, see :ref:`virt-plugin` + section of Barometer user guide. + +- The next (minimum) configuration needs to be provided to collectd to be able + to generate the VES message to VES collector. + +.. note:: + At least one VM instance should be up and running by hypervisor on the host. + +.. include:: collectd-ves-hypervisor.conf + :code: bash + + +Start collectd process as a service as described in :ref:`install-collectd-as-a-service`. + +.. note:: + + The above configuration is used for a localhost. The VES application can be + configured to use remote VES collector and remote Kafka server. To do + so, the IP addresses/host names needs to be changed in ``collector.conf`` + and ``ves_app_config.conf`` files accordingly. + + +.. note:: The list of the plugins can be extented depends on your needs. + + +Setup VES application (host mode) +---------------------------------- + +This mode is used to collect platform wide metrics and to send those metrics into the VES collector. +It is most suitable for running within a baremetal platform. Install dependencies: @@ -229,58 +289,66 @@ Clone Barometer repo and start the VES application: .. code:: bash - $ git clone https://gerrit.opnfv.org/gerrit/barometer ~/barometer - $ cd ~/barometer/3rd_party/collectd-ves-app/ves_app - $ nohup python ves_app.py --events-schema=guest.yaml --config=ves_app_config.conf > ves_app.stdout.log & + $ git clone https://gerrit.opnfv.org/gerrit/barometer + $ cd barometer/3rd_party/collectd-ves-app/ves_app + $ nohup python ves_app.py --events-schema=host.yaml --config=ves_app_config.conf > ves_app.stdout.log & + + +.. figure:: ves-app-host-mode.png + + VES Native mode setup + +Modify collectd configuration file ``collectd.conf`` as following: + +.. include:: collectd-ves-host.conf + :code: bash + +Start collectd process as a service as described in :ref:`install-collectd-as-a-service`. .. note:: The above configuration is used for a localhost. The VES application can be - configured to use remote real VES collector and remote Kafka server. To do + configured to use remote VES collector and remote Kafka server. To do so, the IP addresses/host names needs to be changed in ``collector.conf`` and ``ves_app_config.conf`` files accordingly. -Configure VES in host mode --------------------------- +.. note:: The list of the plugins can be extented depends on your needs. -This mode is used to collect hypervisor statistics about guest VMs and to send -those metrics into the VES collector. Also, this mode collects host statistics -and send them as part of the guest VES message. -.. figure:: ves-app-host-mode.png - VES host mode setup +Setup VES Test Collector +------------------------ -Running the VES in host mode looks like steps described in -`Setup VES application (guest mode)`_ but with the following exceptions: +.. note:: Test Collector setup is required only for VES application testing + purposes. -- The ``host.yaml`` configuration file should be used instead of ``guest.yaml`` - file when VES application is running. +Install dependencies: -- Collectd should be running on host machine only. +.. code:: bash -- Addition ``libvirtd`` dependencies needs to be installed on a host where - collectd daemon is running. To install those dependencies, see :ref:`virt-plugin` - section of Barometer user guide. + $ sudo pip install jsonschema -- At least one VM instance should be up and running by hypervisor on the host. +Clone VES Test Collector: -- The next (minimum) configuration needs to be provided to collectd to be able - to generate the VES message to VES collector. +.. code:: bash + + $ git clone https://github.com/att/evel-test-collector.git ~/evel-test-collector - .. include:: collectd-ves-host.conf - :code: bash +Modify VES Test Collector config file to point to existing log directory and +schema file: + +.. code:: bash - to apply this configuration, the ``/opt/collectd/etc/collectd.conf`` file - needs to be modified based on example above and collectd daemon needs to - be restarted using the command below: + $ sed -i.back 's/^\(log_file[ ]*=[ ]*\).*/\1collector.log/' ~/evel-test-collector/config/collector.conf + $ sed -i.back 's/^\(schema_file[ ]*=.*\)event_format_updated.json$/\1CommonEventFormat.json/' ~/evel-test-collector/config/collector.conf - .. code:: bash +Start VES Test Collector: - $ sudo systemctl restart collectd +.. code:: bash -.. note:: The list of the plugins can be extented depends on your needs. + $ cd ~/evel-test-collector/code/collector + $ nohup python ./collector.py --config ../../config/collector.conf > collector.stdout.log & VES application configuration description @@ -299,7 +367,7 @@ REST resources are of the form:: {ServerRoot}/eventListener/v{apiVersion}/eventBatch` Within the VES directory (``3rd_party/collectd-ves-app/ves_app``) there is a -configuration file called ``ves_app.conf``. The description of the +configuration file called ``ves_app_conf.conf``. The description of the configuration options are described below: **Domain** *"host"* @@ -310,10 +378,10 @@ configuration options are described below: VES port (default: ``30000``) **Path** *"path"* - Used as the "optionalRoutingPath" element in the REST path (default: empty) + Used as the "optionalRoutingPath" element in the REST path (default: ``vendor_event_listener``) **Topic** *"path"* - Used as the "topicName" element in the REST path (default: empty) + Used as the "topicName" element in the REST path (default: ``example_vnf``) **UseHttps** *true|false* Allow application to use HTTPS instead of HTTP (default: ``false``) @@ -329,7 +397,7 @@ configuration options are described below: Vendor Event Listener (default: ``20``) **ApiVersion** *version* - Used as the "apiVersion" element in the REST path (default: ``5.1``) + Used as the "apiVersion" element in the REST path (default: ``3``) **KafkaPort** *port* Kafka Port (Default ``9092``) diff --git a/docs/release/userguide/ves-app-host-mode.png b/docs/release/userguide/ves-app-host-mode.png index 5a58787c1ec734b5c8393d20bb284a091cc8b05b..5a21d3a838432a8e725d6cc150a5b843a9357e2e 100644 GIT binary patch literal 21203 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 literal 8057 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 bz|&LEJ(D}WRXbD_fL_YCHRMZV&4d39g&SOo diff --git a/docs/release/userguide/ves-app-hypervisor-mode.png b/docs/release/userguide/ves-app-hypervisor-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..5a58787c1ec734b5c8393d20bb284a091cc8b05b GIT binary patch literal 8057 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 bz|&LEJ(D}WRXbD_fL_YCHRMZV&4d39g&SOo literal 0 HcmV?d00001 -- 2.16.6