Ай Лайн
Связаться
Отдел продаж +7 (812) 385-74-84
Время работы пн-пт с 9:00 до 18:00

Мониторинг бэкапов PostgreSQL

По умолчанию используется путь расположения логов /var/log/pg-dump/by-base/. Если требуется другой путь, нужно изменить у хоста макрос {$PGLOGDIR} на необходимый, к примеру в случае Windows на

Устройство работы схемы

  • Выполняется настройка zabbix-agent2 для работы с необходимыми ключами;
  • Выполняется создание необходимых директорий;
  • Выполняется создание скрипта;
  • С помощью скрипта Zabbix сервер запрашивает список баз, под которые созданы логи для автообнаружения; заданий по базам;
  • Далее происходит обращение непосредственно к лог файлам для парсинга информации.

Linux

echo "UserParameter=Postgres.listbak,/etc/zabbix/zabbix_agent2.d/scripts/pg-listbak.sh" >> /etc/zabbix/zabbix_agent2.d/plugins.d/pg-bak.conf
sudo mkdir -p /var/log/pg-dump/by-base
sudo mkdir /etc/zabbix/zabbix_agent2.d/scripts
cat << EOF >> /etc/zabbix/zabbix_agent2.d/scripts/pg-listbak.sh
#! /bin/bash
string=""
count=1
count_max=\$(ls -l /var/log/pg-dump/by-base/ | tail -n +2 | awk '{print \$9}' | sed -e "s/.log//" | wc -l)
for i in \$(ls -l /var/log/pg-dump/by-base/ | tail -n +2 | awk '{print \$9}' | sed -e "s/.log//")
do
    if [[ \$count -eq 1 ]]
    then
        string="[{\"DBNAME\":\"\$i\"}"
        let count++
    elif [[ \$count -eq \$count_max ]]
    then
        string="\$string,{\"DBNAME\":\"\$i\"}]"
    else
        string="\$string,{\"DBNAME\":\"\$i\"}"
        let count++
    fi
done
echo \$string
EOF
sudo chmod +x /etc/zabbix/zabbix_agent2.d/scripts/pg-listbak.sh
systemctl restart zabbix-agent2

Windows

Меняем в скрипте $pg_log_folder на необходимый путь

По умолчанию всё уже настроено в нашем агенте, но если нужна ручная настройка, то:

  • Необходимо внести в системную переменную путь до папки с логами бэкапов (меняем на необходимый):
[System.Environment]::SetEnvironmentVariable('PGBAKLOGDIR', 'E:\sql_maintenance\sql_bak_log', [System.EnvironmentVariableTarget]::Machine)
  • Создаем «C:\iline\zabbix-agent\scripts*zabbix_pg_listbak.ps1*»:
$pg_log_folder="D:\sql_maintenance\sql_bak_log"
$string=""
$count=1
$count_max=(Get-ChildItem $pg_log_folder -Name | % {$_.replace(".log","")} | Measure-Object | Select -Expand Count)
foreach ( $i in (Get-ChildItem $pg_log_folder -Name | % {$_.replace(".log","")})) {
    if ( $count -eq 1 ) {
        $string="[{""DBNAME"":""$i""}"
        $count=$count + 1 }
    elseif ( $count -eq $count_max ) {
        $string="$string,{""DBNAME"":""$i""}]" }
    else {
        $string="$string,{""DBNAME"":""$i""}"
        $count=$count + 1 }
}
echo $string
  • Создаем «C:\iline\zabbix-agent\zabbix_agent2.d\plugins.d*pg-bak.conf*»:
UserParameter=Postgres.listbak,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\iline\zabbix-agent\scripts\zabbix_pg_listbak.ps1"
  • Перезапускаем службу zabbix-agent2
Оставить заявку