add Zabbix plugin code

Change-Id: I9e1c1073453a4f49f660ad992df1e861c6e45373
This commit is contained in:
Szymon Banka 2015-03-19 12:38:07 +01:00 committed by Piotr Misiak
parent 40b96dcb76
commit 89196c3022
140 changed files with 24922 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.build/
zabbix_monitoring*.noarch.rpm
repositories/centos/*.rpm
repositories/ubuntu/*.deb

176
LICENSE Normal file
View File

@ -0,0 +1,176 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

View File

@ -0,0 +1,30 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
$nodes_hash = hiera('nodes')
$primary_controller_nodes = filter_nodes($nodes_hash,'role','primary-controller')
$controllers = concat($primary_controller_nodes, filter_nodes($nodes_hash,'role','controller'))
$controller_internal_addresses = nodes_to_hash($controllers,'name','internal_address')
$controller_nodes = ipsort(values($controller_internal_addresses))
$node_data = filter_nodes($nodes_hash,'fqdn',$::fqdn)
$internal_address = join(values(nodes_to_hash($node_data,'name','internal_address')))
$public_address = join(values(nodes_to_hash($node_data,'name','public_address')))
$swift_address = join(values(nodes_to_hash($node_data,'name','storage_address')))
class { 'plugin_zabbix::monitoring':
server_ips => $controller_nodes,
}

View File

@ -0,0 +1,16 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
include plugin_zabbix::controller

View File

@ -0,0 +1,16 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
include plugin_zabbix::primary_controller

View File

@ -0,0 +1,16 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
include plugin_zabbix::server::config

View File

@ -0,0 +1,6 @@
Damian Szeluga <dszeluga@mirantis.com>
Kamil Swiatkowski <kswiatkowski@mirantis.com>
Szymon Banka <sbanka@mirantis.com>
Tomasz 'Zen' Napierala <tomasz@napierala.org>
Dmitry Nikishov <dnikishov@mirantis.com>
Piotr Misiak <pmisiak@mirantis.com>

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,6 @@
name 'puppet-zabbix'
version '0.1.0'
license 'Apache'
summary 'Zabbix puppet module'
description "This module installs and manages Zabbix. It is intended to work within fuel-library. It is a reimplementation of the old module by PL team."

View File

@ -0,0 +1,11 @@
#!/bin/bash
mysql zabbix -e "
update triggers set value=0,error='' where triggerid in (
select ee.objectid from events ee
inner join
(select objectid,MAX(eventid) as maxid
from events
group by objectid)
ee2 on ee.objectid=ee2.objectid and ee.eventid=ee2.maxid
where
ee.acknowledged=1) and value=1 and description in ('SNMPtrigger Critical: {ITEM.VALUE1}', 'SNMPtrigger Error: {ITEM.VALUE1}', 'SNMPtrigger Warning: {ITEM.VALUE1}', 'SNMPtrigger Information: {ITEM.VALUE1}');"

View File

@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-12-10T10:36:40Z</date>
<screens>
<screen>
<name>Openstack Cluster</name>
<hsize>2</hsize>
<vsize>3</vsize>
<screen_items>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>100</height>
<x>0</x>
<y>0</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>Cluster CPU Load</name>
<host>OpenStackCluster</host>
</resource>
<application/>
</screen_item>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>100</height>
<x>0</x>
<y>1</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>CPUs in Cluster</name>
<host>OpenStackCluster</host>
</resource>
<application/>
</screen_item>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>100</height>
<x>1</x>
<y>1</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>RAM in Cluster</name>
<host>OpenStackCluster</host>
</resource>
<application/>
</screen_item>
<screen_item>
<resourcetype>13</resourcetype>
<width>500</width>
<height>100</height>
<x>1</x>
<y>0</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>10</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>0</resource>
<application/>
</screen_item>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>100</height>
<x>0</x>
<y>2</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>Number of instances</name>
<host>OpenStackCluster</host>
</resource>
<application/>
</screen_item>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>100</height>
<x>1</x>
<y>2</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>0</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>Openstack Offline Services</name>
<host>OpenStackCluster</host>
</resource>
<application/>
</screen_item>
</screen_items>
</screen>
</screens>
</zabbix_export>

View File

@ -0,0 +1,482 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:14:51Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App Iptables Stats</template>
<name>Template App Iptables Stats</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<items>
<item>
<name>tcp close</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.tcp.close</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>tcp established</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.tcp.established</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>tcp syn</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.tcp.syn</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>tcp timewait</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.tcp.timewait</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>total icmp</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.icmp</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>total other</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.other</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>total tcp</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.tcp</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>total udp</name>
<type>0</type>
<snmp_community>public</snmp_community>
<multiplier>0</multiplier>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>iptstate.udp</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>Packets</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Iptables Stats</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<graphs>
<graph>
<name>FLUX</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>1</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>3</sortorder>
<drawtype>1</drawtype>
<color>00CC00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.udp</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>1</drawtype>
<color>FFFF00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.icmp</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>1</drawtype>
<color>FF3333</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.other</key>
</item>
</graph_item>
<graph_item>
<sortorder>4</sortorder>
<drawtype>1</drawtype>
<color>0000CC</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.tcp</key>
</item>
</graph_item>
</graph_items>
</graph>
<graph>
<name>TCP</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>1</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>1</sortorder>
<drawtype>1</drawtype>
<color>0000CC</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.tcp.established</key>
</item>
</graph_item>
<graph_item>
<sortorder>3</sortorder>
<drawtype>1</drawtype>
<color>FFFF00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.tcp.syn</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>1</drawtype>
<color>009999</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.tcp.timewait</key>
</item>
</graph_item>
<graph_item>
<sortorder>4</sortorder>
<drawtype>1</drawtype>
<color>666666</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App Iptables Stats</host>
<key>iptstate.tcp.close</key>
</item>
</graph_item>
</graph_items>
</graph>
</graphs>
</zabbix_export>

View File

@ -0,0 +1,798 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:15:06Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App MySQL</template>
<name>Template App MySQL</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<items>
<item>
<name>MySQL begin operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_begin]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL bytes received per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Bytes_received]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>Bps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>The number of bytes received from all clients. &#13;
&#13;
It requires user parameter mysql.status[*], which is defined in &#13;
userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL bytes sent per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Bytes_sent]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>Bps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>The number of bytes sent to all clients.&#13;
&#13;
It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL commit operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_commit]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL delete operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_delete]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL insert operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_insert]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL queries per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Questions]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL rollback operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_rollback]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL select operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_select]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL slow queries</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Slow_queries]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL status</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.ping</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.ping, which is defined in userparameter_mysql.conf&#13;
&#13;
0 - MySQL server is down&#13;
1 - MySQL server is up</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap>
<name>Service state</name>
</valuemap>
</item>
<item>
<name>MySQL update operations per second</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Com_update]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>qps</units>
<delta>1</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status[*], which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL uptime</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.status[Uptime]</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>uptime</units>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.status, which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>MySQL version</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>mysql.version</key>
<delay>3600</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>1</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>It requires user parameter mysql.uptime, which is defined in userparameter_mysql.conf.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>MySQL</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens>
<screen>
<name>MySQL performance</name>
<hsize>2</hsize>
<vsize>1</vsize>
<screen_items>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>200</height>
<x>0</x>
<y>0</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>1</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>MySQL operations</name>
<host>Template App MySQL</host>
</resource>
</screen_item>
<screen_item>
<resourcetype>0</resourcetype>
<width>500</width>
<height>270</height>
<x>1</x>
<y>0</y>
<colspan>1</colspan>
<rowspan>1</rowspan>
<elements>0</elements>
<valign>1</valign>
<halign>0</halign>
<style>0</style>
<url/>
<dynamic>0</dynamic>
<sort_triggers>0</sort_triggers>
<resource>
<name>MySQL bandwidth</name>
<host>Template App MySQL</host>
</resource>
</screen_item>
</screen_items>
</screen>
</screens>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App MySQL:mysql.ping.last(0)}=0</expression>
<name>MySQL is down</name>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
<graphs>
<graph>
<name>MySQL bandwidth</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>5</drawtype>
<color>00AA00</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Bytes_received]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>5</drawtype>
<color>3333FF</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Bytes_sent]</key>
</item>
</graph_item>
</graph_items>
</graph>
<graph>
<name>MySQL operations</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>C8C800</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_begin]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>006400</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_commit]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>0</drawtype>
<color>C80000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_delete]</key>
</item>
</graph_item>
<graph_item>
<sortorder>3</sortorder>
<drawtype>0</drawtype>
<color>0000EE</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_insert]</key>
</item>
</graph_item>
<graph_item>
<sortorder>4</sortorder>
<drawtype>0</drawtype>
<color>640000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_rollback]</key>
</item>
</graph_item>
<graph_item>
<sortorder>5</sortorder>
<drawtype>0</drawtype>
<color>00C800</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_select]</key>
</item>
</graph_item>
<graph_item>
<sortorder>6</sortorder>
<drawtype>0</drawtype>
<color>C800C8</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App MySQL</host>
<key>mysql.status[Com_update]</key>
</item>
</graph_item>
</graph_items>
</graph>
</graphs>
</zabbix_export>

View File

@ -0,0 +1,430 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-05-23T15:04:32Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Ceilometer</template>
<name>Template App OpenStack Ceilometer</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<items>
<item>
<name>Ceilometer Agent Central process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-agent-central]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer Agent Central should run on this node</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>crm.node.check[p_openstack-ceilometer-agent-central]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer Alarm Evaluator process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-alarm-evaluator]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer Alarm Evaluator should run on this node</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>crm.node.check[p_openstack-ceilometer-alarm-evaluator]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer Alarm Notifier process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-alarm-notifier]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer API process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-api]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer API Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},8777]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Ceilometer Collector process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-collector]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Ceilometer:proc.num[python,ceilometer,,ceilometer-agent-central].last(0)}=0 &amp; {Template App OpenStack Ceilometer:crm.node.check[p_openstack-ceilometer-agent-central].last(0)}=1</expression>
<name>Ceilometer Alarm Agent Central service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceilometer:proc.num[python,ceilometer,,ceilometer-alarm-evaluator].last(0)}=0 &amp; {Template App OpenStack Ceilometer:crm.node.check[p_openstack-ceilometer-alarm-evaluator].last(0)}=1</expression>
<name>Ceilometer Alarm Alarm Evaluator service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceilometer:proc.num[python,ceilometer,,ceilometer-alarm-notifier].last(0)}=0</expression>
<name>Ceilometer Alarm Notifier service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceilometer:proc.num[python,ceilometer,,ceilometer-api].last(0)}=0</expression>
<name>Ceilometer API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceilometer:net.tcp.service[http,{$IP_MANAGEMENT},8777].last()}=0</expression>
<name>Ceilometer API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceilometer:proc.num[python,ceilometer,,ceilometer-collector].last(0)}=0</expression>
<name>Ceilometer Collector service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-06-27T08:32:31Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Ceilometer Compute</template>
<name>Template App OpenStack Ceilometer Compute</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<items>
<item>
<name>Ceilometer Agent Compute process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,ceilometer,,ceilometer-agent-compute]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceilometer</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Ceilometer Compute:proc.num[python,ceilometer,,ceilometer-agent-compute].last(0)}=0</expression>
<name>Ceilometer Agent Compute service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-12-04T13:12:00Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Ceph</template>
<name>Template App OpenStack Ceph</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Ceph OSD</name>
</application>
</applications>
<items>
<item>
<name>Ceph health is OK</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>ceph.health</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>3</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceph OSD</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Number of running Ceph OSD processes</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,,,/usr/bin/ceph-osd]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Ceph OSD</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Ceph:ceph.health.last(0)}=0</expression>
<name>Ceph health is not OK on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Ceph:proc.num[,,,/usr/bin/ceph-osd].last(0)}=0</expression>
<name>Ceph OSD process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:15:29Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Cinder API</template>
<name>Template App OpenStack Cinder API</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Cinder API</name>
</application>
</applications>
<items>
<item>
<name>Cinder API Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},8776]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder API</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Cinder API server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,cinder,,cinder-api]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder API</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Cinder API:proc.num[python,cinder,,cinder-api].last(0)}=0</expression>
<name>Cinder API Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Cinder API:net.tcp.service[http,{$IP_MANAGEMENT},8776].last(0)}=0</expression>
<name>Cinder API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:15:49Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Cinder API check</template>
<name>Template App OpenStack Cinder API check</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Cinder API check</name>
</application>
</applications>
<items>
<item>
<name>Cinder API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>cinder.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder API check</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Cinder API check:cinder.api.status.last(0)}=0</expression>
<name>Cinder API test failed</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:16:07Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Cinder Scheduler</template>
<name>Template App OpenStack Cinder Scheduler</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Cinder Scheduler</name>
</application>
</applications>
<items>
<item>
<name>Cinder Scheduler Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,cinder,,cinder-scheduler]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder Scheduler</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Cinder Scheduler:proc.num[python,cinder,,cinder-scheduler].last(0)}=0</expression>
<name>Cinder Scheduler process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-12-11T12:22:08Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Cinder Volume</template>
<name>Template App OpenStack Cinder Volume</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Cinder Volume</name>
</application>
</applications>
<items>
<item>
<name>Cinder Volume process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,cinder,,cinder-volume]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder Volume</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Cinder volume should run on this node</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>crm.node.check[p_cinder-volume]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Cinder Volume</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Cinder Volume:proc.num[python,cinder,,cinder-volume].last(0)}=0 &amp; {Template App OpenStack Cinder Volume:crm.node.check[p_cinder-volume].last(0)}=1</expression>
<name>Cinder Volume process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:16:32Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Glance API</template>
<name>Template App OpenStack Glance API</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Glance API</name>
</application>
</applications>
<items>
<item>
<name>Glance API Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},9292]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Glance API</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Glance API Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,glance,,glance-api]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Glance API</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Glance API:proc.num[python,glance,,glance-api].last(0)}=0</expression>
<name>Glance API Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Glance API:net.tcp.service[http,{$IP_MANAGEMENT},9292].last(0)}=0</expression>
<name>Glance API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:16:53Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Glance API check</template>
<name>Template App OpenStack Glance API check</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Glance API check</name>
</application>
</applications>
<items>
<item>
<name>Glance API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>glance.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Glance API check</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Glance API check:glance.api.status.last(0)}=0</expression>
<name>Glance API test failed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:17:07Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Glance Registry</template>
<name>Template App OpenStack Glance Registry</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Glance Registry</name>
</application>
</applications>
<items>
<item>
<name>Glance Registry Server is listening on port</name>
<type>3</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},9191]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Glance Registry</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Glance Registry Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,glance,,glance-registry]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Glance Registry</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Glance Registry:proc.num[python,glance,,glance-registry].last(0)}=0</expression>
<name>Glance Registry Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Glance Registry:net.tcp.service[http,{$IP_MANAGEMENT},9191].last(0)}=0</expression>
<name>Glance Registry Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:17:23Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Horizon</template>
<name>Template App OpenStack Horizon</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Horizon</name>
</application>
</applications>
<items>
<item>
<name>Horizon HTTP Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},80]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Horizon</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Horizon HTTP Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,apache,,/usr/sbin/httpd]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Horizon</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Horizon HTTPS Server is listening on port</name>
<type>3</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[https,{$IP_MANAGEMENT},443]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>1</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Horizon</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Horizon:proc.num[,apache,,/usr/sbin/httpd].last(0)}=0</expression>
<name>Horizon HTTP Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Horizon:net.tcp.service[http,{$IP_MANAGEMENT},80].last(0)}=0</expression>
<name>Horizon HTTP Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Horizon:net.tcp.service[https,{$IP_MANAGEMENT},443].last(0)}=0</expression>
<name>Horizon HTTPS Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:17:37Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Keystone</template>
<name>Template App OpenStack Keystone</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Keystone</name>
</application>
</applications>
<items>
<item>
<name>Keystone Admin API Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},35357]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Keystone</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Keystone API Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},5000]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Keystone</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Keystone Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,keystone,,keystone-all]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Keystone</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Keystone:net.tcp.service[http,{$IP_MANAGEMENT},35357].last(0)}=0</expression>
<name>Keystone Admin API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Keystone:net.tcp.service[http,{$IP_MANAGEMENT},5000].last(0)}=0</expression>
<name>Keystone API Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Keystone:proc.num[python,keystone,,keystone-all].last(0)}=0</expression>
<name>Keystone Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:17:50Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Keystone API check</template>
<name>Template App OpenStack Keystone API check</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Keystone API check</name>
</application>
</applications>
<items>
<item>
<name>Keystone API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>keystone.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Keystone API check</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Keystone Service API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>keystone.service.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Keystone API check</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Keystone API check:keystone.api.status.last(0)}=0</expression>
<name>Keystone API test failed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Keystone API check:keystone.service.api.status.last(0)}=0</expression>
<name>Keystone Service API test failed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:18:03Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Libvirt</template>
<name>Template App OpenStack Libvirt</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Libvirt</name>
</application>
</applications>
<items>
<item>
<name>Libvirtd process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[libvirtd,root,,]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Libvirt</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Libvirt:proc.num[libvirtd,root,,].last(0)}=0</expression>
<name>Libvirtd process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:19:34Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron API check</template>
<name>Template App OpenStack Neutron API check</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron API check</name>
</application>
</applications>
<items>
<item>
<name>Neutron API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>neutron.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron API check</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron API check:neutron.api.status.last(0)}=0</expression>
<name>Neutron API test failed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-05-23T08:33:55Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron DHCP Agent</template>
<name>Template App OpenStack Neutron DHCP Agent</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron DHCP Agent</name>
</application>
</applications>
<items>
<item>
<name>Neutron DHCP Agent process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,neutron,,neutron-dhcp-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron DHCP Agent</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Neutron DHCP Agent should run on this node</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>crm.node.check[p_neutron-dhcp-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron DHCP Agent</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron DHCP Agent:proc.num[python,neutron,,neutron-dhcp-agent].last(0)}=0 &amp; {Template App OpenStack Neutron DHCP Agent:crm.node.check[p_neutron-dhcp-agent].last(0)}=1</expression>
<name>Neutron DHCP Agent process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-05-23T08:53:02Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron L3 Agent</template>
<name>Template App OpenStack Neutron L3 Agent</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron L3 Agent</name>
</application>
</applications>
<items>
<item>
<name>Neutron L3 Agent process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,neutron,,neutron-l3-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron L3 Agent</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Neutron L3 Agent should run on this node</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>crm.node.check[p_neutron-l3-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron L3 Agent</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron L3 Agent:proc.num[python,neutron,,neutron-l3-agent].last(0)}=0 &amp; {Template App OpenStack Neutron L3 Agent:crm.node.check[p_neutron-l3-agent].last(0)}=1</expression>
<name>Neutron L3 Agent process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T21:42:33Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron Metadata Agent</template>
<name>Template App OpenStack Neutron Metadata Agent</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron Metadata Agent</name>
</application>
</applications>
<items>
<item>
<name>Neutron Metadata Agent process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,neutron,,neutron-metadata-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron Metadata Agent</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron Metadata Agent:proc.num[python,neutron,,neutron-metadata-agent].last(0)}=0</expression>
<name>Neutron Metadata Agent process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T21:42:33Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron OVS Agent</template>
<name>Template App OpenStack Neutron OVS Agent</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron OVS Agent</name>
</application>
</applications>
<items>
<item>
<name>Neutron OVS Agent process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,neutron,,neutron-openvswitch-agent]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron OVS Agent</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron OVS Agent:proc.num[python,neutron,,neutron-openvswitch-agent].last(0)}=0</expression>
<name>Neutron OVS Agent process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2014-04-24T19:16:37Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Neutron Server</template>
<name>Template App OpenStack Neutron Server</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Neutron Server</name>
</application>
</applications>
<items>
<item>
<name>Neutron Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},9696]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron Server</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Neutron Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,neutron,,neutron-server]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Neutron Server</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Neutron Server:proc.num[python,neutron,,neutron-server].last(0)}=0</expression>
<name>Neutron Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Neutron Server:net.tcp.service[http,{$IP_MANAGEMENT},9696].last(0)}=0</expression>
<name>Neutron Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:18:18Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova API</template>
<name>Template App OpenStack Nova API</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova API</name>
</application>
</applications>
<items>
<item>
<name>Nova API Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-api]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova API</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova API:proc.num[python,nova,,nova-api].last(0)}=0</expression>
<name>Nova API process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:18:30Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova API EC2</template>
<name>Template App OpenStack Nova API EC2</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova API EC2</name>
</application>
</applications>
<items>
<item>
<name>Nova API EC2 Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},8773]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova API EC2</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova API EC2:net.tcp.service[http,{$IP_MANAGEMENT},8773].last(0)}=0</expression>
<name>Nova API EC2 Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:18:50Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova API Metadata</template>
<name>Template App OpenStack Nova API Metadata</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova API Metadata</name>
</application>
</applications>
<items>
<item>
<name>Nova API Metadata Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},8775]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova API Metadata</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova API Metadata:net.tcp.service[http,{$IP_MANAGEMENT},8775].last(0)}=0</expression>
<name>Nova API Metadata Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:19:04Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova API OSAPI</template>
<name>Template App OpenStack Nova API OSAPI</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova API OSAPI</name>
</application>
</applications>
<items>
<item>
<name>Nova API OSAPI Compute Server is listening on port</name>
<type>3</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_MANAGEMENT},8774]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova API OSAPI</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova API OSAPI:net.tcp.service[http,{$IP_MANAGEMENT},8774].last(0)}=0</expression>
<name>Nova API OSAPI Compute Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:19:34Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova API OSAPI check</template>
<name>Template App OpenStack Nova API OSAPI check</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova API OSAPI check</name>
</application>
</applications>
<items>
<item>
<name>Nova API test succeeded</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>nova.api.status</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova API OSAPI check</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova API OSAPI check:nova.api.status.last(0)}=0</expression>
<name>Nova API test failed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T21:42:33Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova Cert</template>
<name>Template App OpenStack Nova Cert</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova Cert</name>
</application>
</applications>
<items>
<item>
<name>Nova Cert Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-cert]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova Cert</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova Cert:proc.num[python,nova,,nova-cert].last(0)}=0</expression>
<name>Nova Cert process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T21:55:39Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova Compute</template>
<name>Template App OpenStack Nova Compute</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova Compute</name>
</application>
</applications>
<items>
<item>
<name>Nova Compute Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-compute]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova Compute</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova Compute:proc.num[python,nova,,nova-compute].last(0)}=0</expression>
<name>Nova Compute process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T21:36:18Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova ConsoleAuth</template>
<name>Template App OpenStack Nova ConsoleAuth</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova ConsoleAuth</name>
</application>
</applications>
<items>
<item>
<name>Nova ConsoleAuth Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-consoleauth]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova ConsoleAuth</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova ConsoleAuth:proc.num[python,nova,,nova-consoleauth].last(0)}=0</expression>
<name>Nova ConsoleAuth process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-18T07:47:28Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova Network</template>
<name>Template App OpenStack Nova Network</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova Network</name>
</application>
</applications>
<items>
<item>
<name>Nova Network Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-network]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova Network</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova Network:proc.num[python,nova,,nova-network].last(0)}=0</expression>
<name>Nova Network process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-15T22:01:03Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Nova Scheduler</template>
<name>Template App OpenStack Nova Scheduler</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Nova Scheduler</name>
</application>
</applications>
<items>
<item>
<name>Nova Scheduler Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,nova,,nova-scheduler]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nova Scheduler</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Nova Scheduler:proc.num[python,nova,,nova-scheduler].last(0)}=0</expression>
<name>Nova Scheduler process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:21:22Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Open vSwitch</template>
<name>Template App OpenStack Open vSwitch</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Open vSwitch</name>
</application>
</applications>
<items>
<item>
<name>Open vSwitch DB Server server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,root,,ovsdb-server]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Open vSwitch</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Open vSwitch Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,root,,ovs-vswitchd]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Open vSwitch</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Open vSwitch:proc.num[,root,,ovsdb-server].last(0)}=0</expression>
<name>Open vSwitch DB Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Open vSwitch:proc.num[,root,,ovs-vswitchd].last(0)}=0</expression>
<name>Open vSwitch Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,474 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-18T13:46:42Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack HA RabbitMQ</template>
<name>Template App OpenStack HA RabbitMQ</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<items>
<item>
<name>RabbitMQ AMQP is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.port[{$IP_MANAGEMENT},5673]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ EPMD is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.port[,4369]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ EPMD process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,root,,bin/epmd]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ missing nodes</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>rabbitmq.missing.nodes</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ missing queues</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>rabbitmq.missing.queues</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ queue items</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>rabbitmq.queue.items</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ queues without consumers</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>rabbitmq.queues.without.consumers</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.port[,41055]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ BEAM process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[,rabbitmq,,bin/beam]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>RabbitMQ unmirrored queues</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>rabbitmq.unmirror.queues</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>RabbitMQ</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack HA RabbitMQ:net.tcp.port[,4369].last(0)}=0</expression>
<name>RabbitMQ EPMD service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack HA RabbitMQ:proc.num[,root,,bin/epmd].last(0)}=0</expression>
<name>RabbitMQ EPMD process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack HA RabbitMQ:proc.num[,rabbitmq,,bin/beam].last(0)}=0</expression>
<name>RabbitMQ BEAM process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack HA RabbitMQ:net.tcp.port[{$IP_MANAGEMENT},5673].last(0)}=0</expression>
<name>RabbitMQ Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack HA RabbitMQ:net.tcp.port[,41055].last(0)}=0</expression>
<name>RabbitMQ Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:22:14Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Swift Account</template>
<name>Template App OpenStack Swift Account</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Swift Account</name>
</application>
</applications>
<items>
<item>
<name>Swift Account Replicator process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-account-replicator]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Account</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Account Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_STORAGE},6002]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Account</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Account Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-account-server]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Account</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Swift Account:proc.num[python,swift,,swift-account-replicator].last(0)}=0</expression>
<name>Swift Account Replicator process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Account:proc.num[python,swift,,swift-account-server].last(0)}=0</expression>
<name>Swift Account Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Account:net.tcp.service[http,{$IP_STORAGE},6002].last(0)}=0</expression>
<name>Swift Account Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:22:26Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Swift Container</template>
<name>Template App OpenStack Swift Container</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Swift Container</name>
</application>
</applications>
<items>
<item>
<name>Swift Container Replicator process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-container-replicator]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Container</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Container Server is listening on port</name>
<type>3</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_STORAGE},6001]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Container</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Container Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-container-server]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Container</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Swift Container:proc.num[python,swift,,swift-container-replicator].last(0)}=0</expression>
<name>Swift Container Replicator process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Container:proc.num[python,swift,,swift-container-server].last(0)}=0</expression>
<name>Swift Container Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Container:net.tcp.service[http,{$IP_STORAGE},6001].last(0)}=0</expression>
<name>Swift Container Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:22:38Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Swift Object</template>
<name>Template App OpenStack Swift Object</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Swift Object</name>
</application>
</applications>
<items>
<item>
<name>Swift Object Replicator process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-object-replicator]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Object</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Object Server is listening on port</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_STORAGE},6000]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Object</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Object Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-object-server]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Object</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Swift Object:proc.num[python,swift,,swift-object-replicator].last(0)}=0</expression>
<name>Swift Object Replicator process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Object:proc.num[python,swift,,swift-object-server].last(0)}=0</expression>
<name>Swift Object Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Object:net.tcp.service[http,{$IP_STORAGE},6000].last(0)}=0</expression>
<name>Swift Object Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:22:52Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App OpenStack Swift Proxy</template>
<name>Template App OpenStack Swift Proxy</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Swift Proxy</name>
</application>
</applications>
<items>
<item>
<name>Swift Proxy Server is listening on port</name>
<type>3</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>net.tcp.service[http,{$IP_STORAGE},8080]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>1</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Proxy</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Swift Proxy Server process is running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>proc.num[python,swift,,swift-proxy-server]</key>
<delay>60</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Swift Proxy</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App OpenStack Swift Proxy:proc.num[python,swift,,swift-proxy-server].last(0)}=0</expression>
<name>Swift Proxy Server process is not running on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App OpenStack Swift Proxy:net.tcp.service[http,{$IP_STORAGE},8080].last(0)}=0</expression>
<name>Swift Proxy Server service is down on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-07-10T21:23:38Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App Zabbix Agent</template>
<name>Template App Zabbix Agent</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Zabbix agent</name>
</application>
</applications>
<items>
<item>
<name>Agent ping</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>agent.ping</key>
<delay>60</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>The agent always returns 1 for this item. It could be used in combination with nodata() for availability check.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Zabbix agent</name>
</application>
</applications>
<valuemap>
<name>Zabbix agent ping status</name>
</valuemap>
</item>
<item>
<name>Host name of zabbix_agentd running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>agent.hostname</key>
<delay>3600</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>1</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Zabbix agent</name>
</application>
</applications>
<valuemap/>
</item>
<item>
<name>Version of zabbix_agent(d) running</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>agent.version</key>
<delay>3600</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>1</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Zabbix agent</name>
</application>
</applications>
<valuemap/>
</item>
</items>
<discovery_rules/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{Template App Zabbix Agent:agent.hostname.diff(0)}&gt;0</expression>
<name>Host name of zabbix_agentd was changed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App Zabbix Agent:agent.version.diff(0)}&gt;0</expression>
<name>Version of zabbix_agent(d) was changed on {HOST.NAME}</name>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
<trigger>
<expression>{Template App Zabbix Agent:agent.ping.nodata(5m)}=1</expression>
<name>Zabbix agent on {HOST.NAME} is unreachable for 5 minutes</name>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<dependencies/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -0,0 +1,7 @@
#!/bin/sh
sudo ceph health | grep -q HEALTH_OK;
if [ $? -eq 0 ]; then
echo 1
else
echo 0
fi

View File

@ -0,0 +1,117 @@
#!/usr/bin/python
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import urllib2
import sys
import simplejson as json
import ConfigParser
from zabbix_checks_logger import get_logger
CONF_FILE = '/etc/zabbix/check_api.conf'
class OSAPI(object):
"""Openstack API"""
def __init__(self, logger, config):
self.logger = logger
self.config = config
self.username = self.config.get('api', 'user')
self.password = self.config.get('api', 'password')
self.tenant_name = self.config.get('api', 'tenant')
self.endpoint_keystone = self.config.get('api',
'keystone_endpoints'
).split(',')
self.token = None
self.tenant_id = None
self.get_token()
def get_timeout(self, service):
try:
return int(self.config.get('api', '%s_timeout' % service))
except ConfigParser.NoOptionError:
return 1
def get_token(self):
data = json.dumps({
"auth":
{
'tenantName': self.tenant_name,
'passwordCredentials':
{
'username': self.username,
'password': self.password
}
}
})
fail_services = 0
for keystone in self.endpoint_keystone:
self.logger.info("Trying to get token from '%s'" % keystone)
try:
request = urllib2.Request(
'%s/tokens' % keystone,
data=data,
headers={
'Content-type': 'application/json'
})
data = json.loads(
urllib2.urlopen(
request, timeout=self.get_timeout('keystone')).read())
self.token = data['access']['token']['id']
self.tenant_id = data['access']['token']['tenant']['id']
self.logger.debug("Got token '%s'" % self.token)
return
except Exception as e:
self.logger.debug("Got exception '%s'" % e)
fail_services += 1
if fail_services == len(self.endpoint_keystone):
self.logger.critical(0)
sys.exit(1)
def check_api(self, url, service):
self.logger.info("Trying '%s' on '%s'" % (service, url))
try:
request = urllib2.Request(url,
headers={
'X-Auth-Token': self.token,
})
urllib2.urlopen(request, timeout=self.get_timeout(service))
except Exception as e:
self.logger.debug("Got exception from '%s' '%s'" % (service, e))
self.logger.critical(0)
sys.exit(1)
self.logger.critical(1)
def main():
config = ConfigParser.RawConfigParser()
config.read(CONF_FILE)
logger = get_logger(config.get('api', 'log_level'))
API = OSAPI(logger, config)
if len(sys.argv) < 5:
logger.critical('No argvs, dunno what to do')
sys.exit(1)
map = config.get('api', '%s_map' % sys.argv[1])
url = '%s://%s:%s/%s' % (sys.argv[2], sys.argv[3], sys.argv[4], map)
url = url % API.__dict__
API.check_api(url, sys.argv[1])
if __name__ == "__main__":
main()

View File

@ -0,0 +1,128 @@
#!/usr/bin/python
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import urllib2
import simplejson as json
import sys
import base64
import ConfigParser
from zabbix_checks_logger import get_logger
CONF_FILE = '/etc/zabbix/check_rabbit.conf'
class RabbitmqAPI(object):
def __init__(self, logger, config):
self.logger = logger
self.login = config.get('rabbitmq', 'user')
self.password = config.get('rabbitmq', 'password')
self.host = config.get('rabbitmq', 'host')
self.auth_string = base64.encodestring('%s:%s' %
(self.login,
self.password)
).replace('\n', '')
self.max_queues = int(config.get('rabbitmq', 'max_queues'))
def get_http(self, url):
try:
request = urllib2.Request('%s/api/%s' % (self.host, url))
request.add_header("Authorization", "Basic %s" % self.auth_string)
return json.loads(urllib2.urlopen(request, timeout=2).read())
except urllib2.URLError as e:
self.logger.error("URL error: '%s'" % e)
sys.exit(1)
except ValueError as e:
self.logger.error("Value error: '%s'" % e)
sys.exit(1)
def get_queues_items(self):
response = self.get_http('overview')
if 'queue_totals' in response:
self.logger.critical(response['queue_totals']['messages'])
else:
self.logger.error('No queue_totals in response')
def get_missing_queues(self):
queues = 0
response = self.get_http('queues')
for queue in response:
queues += 1
self.logger.critical(self.max_queues-queues)
def get_queues_without_consumers(self):
queues_without_consumers = 0
response = self.get_http('queues')
for queue in response:
queues_without_consumers += 1
if queue['consumers'] > 0:
queues_without_consumers -= 1
self.logger.critical(queues_without_consumers)
def get_missing_nodes(self):
missing_nodes = 0
response = self.get_http('nodes')
for node in response:
if not node['running']:
missing_nodes += 1
self.logger.critical(missing_nodes)
def get_unmirror_queues(self):
response = self.get_http('queues')
unmirror_queues = 0
for queue in response:
if 'x-ha-policy' in queue['arguments']:
unmirror_queues += 1
if ('synchronised_slave_nodes' in queue and
len(queue['synchronised_slave_nodes']) > 0):
unmirror_queues -= 1
self.logger.critical(unmirror_queues)
def usage():
print("check_rabbit.py usage:\n \
queues-items - item count in queues\n \
queues-without-consumers - count queues without consumers\n \
missing-nodes - count missing nodes from rabbitmq cluster\n \
unmirror-queues - count unmirrored queues\n \
missing-queues max_queues - compare queues count to max_queues\n")
def main():
config = ConfigParser.RawConfigParser()
config.read(CONF_FILE)
logger = get_logger(config.get('rabbitmq', 'log_level'))
API = RabbitmqAPI(logger, config)
if len(sys.argv) < 2:
logger.critical('No argvs, dunno what to do')
sys.exit(1)
if sys.argv[1] == 'missing-queues':
API.get_missing_queues()
elif sys.argv[1] == 'queues-items':
API.get_queues_items()
elif sys.argv[1] == 'queues-without-consumers':
API.get_queues_without_consumers()
elif sys.argv[1] == 'missing-nodes':
API.get_missing_nodes()
elif sys.argv[1] == 'unmirror-queues':
API.get_unmirror_queues()
else:
usage()
if __name__ == "__main__":
main()

View File

@ -0,0 +1,12 @@
#!/bin/bash
NODES=$(/usr/bin/sudo /usr/sbin/crm_resource --locate --quiet --resource $1)
HOSTNAME=$(/bin/hostname)
for NODE in $NODES
do
if [ "$NODE" == "$HOSTNAME" ]; then
echo 1
exit
fi
done
echo 0

View File

@ -0,0 +1,88 @@
#!/bin/bash
# This script is a wrapper to HAproxy statistics which are in a CSV format.
# Output format is compatible with Zabbix.
# It can be used for HAproxy frontends and/or backends discovery and for
# gathering statistics about particular frontend,backend or server.
case $1 in
"-f")
OPER='discovery'
FESQ='grep FRONTEND'
;;
"-b")
OPER='discovery'
FESQ='grep BACKEND'
;;
"-s")
OPER='discovery'
FESQ='grep -v FRONTEND\|BACKEND\|^$\|^#'
;;
"-v")
OPER='value'
IFS=$'.'
QA=($2)
unset IFS
HAPX=${QA[0]}
HASV=${QA[1]}
ITEM=${QA[2]}
FESQ="grep ^${HAPX},${HASV},"
;;
*)
echo "Wrong arguments supplied, exiting...
Usage:
$0 -f|-b|-s|-v <group>.<server>.<item>
-f frontend discovery
-b backend discovery
-s server discovery
-v <group>.<server>.<item> get particular item value, for example:
-v zabbix-agent.node-1.smax
will print smax item value for server node-1 in group zabbix-agent
-v zabbix-agent.FRONTEND.smax
will print smax item value for FRONTEND part of zabbix-agent group
-v zabbix-agent.BACKEND.smax
will print smax item value for BACKEND part of zabbix-agent group
"
exit 1
esac
STATHEAD=( pxname svname qcur qmax scur smax slim stot bin bout dreq
dresp ereq econ eresp wretr wredis status weight act bck chkfail
chkdown lastchg downtime qlimit pid iid sid throttle lbtot tracked
type rate rate_lim rate_max check_status check_code check_duration
hrsp_1xx hrsp_2xx hrsp_3xx hrsp_4xx hrsp_5xx hrsp_other hanafail
req_rate req_rate_max req_tot cli_abrt srv_abrt )
FES=`echo "show stat" | sudo socat /var/lib/haproxy/stats stdio | sed 's/ /_/g' |grep -v -i 'zabbix-server' | $FESQ`
if [ "$OPER" == "discovery" ]; then
POSITION=1
echo "{"
echo " \"data\":["
for FE in $FES
do
IFS=$','
FEA=($FE)
unset IFS
HAPX=${FEA[0]}
HASV=${FEA[1]}
HASTAT=${HAPX}-${HASV}
if [ $POSITION -gt 1 ]
then
echo ","
fi
echo -n " { \"{#HAPX}\": \"$HAPX\", \"{#HASTAT}\": \"$HASTAT\", \"{#HASV}\": \"$HASV\" }"
POSITION=$[POSITION+1]
done
echo ""
echo " ]"
echo "}"
elif [ "$OPER" == "value" ]; then
IFS=$','
FEA=($FES)
unset IFS
cnt=0; for el in "${STATHEAD[@]}"; do
[[ "$el" == "$ITEM" ]] && echo ${FEA[$cnt]} && break
((++cnt))
done
fi

View File

@ -0,0 +1,57 @@
#!/usr/bin/python
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import ConfigParser
import sys
import sqlalchemy
from zabbix_checks_logger import get_logger
CONF_FILE = '/etc/zabbix/check_db.conf'
def query_db(logger, connection_string, query_string):
try:
engine = sqlalchemy.create_engine(connection_string)
res = engine.execute(query_string).first()
except sqlalchemy.exc.OperationalError as e:
logger.critical("Operational error '%s'" % e)
except sqlalchemy.exc.ProgrammingError as e:
logger.critical("Programming error '%s'" % e)
else:
return res[0]
config = ConfigParser.RawConfigParser()
config.read(CONF_FILE)
logger = get_logger(config.get('query_db', 'log_level'))
if __name__ == '__main__':
if len(sys.argv) < 2:
logger.critical('No argvs, dunno what to do')
sys.exit(1)
item = sys.argv[1]
try:
sql_connection = config.get('query_db', '%s_connection' % item)
sql_query = config.get('query_db', '%s_query' % item)
except ConfigParser.NoOptionError as e:
logger.critical("Item '%s' not configured" % item)
sys.exit(2)
logger.info("Get request for item '%s'" % item)
logger.debug("Sql connection: '%s', sql query: '%s'" %
(sql_connection, sql_query))
logger.critical(query_db(logger, sql_connection, sql_query))

View File

@ -0,0 +1,19 @@
#!/bin/bash
#Zabbix vfs.dev.discovery implementation
#Send beer to <admin@fluda.net>
DEVS=`grep -v "major\|^$\|dm-\|[0-9]$" /proc/partitions | awk '{print $4}'`
POSITION=1
echo "{"
echo " \"data\":["
for DEV in $DEVS
do
if [ $POSITION -gt 1 ]
then
echo ","
fi
echo -n " { \"{#DEVNAME}\": \"$DEV\"}"
POSITION=$[POSITION+1]
done
echo ""
echo " ]"
echo "}"

View File

@ -0,0 +1,17 @@
#!/bin/bash
echo "{"
echo -e "\t\"data\":[\n"
# we have to end each line with a comma except the last one (JSON SIC!)
# so we have to manage the line separator manually in awk :/
awk '
BEGIN{ORS="";n=0}
/md?/{
if (n++) print ",\n";
print "\t{ \"{#MDEVICE}\":\""$1"\" }"
}
' /proc/mdstat
echo -e "\n\n\t]"
echo "}"

View File

@ -0,0 +1,32 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import sys
import logging
LOGGING_LEVELS = {
'CRITICAL': logging.CRITICAL,
'WARNING': logging.WARNING,
'INFO': logging.INFO,
'DEBUG': logging.DEBUG
}
def get_logger(level):
logger = logging.getLogger()
ch = logging.StreamHandler(sys.stdout)
logger.setLevel(LOGGING_LEVELS[level])
logger.addHandler(ch)
return logger

View File

@ -0,0 +1,2 @@
INSERT INTO `regexps` (`regexpid`,`name`,`test_string`) values ('10','Block devices for discovery','vda');
INSERT INTO `expressions` (`expressionid`,`regexpid`,`expression`,`expression_type`,`exp_delimiter`,`case_sensitive`) values ('10','10','^(vd.|sd.)$','3',',','0');

View File

@ -0,0 +1,2 @@
dbc_install='false'
dbc_upgrade='false'

View File

@ -0,0 +1,249 @@
#!/bin/sh
#
# Zabbix server OCF script
#
# Description: Manages Zabbix server process as a HA resource
#
# Authors: Mirantis inc.
#
# Support: openstack@lists.launchpad.net
# License: Apache Software License (ASL) 2.0
#
# See usage() function below for more details ...
#
# OCF instance parameters:
# OCF_RESKEY_binary
# OCF_RESKEY_config
# OCF_RESKEY_user
# OCF_RESKEY_pid
# OCF_RESKEY_additional_parameters
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
#######################################################################
# Fill in some defaults if no values are specified
SERVICE_NAME="Zabbix-server"
OCF_RESKEY_binary_default="/usr/sbin/zabbix_server"
OCF_RESKEY_pid_default="/var/run/zabbix/zabbix_server.pid"
: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}}
: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}}
#######################################################################
usage() {
cat <<UEND
usage: $0 (start|stop|validate-all|meta-data|status|monitor)
$0 manages the ${SERVICE_NAME} process as an HA resource
The 'start' operation starts the ${SERVICE_NAME}
The 'stop' operation stops the ${SERVICE_NAME}
The 'validate-all' operation reports whether the parameters are valid
The 'meta-data' operation reports this RA's meta-data information
The 'status' operation reports whether the ${SERVICE_NAME} is running
The 'monitor' operation reports whether the ${SERVICE_NAME} is running
UEND
}
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="zabbix-server">
<version>1.0</version>
<longdesc lang="en">
Manages Zabbix server daemon as a Pacemaker Resource.
</longdesc>
<shortdesc lang="en">Manages Zabbix server</shortdesc>
<parameters>
<parameter name="binary" unique="0" required="0">
<longdesc lang="en">
Name of zabbix-server file that will be run.
</longdesc>
<shortdesc lang="en">zabbix-server binary file</shortdesc>
<content type="string" default="${OCF_RESKEY_binary_default}" />
</parameter>
<parameter name="pid" unique="0" required="0">
<longdesc lang="en">
The pid file to use for this process
</longdesc>
<shortdesc lang="en">zabbix-server pid file</shortdesc>
<content type="string" default="${OCF_RESKEY_pid_default}" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="20" />
<action name="stop" timeout="20" />
<action name="status" timeout="20" />
<action name="monitor" timeout="30" interval="20" />
<action name="validate-all" timeout="5" />
<action name="meta-data" timeout="5" />
</actions>
</resource-agent>
END
}
#######################################################################
# Functions invoked by resource manager actions
service_validate() {
local rc
check_binary $OCF_RESKEY_binary
# A config file on shared storage that is not available
# during probes is OK.
#if [ ! -f $OCF_RESKEY_config ]; then
# if ! ocf_is_probe; then
# ocf_log err "Config $OCF_RESKEY_config doesn't exist"
# return $OCF_ERR_INSTALLED
# fi
# ocf_log_warn "Config $OCF_RESKEY_config not available during a probe"
#fi
true
}
service_status() {
local pid
local rc
if [ ! -f $OCF_RESKEY_pid ]; then
ocf_log info "${SERVICE_NAME} is not running"
return $OCF_NOT_RUNNING
else
pid=`cat $OCF_RESKEY_pid`
fi
ocf_run -warn kill -s 0 $pid
rc=$?
if [ $rc -eq 0 ]; then
return $OCF_SUCCESS
else
ocf_log info "Old PID file found, but ${SERVICE_NAME} is not running"
return $OCF_NOT_RUNNING
fi
}
service_monitor() {
service_status
}
service_start() {
local rc
service_status
rc=$?
if [ $rc -eq $OCF_SUCCESS ]; then
ocf_log info "${SERVICE_NAME} is already running"
return $OCF_SUCCESS
fi
${OCF_RESKEY_binary}
# Spin waiting for the server to come up.
# Let the CRM/LRM time us out if required
while true; do
service_monitor
rc=$?
[ $rc -eq $OCF_SUCCESS ] && break
if [ $rc -ne $OCF_NOT_RUNNING ]; then
ocf_log err "${SERVICE_NAME} start failed"
exit $OCF_ERR_GENERIC
fi
sleep 1
done
ocf_log info "${SERVICE_NAME} started"
return $OCF_SUCCESS
}
service_stop() {
local rc
local pid
service_status
rc=$?
if [ $rc -eq $OCF_NOT_RUNNING ]; then
ocf_log info "${SERVICE_NAME} is already stopped"
return $OCF_SUCCESS
fi
# Try SIGTERM
pid=`cat $OCF_RESKEY_pid`
ocf_run kill -s TERM $pid
rc=$?
if [ $rc -ne 0 ]; then
ocf_log err "${SERVICE_NAME} couldn't be stopped"
exit $OCF_ERR_GENERIC
fi
# stop waiting
shutdown_timeout=15
if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then
shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5))
fi
count=0
while [ $count -lt $shutdown_timeout ]; do
service_status
rc=$?
if [ $rc -eq $OCF_NOT_RUNNING ]; then
break
fi
count=`expr $count + 1`
sleep 1
ocf_log debug "${SERVICE_NAME} still hasn't stopped yet. Waiting ..."
done
service_status
rc=$?
if [ "${rc}" -ne "${OCF_NOT_RUNNING}" ]; then
# SIGTERM didn't help either, try SIGKILL
ocf_log info "${SERVICE_NAME} failed to stop after ${shutdown_timeout}s using SIGTERM. Trying SIGKILL ..."
ocf_run kill -s KILL "${pid}"
fi
ocf_log info "${SERVICE_NAME} stopped"
rm -f "${OCF_RESKEY_pid}"
return "${OCF_SUCCESS}"
}
#######################################################################
case "$1" in
meta-data) meta_data
exit $OCF_SUCCESS;;
usage|help) usage
exit $OCF_SUCCESS;;
esac
# Anything except meta-data and help must pass validation
service_validate || exit $?
# What kind of method was invoked?
case "$1" in
start) service_start;;
stop) service_stop;;
status) service_status;;
monitor) service_monitor;;
validate-all) ;;
*) usage
exit $OCF_ERR_UNIMPLEMENTED;;
esac

View File

@ -0,0 +1,5 @@
Defaults:zabbix !requiretty
zabbix ALL = NOPASSWD: /usr/bin/socat /var/lib/haproxy/stats stdio
zabbix ALL = NOPASSWD: /usr/sbin/iptstate
zabbix ALL = NOPASSWD: /usr/sbin/crm_resource --locate --quiet --resource *
zabbix ALL = NOPASSWD: /usr/bin/ceph health

View File

@ -0,0 +1,24 @@
Puppet::Parser::Functions::newfunction(
:defined_in_state,
:type => :rvalue,
:doc => 'Returns True when resource is defined in state.yaml file'
) do |args|
yaml_file = '/var/lib/puppet/state/state.yaml'
raise(Puppet::ParseError, "defined_in_state(): Wrong number of arguments " +
"given (#{args.size} for 1)") if args.size != 1
resource = args[0]
begin
yaml = YAML.load_file(yaml_file)
if ! yaml["#{resource}"].nil?
return true
end
rescue Exception => e
Puppet.warning("#{e}")
end
return false
end

View File

@ -0,0 +1,15 @@
Puppet::Parser::Functions::newfunction(
:get_server_by_role,
:type => :rvalue,
:doc => 'Returns server node hash by role'
) do |args|
fuel_nodes = args[0]
requested_roles = args[1]
server = ""
fuel_nodes.each do |node|
next unless requested_roles.include?(node['role'])
server = node
end
server
end

View File

@ -0,0 +1,113 @@
require 'json'
require 'net/http'
class Puppet::Provider::Plugin_zabbix < Puppet::Provider
@@auth_hash = ""
def self.message_json(body)
if body[:method] == "user.login"
message = {
:method => body[:method],
:params => body[:params],
:id => rand(9000),
:jsonrpc => '2.0'
}
else
message = {
:method => body[:method],
:params => body[:params],
:auth => auth_hash,
:id => rand(9000),
:jsonrpc => '2.0'
}
end
JSON.generate(message)
end
def self.make_request(api, body)
uri = URI.parse(api["endpoint"])
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.add_field("Content-Type", "application/json-rpc")
request.body = message_json(body)
response = http.request(request)
puts "DEBUG request = #{request.body}"
puts "DEBUG response = #{response.body}"
response.value
result = JSON.parse(response.body)
result
end
def self.api_request(api, body)
retries = 10
cooldown = 1
Puppet.info("Trying to make a request to zabbix server, will try #{retries} times with #{cooldown} seconds between tries")
retries.times do |r|
begin
Puppet.info("Retry ##{r}/#{retries}:")
result = make_request(api, body)
if result.has_key? "error"
raise(Puppet::Error, "Zabbix API returned error code #{result["error"]["code"]}: #{result["error"]["message"]}, #{result["error"]["data"]}")
end
return result["result"]
rescue => e
if r == retries
Puppet.error("Out of retries to make a request to zabbix server (#{retries})")
raise e
else
Puppet.warning("Could not make request to zabbix: #{e}, sleeping #{cooldown*r} (retry (##{r}/#{retries}))")
sleep(cooldown*r)
end
end
end
end
def self.auth(api)
body = {:method => "user.login",
:params => {:user => api["username"],
:password => api["password"]}}
@@auth_hash = api_request(api, body)
end
def auth(api)
self.class.auth(api)
end
def api_request(api, body)
self.class.api_request(api, body)
end
def self.auth_hash
@@auth_hash
end
def auth_hash
self.class.auth_hash
end
def self.get_host(api, name)
puts "DEBUG gethost #{name}"
api_request(api,
{:method => "host.get",
:params => {:filter => {:name => [name]}}})
end
def self.get_hostgroup(api, name)
puts "DEBUG gethostgroup #{name}"
api_request(api,
{:method => "hostgroup.get",
:params => {:filter => {:name => [name]}}})
end
def get_host(api, name)
self.class.get_host(api, name)
end
def get_hostgroup(api, name)
self.class.get_hostgroup(api, name)
end
end

View File

@ -0,0 +1,100 @@
$LOAD_PATH.push(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'puppet/provider/plugin_zabbix'
require 'digest/md5'
Puppet::Type.type(:plugin_zabbix_configuration_import).provide(:ruby,
:parent => Puppet::Provider::Plugin_zabbix) do
def exists?
auth(resource[:api])
macroname = '{$TMPL_' + Pathname.new(resource[:xml_file]).basename.to_s.gsub('.', '_').upcase + '}'
macroid = nil
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => 'extend'}})
result.each { |macro| macroid = macro['globalmacroid'] if macro['macro'] == macroname }
not macroid.nil?
end
def create
macroname = '{$TMPL_' + Pathname.new(resource[:xml_file]).basename.to_s.gsub('.', '_').upcase + '}'
xml_file_checksum = config_import(resource[:xml_file])
api_request(resource[:api],
{:method => 'usermacro.createglobal',
:params => {:macro => macroname,
:value => xml_file_checksum}})
end
def destroy
macroname = '{$TMPL_' + Pathname.new(resource[:xml_file]).basename.to_s.gsub('.', '_').upcase + '}'
macroid = nil
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => 'extend'}})
result.each { |macro| macroid = macro['globalmacroid'] if macro['macro'] == macroname }
api_request(resource[:api],
{:method => 'usermacro.deleteglobal',
:params => [macroid]})
end
def xml_file
macrovalue = nil
macroname = '{$TMPL_' + Pathname.new(resource[:xml_file]).basename.to_s.gsub('.', '_').upcase + '}'
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => 'extend'}})
result.each { |macro| macrovalue = macro['value'] if macro['macro'] == macroname }
macrovalue
end
def xml_file=(v)
macroid = nil
xml_file_checksum = config_import(resource[:xml_file])
macroname = '{$TMPL_' + Pathname.new(resource[:xml_file]).basename.to_s.gsub('.', '_').upcase + '}'
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => 'extend'}})
result.each { |macro| macroid = macro['globalmacroid'] if macro['macro'] == macroname }
api_request(resource[:api],
{:method => 'usermacro.updateglobal',
:params => {:globalmacroid => macroid,
:value => xml_file_checksum}})
end
def config_import(xml_file)
xml_file_content = Puppet::Util::FileType.filetype(:flat).new(xml_file).read
xml_file_checksum = Digest::MD5.hexdigest(xml_file_content)
api_request(resource[:api],
{:method => 'configuration.import',
:params => {:format => 'xml',
:source => xml_file_content,
:rules => {:applications => {:createMissing => true,
:updateExisting => true},
:discoveryRules => {:createMissing => true,
:updateExisting => true},
:graphs => {:createMissing => true,
:updateExisting => true},
:groups => {:createMissing => true,
:updateExisting => true},
:images => {:createMissing => true,
:updateExisting => true},
:items => {:createMissing => true,
:updateExisting => true},
:maps => {:createMissing => true,
:updateExisting => true},
:screens => {:createMissing => true,
:updateExisting => true},
:templates => {:createMissing => true,
:updateExisting => true},
:templateScreens => {:createMissing => true,
:updateExisting => true},
:triggers => {:createMissing => true,
:updateExisting => true}}}})
xml_file_checksum
end
end

View File

@ -0,0 +1,52 @@
$LOAD_PATH.push(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'puppet/provider/plugin_zabbix'
Puppet::Type.type(:plugin_zabbix_host).provide(:ruby,
:parent => Puppet::Provider::Plugin_zabbix) do
def exists?
auth(resource[:api])
result = get_host(resource[:api], resource[:name])
not result.empty?
end
def create
groups = Array.new
resource[:groups].each do |group|
group_id = get_hostgroup(resource[:api], group)
raise(Puppet::Error, "Group #{group} does not exist") unless not group_id.empty?
groups.push({
:groupid => group_id[0]["groupid"]
})
end
params = {:host => resource[:host],
:status => resource[:status],
:interfaces => [{:type => resource[:type] == nil ? "1" : resource[:type],
:main =>1,
:useip => resource[:ip] == nil ? 0 : 1,
:usedns => resource[:ip] == nil ? 1 : 0,
:dns => resource[:host],
:ip => resource[:ip] == nil ? "" : resource[:ip],
:port => resource[:port] == nil ? "10050" : resource[:port],}],
:proxy_hostid => resource[:proxy_hostid] == nil ? 0 : resource[:proxy_hostid],
:groups => groups}
api_request(resource[:api],
{:method => "host.create",
:params => params})
end
def destroy
hostid = get_host(resource[:api], resource[:name])[0]["hostid"]
# deactivate before removing
api_request(resource[:api],
{:method => 'host.update',
:params => {:hostid => hostid,
:status => 1}})
api_request(resource[:api],
{:method => 'host.delete',
:params => [{:hostid => hostid}]})
end
end

View File

@ -0,0 +1,25 @@
$LOAD_PATH.push(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'puppet/provider/plugin_zabbix'
Puppet::Type.type(:plugin_zabbix_hostgroup).provide(:ruby,
:parent => Puppet::Provider::Plugin_zabbix) do
def exists?
auth(resource[:api])
result = get_hostgroup(resource[:api], resource[:name])
not result.empty?
end
def create
api_request(resource[:api],
{:method => "hostgroup.create",
:params => {:name => resource[:name]}})
end
def destroy
groupid = get_hostgroup(resource[:api], resource[:name])[0]["groupid"]
api_request(resource[:api],
{:method => "hostgroup.delete",
:params => [groupid]})
end
end

View File

@ -0,0 +1,51 @@
$LOAD_PATH.push(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'puppet/provider/plugin_zabbix'
require 'digest/md5'
Puppet::Type.type(:plugin_zabbix_template_link).provide(:ruby,
:parent => Puppet::Provider::Plugin_zabbix) do
def get_ids_by_host(hostid)
results = []
api_request(resource[:api],
{:method => "template.get",
:params => {:hostids => [hostid]}}).each do |template|
results << template["templateid"]
end
results
end
def exists?
auth(resource[:api])
hostid = get_host(resource[:api], resource[:host])
raise(Puppet::Error, "Host #{resource[:host]} does not exist") unless not hostid.empty?
templateid = api_request(resource[:api],
{:method => "template.get",
:params => {:filter => {:host => [resource[:template]]}}})
raise(Puppet::Error, "Template #{resource[:template]} does not exist") unless not templateid.empty?
get_ids_by_host(hostid[0]["hostid"]).include?(templateid[0]["templateid"])
end
def create
hostid = get_host(resource[:api], resource[:host])
templateid = api_request(resource[:api],
{:method => "template.get",
:params => {:filter => {:host => [resource[:template]]}}})
api_request(resource[:api],
{:method => "template.massAdd",
:params => {:hosts => [{:hostid => hostid[0]["hostid"]}],
:templates => [{:templateid => templateid[0]["templateid"]}]}})
end
def destroy
hostid = get_host(resource[:api], resource[:host])
templateid = api_request(resource[:api],
{:method => "template.get",
:params => {:filter => {:host => [resource[:template]]}}})
api_request(resource[:api],
{:method => "template.massRemove",
:params => {:hostids => [hostid[0]["hostid"]],
:templateids => templateid[0]["templateid"]}})
end
end

View File

@ -0,0 +1,116 @@
$LOAD_PATH.push(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'puppet/provider/plugin_zabbix'
Puppet::Type.type(:plugin_zabbix_usermacro).provide(:ruby,
:parent => Puppet::Provider::Plugin_zabbix) do
def exists?
auth(resource[:api])
macroid = nil
if resource[:global] == :true
result = api_request(resource[:api],
{:method => "usermacro.get",
:params => {:globalmacro => true,
:output => "extend"}})
result.each { |macro| macroid = macro["globalmacroid"] if macro['macro'] == resource[:macro] }
else
hostid = get_host(resource[:api], resource[:host])
raise(Puppet::Error, "Host #{resource[:host]} does not exist") unless not hostid.empty?
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {"hostids" => hostid[0]["hostid"],
:output => "extend"}})
macroid = nil
result.each { |macro| macroid = macro['hostmacroid'] if macro['macro'] == resource[:macro] }
end
not macroid.nil?
end
def create
if resource[:global] == :true
api_request(resource[:api],
{:method => 'usermacro.createglobal',
:params => {:macro => resource[:macro],
:value => resource[:value]}})
else
hostid = get_host(resource[:api], resource[:host])
api_request(resource[:api],
{:method => 'usermacro.create',
:params => {:macro => resource[:macro],
:value => resource[:value],
:hostid => hostid[0]["hostid"]}})
end
end
def destroy
macroid = nil
if resource[:global] == :true
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => "extend"}})
result.each { |macro| macroid = macro['globalmacroid'] if macro['macro'] == resource[:macro] }
api_request(resource[:api],
{:method => 'usermacro.deleteglobal',
:params => [macroid]})
else
hostid = get_host(resource[:api], resource[:host])
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:hostids => hostid[0]["hostid"],
:output => "extend"}})
result.each { |macro| macroid = macro['hostmacroid'] if macro['macro'] == resource[:macro] }
api_request(resource[:api],
{:method => 'usermacro.delete',
:params => [macroid]})
end
end
def value
#get value
macrovalue = nil
if resource[:global] == :true
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => "extend"}})
result.each { |macro| macrovalue = macro['value'] if macro['macro'] == resource[:macro] }
else
hostid = get_host(resource[:api], resource[:host])
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:hostids => hostid[0]["hostid"],
:output => "extend"}})
result.each { |macro| macrovalue = macro['value'] if macro['macro'] == resource[:macro] }
end
macrovalue
end
def value=(v)
#set value
macroid = nil
if resource[:global] == :true
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:globalmacro => true,
:output => "extend"}})
result.each { |macro| macroid = macro['globalmacroid'].to_i if macro['macro'] == resource[:macro] }
api_request(resource[:api],
{:method => 'usermacro.updateglobal',
:params => {:globalmacroid => macroid,
:value => resource[:value]}})
else
hostid = get_host(resource[:api], resource[:host])
result = api_request(resource[:api],
{:method => 'usermacro.get',
:params => {:hostids => hostid[0]["hostid"],
:output => "extend"}})
result.each { |macro| macroid = macro['hostmacroid'].to_i if macro['macro'] == resource[:macro] }
api_request(resource[:api],
{:method => 'usermacro.update',
:params => {:hostmacroid => macroid,
:value => resource[:value]}})
end
end
end

View File

@ -0,0 +1,59 @@
require 'puppet/util/filetype'
require 'digest/md5'
Puppet::Type.newtype(:plugin_zabbix_configuration_import) do
desc <<-EOT
Import Zabbix configuration from a file.
EOT
ensurable
# do
# defaultvalues
# defaultto :present
# end
newparam(:name, :namevar => true) do
desc 'Name of import.'
end
newparam(:api) do
desc 'Zabbix api info: endpoint, username, password.'
isrequired
validate do |value|
fail("api is not a hash") unless value.kind_of?(Hash)
fail("api hash does not contain username") unless value.has_key?("username")
fail("username is not valid") unless value['username'] =~ /.+/
fail("api hash does not contain password") unless value.has_key?("password")
fail("password is not valid") unless value['password'] =~ /.+/
fail("api hash does not contain endpoint") unless value.has_key?("endpoint")
fail("endpoint is not valid") unless value['endpoint'] =~ /http(s)?:\/\/.+/
end
end
newproperty(:xml_file) do
desc 'xml file'
isrequired
validate do |value|
unless Pathname.new(value).absolute?
fail("Invalid xml_file path #{value}")
end
end
def insync?(is)
xml_file_content = Puppet::Util::FileType.filetype(:flat).new(value).read
if is == Digest::MD5.hexdigest(xml_file_content)
true
else
false
end
end
end
autorequire(:file) do
[@parameters[:xml_file]]
end
end

View File

@ -0,0 +1,101 @@
Puppet::Type.newtype(:plugin_zabbix_host) do
desc <<-EOT
Manage a host in Zabbix
EOT
ensurable do
defaultvalues
defaultto :present
end
newparam(:host, :namevar => true) do
desc 'Technical name of the host.'
newvalues(/.+/)
end
newparam(:ip) do
desc <<-EOT
IP of the host.
Set this for the default interface to be
ip based. Use zabbix_host_interface to add
additional interfaces if you want dns on
the main agent and an ip for others.
EOT
isrequired
newvalues(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/)
end
newparam(:type) do
desc <<-EOT
Zabbix host type.
1 - ip interface
2 - snmp interface
...
EOT
end
newparam(:port) do
desc <<-EOT
Port of the host.
EOT
newvalues(/^[0-9]{1,5}$/)
end
newparam(:groups) do
desc 'Host groups to add the host to.'
isrequired
validate do |value|
fail("groups is not an array") unless value.kind_of?(Array) or value.kind_of?(String)
fail("groups array is empty") if value.empty?
value.each do |item|
fail("group name is not a string") unless item.kind_of?(String)
fail("group name is empty") unless item =~ /.+/
end
end
end
newparam(:hostname) do
desc 'Visible name of the host.'
newvalues(/.+/)
end
newparam(:proxy_hostid) do
desc 'ID of the proxy that is used to monitor the host.'
validate do |value|
fail("proxy_hostid is not an integer or integer string") unless value.kind_of?(Integer) or value =~ /[0-9]+/
end
end
newparam(:status) do
desc <<-EOT
Status and function of the host.
Possible values are:
* 0 - (default) monitored host;
* 1 - unmonitored host.
EOT
newvalues(0, 1)
defaultto 0
end
newparam(:api) do
desc 'Zabbix api info: endpoint, username, password.'
isrequired
validate do |value|
fail("api is not a hash") unless value.kind_of?(Hash)
fail("api hash does not contain username") unless value.has_key?("username")
fail("username is not valid") unless value['username'] =~ /.+/
fail("api hash does not contain password") unless value.has_key?("password")
fail("password is not valid") unless value['password'] =~ /.+/
fail("api hash does not contain endpoint") unless value.has_key?("endpoint")
fail("endpoint is not valid") unless value['endpoint'] =~ /http(s)?:\/\/.+/
end
end
end

View File

@ -0,0 +1,31 @@
Puppet::Type.newtype(:plugin_zabbix_hostgroup) do
desc <<-EOT
Manage a host group in Zabbix
EOT
ensurable do
defaultvalues
defaultto :present
end
newparam(:name, :namevar => true) do
desc 'Name of the host group.'
newvalues(/.+/)
end
newparam(:api) do
desc 'Zabbix api info: endpoint, username, password.'
isrequired
validate do |value|
fail("api is not a hash") unless value.kind_of?(Hash)
fail("api hash does not contain username") unless value.has_key?("username")
fail("username is not valid") unless value['username'] =~ /.+/
fail("api hash does not contain password") unless value.has_key?("password")
fail("password is not valid") unless value['password'] =~ /.+/
fail("api hash does not contain endpoint") unless value.has_key?("endpoint")
fail("endpoint is not valid") unless value['endpoint'] =~ /http(s)?:\/\/.+/
end
end
end

View File

@ -0,0 +1,44 @@
Puppet::Type.newtype(:plugin_zabbix_template_link) do
desc <<-EOT
Manage a template link in Zabbix
EOT
ensurable do
defaultvalues
defaultto :present
end
newparam(:name, :namevar => true) do
desc 'Template link name.'
newvalues(/.+/)
end
newparam(:host) do
desc 'Technical name of the host.'
newvalues(/.+/)
isrequired
end
newparam(:template) do
desc 'Template name to link the host to.'
newvalues(/.+/)
isrequired
end
newparam(:api) do
desc 'Zabbix api info: endpoint, username, password.'
isrequired
validate do |value|
fail("api is not a hash") unless value.kind_of?(Hash)
fail("api hash does not contain username") unless value.has_key?("username")
fail("username is not valid") unless value['username'] =~ /.+/
fail("api hash does not contain password") unless value.has_key?("password")
fail("password is not valid") unless value['password'] =~ /.+/
fail("api hash does not contain endpoint") unless value.has_key?("endpoint")
fail("endpoint is not valid") unless value['endpoint'] =~ /http(s)?:\/\/.+/
end
end
end

View File

@ -0,0 +1,64 @@
Puppet::Type.newtype(:plugin_zabbix_usermacro) do
desc <<-EOT
Manage a macro in Zabbix.
EOT
ensurable do
defaultvalues
defaultto :present
end
newparam(:name, :namevar => true) do
desc 'namevar'
newvalues(/.+/)
end
newparam(:api) do
desc 'Zabbix api info: endpoint, username, password.'
isrequired
validate do |value|
fail("api is not a hash") unless value.kind_of?(Hash)
fail("api hash does not contain username") unless value.has_key?("username")
fail("username is not valid") unless value['username'] =~ /.+/
fail("api hash does not contain password") unless value.has_key?("password")
fail("password is not valid") unless value['password'] =~ /.+/
fail("api hash does not contain endpoint") unless value.has_key?("endpoint")
fail("endpoint is not valid") unless value['endpoint'] =~ /http(s)?:\/\/.+/
end
end
newparam(:macro) do
desc 'Macro name'
isrequired
newvalues(/.+/)
end
newproperty(:value) do
desc 'Macro value'
isrequired
newvalues(/.+/)
end
newparam(:global) do
desc <<-EOT
Macro global flag. If true macro is global.
If false macro belongs to host/template.
EOT
defaultto(:false)
newvalues(:true, :false)
end
newparam(:host) do
desc 'Host'
newvalues(/.+/)
end
validate do
fail('host should not be provided when global is true') if
self[:global] == :true and not self[:host].nil?
fail('host is required when global is false') if
self[:global] == :false and self[:host].nil?
end
end

View File

@ -0,0 +1,66 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::agent(
$api_hash = undef,
) {
include plugin_zabbix::params
$zabbix_agent_port = $plugin_zabbix::params::zabbix_ports['backend_agent'] ? { unset=>$plugin_zabbix::params::zabbix_ports['agent'], default=>$plugin_zabbix::params::zabbix_ports['backend_agent'] }
firewall { '997 zabbix agent':
port => $zabbix_agent_port,
proto => 'tcp',
action => 'accept'
}
package { $plugin_zabbix::params::agent_pkg:
ensure => present
}
->
file { $plugin_zabbix::params::agent_include:
ensure => directory,
mode => '0500',
owner => 'zabbix',
group => 'zabbix'
}
->
file { $plugin_zabbix::params::agent_config:
ensure => present,
content => template($plugin_zabbix::params::agent_config_template),
notify => Service[$plugin_zabbix::params::agent_service]
}
->
service { $plugin_zabbix::params::agent_service:
ensure => running,
enable => true,
}
if defined_in_state(Class['openstack::controller']){
$groups = union($plugin_zabbix::params::host_groups_base, $plugin_zabbix::params::host_groups_controller)
} elsif defined_in_state(Class['openstack::compute']) {
$groups = union($plugin_zabbix::params::host_groups_base, $plugin_zabbix::params::host_groups_compute)
} else {
$groups = $plugin_zabbix::params::host_groups_base
}
plugin_zabbix_host { $plugin_zabbix::params::host_name:
host => $plugin_zabbix::params::host_name,
ip => $plugin_zabbix::params::host_ip,
groups => $groups,
api => $api_hash
}
}

View File

@ -0,0 +1,59 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::agent::scripts {
include plugin_zabbix::params
file { $plugin_zabbix::params::agent_scripts:
ensure => directory,
recurse => true,
purge => true,
force => true,
mode => '0755',
source => 'puppet:///modules/plugin_zabbix/scripts',
}
file { '/etc/zabbix/check_api.conf':
ensure => present,
content => template('plugin_zabbix/check_api.conf.erb'),
}
file { '/etc/zabbix/check_rabbit.conf':
ensure => present,
content => template('plugin_zabbix/check_rabbit.conf.erb'),
}
file { '/etc/zabbix/check_db.conf':
ensure => present,
content => template('plugin_zabbix/check_db.conf.erb'),
}
if ! defined(Package['sudo']) {
package { 'sudo':
ensure => installed
}
}
file { 'zabbix_no_requiretty':
path => '/etc/sudoers.d/zabbix',
mode => '0440',
owner => root,
group => root,
source => 'puppet:///modules/plugin_zabbix/zabbix-sudo',
require => Package['sudo'],
}
}

View File

@ -0,0 +1,47 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
define plugin_zabbix::agent::userparameter (
$ensure = present,
$command = undef,
$key = undef,
$index = undef,
$file = undef,
$template = 'plugin_zabbix/zabbix_agent_userparam.conf.erb'
) {
include plugin_zabbix::params
$key_real = $key ? {
undef => $name,
default => $key
}
$index_real = $index ? {
undef => '',
default => "${index}_",
}
$file_real = $file ? {
undef => "${::plugin_zabbix::params::agent_include}/${index_real}${name}.conf",
default => $file,
}
file { $file_real:
ensure => $ensure,
content => template($template),
notify => Service[$plugin_zabbix::params::agent_service]
}
}

View File

@ -0,0 +1,97 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::controller {
include plugin_zabbix::params
file { '/etc/dbconfig-common':
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
}
file { '/etc/dbconfig-common/zabbix-server-mysql.conf':
ensure => present,
require => File['/etc/dbconfig-common'],
mode => '0600',
source => 'puppet:///modules/plugin_zabbix/zabbix-server-mysql.conf',
}
package { $plugin_zabbix::params::server_pkg:
ensure => present,
require => File['/etc/dbconfig-common/zabbix-server-mysql.conf'],
}
file { $plugin_zabbix::params::server_config:
ensure => present,
require => Package[$plugin_zabbix::params::server_pkg],
content => template($plugin_zabbix::params::server_config_template),
}
file { $plugin_zabbix::params::server_scripts:
ensure => directory,
require => Package[$plugin_zabbix::params::server_pkg],
recurse => true,
purge => true,
force => true,
mode => '0755',
source => 'puppet:///modules/plugin_zabbix/externalscripts',
}
file { 'zabbix-server-ocf' :
ensure => present,
path => "${plugin_zabbix::params::ocf_scripts_dir}/${plugin_zabbix::params::ocf_scripts_provider}/${plugin_zabbix::params::server_service}",
mode => '0755',
owner => 'root',
group => 'root',
source => 'puppet:///modules/plugin_zabbix/zabbix-server.ocf',
}
service { "${plugin_zabbix::params::server_service}-init-stopped":
ensure => 'stopped',
name => $plugin_zabbix::params::server_service,
enable => false,
require => File[$plugin_zabbix::params::server_config],
}
File['zabbix-server-ocf'] -> Service["${plugin_zabbix::params::server_service}-init-stopped"]
cron { 'zabbix db_clean':
ensure => 'present',
require => File[$plugin_zabbix::params::server_scripts],
command => "${plugin_zabbix::params::server_scripts}/db_clean.sh",
user => 'root',
minute => '*/5',
}
if $plugin_zabbix::params::frontend {
class { 'plugin_zabbix::frontend':
require => File[$plugin_zabbix::params::server_config],
before => Class['plugin_zabbix::ha::haproxy'],
}
}
include plugin_zabbix::ha::haproxy
$zabbix_server_port = $plugin_zabbix::params::zabbix_ports['backend_server'] ? { unset=>$plugin_zabbix::params::zabbix_ports['server'], default=>$plugin_zabbix::params::zabbix_ports['backend_server'] }
firewall { '997 zabbix server':
proto => 'tcp',
action => 'accept',
port => $zabbix_server_port,
}
}

