| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- <?xml version="1.0" encoding="UTF-8"?>
- <zabbix_export>
- <version>5.0</version>
- <date>2020-11-26T12:48:35Z</date>
- <groups>
- <group>
- <name>Templates/Applications</name>
- </group>
- </groups>
- <templates>
- <template>
- <template>Template Yunohost</template>
- <name>Template Yunohost</name>
- <description>Please check default value template macro.
-
- cat /etc/sudoers.d/zabbix
- zabbix ALL=(ALL) NOPASSWD: /etc/zabbix/zabbix_agentd.d/yunohost.sh
-
- cat /etc/zabbix/zabbix_agentd.d/userP_yunohost.conf
- UserParameter=yunohost.users.discover,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.users.discover
- UserParameter=yunohost.user.quota[*],sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.user.quota "$1"
- UserParameter=yunohost.domains.discover,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.domains.discover
- UserParameter=yunohost.domain.cert[*],sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.domain.cert "$1"
- UserParameter=yunohost.services.discover,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.services.discover
- UserParameter=yunohost.service.status[*],sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.service.status "$1"
- UserParameter=yunohost.backups.number,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.backups.number
- UserParameter=yunohost.backups.ageoflastbackup,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.backups.ageoflastbackup
- UserParameter=yunohost.ports.tcp.discover,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.ports.tcp.discovery
- UserParameter=yunohost.ports.udp.discover,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.ports.udp.discovery
- UserParameter=yunohost.migrations.lastinstalled,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.migrations.lastinstalled
- UserParameter=yunohost.migrations.lastavailable,sudo /etc/zabbix/zabbix_agentd.d/yunohost.sh yunohost.migrations.lastavailable
-
- cat /etc/zabbix/zabbix_agentd.d/yunohost.sh
- #!/bin/bash
- yunobin=$(which yunohost)
-
- if [ "$1" == "yunohost.users.discover" ];then
- users=$($yunobin user list --fields 'uid' | awk -F ': ' '/username: / {print $2}');echo -n "{\"data\":[";for user in $users;do echo -n "{\"{#USERNAME}\":\"$user\"},";done | sed 's/,$//' ;echo "]}"
- fi
-
- if [ "$1" == "yunohost.user.quota" ] ;then
- quota=$($yunobin user info "$2" | grep -Po "use:.*\(\K([0-9]{1,3})");if [ -z "$quota" ];then echo 0 ; else echo "$quota" ;fi
- fi
-
- if [ "$1" == "yunohost.domains.discover" ] ;then
- domains=$($yunobin domain list --output-as plain);echo -n "{\"data\":[";for domain in $domains;do echo -n "{\"{#DOMAIN}\":\"$domain\"},";done | sed 's/,$//' ;echo "]}"
- fi
-
- if [ "$1" == "yunohost.domain.cert" ] ;then
- $yunobin domain cert-status "$2" --output-as plain --full| awk '/#/{ next;} {printf "%s;",$0} END {print ""}'
- fi
-
- if [ "$1" == "yunohost.services.discover" ] ;then
- services=$($yunobin service status 2>/dev/null| grep -Po '^([A-Za-z]+)(?=(:))');echo -n "{\"data\":[";for service in $services;do echo -n "{\"{#SERVICE}\":\"$service\"},";done | sed 's/,$//' ;echo "]}"
- fi
-
- if [ "$1" == "yunohost.service.status" ] ;then
- service=$($yunobin service status "$2" --output-as json 2>/dev/null)
- if [[ "$(echo $service | jq -r '.description')" == *"doesn't exists for systemd"* ]] ;then
- echo "$service" | jq -c '.active = "disabled"'
- else
- echo "$service"
- fi
- fi
-
- if [ "$1" == "yunohost.backups.number" ] ;then
- $yunobin backup list --output-as plain | wc -l
- fi
-
- if [ "$1" == "yunohost.backups.ageoflastbackup" ] ;then
- if [ $($yunobin backup list --output-as plain | wc -l) -ne 0 ] ;then
- timestamp=$(date +"%d/%m/%Y %H:%M" -d"$($yunobin backup list -i | tail -n 4 | head -n 1 | grep -Po 'created_at: \K(.*)')")
- echo $(( ($(date +%s) - $(date -d"$timestamp" +%s))/(60*60*24) ))
- else
- echo "No backup detected"
- fi
- fi
-
- if [ "$1" == "yunohost.ports.tcp.discovery" ] ;then
- ports=$($yunobin firewall list -r --output-as plain | awk '/#ipv4/{flag=1;next}/#uPnP/{flag=0}flag' | awk '/##TCP/{flag=1;next}/##TCP/{flag=0}flag');echo -n "{\"data\":[";for port in $ports;do echo -n "{\"{#PORT}\":\"$port\"},";done | sed 's/,$//' ;echo "]}"
- fi
-
- if [ "$1" == "yunohost.ports.udp.discovery" ] ;then
- ports=$($yunobin firewall list -r --output-as plain | awk '/#ipv4/{flag=1;next}/#uPnP/{flag=0}flag' | awk '/##UDP/{flag=1;next}/##TCP/{flag=0}flag');echo -n "{\"data\":[";for port in $ports;do echo -n "{\"{#PORT}\":\"$port\"},";done | sed 's/,$//' ;echo "]}"
- fi
-
- if [ "$1" == "yunohost.migrations.lastinstalled" ] ;then
- $yunobin tools migrations state | grep -Po " number: \K(.*)"
- fi
-
- if [ "$1" == "yunohost.migrations.lastavailable" ] ;then
- $yunobin tools migrations list | tail -n 1 | grep -Po " number: \K(.*)"
- fi</description>
- <groups>
- <group>
- <name>Templates/Applications</name>
- </group>
- </groups>
- <applications>
- <application>
- <name>Yunohost : Backups</name>
- </application>
- <application>
- <name>Yunohost : Certificates</name>
- </application>
- <application>
- <name>Yunohost : Certificates : Expiration</name>
- </application>
- <application>
- <name>Yunohost : Certificates : State</name>
- </application>
- <application>
- <name>Yunohost : Migrations</name>
- </application>
- <application>
- <name>Yunohost : Ports</name>
- </application>
- <application>
- <name>Yunohost : Services</name>
- </application>
- <application>
- <name>Yunohost : Services : Status</name>
- </application>
- <application>
- <name>Yunohost : Users</name>
- </application>
- </applications>
- <items>
- <item>
- <name>Age of the last backup</name>
- <key>yunohost.backups.ageoflastbackup</key>
- <delay>1d;h10m45</delay>
- <units>days</units>
- <applications>
- <application>
- <name>Yunohost : Backups</name>
- </application>
- </applications>
- <triggers>
- <trigger>
- <expression>{last()}>={$YUNOHOST.BACKUP.MAXDAYS}</expression>
- <name>YunoHost hasn't backup since more than {$YUNOHOST.BACKUP.MAXDAYS} days</name>
- <opdata>{ITEM.LASTVALUE}</opdata>
- <priority>HIGH</priority>
- <description>Please check https://yunohost.org/en/backup</description>
- <manual_close>YES</manual_close>
- </trigger>
- </triggers>
- </item>
- <item>
- <name>Number of Yunohost backups</name>
- <key>yunohost.backups.number</key>
- <delay>1d;h11</delay>
- <applications>
- <application>
- <name>Yunohost : Backups</name>
- </application>
- </applications>
- <triggers>
- <trigger>
- <expression>{last()}=0</expression>
- <name>YunoHost hasn't backup yet</name>
- <priority>HIGH</priority>
- <description>Please check https://yunohost.org/en/backup</description>
- <manual_close>YES</manual_close>
- </trigger>
- </triggers>
- </item>
- <item>
- <name>Id of the last migration available</name>
- <key>yunohost.migrations.lastavailable</key>
- <delay>1d;h10m50</delay>
- <applications>
- <application>
- <name>Yunohost : Migrations</name>
- </application>
- </applications>
- </item>
- <item>
- <name>Id of the last migration installed</name>
- <key>yunohost.migrations.lastinstalled</key>
- <delay>1d;h10m55</delay>
- <applications>
- <application>
- <name>Yunohost : Migrations</name>
- </application>
- </applications>
- </item>
- </items>
- <discovery_rules>
- <discovery_rule>
- <name>Yunohost domains</name>
- <key>yunohost.domains.discover</key>
- <delay>1d;h10</delay>
- <item_prototypes>
- <item_prototype>
- <name>Certificate {#DOMAIN} expiration</name>
- <type>DEPENDENT</type>
- <key>yunohost.domain.cert.expiration[{#DOMAIN}]</key>
- <delay>0</delay>
- <history>180d</history>
- <units>d</units>
- <applications>
- <application>
- <name>Yunohost : Certificates</name>
- </application>
- <application>
- <name>Yunohost : Certificates : Expiration</name>
- </application>
- </applications>
- <preprocessing>
- <step>
- <type>REGEX</type>
- <params>(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);
- \2</params>
- </step>
- </preprocessing>
- <master_item>
- <key>yunohost.domain.cert[{#DOMAIN}]</key>
- </master_item>
- <trigger_prototypes>
- <trigger_prototype>
- <expression>{last()}<{$YUNOHOST.CERTIFICATE.REMAININGDAYS_AVG}</expression>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_AVG}</name>
- <opdata>{ITEM.LASTVALUE}</opdata>
- <priority>AVERAGE</priority>
- <dependencies>
- <dependency>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</name>
- <expression>{Template Yunohost:yunohost.domain.cert.expiration[{#DOMAIN}].last()}< {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</expression>
- </dependency>
- <dependency>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_HIGH}</name>
- <expression>{Template Yunohost:yunohost.domain.cert.expiration[{#DOMAIN}].last()}<{$YUNOHOST.CERTIFICATE.REMAININGDAYS_HIGH}</expression>
- </dependency>
- </dependencies>
- </trigger_prototype>
- <trigger_prototype>
- <expression>{last()}< {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</expression>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</name>
- <opdata>{ITEM.LASTVALUE}</opdata>
- <priority>DISASTER</priority>
- </trigger_prototype>
- <trigger_prototype>
- <expression>{last()}<{$YUNOHOST.CERTIFICATE.REMAININGDAYS_HIGH}</expression>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_HIGH}</name>
- <opdata>{ITEM.LASTVALUE}</opdata>
- <priority>HIGH</priority>
- <dependencies>
- <dependency>
- <name>Remaining days for certificate {#DOMAIN} < {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</name>
- <expression>{Template Yunohost:yunohost.domain.cert.expiration[{#DOMAIN}].last()}< {$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</expression>
- </dependency>
- </dependencies>
- </trigger_prototype>
- </trigger_prototypes>
- </item_prototype>
- <item_prototype>
- <name>Certificate {#DOMAIN} state</name>
- <type>DEPENDENT</type>
- <key>yunohost.domain.cert.state[{#DOMAIN}]</key>
- <delay>0</delay>
- <history>180d</history>
- <trends>0</trends>
- <value_type>CHAR</value_type>
- <applications>
- <application>
- <name>Yunohost : Certificates</name>
- </application>
- <application>
- <name>Yunohost : Certificates : State</name>
- </application>
- </applications>
- <valuemap>
- <name>Yunohost : certificates</name>
- </valuemap>
- <preprocessing>
- <step>
- <type>REGEX</type>
- <params>(.*);(.*);(.*);(.*);(.*);(.*);(.*);(.*);
- \3:unknown=0:critical=1:warning=2:attention=3:good=4;great=5</params>
- </step>
- <step>
- <type>REGEX</type>
- <params>^(unknown|critical|warning|attention|good|great):(?=.*\1=(\d))
- \2</params>
- </step>
- </preprocessing>
- <master_item>
- <key>yunohost.domain.cert[{#DOMAIN}]</key>
- </master_item>
- </item_prototype>
- <item_prototype>
- <name>Informations {#DOMAIN} full</name>
- <key>yunohost.domain.cert[{#DOMAIN}]</key>
- <delay>1d</delay>
- <history>180d</history>
- <trends>0</trends>
- <value_type>CHAR</value_type>
- <applications>
- <application>
- <name>Yunohost : Certificates</name>
- </application>
- </applications>
- </item_prototype>
- </item_prototypes>
- </discovery_rule>
- <discovery_rule>
- <name>TCP Ports opened</name>
- <key>yunohost.ports.tcp.discover</key>
- <delay>1d;h9m30</delay>
- <lifetime>7d</lifetime>
- <item_prototypes>
- <item_prototype>
- <name>Check TCP port {#PORT} responding</name>
- <key>net.tcp.service[tcp,127.0.0.1,{#PORT}]</key>
- <delay>900s</delay>
- <applications>
- <application>
- <name>Yunohost : Ports</name>
- </application>
- </applications>
- <valuemap>
- <name>Yunohost : Service state</name>
- </valuemap>
- <trigger_prototypes>
- <trigger_prototype>
- <expression>{last()}=0</expression>
- <name>TCP port {#PORT} not responding</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- </trigger_prototypes>
- </item_prototype>
- </item_prototypes>
- </discovery_rule>
- <discovery_rule>
- <name>UDP Ports opened</name>
- <key>yunohost.ports.udp.discover</key>
- <delay>1d;h9m45</delay>
- <lifetime>0d</lifetime>
- <item_prototypes>
- <item_prototype>
- <name>Check UDP port {#PORT} listening</name>
- <key>net.udp.listen[{#PORT}]</key>
- <delay>900s</delay>
- <applications>
- <application>
- <name>Yunohost : Ports</name>
- </application>
- </applications>
- <valuemap>
- <name>Yunohost : Service state</name>
- </valuemap>
- <trigger_prototypes>
- <trigger_prototype>
- <expression>{last()}=0</expression>
- <name>UDP port {#PORT} not listening</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- </trigger_prototypes>
- </item_prototype>
- </item_prototypes>
- </discovery_rule>
- <discovery_rule>
- <name>Yunohost services</name>
- <key>yunohost.services.discover</key>
- <delay>1d;h10m15</delay>
- <lifetime>7d</lifetime>
- <item_prototypes>
- <item_prototype>
- <name>Yunohost service {#SERVICE} status</name>
- <type>DEPENDENT</type>
- <key>yunohost.service.statusrunp[{#SERVICE}]</key>
- <delay>0</delay>
- <history>7d</history>
- <applications>
- <application>
- <name>Yunohost : Services</name>
- </application>
- <application>
- <name>Yunohost : Services : Status</name>
- </application>
- </applications>
- <valuemap>
- <name>Yunohost : services</name>
- </valuemap>
- <preprocessing>
- <step>
- <type>JSONPATH</type>
- <params>$.active</params>
- </step>
- <step>
- <type>REGEX</type>
- <params>(.*)
- \1:inactive=0:active=1:unknown=2;disabled=3</params>
- </step>
- <step>
- <type>REGEX</type>
- <params>^(inactive|active|unknown|disabled):(?=.*\1=(\d))
- \2</params>
- </step>
- </preprocessing>
- <master_item>
- <key>yunohost.service.status[{#SERVICE}]</key>
- </master_item>
- <trigger_prototypes>
- <trigger_prototype>
- <expression>{last()}=3</expression>
- <name>Service {#SERVICE} disabled</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- <trigger_prototype>
- <expression>{last()}=0</expression>
- <name>Service {#SERVICE} state is inactive</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- <trigger_prototype>
- <expression>{last()}=2</expression>
- <name>Service {#SERVICE} state is unknown</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- </trigger_prototypes>
- </item_prototype>
- <item_prototype>
- <name>Yunohost service {#SERVICE} status (full)</name>
- <key>yunohost.service.status[{#SERVICE}]</key>
- <delay>15m</delay>
- <history>7d</history>
- <trends>0</trends>
- <value_type>CHAR</value_type>
- <applications>
- <application>
- <name>Yunohost : Services</name>
- </application>
- </applications>
- </item_prototype>
- </item_prototypes>
- </discovery_rule>
- <discovery_rule>
- <name>Yunohost users</name>
- <key>yunohost.users.discover</key>
- <delay>1d;h10m30</delay>
- <item_prototypes>
- <item_prototype>
- <name>Quota percent for user {#USERNAME}</name>
- <key>yunohost.user.quota[{#USERNAME}]</key>
- <delay>1h</delay>
- <history>30d</history>
- <units>%</units>
- <applications>
- <application>
- <name>Yunohost : Users</name>
- </application>
- </applications>
- <trigger_prototypes>
- <trigger_prototype>
- <expression>{last()}>=80</expression>
- <name>User {#USERNAME} quota exceed 80%</name>
- <priority>AVERAGE</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- <trigger_prototype>
- <expression>{last()}>=90</expression>
- <name>User {#USERNAME} quota exceed 90%</name>
- <priority>HIGH</priority>
- <manual_close>YES</manual_close>
- </trigger_prototype>
- </trigger_prototypes>
- </item_prototype>
- </item_prototypes>
- </discovery_rule>
- </discovery_rules>
- <macros>
- <macro>
- <macro>{$YUNOHOST.BACKUP.MAXDAYS}</macro>
- <value>7</value>
- <description>The oldest backup age in day before trigger</description>
- </macro>
- <macro>
- <macro>{$YUNOHOST.CERTIFICATE.REMAININGDAYS_AVG}</macro>
- <value>14</value>
- <description>Expiration date in X days AVG trigger</description>
- </macro>
- <macro>
- <macro>{$YUNOHOST.CERTIFICATE.REMAININGDAYS_DISASTER}</macro>
- <value>1</value>
- <description>Expiration date in X days DISASTER trigger</description>
- </macro>
- <macro>
- <macro>{$YUNOHOST.CERTIFICATE.REMAININGDAYS_HIGH}</macro>
- <value>7</value>
- <description>Expiration date in X days HIGH trigger</description>
- </macro>
- </macros>
- </template>
- </templates>
- <triggers>
- <trigger>
- <expression>{Template Yunohost:yunohost.migrations.lastavailable.last()}<>{Template Yunohost:yunohost.migrations.lastinstalled.last()}</expression>
- <name>YunoHost has migration in pending state</name>
- <priority>INFO</priority>
- <description>Check Yunohost documentation and "yunohost/admin/#/tools/migrations/ " url or "sudo yunohost tools migrations migrate" command</description>
- <manual_close>YES</manual_close>
- </trigger>
- </triggers>
- <value_maps>
- <value_map>
- <name>Yunohost : Service state</name>
- <mappings>
- <mapping>
- <value>0</value>
- <newvalue>Down</newvalue>
- </mapping>
- <mapping>
- <value>1</value>
- <newvalue>Up</newvalue>
- </mapping>
- </mappings>
- </value_map>
- <value_map>
- <name>Yunohost : certificates</name>
- <mappings>
- <mapping>
- <value>0</value>
- <newvalue>unknown</newvalue>
- </mapping>
- <mapping>
- <value>1</value>
- <newvalue>critical</newvalue>
- </mapping>
- <mapping>
- <value>2</value>
- <newvalue>warning</newvalue>
- </mapping>
- <mapping>
- <value>3</value>
- <newvalue>attention</newvalue>
- </mapping>
- <mapping>
- <value>4</value>
- <newvalue>good</newvalue>
- </mapping>
- <mapping>
- <value>5</value>
- <newvalue>great</newvalue>
- </mapping>
- </mappings>
- </value_map>
- <value_map>
- <name>Yunohost : services</name>
- <mappings>
- <mapping>
- <value>0</value>
- <newvalue>inactive</newvalue>
- </mapping>
- <mapping>
- <value>1</value>
- <newvalue>active</newvalue>
- </mapping>
- <mapping>
- <value>2</value>
- <newvalue>unknow</newvalue>
- </mapping>
- <mapping>
- <value>3</value>
- <newvalue>disabled</newvalue>
- </mapping>
- </mappings>
- </value_map>
- </value_maps>
- </zabbix_export>
|