Compare commits

..

No commits in common. "master" and "mdmcertcheck" have entirely different histories.

21 changed files with 17 additions and 3029 deletions

View File

@ -1,3 +0,0 @@
#docker zabbix
UserParameter=docker[*],sudo /etc/zabbix/scripts/docker.sh "$1" "$2" "$3"

View File

@ -1,65 +0,0 @@
#!/bin/bash
# ABOUT docker for zabbix
# author mikedmorto 2021 year
export LC_ALL=""
export LANG="en_US.UTF-8"
version="0.1"
DOCKER="/usr/bin/docker"
JSON=""
#### PARAMETRS ####
METRIC="$1"
ITEM="$2"
case "$METRIC" in
discovery)
JSON="{ \"data\":["
DCLIST=""
# get all docker containers list of id
DCLIST=`${DOCKER} ps -a | tail -n +2 | awk '{print $1}'`
# show all docker id
for DOCKERID in ${DCLIST}; do
JSON=${JSON}" {\"{#DOCKERID}\":\"${DOCKERID}\"},"
done
JSON=${JSON::-1}
JSON=${JSON}"]}"
echo ${JSON}
exit 0
;;
# get container status
docker.container_running)
RET=`${DOCKER} stats --no-stream | tail -n +2 | awk -v IT="${ITEM}" ' BEGIN {$count=0;} { if ($1 == IT) count += 1 } END {if (count > 1) print ""; else if (count == 1) print 1; else if (count == 0) print 0} '`
echo ${RET}
exit 0
;;
script.version)
echo ${version}
exit 0
;;
help)
echo "please use these parametrs
{
discovery
docker.container_running
script.version
}"
;;
*)
echo ""
;;
esac

View File