View File

@ -0,0 +1,26 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::db(
$db_ip = undef,
$db_password = 'zabbix',
) {
#stub for multiple possible db backends
class { 'plugin_zabbix::db::mysql':
db_ip => $db_ip,
db_password => $db_password,
}
contain 'plugin_zabbix::db::mysql'
}

View File

@ -0,0 +1,72 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::db::mysql(
$db_ip = undef,
$db_password = 'zabbix',
) {
include plugin_zabbix::params
file { '/tmp/zabbix':
ensure => directory,
mode => '0755',
}
file { '/tmp/zabbix/parts':
ensure => directory,
purge => true,
force => true,
recurse => true,
mode => '0755',
source => 'puppet:///modules/plugin_zabbix/sql',
require => File['/tmp/zabbix']
}
file { '/tmp/zabbix/parts/data_clean.sql':
ensure => present,
require => File['/tmp/zabbix/parts'],
content => template('plugin_zabbix/data_clean.erb'),
}
exec { 'prepare-schema-1':
command => $plugin_zabbix::params::prepare_schema_cmd,
creates => '/tmp/zabbix/schema.sql',
path => ['/usr/sbin', '/usr/bin', '/sbin', '/bin'],
require => [File['/tmp/zabbix'], Package[$plugin_zabbix::params::server_pkg]],
notify => Exec['prepare-schema-2'],
}
exec { 'prepare-schema-2':
command => 'cat /tmp/zabbix/parts/*.sql >> /tmp/zabbix/schema.sql',
path => ['/usr/sbin', '/usr/bin', '/sbin', '/bin'],
refreshonly => true,
require => File['/tmp/zabbix/parts/data_clean.sql'],
}
plugin_zabbix::db::mysql_db { $plugin_zabbix::params::db_name:
user => $plugin_zabbix::params::db_user,
password => $db_password,
host => $db_ip,
require => Exec['prepare-schema-2'],
}
exec{ "${plugin_zabbix::params::db_name}-import":
command => "/usr/bin/mysql ${plugin_zabbix::params::db_name} < /tmp/zabbix/schema.sql && touch /tmp/zabbix/imported",
creates => '/tmp/zabbix/imported',
logoutput => true,
require => Database[$plugin_zabbix::params::db_name],
}
}

