docker.userguide: Fix instruction for installing ansible
[barometer.git] / docs / release / userguide / docker.userguide.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. (c) <optionally add copywriters name>
4 .. _barometer-docker-userguide:
5
6 ===================================
7 OPNFV Barometer Docker User Guide
8 ===================================
9
10 .. contents::
11    :depth: 3
12    :local:
13
14 The intention of this user guide is to outline how to install and test the Barometer project's
15 docker images. The `OPNFV docker hub <https://hub.docker.com/u/opnfv/?page=1>`_ contains 5 docker
16 images from the Barometer project:
17
18  1. `Collectd docker image <https://hub.docker.com/r/opnfv/barometer-collectd/>`_
19  2. `Influxdb docker image <https://hub.docker.com/r/opnfv/barometer-influxdb/>`_
20  3. `Grafana docker image <https://hub.docker.com/r/opnfv/barometer-grafana/>`_
21  4. `Kafka docker image <https://hub.docker.com/r/opnfv/barometer-kafka/>`_
22  5. `VES application docker image <https://hub.docker.com/r/opnfv/barometer-ves/>`_
23
24 For description of images please see section `Barometer Docker Images Description`_
25
26 For steps to build and run Collectd image please see section `Build and Run Collectd Docker Image`_
27
28 For steps to build and run InfluxDB and Grafana images please see section `Build and Run InfluxDB and Grafana Docker Images`_
29
30 For steps to build and run VES and Kafka images please see section `Build and Run VES and Kafka Docker Images`_
31
32 For overview of running VES application with Kafka please see the :ref:`VES Application User Guide <barometer-ves-userguide>`
33
34 Barometer Docker Images Description
35 -----------------------------------
36
37 .. Describe the specific features and how it is realised in the scenario in a brief manner
38 .. to ensure the user understand the context for the user guide instructions to follow.
39
40 Barometer Collectd Image
41 ^^^^^^^^^^^^^^^^^^^^^^^^
42 The barometer collectd docker image gives you a collectd installation that includes all
43 the barometer plugins.
44
45 .. note::
46    The Dockerfile is available in the docker/barometer-collectd directory in the barometer repo.
47    The Dockerfile builds a CentOS 7 docker image.
48    The container MUST be run as a privileged container.
49
50 Collectd is a daemon which collects system performance statistics periodically
51 and provides a variety of mechanisms to publish the collected metrics. It
52 supports more than 90 different input and output plugins. Input plugins
53 retrieve metrics and publish them to the collectd deamon, while output plugins
54 publish the data they receive to an end point. Collectd also has infrastructure
55 to support thresholding and notification.
56
57 Collectd docker image has enabled the following collectd plugins (in addition
58 to the standard collectd plugins):
59
60 * hugepages plugin
61 * Open vSwitch events Plugin
62 * Open vSwitch stats Plugin
63 * mcelog plugin
64 * PMU plugin
65 * RDT plugin
66 * virt
67 * SNMP Agent
68 * Kafka_write plugin
69
70 Plugins and third party applications in Barometer repository that will be available in the
71 docker image:
72
73 * Open vSwitch PMD stats
74 * ONAP VES application
75 * gnocchi plugin
76 * aodh plugin
77 * Legacy/IPMI
78
79 InfluxDB + Grafana Docker Images
80 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
81
82 The Barometer project's InfluxDB and Grafana docker images are 2 docker images that database and graph
83 statistics reported by the Barometer collectd docker. InfluxDB is an open-source time series database
84 tool which stores the data from collectd for future analysis via Grafana, which is a open-source
85 metrics anlytics and visualisation suite which can be accessed through any browser.
86
87 VES + Kafka Docker Images
88 ^^^^^^^^^^^^^^^^^^^^^^^^^
89
90 The Barometer project's VES application and Kafka docker images are based on a CentOS 7 image. Kafka
91 docker image has a dependancy on `Zookeeper <https://zookeeper.apache.org/>`_. Kafka must be able to
92 connect and register with an instance of Zookeeper that is either running on local or remote host.
93 Kafka recieves and stores metrics recieved from Collectd. VES application pulls latest metrics from Kafka
94 which it normalizes into VES format for sending to a VES collector. Please see details in 
95 :ref:`VES Application User Guide <barometer-ves-userguide>`
96
97 One Click Install with Ansible
98 ------------------------------
99
100 Proxy for package manager on host
101 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
102 .. note::
103    This step has to be performed only if host is behind HTTP/HTTPS proxy
104
105 Proxy URL have to be set in dedicated config file
106
107 1. CentOS - /etc/yum.conf
108
109 .. code:: bash
110
111     proxy=http://your.proxy.domain:1234
112
113 2. Ubuntu - /etc/apt/apt.conf
114
115 .. code:: bash
116
117     Acquire::http::Proxy "http://your.proxy.domain:1234"
118
119 After update of config file, apt mirrors have to be updated via 'apt-get update'
120
121 .. code:: bash
122
123     $ sudo apt-get update
124
125 Proxy environment variables(for docker and pip)
126 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
127 .. note::
128    This step has to be performed only if host is behind HTTP/HTTPS proxy
129
130 Configuring proxy for packaging system is not enough, also some proxy
131 environment variables have to be set in the system before ansible scripts
132 can be started.
133 Barometer configures docker proxy automatically via ansible task as a part
134 of 'one click install' process - user only has to provide proxy URL using common
135 shell environment variables and ansible will automatically configure proxies
136 for docker(to be able to fetch barometer images). Another component used by
137 ansible (e.g. pip is used for downloading python dependencies) will also benefit
138 from setting proxy variables properly in the system.
139
140 Proxy variables used by ansible One Click Install:
141    * http_proxy
142    * https_proxy
143    * ftp_proxy
144    * no_proxy
145
146 Variables mentioned above have to be visible for superuser (because most
147 actions involving ansible-barometer installation require root privileges).
148 Proxy variables are commonly defined in '/etc/environment' file (but any other
149 place is good as long as variables can be seen by commands using 'su').
150
151 Sample proxy configuration in /etc/environment:
152
153 .. code:: bash
154
155     http_proxy=http://your.proxy.domain:1234
156     https_proxy=http://your.proxy.domain:1234
157     ftp_proxy=http://your.proxy.domain:1234
158     no_proxy=localhost
159
160 Install Ansible
161 ^^^^^^^^^^^^^^^
162 .. note::
163    * sudo permissions or root access are required to install ansible.
164    * ansible version needs to be 2.4+, because usage of import/include statements
165
166 The following steps have been verified with Ansible 2.6.3 on Ubuntu 16.04 and 18.04.
167 To install Ansible 2.6.3 on Ubuntu:
168
169 .. code:: bash
170
171     $ sudo apt-get install python
172     $ sudo apt-get install python-pip
173     $ sudo -H pip install 'ansible==2.6.3'
174
175 The following steps have been verified with Ansible 2.6.3 on Centos 7.5.
176 To install Ansible 2.6.3 on Centos:
177
178 .. code:: bash
179
180     $ sudo yum install python
181     $ sudo yum install epel-release
182     $ sudo yum install python-pip
183     $ sudo -H pip install 'ansible==2.6.3'
184
185 Clone barometer repo
186 ^^^^^^^^^^^^^^^^^^^^
187
188 .. code:: bash
189
190     $ git clone https://gerrit.opnfv.org/gerrit/barometer
191     $ cd barometer/docker/ansible
192
193 Edit inventory file
194 ^^^^^^^^^^^^^^^^^^^
195 Edit inventory file and add hosts: $barometer_dir/docker/ansible/default.inv
196
197 .. code:: bash
198
199     [collectd_hosts]
200     localhost
201
202     [collectd_hosts:vars]
203     install_mcelog=true
204     insert_ipmi_modules=true
205
206     [influxdb_hosts]
207     localhost
208
209     [grafana_hosts]
210     localhost
211
212     [prometheus_hosts]
213     #localhost
214
215     [kafka_hosts]
216     #localhost
217
218     [ves_hosts]
219     #localhost
220
221 Change localhost to different hosts where neccessary.
222 Hosts for influxdb and grafana are required only for collectd_service.yml.
223 Hosts for kafka and ves are required only for collectd_ves.yml.
224
225 To change host for kafka edit kafka_ip_addr in ./roles/config_files/vars/main.yml.
226
227 Additional plugin dependencies
228 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
229
230 By default ansible will try to fulfill dependencies for mcelog and ipmi plugin.
231 For mcelog plugin it installs mcelog daemon. For ipmi it tries to insert ipmi_devintf
232 and ipmi_si kernel modules.
233 This can be changed in inventory file with use of variables install_mcelog
234 and insert_ipmi_modules, both variables are independent:
235
236 .. code:: bash
237
238     [collectd_hosts:vars]
239     install_mcelog=false
240     insert_ipmi_modules=false
241
242 .. note::
243    On Ubuntu 18.04 to use mcelog plugin the user has to install mcelog daemon
244    manually ahead of installing from ansible scripts as the deb package is not
245    available in official Ubuntu 18.04 repo. It means that setting install_mcelog
246    to true is ignored.
247
248 Configure ssh keys
249 ^^^^^^^^^^^^^^^^^^
250
251 Generate ssh keys if not present, otherwise move onto next step.
252
253 .. code:: bash
254
255     $ sudo ssh-keygen
256
257 Copy ssh key to all target hosts. It requires to provide root password.
258 The example is for localhost.
259
260 .. code:: bash
261
262     $ sudo -i
263     $ ssh-copy-id root@localhost
264
265 Verify that key is added and password is not required to connect.
266
267 .. code:: bash
268
269     $ sudo ssh root@localhost
270
271 .. note::
272    Keys should be added to every target host and [localhost] is only used as an
273    example. For multinode installation keys need to be copied for each node:
274    [collectd_hostname], [influxdb_hostname] etc.
275
276 Download and run Collectd+Influxdb+Grafana containers
277 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
278
279 The One Click installation features easy and scalable deployment of Collectd,
280 Influxdb and Grafana containers using Ansible playbook. The following steps goes
281 through more details.
282
283 .. code:: bash
284
285     $ sudo ansible-playbook -i default.inv collectd_service.yml
286
287 Check the three containers are running, the output of docker ps should be similar to:
288
289 .. code:: bash
290
291     $ sudo docker ps
292     CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES
293     a033aeea180d        opnfv/barometer-grafana    "/run.sh"                9 days ago          Up 7 minutes                            bar-grafana
294     1bca2e4562ab        opnfv/barometer-influxdb   "/entrypoint.sh in..."   9 days ago          Up 7 minutes                            bar-influxdb
295     daeeb68ad1d5        opnfv/barometer-collectd   "/run_collectd.sh ..."   9 days ago          Up 7 minutes                            bar-collectd
296
297 To make some changes when a container is running run:
298
299 .. code:: bash
300
301     $ sudo docker exec -ti <CONTAINER ID> /bin/bash
302
303 Connect to <host_ip>:3000 with a browser and log into Grafana: admin/admin.
304 For short introduction please see the:
305 `Grafana guide <http://docs.grafana.org/guides/getting_started/>`_.
306
307 The collectd configuration files can be accessed directly on target system in '/opt/collectd/etc/collectd.conf.d'.
308 It can be used for manual changes or enable/disable plugins. If configuration has been modified it is required to
309 restart collectd:
310
311 .. code:: bash
312
313     $ sudo docker restart bar-collectd
314
315 Download collectd+kafka+ves containers
316 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
317
318 Before running Kafka an instance of zookeeper is required. See `Run Kafka docker image`_ for notes on how to run it.
319 The 'zookeeper_hostname' and 'broker_id' can be set in ./roles/run_kafka/vars/main.yml.
320
321 .. code:: bash
322
323     $ sudo ansible-playbook -i default.inv collectd_ves.yml
324
325 Check the three containers are running, the output of docker ps should be similar to:
326
327 .. code:: bash
328
329     $ sudo docker ps
330     CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                     PORTS               NAMES
331     8b095ad94ea1        zookeeper:3.4.11           "/docker-entrypoin..."   7 minutes ago       Up 7 minutes                                   awesome_jennings
332     eb8bba3c0b76        opnfv/barometer-ves        "./start_ves_app.s..."   21 minutes ago      Up 6 minutes                                   bar-ves
333     86702a96a68c        opnfv/barometer-kafka      "/src/start_kafka.sh"    21 minutes ago      Up 6 minutes                                   bar-kafka
334     daeeb68ad1d5        opnfv/barometer-collectd   "/run_collectd.sh ..."   13 days ago         Up 6 minutes                                   bar-collectd
335
336
337 To make some changes when a container is running run:
338
339 .. code:: bash
340
341     $ sudo docker exec -ti <CONTAINER ID> /bin/bash
342
343 List of default plugins for collectd container
344 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
345
346 By default the collectd is started with default configuration which includes the followin plugins:
347    * csv, contextswitch, cpu, cpufreq, df, disk, ethstat, ipc, irq, load, memory, numa, processes,
348      swap, turbostat, uuid, uptime, exec, hugepages, intel_pmu, ipmi, write_kafka, logfile, mcelog,
349      network, intel_rdt, rrdtool, snmp_agent, syslog, virt, ovs_stats, ovs_events
350
351 Some of the plugins are loaded depending on specific system requirements and can be omitted if
352 dependency is not met, this is the case for:
353    * hugepages, ipmi, mcelog, intel_rdt, virt, ovs_stats, ovs_events
354
355 List and description of tags used in ansible scripts
356 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
357
358 Tags can be used to run a specific part of the configuration without running the whole playbook.
359 To run a specific parts only:
360
361 .. code:: bash
362
363     $ sudo ansible-playbook -i default.inv collectd_service.yml --tags "syslog,cpu,uuid"
364
365 To disable some parts or plugins:
366
367 .. code:: bash
368
369     $ sudo ansible-playbook -i default.inv collectd_service.yml --skip-tags "en_default_all,syslog,cpu,uuid"
370
371 List of available tags:
372
373 install_docker
374   Install docker and required dependencies with package manager.
375
376 add_docker_proxy
377   Configure proxy file for docker service if proxy is set on host environment.
378
379 rm_config_dir
380   Remove collectd config files.
381
382 copy_additional_configs
383   Copy additional configuration files to target system. Path to additional configuration
384   is stored in $barometer_dir/docker/ansible/roles/config_files/vars/main.yml as additional_configs_path.
385
386 en_default_all
387   Set of default read plugins: contextswitch, cpu, cpufreq, df, disk, ethstat, ipc, irq,
388   load, memory, numa, processes, swap, turbostat, uptime.
389
390 plugins tags
391   The following tags can be used to enable/disable plugins: csv, contextswitch, cpu,
392   cpufreq, df, disk, ethstat, ipc, irq, load, memory, numa, processes, swap, turbostat,
393   uptime, exec, hugepages, ipmi, kafka, logfile, mcelogs, network, pmu, rdt, rrdtool,
394   snmp, syslog, virt, ovs_stats, ovs_events, uuid.
395
396 Installing Docker
397 -----------------
398 .. Describe the specific capabilities and usage for <XYZ> feature.
399 .. Provide enough information that a user will be able to operate the feature on a deployed scenario.
400
401 .. note::
402    The below sections provide steps for manual installation and configuration
403    of docker images. They are not neccessary if docker images were installed with
404    use of Ansible-Playbook.
405
406 On Ubuntu
407 ^^^^^^^^^^
408 .. note::
409    * sudo permissions are required to install docker.
410    * These instructions are for Ubuntu 16.10
411
412 To install docker:
413
414 .. code:: bash
415
416     $ sudo apt-get install curl
417     $ sudo curl -fsSL https://get.docker.com/ | sh
418     $ sudo usermod -aG docker <username>
419     $ sudo systemctl status docker
420
421 Replace <username> above with an appropriate user name.
422
423 On CentOS
424 ^^^^^^^^^^
425 .. note::
426    * sudo permissions are required to install docker.
427    * These instructions are for CentOS 7
428
429 To install docker:
430
431 .. code:: bash
432
433     $ sudo yum remove docker docker-common docker-selinux docker-engine
434     $ sudo yum install -y yum-utils  device-mapper-persistent-data  lvm2
435     $ sudo yum-config-manager   --add-repo    https://download.docker.com/linux/centos/docker-ce.repo
436     $ sudo yum-config-manager --enable docker-ce-edge
437     $ sudo yum-config-manager --enable docker-ce-test
438     $ sudo yum install docker-ce
439     $ sudo usermod -aG docker <username>
440     $ sudo systemctl status docker
441
442 Replace <username> above with an appropriate user name.
443
444 .. note::
445    If this is the first time you are installing a package from a recently added
446    repository, you will be prompted to accept the GPG key, and the key’s
447    fingerprint will be shown. Verify that the fingerprint is correct, and if so,
448    accept the key. The fingerprint should match060A 61C5 1B55 8A7F 742B 77AA C52F
449    EB6B 621E 9F35.
450
451         Retrieving key from https://download.docker.com/linux/centos/gpg
452         Importing GPG key 0x621E9F35:
453          Userid     : "Docker Release (CE rpm) <docker@docker.com>"
454          Fingerprint: 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
455          From       : https://download.docker.com/linux/centos/gpg
456         Is this ok [y/N]: y
457
458 Manual proxy configuration for docker
459 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
460
461 .. note::
462    This applies for both CentOS and Ubuntu.
463
464 If you are behind an HTTP or HTTPS proxy server, you will need to add this
465 configuration in the Docker systemd service file.
466
467 1. Create a systemd drop-in directory for the docker service:
468
469 .. code:: bash
470
471    $ sudo mkdir -p /etc/systemd/system/docker.service.d
472
473 2. Create a file
474 called /etc/systemd/system/docker.service.d/http-proxy.conf that adds
475 the HTTP_PROXY environment variable:
476
477 .. code:: bash
478
479    [Service]
480    Environment="HTTP_PROXY=http://proxy.example.com:80/"
481
482 Or, if you are behind an HTTPS proxy server, create a file
483 called /etc/systemd/system/docker.service.d/https-proxy.conf that adds
484 the HTTPS_PROXY environment variable:
485
486 .. code:: bash
487
488     [Service]
489     Environment="HTTPS_PROXY=https://proxy.example.com:443/"
490
491 Or create a single file with all the proxy configurations:
492 /etc/systemd/system/docker.service.d/proxy.conf
493
494 .. code:: bash
495
496     [Service]
497     Environment="HTTP_PROXY=http://proxy.example.com:80/"
498     Environment="HTTPS_PROXY=https://proxy.example.com:443/"
499     Environment="FTP_PROXY=ftp://proxy.example.com:443/"
500     Environment="NO_PROXY=localhost"
501
502 3. Flush changes:
503
504 .. code:: bash
505
506     $ sudo systemctl daemon-reload
507
508 4. Restart Docker:
509
510 .. code:: bash
511
512     $ sudo systemctl restart docker
513
514 5. Check docker environment variables:
515
516 .. code:: bash
517
518     sudo systemctl show --property=Environment docker
519
520 Test docker installation
521 ^^^^^^^^^^^^^^^^^^^^^^^^
522 .. note::
523    This applies for both CentOS and Ubuntu.
524
525 .. code:: bash
526
527    $ sudo docker run hello-world
528
529 The output should be something like:
530
531 .. code:: bash
532
533    Unable to find image 'hello-world:latest' locally
534    latest: Pulling from library/hello-world
535    5b0f327be733: Pull complete
536    Digest: sha256:07d5f7800dfe37b8c2196c7b1c524c33808ce2e0f74e7aa00e603295ca9a0972
537    Status: Downloaded newer image for hello-world:latest
538
539    Hello from Docker!
540    This message shows that your installation appears to be working correctly.
541
542    To generate this message, Docker took the following steps:
543     1. The Docker client contacted the Docker daemon.
544     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
545     3. The Docker daemon created a new container from that image which runs the
546        executable that produces the output you are currently reading.
547     4. The Docker daemon streamed that output to the Docker client, which sent it
548        to your terminal.
549
550 To try something more ambitious, you can run an Ubuntu container with:
551
552 .. code:: bash
553
554     $ docker run -it ubuntu bash
555
556 Build and Run Collectd Docker Image
557 -----------------------------------
558
559 Download the collectd docker image
560 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
561 If you wish to use a pre-built barometer image, you can pull the barometer
562 image from https://hub.docker.com/r/opnfv/barometer-collectd/
563
564 .. code:: bash
565
566     $ docker pull opnfv/barometer-collectd
567
568 Build the collectd docker image
569 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
570
571 .. code:: bash
572
573     $ git clone https://gerrit.opnfv.org/gerrit/barometer
574     $ cd barometer/docker/barometer-collectd
575     $ sudo docker build -t opnfv/barometer-collectd --build-arg http_proxy=`echo $http_proxy` \
576       --build-arg https_proxy=`echo $https_proxy` --network=host -f Dockerfile .
577
578 .. note::
579    Main directory of barometer source code (directory that contains 'docker',
580    'docs', 'src' and systems sub-directories) will be referred as
581    ``<BAROMETER_REPO_DIR>``
582
583
584 .. note::
585    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs to be
586    passed only if system is behind an HTTP or HTTPS proxy server.
587
588 Check the docker images:
589
590 .. code:: bash
591
592    $ sudo docker images
593
594 Output should contain a barometer-collectd image:
595
596 .. code::
597
598    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
599    opnfv/barometer-collectd     latest              05f2a3edd96b        3 hours ago         1.2GB
600    centos                       7                   196e0ce0c9fb        4 weeks ago         197MB
601    centos                       latest              196e0ce0c9fb        4 weeks ago         197MB
602    hello-world                  latest              05a3bd381fc2        4 weeks ago         1.84kB
603
604 Run the collectd docker image
605 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
606 .. code:: bash
607
608    $ cd <BAROMETER_REPO_DIR>
609    $ sudo docker run -ti --net=host -v \
610    `pwd`/src/collectd/collectd_sample_configs:/opt/collectd/etc/collectd.conf.d \
611    -v /var/run:/var/run -v /tmp:/tmp --privileged opnfv/barometer-collectd
612
613 .. note::
614    The docker collectd image contains configuration for all the collectd
615    plugins. In the command above we are overriding
616    /opt/collectd/etc/collectd.conf.d by mounting a host directory
617    src/collectd/collectd_sample_configs that contains only the sample
618    configurations we are interested in running.
619
620    *If some dependencies for plugins listed in configuration directory
621    aren't met, then collectd startup may fail(collectd tries to
622    initialize plugins configurations for all given config files that can
623    be found in shared configs directory and may fail if some dependency
624    is missing).*
625
626    If `DPDK` or `RDT` can't be installed on host, then corresponding config
627    files should be removed from shared configuration directory
628    (`<BAROMETER_REPO_DIR>/src/collectd/collectd_sample_configs/`) prior
629    to starting barometer-collectd container. By example: in case of missing
630    `DPDK` functionality on the host, `dpdkstat.conf` and `dpdkevents.conf`
631    should be removed.
632
633    Sample configurations can be found at:
634    https://github.com/opnfv/barometer/tree/master/src/collectd/collectd_sample_configs
635
636    List of barometer-collectd dependencies on host for various plugins
637    can be found at:
638    https://wiki.opnfv.org/display/fastpath/Barometer-collectd+host+dependencies
639
640 Check your docker image is running
641
642 .. code:: bash
643
644    sudo docker ps
645
646 To make some changes when the container is running run:
647
648 .. code:: bash
649
650    sudo docker exec -ti <CONTAINER ID> /bin/bash
651
652 Build and Run InfluxDB and Grafana docker images
653 ------------------------------------------------
654
655 Overview
656 ^^^^^^^^
657 The barometer-influxdb image is based on the influxdb:1.3.7 image from the influxdb dockerhub. To
658 view detils on the base image please visit
659 `https://hub.docker.com/_/influxdb/  <https://hub.docker.com/_/influxdb/>`_ Page includes details of
660 exposed ports and configurable enviromental variables of the base image.
661
662 The barometer-grafana image is based on grafana:4.6.3 image from the grafana dockerhub. To view
663 details on the base image please visit
664 `https://hub.docker.com/r/grafana/grafana/ <https://hub.docker.com/r/grafana/grafana/>`_ Page
665 includes details on exposed ports and configurable enviromental variables of the base image.
666
667 The barometer-grafana image includes pre-configured source and dashboards to display statistics exposed
668 by the barometer-collectd image. The default datasource is an influxdb database running on localhost
669 but the address of the influxdb server can be modified when launching the image by setting the
670 environmental variables influxdb_host to IP or hostname of host on which influxdb server is running.
671
672 Additional dashboards can be added to barometer-grafana by mapping a volume to /opt/grafana/dashboards.
673 Incase where a folder is mounted to this volume only files included in this folder will be visible
674 inside barometer-grafana. To ensure all default files are also loaded please ensure they are included in
675 volume folder been mounted. Appropriate example are given in section `Run the Grafana docker image`_
676
677 Download the InfluxDB and Grafana docker images
678 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
679 If you wish to use pre-built barometer project's influxdb and grafana images, you can pull the
680 images from https://hub.docker.com/r/opnfv/barometer-influxdb/ and https://hub.docker.com/r/opnfv/barometer-grafana/
681
682 .. note::
683    If your preference is to build images locally please see sections `Build InfluxDB Docker Image`_ and
684    `Build Grafana Docker Image`_
685
686 .. code:: bash
687
688     $ docker pull opnfv/barometer-influxdb
689     $ docker pull opnfv/barometer-grafana
690
691 .. note::
692    If you have pulled the pre-built barometer-influxdb and barometer-grafana images there is no
693    requirement to complete steps outlined in  sections `Build InfluxDB Docker Image`_ and
694    `Build Grafana Docker Image`_ and you can proceed directly to section
695    `Run the Influxdb and Grafana Images`_
696
697 Build InfluxDB docker image
698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
699
700 Build influxdb image from Dockerfile
701
702 .. code:: bash
703
704   $ cd barometer/docker/barometer-influxdb
705   $ sudo docker build -t opnfv/barometer-influxdb --build-arg http_proxy=`echo $http_proxy` \
706     --build-arg https_proxy=`echo $https_proxy` --network=host -f Dockerfile .
707
708 .. note::
709    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs to
710    be passed only if system is behind an HTTP or HTTPS proxy server.
711
712 Check the docker images:
713
714 .. code:: bash
715
716    $ sudo docker images
717
718 Output should contain an influxdb image:
719
720 .. code::
721
722    REPOSITORY                   TAG                 IMAGE ID            CREATED            SIZE
723    opnfv/barometer-influxdb     latest              1e4623a59fe5        3 days ago         191MB
724
725 Build Grafana docker image
726 ^^^^^^^^^^^^^^^^^^^^^^^^^^
727
728 Build Grafana image from Dockerfile
729
730 .. code:: bash
731
732   $ cd barometer/docker/barometer-grafana
733   $ sudo docker build -t opnfv/barometer-grafana --build-arg http_proxy=`echo $http_proxy` \
734     --build-arg https_proxy=`echo $https_proxy` -f Dockerfile .
735
736 .. note::
737    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs to
738    be passed only if system is behind an HTTP or HTTPS proxy server.
739
740 Check the docker images:
741
742 .. code:: bash
743
744    $ sudo docker images
745
746 Output should contain an influxdb image:
747
748 .. code::
749
750    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
751    opnfv/barometer-grafana      latest              05f2a3edd96b        3 hours ago         1.2GB
752
753 Run the Influxdb and Grafana Images
754 -----------------------------------
755
756 Run the InfluxDB docker image
757 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
758 .. code:: bash
759
760    $ sudo docker run -tid -v /var/lib/influxdb:/var/lib/influxdb --net=host\
761     --name bar-influxdb opnfv/barometer-influxdb
762
763 Check your docker image is running
764
765 .. code:: bash
766
767    sudo docker ps
768
769 To make some changes when the container is running run:
770
771 .. code:: bash
772
773    sudo docker exec -ti <CONTAINER ID> /bin/bash
774
775 When both collectd and InfluxDB containers are located
776 on the same host, then no additional configuration have to be added and you
777 can proceed directly to `Run the Grafana docker image`_ section.
778
779 Modify collectd to support InfluxDB on another host
780 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
781 If InfluxDB and collectd containers are located on separate hosts, then
782 additional configuration have to be done in ``collectd`` container - it
783 normally sends data using network plugin to 'localhost/127.0.0.1' therefore
784 changing output location is required:
785
786 1. Stop and remove running bar-collectd container (if it is running)
787
788    .. code:: bash
789
790       $ sudo docker ps #to get collectd container name
791       $ sudo docker rm -f <COLLECTD_CONTAINER_NAME>
792
793 2. Go to location where shared collectd config files are stored
794
795    .. code:: bash
796
797       $ cd <BAROMETER_REPO_DIR>
798       $ cd src/collectd/collectd_sample_configs
799
800 3. Edit content of ``network.conf`` file.
801    By default this file looks like that:
802
803    .. code::
804
805       LoadPlugin  network
806       <Plugin network>
807       Server "127.0.0.1" "25826"
808       </Plugin>
809
810    ``127.0.0.1`` string has to be replaced with the IP address of host where
811    InfluxDB container is running (e.g. ``192.168.121.111``). Edit this using your
812    favorite text editor.
813
814 4. Start again collectd container like it is described in
815    `Run the collectd docker image`_ chapter
816
817    .. code:: bash
818
819       $ cd <BAROMETER_REPO_DIR>
820       $ sudo docker run -ti --name bar-collectd --net=host -v \
821       `pwd`/src/collectd/collectd_sample_configs:/opt/collectd/etc/collectd.conf.d \
822       -v /var/run:/var/run -v /tmp:/tmp --privileged opnfv/barometer-collectd
823
824 Now collectd container will be sending data to InfluxDB container located on
825 remote Host pointed by IP configured in step 3.
826
827 Run the Grafana docker image
828 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
829
830 Connecting to an influxdb instance running on local system and adding own custom dashboards
831
832 .. code:: bash
833
834    $ cd <BAROMETER_REPO_DIR>
835    $ sudo docker run -tid -v /var/lib/grafana:/var/lib/grafana \
836      -v ${PWD}/docker/barometer-grafana/dashboards:/opt/grafana/dashboards \
837      --name bar-grafana --net=host opnfv/barometer-grafana
838
839 Connecting to an influxdb instance running on remote system with hostname of someserver and IP address
840 of 192.168.121.111
841
842 .. code:: bash
843
844    $ sudo docker run -tid -v /var/lib/grafana:/var/lib/grafana --net=host -e \
845      influxdb_host=someserver --add-host someserver:192.168.121.111 --name \
846      bar-grafana opnfv/barometer-grafana
847
848 Check your docker image is running
849
850 .. code:: bash
851
852    sudo docker ps
853
854 To make some changes when the container is running run:
855
856 .. code:: bash
857
858    sudo docker exec -ti <CONTAINER ID> /bin/bash
859
860 Connect to <host_ip>:3000 with a browser and log into grafana: admin/admin
861
862 Cleanup of influxdb/grafana configuration
863 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
864
865 When user wants to remove current grafana and influxdb configuration,
866 folowing actions have to be performed
867
868 1. Stop and remove running influxdb and grafana containers
869
870 .. code:: bash
871
872    sudo docker rm -f bar-grafana bar-influxdb
873
874 2. Remove shared influxdb and grafana folders from the Host
875
876 .. code:: bash
877
878    sudo rm -rf /var/lib/grafana
879    sudo rm -rf /var/lib/influxdb
880
881 .. note::
882    Shared folders are storing configuration of grafana and influxdb
883    containers. In case of changing influxdb or grafana configuration
884    (e.g. moving influxdb to another host) it is good to perform cleanup
885    on shared folders to not affect new setup with an old configuration.
886
887 Build and Run VES and Kafka Docker Images
888 ------------------------------------------
889
890 Download VES and Kafka docker images
891 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
892
893 If you wish to use pre-built barometer project's VES and kafka images, you can pull the
894 images from https://hub.docker.com/r/opnfv/barometer-ves/ and  https://hub.docker.com/r/opnfv/barometer-kafka/
895
896 .. note::
897    If your preference is to build images locally please see sections `Build the Kafka Image`_ and
898    `Build VES Image`_
899
900 .. code:: bash
901
902     $ docker pull opnfv/barometer-kafka
903     $ docker pull opnfv/barometer-ves
904
905 .. note::
906    If you have pulled the pre-built images there is no requirement to complete steps outlined
907    in sections `Build Kafka Docker Image`_ and `Build VES Docker Image`_ and you can proceed directly to section
908    `Run Kafka Docker Image`_
909
910 Build Kafka docker image
911 ^^^^^^^^^^^^^^^^^^^^^^^^
912
913 Build Kafka docker image:
914
915 .. code:: bash
916
917     $ cd barometer/docker/barometer-kafka
918     $ sudo docker build -t opnfv/barometer-kafka --build-arg http_proxy=`echo $http_proxy` \
919       --build-arg https_proxy=`echo $https_proxy` -f Dockerfile .
920
921 .. note::
922    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs
923    to be passed only if system is behind an HTTP or HTTPS proxy server.
924
925 Check the docker images:
926
927 .. code:: bash
928
929    $ sudo docker images
930
931 Output should contain a barometer image:
932
933 .. code::
934
935    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
936    opnfv/barometer-kafka     latest              05f2a3edd96b        3 hours ago         1.2GB
937
938 Build VES docker image
939 ^^^^^^^^^^^^^^^^^^^^^^
940
941 Build VES application docker image:
942
943 .. code:: bash
944
945     $ cd barometer/docker/barometer-ves
946     $ sudo docker build -t opnfv/barometer-ves --build-arg http_proxy=`echo $http_proxy` \
947       --build-arg https_proxy=`echo $https_proxy` -f Dockerfile .
948
949 .. note::
950    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs
951    to be passed only if system is behind an HTTP or HTTPS proxy server.
952
953 Check the docker images:
954
955 .. code:: bash
956
957    $ sudo docker images
958
959 Output should contain a barometer image:
960
961 .. code::
962
963    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
964    opnfv/barometer-ves       latest              05f2a3edd96b        3 hours ago         1.2GB
965
966 Run Kafka docker image
967 ^^^^^^^^^^^^^^^^^^^^^^
968
969 .. note::
970    Before running Kafka an instance of Zookeeper must be running for the Kafka broker to register
971    with. Zookeeper can be running locally or on a remote platform. Kafka's broker_id and address of
972    its zookeeper instance can be configured by setting values for environmental variables 'broker_id'
973    and 'zookeeper_node'. In instance where 'broker_id' and/or 'zookeeper_node' is not set the default
974    setting of broker_id=0 and zookeeper_node=localhost is used. In intance where Zookeeper is running
975    on same node as Kafka and there is a one to one relationship between Zookeeper and Kafka, default
976    setting can be used. The docker argument `add-host` adds hostname and IP address to
977    /etc/hosts file in container
978
979 Run zookeeper docker image:
980
981 .. code:: bash
982
983    $ sudo docker run -tid --net=host -p 2181:2181 zookeeper:3.4.11
984
985 Run kafka docker image which connects with a zookeeper instance running on same node with a 1:1 relationship
986
987 .. code:: bash
988
989    $ sudo docker run -tid --net=host -p 9092:9092 opnfv/barometer-kafka
990
991
992 Run kafka docker image which connects with a zookeeper instance running on a node with IP address of
993 192.168.121.111 using broker ID of 1
994
995 .. code:: bash
996
997    $ sudo docker run -tid --net=host -p 9092:9092 --env broker_id=1 --env zookeeper_node=zookeeper --add-host \
998      zookeeper:192.168.121.111 opnfv/barometer-kafka
999
1000 Run VES Application docker image
1001 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1002 .. note::
1003    VES application uses configuration file ves_app_config.conf from directory
1004    barometer/3rd_party/collectd-ves-app/ves_app/config/ and host.yaml file from
1005    barometer/3rd_party/collectd-ves-app/ves_app/yaml/ by default. If you wish to use a custom config
1006    file it should be mounted to mount point /opt/ves/config/ves_app_config.conf. To use an alternative yaml
1007    file from folder barometer/3rd_party/collectd-ves-app/ves_app/yaml the name of the yaml file to use
1008    should be passed as an additional command. If you wish to use a custom file the file should be
1009    mounted to mount point /opt/ves/yaml/ Please see examples below
1010
1011 Run VES docker image with default configuration
1012
1013 .. code:: bash
1014
1015    $ sudo docker run -tid --net=host opnfv/barometer-ves
1016
1017 Run VES docker image with guest.yaml files from barometer/3rd_party/collectd-ves-app/ves_app/yaml/
1018
1019 .. code:: bash
1020
1021    $ sudo docker run -tid --net=host opnfv/barometer-ves guest.yaml
1022
1023
1024 Run VES docker image with using custom config and yaml files. In example below yaml/ folder cotains
1025 file named custom.yaml
1026
1027 .. code:: bash
1028
1029    $ sudo docker run -tid --net=host -v ${PWD}/custom.config:/opt/ves/config/ves_app_config.conf \
1030      -v ${PWD}/yaml/:/opt/ves/yaml/ opnfv/barometer-ves custom.yaml
1031
1032 Run VES Test Collector application
1033 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1034
1035 VES Test Collector application can be used for displaying platform
1036 wide metrics that are collected by barometer-ves container.
1037 Setup instructions are located in: :ref:`Setup VES Test Collector`
1038
1039 Build and Run DMA and Redis Docker Images
1040 -----------------------------------------------------
1041
1042 Download DMA docker images
1043 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1044
1045 If you wish to use pre-built barometer project's DMA images, you can pull the
1046 images from https://hub.docker.com/r/opnfv/barometer-dma/
1047
1048 .. note::
1049    If your preference is to build images locally please see sections `Build DMA Docker Image`_
1050
1051 .. code:: bash
1052
1053     $ docker pull opnfv/barometer-dma
1054
1055 .. note::
1056    If you have pulled the pre-built images there is no requirement to complete steps outlined
1057    in sections `Build DMA Docker Image`_ and you can proceed directly to section
1058    `Run DMA Docker Image`_
1059
1060 Build DMA docker image
1061 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1062
1063 Build DMA docker image:
1064
1065 .. code:: bash
1066
1067     $ cd barometer/docker/barometer-dma
1068     $ sudo docker build -t opnfv/barometer-dma --build-arg http_proxy=`echo $http_proxy` \
1069       --build-arg https_proxy=`echo $https_proxy` -f Dockerfile .
1070
1071 .. note::
1072    In the above mentioned ``docker build`` command, http_proxy & https_proxy arguments needs
1073    to be passed only if system is behind an HTTP or HTTPS proxy server.
1074
1075 Check the docker images:
1076
1077 .. code:: bash
1078
1079    $ sudo docker images
1080
1081 Output should contain a barometer image:
1082
1083 .. code::
1084
1085    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
1086    opnfv/barometer-dma          latest              2f14fbdbd498        3 hours ago         941 MB
1087
1088 Run Redis docker image
1089 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1090
1091 .. note::
1092    Before running DMA, Redis must be running.
1093
1094 Run Redis docker image:
1095
1096 .. code:: bash
1097
1098    $ sudo docker run -tid -p 6379:6379 --name barometer-redis redis
1099
1100 Check your docker image is running
1101
1102 .. code:: bash
1103
1104    sudo docker ps
1105
1106 Run DMA docker image
1107 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1108 .. note::
1109
1110 Run DMA docker image with default configuration
1111
1112 .. code:: bash
1113
1114    $ cd barometer/docker/barometer-dma
1115    $ sudo mkdir /etc/barometer-dma
1116    $ sudo cp ../../src/dma/examples/config.toml /etc/barometer-dma/
1117    $ sudo vi /etc/barometer-dma/config.toml
1118    (edit amqp_password and os_password:OpenStack admin password)
1119
1120    $ sudo su -
1121    (When there is no key for SSH access authentication)
1122    # ssh-keygen
1123    (Press Enter until done)
1124    (Backup if necessary)
1125    # cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys_org
1126    # cat ~/.ssh/authorized_keys_org ~/.ssh/id_rsa.pub \
1127      > ~/.ssh/authorized_keys
1128    # exit
1129
1130    $ sudo docker run -tid --net=host --name server \
1131      -v /etc/barometer-dma:/etc/barometer-dma \
1132      -v /root/.ssh/id_rsa:/root/.ssh/id_rsa \
1133      -v /etc/collectd/collectd.conf.d:/etc/collectd/collectd.conf.d \
1134      opnfv/barometer-dma /server
1135
1136    $ sudo docker run -tid --net=host --name infofetch \
1137      -v /etc/barometer-dma:/etc/barometer-dma \
1138      -v /var/run/libvirt:/var/run/libvirt \
1139      opnfv/barometer-dma /infofetch
1140
1141    (Execute when installing the threshold evaluation binary)
1142    $ sudo docker cp infofetch:/threshold ./
1143    $ sudo ln -s ${PWD}/threshold /usr/local/bin/
1144
1145 References
1146 ^^^^^^^^^^^
1147 .. [1] https://docs.docker.com/engine/admin/systemd/#httphttps-proxy
1148 .. [2] https://docs.docker.com/engine/installation/linux/docker-ce/centos/#install-using-the-repository
1149 .. [3] https://docs.docker.com/engine/userguide/
1150
1151