@ -1,182 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-09-30T09:28:57Z</date>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>mdm_docker_active</template>
<name>mdm_docker_active</name>
<description/>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Docker</name>
</application>
<application>
<name>Docker-Containers</name>
</application>
</applications>
<items>
<item>
<name>docker script version</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>docker[script.version]</key>
<delay>1m</delay>
<history>90d</history>
<trends>0</trends>
<status>0</status>
<value_type>4</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Docker</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
</items>
<discovery_rules>
<discovery_rule>
<name>DockerDiscovery</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>docker[discovery]</key>
<delay>1m</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>
<evaltype>0</evaltype>
<formula/>
<conditions/>
</filter>
<lifetime>7d</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>Container $2 running</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>docker[docker.container_running,{#DOCKERID}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Docker-Containers</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
</item_prototypes>
<trigger_prototypes>
<trigger_prototype>
<expression>{mdm_docker_active:docker[docker.container_running,{#DOCKERID}].last()}=0</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Docker cont {#DOCKERID} is not running</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
</trigger_prototypes>
<graph_prototypes/>
<host_prototypes/>
<jmx_endpoint/>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>

View File

@ -1,5 +0,0 @@
Docker monitoring for zabbix
docker.sh - script

View File

@ -1,533 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-06-13T08:07:09Z</date>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>MyTemplates</name>
</group>
</groups>
<templates>
<template>
<template>mdm_iostat_agent active</template>
<name>mdm_iostat_agent active</name>
<description/>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>MyTemplates</name>
</group>
</groups>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>IOSTAT: Hard disk drive discovery</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[]</key>
<delay>1h</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>
<evaltype>0</evaltype>
<formula/>
<conditions/>
</filter>
<lifetime>1d</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>iostat: $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[avgqu,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>req</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>Средний размер очереди.</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[await,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>ms</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>Среднее время ожидания запроса в очереди</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: KBps $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[read,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>Bps</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing>
<step>
<type>10</type>
<params/>
</step>
<step>
<type>1</type>
<params>1024</params>
</step>
</preprocessing>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: read req on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[rs,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>req</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>Запросов на чтение</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[svctm,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>ms</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>Среднее время выполнения операций на диске</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[util,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>%</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: KBps $1 on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[write,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>Bps</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing>
<step>
<type>10</type>
<params/>
</step>
<step>
<type>1</type>
<params>1024</params>
</step>
</preprocessing>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
<item_prototype>
<name>iostat: write req on $2</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>iostat[ws,{#HDNAME}]</key>
<delay>30s</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>req</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description>Запросов на запись</description>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>iostat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
</item_prototypes>
<trigger_prototypes/>
<graph_prototypes>
<graph_prototype>
<name>iostat: {#HDNAME} speed</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>1</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>009900</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_iostat_agent active</host>
<key>iostat[read,{#HDNAME}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>DD0000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_iostat_agent active</host>
<key>iostat[write,{#HDNAME}]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
<graph_prototype>
<name>iostat: {#HDNAME} util</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>1</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>00EEEE</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_iostat_agent active</host>
<key>iostat[util,{#HDNAME}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>00DD00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_iostat_agent active</host>
<key>iostat[rs,{#HDNAME}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>0</drawtype>
<color>FF6666</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_iostat_agent active</host>
<key>iostat[ws,{#HDNAME}]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
</graph_prototypes>
<host_prototypes/>
<jmx_endpoint/>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>

View File

@ -1,9 +1,6 @@
mdmcertcheck.sh - main shell script for check cert status mdmcertcheck.sh - main shell script for check cert status
certlist.cfg - configuration file for cert list certlist.cfg - configuration file for cert list
zabbix_3.x_template.xml - zabbix 3.x template zabbix_3.x_template.xml - zabbix 3.x template
mdmsslcertcheck.docker - docker file mdmsslcertcheck.docker - docker file
@ -12,13 +9,25 @@ build and run docker file
docker run --name certchecker --restart always -v /your/path/to/zabbix:/etc/zabbix/--privileged -d image:1.0 docker run --name certchecker --restart always -v /your/path/to/zabbix:/etc/zabbix/--privileged -d image:1.0
and place zabbix config with scripts directory and configs and place zabbix config with scripts directory and configs
and place sh in script and place sh in script
and certlist.cfg and wtire path into script and certlist.cfg and wtire path into script
remember about zabbix config, enable it!!! remember about zabbix config, enable it!!!
####### USER-DEFINED MONITORED PARAMETERS #######
### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# The following characters are not allowed:
# \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
# Additionally, newline characters are not allowed.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0
UnsafeUserParameters=1 UnsafeUserParameters=1
have a lot fun! have a lot fun!

View File

@ -18,7 +18,7 @@ VOLUME [ "/sys/fs/cgroup" ]
RUN yum update -y --nogpgcheck RUN yum update -y --nogpgcheck
# install soft # install soft
RUN yum install -y --nogpgcheck epel-release RUN yum install -y --nogpgcheck epel-release
RUN yum install -y --nogpgcheck vim git cmake3 openssh-clients boost-devel gcc make gcc-c++ wget fish openssl RUN yum install -y --nogpgcheck vim git cmake3 openssh-clients boost-devel gcc make gcc-c++ wget fish
RUN yum install -y zabbix30-agent RUN yum install -y zabbix30-agent
CMD ["/usr/sbin/init"] CMD ["/usr/sbin/init"]

View File

@ -1,168 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-06-14T12:23:50Z</date>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>mdm netstat connections active</template>
<name>mdm netstat connections active</name>
<description/>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Netstat</name>
</application>
</applications>
<items>
<item>
<name>Http established cons on 80 and 443 ports</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>netstat-conn[established]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>conn</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Netstat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Http time waiting conns on 80 and 443 ports</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>netstat-conn[time_wait]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>conn</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Netstat</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
</items>
<discovery_rules/>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<graphs>
<graph>
<name>Netstat: connections on 80 and 443 ports</name>
<width>600</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>0</show_work_period>
<show_triggers>0</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>2</drawtype>
<color>AA00AA</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm netstat connections active</host>
<key>netstat-conn[established]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>00DD00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm netstat connections active</host>
<key>netstat-conn[time_wait]</key>
</item>
</graph_item>
</graph_items>
</graph>
</graphs>
</zabbix_export>

View File

@ -1,3 +0,0 @@
#netstat connections status
# $1 METRIC
UserParameter=netstat-conn[*],/etc/zabbix/scripts/netstat_conn.sh "$1"

View File

@ -1,39 +0,0 @@
#!/bin/bash
#Netstat connections monitoring
METRIC="$1"
if [[ -z "$1" ]]; then
echo "Please enter metric"
exit 1
fi
CACHETTL="55" # Время действия кеша в секундах (чуть меньше чем период опроса элементов)
CACHE="/tmp/netstat-status-`echo netstat| md5sum | cut -d" " -f1`.cache"
if [ -s "$CACHE" ]; then
TIMECACHE=`stat -c"%Z" "$CACHE"`
else
TIMECACHE=0
fi
TIMENOW=`date '+%s'`
if [ "$(($TIMENOW - $TIMECACHE))" -gt "$CACHETTL" ]; then
netstat -tan|grep -e ':80\|:443' > $CACHE || exit 1
fi
case $METRIC in
'established')
cat $CACHE | grep "ESTABLISHED" | wc -l
;;
'time_wait')
cat $CACHE | grep "TIME_WAIT" | wc -l
;;
*)
echo "Not selected metric"
exit 0
;;
esac

View File

@ -1,607 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-06-14T11:47:45Z</date>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>MyTemplates</name>
</group>
</groups>
<templates>
<template>
<template>mdm_nginx_agent active</template>
<name>mdm_nginx_agent active</name>
<description/>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>MyTemplates</name>
</group>
</groups>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<items>
<item>
<name>Nginx: connections accepted per sec</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>nginx[accepts,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>c/sec</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing>
<step>
<type>10</type>
<params/>
</step>
</preprocessing>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: connects active</name>
<type>7</type>
<snmp_community>public</snmp_community>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>nginx[active,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: connections handled per sec</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>nginx[handled,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>c/sec</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing>
<step>
<type>10</type>
<params/>
</step>
</preprocessing>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: connections reading</name>
<type>7</type>
<snmp_community>public</snmp_community>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>nginx[reading,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: requests per sec</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>nginx[requests,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units>r/sec</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing>
<step>
<type>10</type>
<params/>
</step>
</preprocessing>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: connections waiting</name>
<type>7</type>
<snmp_community>public</snmp_community>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>nginx[waiting,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: connections writing</name>
<type>7</type>
<snmp_community>public</snmp_community>
<snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid>
<key>nginx[writing,{$NGINX_STATS_URL}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Nginx: Number of processes $1</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>proc.num[nginx]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Nginx</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
</items>
<discovery_rules/>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{mdm_nginx_agent active:nginx[active,{$NGINX_STATS_URL}].last(0)}&gt;{$NGINX_CON_NUM}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: many active connections on {HOST.NAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].avg(240)}&gt;{$NGINX_REQ_NUM}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: many requests on {HOST.NAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies>
<dependency>
<name>Nginx: too many requests on {HOST.NAME}</name>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].avg(240)}&gt;{$NGINX_REQ_NUM}*1.5</expression>
<recovery_expression/>
</dependency>
</dependencies>
<tags/>
</trigger>
<trigger>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].last(0)}&gt;{$NGINX_REQ_NUM}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: many requests on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies>
<dependency>
<name>Nginx: too many requests on {HOSTNAME}</name>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].last(0)}&gt;{$NGINX_REQ_NUM}*1.3</expression>
<recovery_expression/>
</dependency>
</dependencies>
<tags/>
</trigger>
<trigger>
<expression>{mdm_nginx_agent active:proc.num[nginx].last(0)}&lt;1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: nginx is not running on {HOST.NAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>5</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].avg(240)}&gt;{$NGINX_REQ_NUM}*1.5</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: too many requests on {HOST.NAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_nginx_agent active:nginx[requests,{$NGINX_STATS_URL}].last(0)}&gt;{$NGINX_REQ_NUM}*1.3</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Nginx: too many requests on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
</triggers>
<graphs>
<graph>
<name>Nginx: Connections</name>
<width>600</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>0</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>4</drawtype>
<color>3333FF</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[active,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>FF6666</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[writing,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>0</drawtype>
<color>EEEE00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[reading,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>3</sortorder>
<drawtype>0</drawtype>
<color>00CC00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[waiting,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
</graph_items>
</graph>
<graph>
<name>Nginx: Requests</name>
<width>600</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>0</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>1</sortorder>
<drawtype>5</drawtype>
<color>FF3333</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[requests,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>2</drawtype>
<color>00EE00</color>
<yaxisside>1</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm_nginx_agent active</host>
<key>nginx[accepts,{$NGINX_STATS_URL}]</key>
</item>
</graph_item>
</graph_items>
</graph>
</graphs>
</zabbix_export>

View File

@ -1,2 +0,0 @@
UserParameter=nginx[*],/etc/zabbix/scripts/nginx-stats.sh "none" "$1" "$2"

View File

@ -1,54 +0,0 @@
#!/bin/bash
##### OPTIONS VERIFICATION #####
if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
exit 1
fi
##### PARAMETERS #####
RESERVED="$1"
METRIC="$2"
STATSURL="$3"
CURL="/usr/bin/curl"
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.nginx.`echo $STATSURL | md5sum | cut -d" " -f1`.cache"
EXEC_TIMEOUT="1"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ -s "${CACHE_FILE}" ]; then
CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
echo "" >> "${CACHE_FILE}" # !!!
DATACACHE=`${CURL} --insecure -s "${STATSURL}" 2>&1`
echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
chmod 640 "${CACHE_FILE}"
fi
#
if [ "${METRIC}" = "active" ]; then
cat "${CACHE_FILE}" | grep "Active connections" | cut -d':' -f2
fi
if [ "${METRIC}" = "accepts" ]; then
cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f2
fi
if [ "${METRIC}" = "handled" ]; then
cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f3
fi
if [ "${METRIC}" = "requests" ]; then
cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f4
fi
if [ "${METRIC}" = "reading" ]; then
cat "${CACHE_FILE}" | grep "Reading" | cut -d':' -f2 | cut -d' ' -f2
fi
if [ "${METRIC}" = "writing" ]; then
cat "${CACHE_FILE}" | grep "Writing" | cut -d':' -f3 | cut -d' ' -f2
fi
if [ "${METRIC}" = "waiting" ]; then
cat "${CACHE_FILE}" | grep "Waiting" | cut -d':' -f4 | cut -d' ' -f2
fi
#
exit 0

View File

@ -1,5 +0,0 @@
#php-fpm status
# $1 METRIC
# $2 FPM URL
# $3 FPM PORT
UserParameter=php-fpm[*],/etc/zabbix/scripts/fpm-status.sh "$1" "$2" "$3"

View File

@ -1,80 +0,0 @@
#!/bin/bash
##### OPTIONS VERIFICATION #####
if [ -z "$1" ]; then
exit 1
fi
##### PARAMETERS #####
METRIC="$1"
POOL_PORT="${3:-9001}"
STATSURL="${2:-http://localhost/fpm-status?port=$POOL_PORT}"
CURL="/usr/bin/curl"
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.fpm-status.`echo $STATSURL | md5sum | cut -d" " -f1`.cache"
EXEC_TIMEOUT="1"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ -s "${CACHE_FILE}" ]; then
CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
echo "" >> "${CACHE_FILE}" # !!!
DATACACHE=`${CURL} --insecure -s "${STATSURL}" 2>&1`
echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
chmod 640 "${CACHE_FILE}"
fi
#
case $METRIC in
pool)
grep "^pool:" $CACHE_FILE | cut -d ':' -f 2 | sed 's|^\s\+||'
;;
process_manager)
grep "^process manager:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
start_time)
grep "^start time:" $CACHE_FILE | sed 's|^start time:\s\+||'
;;
start_since)
grep "^start since:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
accepted_conn)
grep "^accepted conn:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
listen_queue)
grep "^listen queue:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
max_listen_queue)
grep "^max listen queue:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
listen_queue_len)
grep "^listen queue len:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
idle_processes)
grep "^idle processes:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
active_processes)
grep "^active processes:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
total_processes)
grep "^total processes:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
max_active_processes)
grep "^max active processes:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
max_children_reached)
grep "^max children reached:" $CACHE_FILE | cut -d ":" -f 2 | sed 's|^\s\+||'
;;
*)
echo "Unsupported metric $METRIC"
exit 1
;;
esac
#
exit 0

View File

@ -1,418 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-06-14T12:27:54Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>mdm php-fpm active</template>
<name>mdm php-fpm active</name>
<description/>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<items>
<item>
<name>php-fpm - ping check</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>fpm[ping,{$POOL_PORT}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>60d</trends>
<status>1</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>php-fpm - number of active processes</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>php-fpm[active_processes,{$FPM_URL},{$FPM_PORT}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>60d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>php-fpm - number of idle processes</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>php-fpm[idle_processes,{$FPM_URL},{$FPM_PORT}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>60d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>php-fpm - number of total processes</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>php-fpm[total_processes,{$FPM_URL},{$FPM_PORT}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>60d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>Number of running processes $1</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>proc.num[{$FPM_PROCESS_NAME}]</key>
<delay>1m</delay>
<history>1w</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>php-fpm</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
</items>
<discovery_rules/>
<httptests/>
<macros>
<macro>
<macro>{$FPM_PROCESS_IDLE_CR}</macro>
<value>2</value>
</macro>
<macro>
<macro>{$FPM_PROCESS_IDLE_TR}</macro>
<value>10</value>
</macro>
<macro>
<macro>{$FPM_PROCESS_NAME}</macro>
<value>php-fpm</value>
</macro>
<macro>
<macro>{$POOL_PORT}</macro>
<value>9001</value>
</macro>
</macros>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{mdm php-fpm active:fpm[ping,{$POOL_PORT}].last(0)}&lt;&gt;0</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm is not running on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>1</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies>
<dependency>
<name>php-fpm process is not running on {HOSTNAME}</name>
<expression>{mdm php-fpm active:proc.num[{$FPM_PROCESS_NAME}].last(0)}&lt;1</expression>
<recovery_expression/>
</dependency>
</dependencies>
<tags/>
</trigger>
<trigger>
<expression>{mdm php-fpm active:php-fpm[idle_processes,{$FPM_URL},{$FPM_PORT}].last(0)}&lt;{$FPM_PROCESS_IDLE_TR}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm number of idle processes is too low on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm php-fpm active:php-fpm[idle_processes,{$FPM_URL},{$FPM_PORT}].nodata(3m)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm number of idle processes nodata &gt; 180s {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm php-fpm active:php-fpm[idle_processes,{$FPM_URL},{$FPM_PORT}].last(0)}&lt;{$FPM_PROCESS_IDLE_CR}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm number of idle process is critical on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm php-fpm active:proc.num[{$FPM_PROCESS_NAME}].last(0)}&lt;1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm process is not running on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm php-fpm active:php-fpm[total_processes,{$FPM_URL},{$FPM_PORT}].last()}&gt;{$PHPFPM_MAXPROC}</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>php-fpm total processes is too high on {HOSTNAME}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
</triggers>
<graphs>
<graph>
<name>php-fpm proccess</name>
<width>600</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>0</show_work_period>
<show_triggers>0</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>2</drawtype>
<color>009900</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm php-fpm active</host>
<key>php-fpm[total_processes,{$FPM_URL},{$FPM_PORT}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>2</drawtype>
<color>CC0000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm php-fpm active</host>
<key>php-fpm[idle_processes,{$FPM_URL},{$FPM_PORT}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>5</drawtype>
<color>0000BB</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>mdm php-fpm active</host>
<key>php-fpm[active_processes,{$FPM_URL},{$FPM_PORT}]</key>
</item>
</graph_item>
</graph_items>
</graph>
</graphs>
</zabbix_export>

View File

@ -1,527 +0,0 @@
#!/bin/bash
# ABOUT softether vpn for zabbix
# author mikedmorto 2026 year
export LC_ALL=""
export LANG="en_US.UTF-8"
version="3.3"
. /etc/zabbix/scripts/sevpn3.cfg
JSON=""
##### PARAMETERS#####
METRIC="$1"
ITEM="$2"
API_URL="https://${URL}/api/"
CURL_OPTS="-s -k"
[ "$API_INSECURE" = "1" ] && CURL_OPTS="$CURL_OPTS -k"
api_call() {
local method=$1
local params=$2
[ -z "$params" ] && params="{}"
local id="1"
local data=$(cat <<EOF
{
"jsonrpc": "2.0",
"id": "$id",
"method": "$method",
"params": $params
}
EOF
)
curl $CURL_OPTS -X POST "$API_URL" \
-H "X-VPNADMIN-HUBNAME: " \
-H "X-VPNADMIN-PASSWORD: $PWD" \
-H "Content-Type: application/json" \
-d "$data" 2>/dev/null
}
case "$METRIC" in
discovery)
hubs_json=$(api_call "EnumHub")
# ... проверка ошибок
hubs=$(echo "$hubs_json" | jq -r '.result.HubList[].HubName_str' 2>/dev/null)
JSON='{"data":['
first_hub=1
for hub in $hubs; do
# Добавляем сам хаб
if [ $first_hub -eq 1 ]; then first_hub=0; else JSON="${JSON},"; fi
JSON="${JSON}{\"{#HUB_NAME}\":\"$hub\"}"
# Пользователи хаба
users_json=$(api_call "EnumUser" "{\"HubName_str\":\"$hub\"}")
if ! echo "$users_json" | jq -e '.error' >/dev/null 2>&1; then
users=$(echo "$users_json" | jq -r '.result.UserList[].Name_str' 2>/dev/null)
for user in $users; do
JSON="${JSON},{\"{#HUB_USER_NAME}\":\"$hub,$user\"}"
done
fi
# Каскады хаба
links_json=$(api_call "EnumLink" "{\"HubName_str\":\"$hub\"}")
if ! echo "$links_json" | jq -e '.error' >/dev/null 2>&1; then
links=$(echo "$links_json" | jq -r '.result.LinkList[].AccountName_utf' 2>/dev/null)
for link in $links; do
JSON="${JSON},{\"{#HUB_CASCADE_NAME}\":\"$hub,$link\"}"
done
fi
done
# --- Локальные мосты (один раз после цикла по хабам) ---
bridges_json=$(api_call "EnumLocalBridge")
if ! echo "$bridges_json" | jq -e '.error' >/dev/null 2>&1; then
while IFS= read -r bridge_entry; do
# bridge_entry имеет формат "hub,device"
JSON="${JSON},{\"{#HUB_BRIDGE_NAME}\":\"$bridge_entry\"}"
done < <(echo "$bridges_json" | jq -r '.result.LocalBridgeList[] | "\(.HubNameLB_str),\(.DeviceName_str)"' 2>/dev/null)
fi
JSON="${JSON}]}"
echo "$JSON"
;;
script.version)
echo ${version}
;;
srv.uptime)
resp=$(api_call "GetServerStatus")
# Проверка на ошибку API
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
# Извлекаем дату запуска из поля StartTime_dt
start_date_iso=$(echo "$resp" | jq -r '.result.StartTime_dt' 2>/dev/null)
if [ -z "$start_date_iso" ] || [ "$start_date_iso" = "null" ]; then
echo 0
exit 1
fi
# Преобразуем ISO8601 в timestamp
start_ts=$(date -d "$start_date_iso" +%s 2>/dev/null)
if [ -z "$start_ts" ]; then
echo 0
exit 1
fi
now=$(date +%s)
uptime=$((now - start_ts))
echo "$uptime"
;;
srv.number_of_users)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
# Извлекаем количество пользователей (поле Users)
users=$(echo "$resp" | jq -r '.result.NumUsers_u32' 2>/dev/null)
# Если поле отсутствует или null, выводим 0
if [ -z "$users" ] || [ "$users" = "null" ]; then
echo 0
else
echo "$users"
fi
;;
srv.number_of_ip_address_tables)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
echo "$resp" | jq -r '.result.NumIpTables_u32' 2>/dev/null || echo 0
;;
srv.number_of_mac_address_tables)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
echo "$resp" | jq -r '.result.NumMacTables_u32' 2>/dev/null || echo 0
;;
srv.number_of_sessions)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
echo "$resp" | jq -r '.result.NumSessionsTotal_u32' 2>/dev/null || echo 0
;;
srv.number_of_virtual_hubs)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
echo "$resp" | jq -r '.result.NumHubTotal_u32' 2>/dev/null || echo 0
;;
srv.number_of_active_sockets)
resp=$(api_call "GetServerStatus")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
echo "$resp" | jq -r '.result.NumTcpConnections_u32' 2>/dev/null || echo 0
;;
srv.l2tp_status)
echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD IPsecGet | grep "L2TP over IPsec Server Function Enabled" | awk -F"|" '{print $2}'`
;;
srv.openvpn_status)
echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD openvpnget | grep "OpenVPN Clone Server Enabled" | awk -F"|" '{print $2}'`
;;
srv.version)
resp=$(api_call "GetServerInfo")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | awk 'FNR==3'
else
version=$(echo "$resp" | jq -r '.result.ServerVersionString_str' 2>/dev/null)
[ -n "$version" ] && [ "$version" != "null" ] && echo "$version" || $VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | awk 'FNR==3'
fi
;;
# hub.if.out.broad
hub.if.out.broad)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result."Send.BroadcastBytes_u64"' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.if.in.broad
hub.if.in.broad)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result."Recv.BroadcastBytes_u64"' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.if.out.uni
hub.if.out.uni)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result."Send.UnicastBytes_u64"' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.if.in.uni
hub.if.in.uni)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result."Recv.UnicastBytes_u64"' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.sessions-bridge
hub.sessions-bridge)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result.NumSessionsBridge_u32' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.sessions-client
hub.sessions-client)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result.NumSessionsClient_u32' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.sessions-all
hub.sessions-all)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result.NumSessions_u32' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
# hub.securenat
hub.securenat)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo "false"
exit 1
fi
val=$(echo "$resp" | jq -r '.result.SecureNATEnabled_bool' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo "false"
else
# Приводим к строке true/false (Zabbix ожидает строку)
echo "$val"
fi
;;
# hub.type
hub.type)
resp=$(api_call "GetHubStatus" "{\"HubName_str\":\"$ITEM\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
echo 0
exit 1
fi
val=$(echo "$resp" | jq -r '.result.HubType_u32' 2>/dev/null)
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo 0
else
echo "$val"
fi
;;
cas.status)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
status=$(echo "$resp" | jq -r '.result.Connected_bool' 2>/dev/null)
if [ "$status" = "true" ]; then
echo "Connection Completed (Session Established)"
else
echo "offline"
fi
;;
cas.if.out.broad)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result."Send.BroadcastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
;;
cas.if.in.broad)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result."Recv.BroadcastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
;;
cas.if.out)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result.TotalSendSize_u64' 2>/dev/null)
echo "${val:-0}"
;;
cas.if.in)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result.TotalRecvSize_u64' 2>/dev/null)
echo "${val:-0}"
;;
cas.if.out.uni)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result."Send.UnicastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
;;
cas.if.in.uni)
HUB=${ITEM%,*}
CAS=${ITEM##*,}
resp=$(api_call "GetLinkStatus" "{\"HubName_Ex_str\":\"$HUB\",\"AccountName_utf\":\"$CAS\"}")
val=$(echo "$resp" | jq -r '.result."Recv.UnicastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
;;
br.status)
HUB=${ITEM%,*}
BR=${ITEM##*,}
resp=$(api_call "EnumLocalBridge")
online=$(echo "$resp" | jq -r --arg hub "$HUB" --arg br "$BR" '.result.LocalBridgeList[] | select(.HubNameLB_str == $hub and .DeviceName_str == $br) | .Online_bool' 2>/dev/null | head -1)
if [ "$online" = "true" ]; then
echo "Operating"
else
echo "false"
fi
;;
usr.if.out.broad)
HUB=${ITEM%,*}
USER=${ITEM##*,}
resp=$(api_call "GetUser" "{\"HubName_str\":\"$HUB\",\"Name_str\":\"$USER\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Broadcast Total Size" | sed -e 's/[^0-9]//g'
else
val=$(echo "$resp" | jq -r '.result."Send.BroadcastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
fi
;;
# usr.if.in.broad
usr.if.in.broad)
HUB=${ITEM%,*}
USER=${ITEM##*,}
resp=$(api_call "GetUser" "{\"HubName_str\":\"$HUB\",\"Name_str\":\"$USER\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Broadcast Total Size" | sed -e 's/[^0-9]//g'
else
val=$(echo "$resp" | jq -r '.result."Recv.BroadcastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
fi
;;
# usr.if.out.uni
usr.if.out.uni)
HUB=${ITEM%,*}
USER=${ITEM##*,}
resp=$(api_call "GetUser" "{\"HubName_str\":\"$HUB\",\"Name_str\":\"$USER\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Unicast Total Size" | sed -e 's/[^0-9]//g'
else
val=$(echo "$resp" | jq -r '.result."Send.UnicastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
fi
;;
# usr.if.in.uni
usr.if.in.uni)
HUB=${ITEM%,*}
USER=${ITEM##*,}
resp=$(api_call "GetUser" "{\"HubName_str\":\"$HUB\",\"Name_str\":\"$USER\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Unicast Total Size" | sed -e 's/[^0-9]//g'
else
val=$(echo "$resp" | jq -r '.result."Recv.UnicastBytes_u64"' 2>/dev/null)
echo "${val:-0}"
fi
;;
# usr.lastlogin
usr.lastlogin)
HUB=${ITEM%,*}
USER=${ITEM##*,}
resp=$(api_call "GetUser" "{\"HubName_str\":\"$HUB\",\"Name_str\":\"$USER\"}")
if echo "$resp" | jq -e '.error' >/dev/null 2>&1; then
$VCMD /SERVER ${URL} /adminhub:"$HUB" /PASSWORD:"${PWD}" /CMD UserGet "${USER}" | grep "Updated on" | awk -F"|" '{print $2}'
else
updated=$(echo "$resp" | jq -r '.result.UpdatedTime_dt' 2>/dev/null)
if [ -n "$updated" ] && [ "$updated" != "null" ]; then
# Преобразуем ISO дату в timestamp
ts=$(date -d "$updated" +%s 2>/dev/null)
echo "${ts:-0}"
else
echo 0
fi
fi
;;
help)
echo "please use these params
{
discovery
srv.uptime
srv.number_of_users
srv.number_of_ip_address_tables
srv.number_of_mac_address_tables
srv.number_of_sessions
srv.number_of_virtual_hubs
srv.number_of_active_sockets
srv.l2tp_status
srv.openvpn_status
srv.version
hub.if.out.broad
hub.if.in.broad
hub.if.out.uni
hub.if.in.uni
hub.sessions-bridge
hub.sessions-client
hub.sessions-all
hub.securenat
hub.type
cas.status
cas.if.in.broad
cas.if.out.broad
cas.if.out
cas.if.in
cas.if.in.uni
cas.if.out.uni
br.status
usr.lastlogin
usr.if.out.broad
usr.if.in.broad
usr.if.in.uni
usr.if.out.uni
script.version
}"
;;
*)
echo ""
;;
esac

View File

@ -1,306 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2021-06-14T11:56:47Z</date>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>mdm_test_backup_active</template>
<name>mdm_test_backup_active</name>
<description/>
<groups>
<group>
<name>MDM</name>
</group>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>backup</name>
</application>
</applications>
<items>
<item>
<name>test_logfile</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>test_backup[log]</key>
<delay>30s</delay>
<history>90d</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>backup</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
<item>
<name>state</name>
<type>7</type>
<snmp_community/>
<snmp_oid/>
<key>test_backup[state]</key>
<delay>20s</delay>
<history>52w</history>
<trends>0</trends>
<status>0</status>
<value_type>4</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>backup</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<master_item/>
</item>
</items>
<discovery_rules/>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
<triggers>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].nodata(3m)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: no data</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].str(on backup,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: on backup</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].str(on rotation,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: on rotation</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].str(on sending,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: on sending</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].str(starting script,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: starting</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>1</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[state].str(fail,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>backup: {ITEM.LASTVALUE1}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger>
<trigger>
<expression>({mdm_test_backup_active:test_backup[log].last()}&lt;&gt;1 and {mdm_test_backup_active:test_backup[log].time()}&gt;{$BACKUP_ROTATION_TIME})</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Today, after macro-time, script was not running</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description>отсутствует резервная копия после времени, которое заданно в макросе&#13;
Time format:170200 ( 17 - hours, 02 minutes, 00 seconds)&#13;
Macros name: {$BACKUP_ROTATION_TIME}</description>
<type>0</type>
<manual_close>0</manual_close>
<dependencies>
<dependency>
<name>backup: on backup</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on backup,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: on rotation</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on rotation,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: on sending</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on sending,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: starting</name>
<expression>{mdm_test_backup_active:test_backup[state].str(starting script,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: {ITEM.LASTVALUE1}</name>
<expression>{mdm_test_backup_active:test_backup[state].str(fail,#1)}=1</expression>
<recovery_expression/>
</dependency>
</dependencies>
<tags/>
</trigger>
<trigger>
<expression>{mdm_test_backup_active:test_backup[log].last()}&lt;&gt;1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Today script was not running</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>1</status>
<priority>3</priority>
<description>отсутствует резервная копия</description>
<type>0</type>
<manual_close>0</manual_close>
<dependencies>
<dependency>
<name>backup: on backup</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on backup,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: on rotation</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on rotation,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: on sending</name>
<expression>{mdm_test_backup_active:test_backup[state].str(on sending,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: starting</name>
<expression>{mdm_test_backup_active:test_backup[state].str(starting script,#1)}=1</expression>
<recovery_expression/>
</dependency>
<dependency>
<name>backup: {ITEM.LASTVALUE1}</name>
<expression>{mdm_test_backup_active:test_backup[state].str(fail,#1)}=1</expression>
<recovery_expression/>
</dependency>
</dependencies>
<tags/>
</trigger>
</triggers>
</zabbix_export>

View File

@ -1,3 +0,0 @@
#test log and state file
UserParameter=test_backup[*],sudo /etc/zabbix/scripts/test_backup.sh $1

View File

@ -1,21 +0,0 @@
#!/bin/bash
case $1 in
log)
STATUS=$(tail -n 2 /var/log/backup.log | head -n 1 | grep $(date +%Y-%m-%d) | cut -f 3 -d " ")
if [[ $STATUS == "SUCCESS_BACKUP" ]]
then echo "1";
else echo "0";
fi
;;
state)
test -f /var/tmp/backuper.state
if [[ $? == "0" ]]
then
cat /var/tmp/backuper.state
else
echo "none"
fi
;;
esac

View File

@ -5,7 +5,7 @@
export LC_ALL="" export LC_ALL=""
export LANG="en_US.UTF-8" export LANG="en_US.UTF-8"
version="1.5" version="1.4"
XE="/opt/xensource/bin/xe" XE="/opt/xensource/bin/xe"
# path to mdmxen cfg backup system # path to mdmxen cfg backup system
@ -26,7 +26,7 @@ XCPU_LIST=""
# get all cpu numbers # get all cpu numbers
XCPU_LIST=`cat "/proc/cpuinfo" | grep processor | tr -d ' ' | awk -F":" '{print "cpu"$2}'` XCPU_LIST=`cat "/proc/cpuinfo" | grep processor | tr -d ' ' | awk -F":" '{print "cpu"$2}'`
XSR_LIST=`${XE} sr-list params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"` XSR_LIST=`${XE} sr-list params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"`
XVM_LIST=`${XE} vm-list is-control-domain=false is-a-snapshot=false params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"` XVM_LIST=`${XE} vm-list is-control-domain=false params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"`
#show all cpu #show all cpu