View File

@ -0,0 +1,58 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
define plugin_zabbix::db::mysql_db (
$user,
$password,
$charset = 'utf8',
$host = 'localhost',
$grant = 'all',
$sql = '',
$enforce_sql = false
) {
database { $name:
ensure => present,
charset => $charset,
provider => 'mysql',
}
database_user { "${user}@${host}":
ensure => present,
password_hash => mysql_password($password),
provider => 'mysql',
require => Database[$name],
}
database_grant { "${user}@${host}/${name}":
privileges => $grant,
provider => 'mysql',
require => Database_user["${user}@${host}"],
}
$refresh = ! $enforce_sql
if $sql {
exec{ "${name}-import":
command => "/usr/bin/mysql ${name} < ${sql}",
logoutput => true,
refreshonly => $refresh,
require => Database_grant["${user}@${host}/${name}"],
subscribe => Database[$name],
}
}
}

View File

@ -0,0 +1,95 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::frontend {
include plugin_zabbix::params
service { $plugin_zabbix::params::frontend_service:
ensure => 'running',
enable => true,
hasstatus => true,
hasrestart => true,
}
package { $plugin_zabbix::params::frontend_pkg:
ensure => present,
}
file { $plugin_zabbix::params::frontend_config:
ensure => present,
content => template($plugin_zabbix::params::frontend_config_template),
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
file_line { 'php timezone':
path => $plugin_zabbix::params::frontend_service_config,
line => ' php_value date.timezone UTC',
match => 'php_value date.timezone',
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
# disable worker MPM, use prefork MPM which is required by mod_php:
case $::osfamily {
'RedHat': {
# default line: "HTTPD=/usr/sbin/httpd -W"
# target line: "HTTPD=/usr/sbin/httpd"
# we need to remove -W argument (disable mpm_worker)
# match parameter must match the common part of default and target lines
file_line { 'httpd_mpm_prefork':
path => '/etc/sysconfig/httpd',
line => 'HTTPD=/usr/sbin/httpd',
match => '^HTTPD=/usr/sbin/httpd',
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
}
'Debian': {
file { '/etc/apache2/mods-enabled/worker.conf':
ensure => absent,
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
file { '/etc/apache2/mods-enabled/worker.load':
ensure => absent,
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
}
default: {}
}
# postinst script in zabbix-frontend-php package creates an invalid symlink
# hack: in debconf disable apache configuration and restarting
# and create the symlink manually then restart apache
case $::osfamily {
'Debian': {
exec { 'configure zabbix-frontend-php package':
command => 'echo "zabbix-frontend-php zabbix-frontend-php/configure-apache boolean false\nzabbix-frontend-php zabbix-frontend-php/restart-webserver boolean false" | debconf-set-selections',
provider => 'shell',
before => Package[$plugin_zabbix::params::frontend_pkg],
}
file { '/etc/apache2/conf.d/zabbix.conf':
ensure => link,
target => $plugin_zabbix::params::frontend_service_config,
notify => Service[$plugin_zabbix::params::frontend_service],
require => Package[$plugin_zabbix::params::frontend_pkg],
}
}
default: {}
}
}

View File

@ -0,0 +1,97 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::ha::haproxy {
Haproxy::Service { use_include => true }
Haproxy::Balancermember { use_include => true }
$public_vip = hiera('public_vip')
$management_vip = hiera('management_vip')
$nodes_hash = hiera('nodes')
$primary_controller_nodes = filter_nodes($nodes_hash,'role','primary-controller')
$controllers = concat($primary_controller_nodes, filter_nodes($nodes_hash,'role','controller'))
Plugin_zabbix::Ha::Haproxy_service {
server_names => filter_hash($controllers, 'name'),
ipaddresses => filter_hash($controllers, 'internal_address'),
public_virtual_ip => $public_vip,
internal_virtual_ip => $management_vip,
}
plugin_zabbix::ha::haproxy_service { 'zabbix-agent':
order => '210',
listen_port => $plugin_zabbix::params::zabbix_ports['agent'],
balancermember_port => $plugin_zabbix::params::zabbix_ports['backend_agent'],
haproxy_config_options => {
'option' => ['tcpka'],
'timeout client' => '48h',
'timeout server' => '48h',
'balance' => 'roundrobin',
'mode' => 'tcp'
},
balancermember_options => 'check inter 5000 rise 2 fall 3',
}
plugin_zabbix::ha::haproxy_service { 'zabbix-server':
order => '200',
listen_port => $plugin_zabbix::params::zabbix_ports['server'],
balancermember_port => $plugin_zabbix::params::zabbix_ports['backend_server'],
haproxy_config_options => {
'option' => ['tcpka'],
'timeout client' => '48h',
'timeout server' => '48h',
'balance' => 'roundrobin',
'mode' => 'tcp'
},
balancermember_options => 'check inter 5000 rise 2 fall 3',
}
file_line { 'add binding to management VIP for horizon and zabbix':
path => '/etc/haproxy/conf.d/015-horizon.cfg',
after => 'listen horizon',
line => " bind ${management_vip}:80",
before => Exec['haproxy reload'],
}
exec { 'haproxy reload':
command => 'export OCF_ROOT="/usr/lib/ocf"; (ip netns list | grep haproxy) && ip netns exec haproxy /usr/lib/ocf/resource.d/fuel/ns_haproxy reload',
path => '/usr/bin:/usr/sbin:/bin:/sbin',
logoutput => true,
provider => 'shell',
tries => 10,
try_sleep => 10,
returns => [0, ''],
}
Haproxy::Listen <||> -> Exec['haproxy reload']
Haproxy::Balancermember <||> -> Exec['haproxy reload']
firewall { '998 zabbix agent vip':
proto => 'tcp',
action => 'accept',
port => $plugin_zabbix::params::zabbix_ports['agent'],
}
firewall { '998 zabbix server vip':
proto => 'tcp',
action => 'accept',
port => $plugin_zabbix::params::zabbix_ports['server'],
}
}

View File

@ -0,0 +1,78 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Register a service with HAProxy
define plugin_zabbix::ha::haproxy_service (
$order,
$server_names,
$ipaddresses,
$listen_port,
$public_virtual_ip,
$internal_virtual_ip,
$mode = undef,
$haproxy_config_options = { 'option' => ['httplog'], 'balance' => 'roundrobin' },
$balancermember_options = 'check',
$balancermember_port = $listen_port,
$define_cookies = false,
# use active-passive failover, mark all backends except the first one
# as backups
$define_backups = false,
# by default, listen only on internal VIP
$public = false,
$internal = true,
# if defined, restart this service before registering it with HAProxy
$require_service = undef,
# if true, configure this service before starting the haproxy service;
# HAProxy will refuse to start with no listening services defined
$before_start = false,
) {
if $public and $internal {
$virtual_ips = [$public_virtual_ip, $internal_virtual_ip]
} elsif $internal {
$virtual_ips = [$internal_virtual_ip]
} elsif $public {
$virtual_ips = [$public_virtual_ip]
}
haproxy::listen { $name:
order => $order,
ipaddress => $virtual_ips,
ports => $listen_port,
options => $haproxy_config_options,
mode => $mode,
}
haproxy::balancermember { $name:
order => $order,
listening_service => $name,
server_names => $server_names,
ipaddresses => $ipaddresses,
ports => $balancermember_port,
options => $balancermember_options,
define_cookies => $define_cookies,
define_backups => $define_backups,
}
if $require_service {
Service[$require_service] -> Haproxy::Listen[$name]
Service[$require_service] -> Haproxy::Balancermember[$name]
}
}

View File

@ -0,0 +1,16 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix {}

View File

@ -0,0 +1,109 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring(
$server_ips = undef,
) {
include plugin_zabbix::params
$api_hash = $plugin_zabbix::params::api_hash
if is_ip_address($::public_address) {
plugin_zabbix_usermacro { "${plugin_zabbix::params::host_name} IP_PUBLIC":
host => $plugin_zabbix::params::host_name,
macro => '{$IP_PUBLIC}',
value => $::public_address,
api => $api_hash,
}
}
if is_ip_address($::internal_address) {
plugin_zabbix_usermacro { "${plugin_zabbix::params::host_name} IP_MANAGEMENT":
host => $plugin_zabbix::params::host_name,
macro => '{$IP_MANAGEMENT}',
value => $::internal_address,
api => $api_hash,
}
}
if is_ip_address($::swift_address) {
plugin_zabbix_usermacro { "${plugin_zabbix::params::host_name} IP_STORAGE":
host => $plugin_zabbix::params::host_name,
macro => '{$IP_STORAGE}',
value => $::swift_address,
api => $api_hash,
}
}
class { 'plugin_zabbix::agent':
api_hash => $api_hash,
before => Class['plugin_zabbix::agent::scripts'],
}
class { 'plugin_zabbix::agent::scripts': }
plugin_zabbix::agent::userparameter {
'vfs.dev.discovery':
ensure => 'present',
command => '/etc/zabbix/scripts/vfs.dev.discovery.sh';
'vfs.mdadm.discovery':
ensure => 'present',
command => '/etc/zabbix/scripts/vfs.mdadm.discovery.sh';
'proc.vmstat':
key => 'proc.vmstat[*]',
command => 'grep \'$1\' /proc/vmstat | awk \'{print $$2}\'';
'crm.node.check':
key => 'crm.node.check[*]',
command => '/etc/zabbix/scripts/crm_node_check.sh $1';
}
#Linux
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template Fuel OS Linux":
host => $plugin_zabbix::params::host_name,
template => 'Template Fuel OS Linux',
api => $api_hash,
}
#Zabbix Agent
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App Zabbix Agent":
host => $plugin_zabbix::params::host_name,
template => 'Template App Zabbix Agent',
api => $api_hash,
}
Plugin_zabbix_usermacro { require => Class['plugin_zabbix::agent'] }
Plugin_zabbix_template_link { require => Class['plugin_zabbix::agent'] }
# Auto-registration
include plugin_zabbix::monitoring::nova_mon
include plugin_zabbix::monitoring::keystone_mon
include plugin_zabbix::monitoring::glance_mon
include plugin_zabbix::monitoring::cinder_mon
include plugin_zabbix::monitoring::swift_mon
include plugin_zabbix::monitoring::rabbitmq_mon
include plugin_zabbix::monitoring::horizon_mon
include plugin_zabbix::monitoring::mysql_mon
include plugin_zabbix::monitoring::memcached_mon
include plugin_zabbix::monitoring::haproxy_mon
include plugin_zabbix::monitoring::zabbixserver_mon
include plugin_zabbix::monitoring::openstack_virtual_mon
include plugin_zabbix::monitoring::neutron_mon
include plugin_zabbix::monitoring::openvswitch_mon
include plugin_zabbix::monitoring::ceilometer_mon
include plugin_zabbix::monitoring::ceilometer_compute_mon
include plugin_zabbix::monitoring::ceph_mon
include plugin_zabbix::monitoring::firewall_mon
}

View File

@ -0,0 +1,28 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::ceilometer_compute_mon {
include plugin_zabbix::params
#Ceilometer
if defined_in_state(Class['Ceilometer::Agent::Compute']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Ceilometer Compute":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Ceilometer Compute',
api => $plugin_zabbix::monitoring::api_hash,
}
}
}

View File

@ -0,0 +1,28 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::ceilometer_mon {
include plugin_zabbix::params
#Ceilometer
if defined_in_state(Class['Openstack::Ceilometer']) and defined_in_state(Class['Openstack::Controller']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Ceilometer":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Ceilometer',
api => $plugin_zabbix::monitoring::api_hash,
}
}
}

View File

@ -0,0 +1,32 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::ceph_mon {
include plugin_zabbix::params
if defined_in_state(Class['ceph::osds']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Ceph":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Ceph',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix::agent::userparameter {
'ceph_health':
key => 'ceph.health',
command => '/etc/zabbix/scripts/ceph_health.sh'
}
}
}

