Restore repo

This commit is contained in:
svk
2024-11-06 10:16:00 +03:00
commit 4189fcad46
87 changed files with 14088 additions and 0 deletions

46
bareos/README.md Normal file
View File

@@ -0,0 +1,46 @@
## Мониторинг Bareos в Zabbix
### bareos_get_all.sh
Скрипт для получения данных о клиентах и заданиях в Bareos для использования в zabbix.
Возможна работа как с zabbix-agent так и zabbix-sender
# Использование:
Предварительно необходимо создать узел в zabbix и прикрепить к нему шаблон Template_Bareos_Clients.xml
- Вывести список клиентов ввиде zabbix discovery JSON
```bareos_get_all.sh clients-discovery```
- Вывести список названий заданий (job) для клиента
```bareos_get_all.sh client-list-job _CLIENT_NAME_```
- Получить статусы всех заданий для клиента
```bareos_get_all.sh client-get-jobs-status _CLIENT_NAME_```
- Получить статус задания
```bareos_get_all.sh get-job-status _CLIENT_NAME_ _JOB_NAME_```
- Вывести количество задач с определенным статусом
```bareos_get_all.sh count-jobs _JOB_STATUS```
Где:
```
_CLIENT_NAME_ - имя клиента в bareos
_JOB_NAME_ - название задачи в bareos
_JOB_STATUS_ - статус задания в терминах bareos:
T - Completed successfully
E - Terminated with errors
e - Non-fatal error
f - Fatal error
W - Terminated with warnings
```
Полный список доступен тут: https://docs.bareos.org/Appendix/CatalogTables.html#jobstatus)

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>4.0</version>
<date>2020-11-18T12:58:04Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template_Bareos_Clients</template>
<name>Template_Bareos_Clients</name>
<description/>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Bareos clients</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>Bareos clients</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>bareos.clients</key>
<delay>0</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>30d</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>{#BAREOSCLIENT} job {#BAREOSJOB} status</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>bareos.clients.job.status[{#BAREOSCLIENT}, {#BAREOSJOB}]</key>
<delay>0</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>Bareos clients</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<timeout>3s</timeout>
<url/>
<query_fields/>
<posts/>
<status_codes>200</status_codes>
<follow_redirects>1</follow_redirects>
<post_type>0</post_type>
<http_proxy/>
<headers/>
<retrieve_mode>0</retrieve_mode>
<request_method>0</request_method>
<output_format>0</output_format>
<allow_traps>0</allow_traps>
<ssl_cert_file/>
<ssl_key_file/>
<ssl_key_password/>
<verify_peer>0</verify_peer>
<verify_host>0</verify_host>
<application_prototypes/>
<master_item/>
</item_prototype>
</item_prototypes>
<trigger_prototypes>
<trigger_prototype>
<expression>{Template_Bareos_Clients:bareos.clients.job.status[{#BAREOSCLIENT}, {#BAREOSJOB}].iregexp(&quot;.+e&quot;,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>{HOSTNAME}. Статус задания {#BAREOSJOB} для {#BAREOSCLIENT}, ERROR</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>1</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
<trigger_prototype>
<expression>{Template_Bareos_Clients:bareos.clients.job.status[{#BAREOSCLIENT}, {#BAREOSJOB}].regexp(&quot;.+f&quot;,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>{HOSTNAME}. Статус задания {#BAREOSJOB} для {#BAREOSCLIENT}, FATAL ERROR</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>1</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
<trigger_prototype>
<expression>{Template_Bareos_Clients:bareos.clients.job.status[{#BAREOSCLIENT}, {#BAREOSJOB}].iregexp(&quot;.+w&quot;,#1)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>{HOSTNAME}. Статус задания {#BAREOSJOB} для {#BAREOSCLIENT}, WARNING</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>1</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
</trigger_prototypes>
<graph_prototypes/>
<host_prototypes/>
<jmx_endpoint/>
<timeout>3s</timeout>
<url/>
<query_fields/>
<posts/>
<status_codes>200</status_codes>
<follow_redirects>1</follow_redirects>
<post_type>0</post_type>
<http_proxy/>
<headers/>
<retrieve_mode>0</retrieve_mode>
<request_method>0</request_method>
<allow_traps>0</allow_traps>
<ssl_cert_file/>
<ssl_key_file/>
<ssl_key_password/>
<verify_peer>0</verify_peer>
<verify_host>0</verify_host>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>

123
bareos/bareos_get_all.sh Executable file
View File

@@ -0,0 +1,123 @@
#!/bin/bash
#-------------------------------------------------------------------
# Скрипт для получения данных о клиентах и заданиях в Bareos
# для использования в zabbix.
#
# Для работы нужен шаблон Template_Bareos_Clients.xml
#-------------------------------------------------------------------
# Author: Sergey Kalinin
# https://nuk-svk.ru
# svk@nuk-svk.ru
#-------------------------------------------------------------------
# Использование:
# - Вывести список клиентов ввиде zabbix discovery JSON
# bareos_get_all.sh clients-discovery
#
# - Вывести список названий заданий (job) для клиента
# bareos_get_all.sh client-list-job _CLIENT_NAME_
#
# - Получить статусы всех заданий для клиента
# bareos_get_all.sh client-get-jobs-status _CLIENT_NAME_
#
# - Получить статус задания
# bareos_get_all.sh get-job-status _CLIENT_NAME_ _JOB_NAME_
#
# - Вывести количество задач с определенным статусом
# bareos_get_all.sh count-jobs _JOB_STATUS
#
# Где:
# _CLIENT_NAME_ - имя клиента в bareos
# _JOB_NAME_ - название задачи в bareos
# _JOB_STATUS_ - статус задания в терминах bareos:
# T - Completed successfully
# E - Terminated with errors
# e - Non-fatal error
# f - Fatal error
# W - Terminated with warnings
# (полный список доступен тут:
# https://docs.bareos.org/Appendix/CatalogTables.html#jobstatus)
#-------------------------------------------------------------------
ZABBIX_AGENT=${ZABBIX_AGENT:-FALSE}
ZABBIX_SENDER=${ZABBIX_SENDER:-/usr/bin/zabbix_sender}
ZABBIX_AGENT_CONFIG=${ZABBIX_AGNT_CONFIG:-/etc/zabbix/zabbix_agentd.conf}
ZABBIX_HOST="${ZABBIX_HOST:-bareos}"
ZABBIX_AGENT=${ZABBIX_AGENT:-FALSE}
ZABBIX_SENDER=${ZABBIX_SENDER:-/usr/bin/zabbix_sender}
ZABBIX_AGENT_CONFIG=${ZABBIX_AGNT_CONFIG:-/etc/zabbix/zabbix_agentd.conf}
ZABBIX_HOST="${ZABBIX_HOST:-bareos}"
# За сколько дней выбирать задания
JOB_AGE=2
case "$1" in
get-clients-list)
#echo "run"
echo list clients | bconsole | cut -d '|' -f 3 -s | tr -d " " | grep -E '[[:alnum:]]' | grep -E -v "^name"
;;
clients-discovery)
#CLIENTS_LIST=$(echo list clients | bconsole | cut -d '|' -f 3 -s | tr -d " " | grep -E '[[:alnum:]]' | grep -E -v "^name")
#echo "${CLIENTS_LIST}"
CLIENTS_LIST=$(${0} get-clients-list)
CLIENTS_JSON="{\"data\":["
for LINE in ${CLIENTS_LIST}; do
JOB_NAMES=$($0 client-list-jobs ${LINE})
CLIENTS_JSON="${CLIENTS_JSON}"
for NAME in ${JOB_NAMES}; do
CLIENTS_JSON="${CLIENTS_JSON} {\"{#BAREOSCLIENT}\":\"$LINE\", \"{#BAREOSJOB}\":\"$NAME\"},"
done
CLIENTS_JSON="${CLIENTS_JSON}"
done
JSON_STRING="$(echo $CLIENTS_JSON | sed 's/,\+$//') ]}"
echo "$JSON_STRING"
if [ "$ZABBIX_AGENT" = "FALSE" ]; then
$ZABBIX_SENDER -vv -c $ZABBIX_AGENT_CONFIG -s "$ZABBIX_HOST" -k bareos.clients -o "${JSON_STRING}"
fi
;;
client-list-jobs)
echo list jobs client="$2" | bconsole | awk -F "|" '{print $3}' | tr -d " " | grep -E -v "(^$)|(^name)" | sort -u
;;
client-get-jobs-status)
JOBS_LIST=$(${0} client-list-jobs ${2})
for JOB in ${JOBS_LIST}; do
${0} get-job-status ${2} ${JOB}
done
;;
get-job-status)
CLIENT=${2}
JOB_NAME=${3}
#JOB_STATUS=$(echo list job=\"${JOB_NAME}\" days=${JOB_AGE} | bconsole | awk -F "|" '{print $5 $10}' | grep -E -v "(^$)|(starttime)" | tail -1)
JOB_STATUS=$(echo list job=\"${JOB_NAME}\" client=\"${CLIENT}\" | bconsole | awk -F "|" '{print $5 $10}' | grep -E -v "(^$)|(starttime)" | tail -1)
echo "${CLIENT} ${JOB_NAME} ${JOB_STATUS}"
if [ "$ZABBIX_AGENT" = "FALSE" ]; then
$ZABBIX_SENDER -c $ZABBIX_AGENT_CONFIG -s "$ZABBIX_HOST" -k "bareos.clients.job.status[${CLIENT}, ${JOB_NAME}]" -o "${JOB_STATUS}"
fi
;;
jobs-list)
JOB_STATUS="${1}"
echo show jobs | bconsole | grep -i "^ name =" | cut -d '"' -f 2 | while read LINE; do
if [[ $JOB_STATUS != "notrun" ]]; then
echo list job=\"$LINE\" jobstatus=$JOB_STATUS | bconsole -c /etc/bareos/bconsole.conf | cut -d"|" -f10 -s | tr -d ' '| grep "^${JOB_STATUS}$" | while read RES; do
# echo list job=\"$LINE\" | bconsole -c /etc/bareos/bconsole.conf | cut -d"|" -f10 | grep "${JOB_STATUS}" | while read RES; do
if [[ -n $RES ]]
then
echo "${RES}"
fi
done
fi
done
;;
get-all)
CLIENTS_LIST=$(${0} get-clients-list)
echo "${CLIENTS_LIST}"
for CLIENT in ${CLIENTS_LIST}; do
JOB_NAMES=$($0 client-list-jobs ${CLIENT})
echo "${JOB_NAMES}"
for JOB_NAME in ${JOB_NAMES}; do
${0} get-job-status ${CLIENT} ${JOB_NAME}
done
done
;;
esac