From 924d68fa30163e1c180ca3b643a0374c39ee029e Mon Sep 17 00:00:00 2001 From: Piotr Misiak Date: Wed, 12 Aug 2015 12:07:46 +0200 Subject: [PATCH] update documentation Change-Id: Ie3d68183d800c611a4232760390744ed7daf195c --- README.md | 6 +++--- doc/content/description.rst | 6 +++--- doc/content/guide.rst | 33 +++++++++++++++++++++------------ doc/content/installation.rst | 9 +++++---- doc/images/settings.png | Bin 12255 -> 12391 bytes 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 07d785c..061c3fa 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Requirements | Requirement | Version/Comment | |:---------------------------------|:----------------| -| Mirantis OpenStack compatibility | 6.1 | -| Zabbix plugin for Fuel | 1.0.0 | +| Mirantis OpenStack compatibility | 7.0 | +| Zabbix plugin for Fuel | 2.0.0 | Installation Guide ================== @@ -48,7 +48,7 @@ To install SNMP trap daemon plugin, follow these steps: # fuel plugins id | name | version | package_version ---|-------------------|---------|---------------- - 1 | zabbix_monitoring | 1.0.0 | 2.0.0 + 1 | zabbix_monitoring | 2.0.0 | 3.0.0 2 | zabbix_snmptrapd | 1.0.0 | 2.0.0 For more information and instructions, see the SNMP trap daemon plugin Guide diff --git a/doc/content/description.rst b/doc/content/description.rst index 4ca4ce3..07585b2 100644 --- a/doc/content/description.rst +++ b/doc/content/description.rst @@ -5,7 +5,7 @@ SNMP trap daemon for Zabbix plugin This plugin extends Zabbix plugin functionality by adding ability to receive SNMP traps from management network and pass them to Zabbix. For more information about networks, see the `Logical Networks `_ section of MOS documentation. The plugins installs snmptrapd daemon for receiving and snmptt software for parsing and passing traps to Zabbix. This plugin does not provide any additional features from user @@ -20,7 +20,7 @@ Requirements ====================== =============== Requirement Version/Comment ====================== =============== -Fuel 6.1 -Zabbix plugin for Fuel 1.0.0 +Fuel 7.0 +Zabbix plugin for Fuel 2.0.0 ====================== =============== diff --git a/doc/content/guide.rst b/doc/content/guide.rst index 47c68c5..82b24c2 100644 --- a/doc/content/guide.rst +++ b/doc/content/guide.rst @@ -7,14 +7,16 @@ Environment configuration 1. Create an environment. For more information about environment creation, see `Mirantis OpenStack User Guide `_. + /fuel-7.0/user-guide.html#create-a-new-openstack-environment>`_. 2. Enable and configure Zabbix plugin for Fuel. For instructions, see Zabbix Plugin Guide in the `Fuel Plugins Catalog `_. -3. Open *Settings* tab of the Fuel web UI and scroll the page down. Select the - plugin checkbox and set *SNMP community* parameter: +3. Open *Settings* tab of the Fuel web UI and scroll the page down. On the left + choose *SNMP trap daemon for Zabbix plugin*, select the plugin checkbox and + set *SNMP community* parameter: .. image:: images/settings.png + :width: 100% You could see default value by clicking on the eye icon. It is highly recommended to change default SNMP community, because it is used to @@ -22,15 +24,15 @@ Environment configuration 4. Adjust other environment settings to your requirements and deploy the environment. For more information, see `Mirantis OpenStack User Guide `_. + /fuel-7.0/user-guide.html#create-a-new-openstack-environment>`_. Environment validation ====================== After a successful deployment, all Controller Nodes should have the following: -1. snmptrapd daemon running and listening on UDP/162 port on the VIP management - address. +1. snmptrapd daemon running and listening on UDP/162 port on the VIP address + reserved for Zabbix. 2. snmptrapd daemon configured to pass all SNMP traps to snmptt handler. 3. snmptt daemon running which parse SNMP traps and stores them in a log file in a format accepted by Zabbix. @@ -41,7 +43,8 @@ To test if everything is installed and configured properly, follow these steps: 1. Generate a test SNMP trap running following command from any node:: - [root@node-46 ~]# snmptrap -v 2c -c "" .1.3.6.1.4.1.8072.2.3.0.1 + [root@node-46 ~]# snmptrap -v 2c -c \ + "" .1.3.6.1.4.1.8072.2.3.0.1 where: @@ -50,23 +53,29 @@ To test if everything is installed and configured properly, follow these steps: It is set in the SNMP trap daemon for Zabbix plugin Settings in Fuel UI: .. image:: images/settings.png + :width: 100% - ** + ** If you don’t know the address, run the following command on any node:: - [root@node-46 ~]# grep management_vip /etc/astute.yaml + [root@node-46 ~]# grep -A2 ^zabbix_vip_management /etc/astute.yaml You should get the required VIP in the output:: - management_vip: 192.168.0.1 + zabbix_vip_management: + network_role: zabbix + ipaddr: 192.168.0.1 2. After several seconds of running the snmptrap command you should see a line in the Zabbix Server log file similar to this one:: - [root@node-45 ~]# grep netSnmpExampleHeartbeatNotification \ /var/log/zabbix/zabbix_server.log - 10730:20150611:182933.176 unmatched trap received from [192.168.0.4]: 18:29:27 2015/06/11 .1.3.6.1.4.1.8072.2.3.0.1 Normal "Status Events" node-46.domain.tld - netSnmpExampleHeartbeatNotification + [root@node-45 ~]# grep netSnmpExampleHeartbeatNotification \ + /var/log/zabbix/zabbix_server.log + 10730:20150611:182933.176 unmatched trap received from [192.168.0.4]: + 18:29:27 2015/06/11 .1.3.6.1.4.1.8072.2.3.0.1 Normal "Status Events" + node-46.domain.tld - netSnmpExampleHeartbeatNotification This is a proof that test SNMP trap has been received and passed to Zabbix. It is “unmatched” for Zabbix because there is no configuration for this trap diff --git a/doc/content/installation.rst b/doc/content/installation.rst index 70b5183..54a2c9f 100644 --- a/doc/content/installation.rst +++ b/doc/content/installation.rst @@ -9,15 +9,16 @@ To install SNMP trap daemon for Zabbix plugin, follow these steps: 1. Download and install the Zabbix plugin for Fuel from the `Fuel Plugins Catalog `_ + openstack-drivers-and-plugins/fuel-plugins/>`_. 2. Download the SNMP trap daemon for Zabbix plugin from the `Fuel Plugins Catalog `_ + openstack-drivers-and-plugins/fuel-plugins/>`_. 3. Copy the plugin on already installed Fuel Master node; ssh can be used for that. If you do not have the Fuel Master node yet, see `Quick Start Guide `_:: - # scp zabbix_snmptrapd-1.0-1.0.0-1.noarch.rpm root@:/tmp + # scp zabbix_snmptrapd-1.0-1.0.0-1.noarch.rpm \ + root@:/tmp 4. Log into the Fuel Master node. Install the plugin:: @@ -29,6 +30,6 @@ To install SNMP trap daemon for Zabbix plugin, follow these steps: # fuel plugins id | name | version | package_version ---|---------------------------|----------|---------------- - 1 | zabbix_monitoring | 1.0.0 | 2.0.0 + 1 | zabbix_monitoring | 2.0.0 | 3.0.0 2 | zabbix_snmptrapd | 1.0.0 | 2.0.0 diff --git a/doc/images/settings.png b/doc/images/settings.png index 07dfce7725368015126e3ea28f4a420c1409b61f..0ecdbaf8a51f545c676cf522786a9df5aef3b715 100644 GIT binary patch literal 12391 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 bL%^`Zi1uRK8pYc`0suKFrH_>o#$Wyyx;iGF literal 12255 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 z