View File

@ -0,0 +1,53 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::cinder_mon {
include plugin_zabbix::params
#Cinder
if defined_in_state(Class['cinder::api']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Cinder API":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Cinder API',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Cinder API check":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Cinder API check',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix::agent::userparameter {
'cinder.api.status':
command => "/etc/zabbix/scripts/check_api.py cinder http ${::internal_address} 8776";
}
}
if defined_in_state(Class['cinder::scheduler']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Cinder Scheduler":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Cinder Scheduler',
api => $plugin_zabbix::monitoring::api_hash,
}
}
if defined_in_state(Class['cinder::volume']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Cinder Volume":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Cinder Volume',
api => $plugin_zabbix::monitoring::api_hash,
}
}
}

View File

@ -0,0 +1,34 @@
class plugin_zabbix::monitoring::firewall_mon {
include plugin_zabbix::params
#Iptables stats
if defined_in_state(Class['firewall']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App Iptables Stats":
host => $plugin_zabbix::params::host_name,
template => 'Template App Iptables Stats',
api => $plugin_zabbix::monitoring::api_hash,
}
package { 'iptstate':
ensure => present;
}
plugin_zabbix::agent::userparameter {
'iptstate.tcp':
command => 'sudo iptstate -1 | grep tcp | wc -l';
'iptstate.tcp.syn':
command => 'sudo iptstate -1 | grep SYN | wc -l';
'iptstate.tcp.timewait':
command => 'sudo iptstate -1 | grep TIME_WAIT | wc -l';
'iptstate.tcp.established':
command => 'sudo iptstate -1 | grep ESTABLISHED | wc -l';
'iptstate.tcp.close':
command => 'sudo iptstate -1 | grep CLOSE | wc -l';
'iptstate.udp':
command => 'sudo iptstate -1 | grep udp | wc -l';
'iptstate.icmp':
command => 'sudo iptstate -1 | grep icmp | wc -l';
'iptstate.other':
command => 'sudo iptstate -1 -t | head -2 |tail -1 | sed -e \'s/^.*Other: \(.*\) (.*/\1/\''
}
}
}

View File

@ -0,0 +1,45 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::glance_mon {
include plugin_zabbix::params
#Glance
if defined_in_state(Class['glance::api']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Glance API":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Glance API',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Glance API check":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Glance API check',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix::agent::userparameter {
'glance.api.status':
command => "/etc/zabbix/scripts/check_api.py glance http ${::internal_address} 9292";
}
}
if defined_in_state(Class['glance::registry']) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App OpenStack Glance Registry":
host => $plugin_zabbix::params::host_name,
template => 'Template App OpenStack Glance Registry',
api => $plugin_zabbix::monitoring::api_hash,
}
}
}

View File

@ -0,0 +1,47 @@
#
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
class plugin_zabbix::monitoring::haproxy_mon {
include plugin_zabbix::params
if defined_in_state(Class[Cluster::Haproxy]) {
plugin_zabbix_template_link { "${plugin_zabbix::params::host_name} Template App HAProxy":
host => $plugin_zabbix::params::host_name,
template => 'Template App HAProxy',
api => $plugin_zabbix::monitoring::api_hash,
}
plugin_zabbix::agent::userparameter {
'haproxy.be.discovery':
key => 'haproxy.be.discovery',
command => '/etc/zabbix/scripts/haproxy.sh -b';
'haproxy.be':
key => 'haproxy.be[*]',
command => '/etc/zabbix/scripts/haproxy.sh -v $1';
'haproxy.fe.discovery':
key => 'haproxy.fe.discovery',
command => '/etc/zabbix/scripts/haproxy.sh -f';
'haproxy.fe':
key => 'haproxy.fe[*]',
command => '/etc/zabbix/scripts/haproxy.sh -v $1';
'haproxy.sv.discovery':
key => 'haproxy.sv.discovery',
command => '/etc/zabbix/scripts/haproxy.sh -s';
'haproxy.sv':
key => 'haproxy.sv[*]',
command => '/etc/zabbix/scripts/haproxy.sh -v $1';
}
}
}

Some files were not shown because too many files have changed in this diff Show More