Skip to content

Понадобилось сделать ротацию бэкапов, т.к. 10 гб яндекс диска, сука, забиваются бэкапами, а руками чистить - не наш метод.

Надо делать MOVE, DELETE и MKDIR юзая методы протокола WebDAV

Готовых решений нет, так что юзаем curl и справку по API от яши

Примеры того что получилось:

...continue reading "Бэкапы и API Яндекс.Диска"

В который раз переделал скрипт бэкапа. На этот раз он сливает результаты бэкапа в облачко амазона =)

 

#!/bin/bash
if [ $(id -u) -ne 0 ]; then echo "Root can't do that"; exit 1; fi

TAR="/bin/tar --create --ignore-failed-read --one-file-system --numeric-owner --sparse --totals --exclude-from=/usr/local/bin/excluded_dirs --gzip"

SRC_DIR="/etc/ /usr/local/bin/"
DST_DIR="/var/backup/vhn/"
DOW=`date +%j`
DOW_FOR_RM=`date +%u` # day of week (1..7); 1 is Monday, 7 is Sunday
HOSTNAME=`hostname -f`

if [ $DOW_FOR_RM = '7' ] #If this day - sunday or friday then clean all shit =)
then
       rm -rf $DST_DIR[0-9]*
       echo "Sunday cleaning old backups on local storage done"
fi

mkdir -p $DST_DIR$DOW

[ ! -d $DST_DIR$DOW ] && { echo "Failed create dst backup directory!"; exit 1; }

                        cd /
                                BACKUP_FILE="$DST_DIR$DOW/$HOSTNAME-vhn-$DOW.tgz"
                                        echo "Etc directory backup"
                                                $TAR --file=$BACKUP_FILE $SRC_DIR 2>&1

                echo "VHN directories backup on $HOSTNAME to local storage done"
                trickle -s -u 5120 s3cmd put --recursive --no-progress --multipart-chunk-size-mb=512 $DST_DIR$DOW s3://$HOSTNAME/daily/vhn/
                echo "VHN directories backup on $HOSTNAME to cloud done"
#!/bin/bash
if [ $(id -u) -ne 0 ]; then echo "Root can't do that"; exit 1; fi
[ $# -lt 1 ] &&  { echo "Usage: ${0##*/} <SRC_DIR>"; exit 1; }

TAR="/bin/tar --create --ignore-failed-read --one-file-system --numeric-owner --sparse --totals --exclude-from=/usr/local/bin/excluded_dirs --gzip"

SRC_DIR="$1"
DST_DIR="/var/backup/vz/"
DOW=`date +%j`
DOW_FOR_RM=`date +%u` # day of week (1..7); 1 is Monday, 7 is Sunday
HOSTNAME=`hostname -f`

[ ! -d $SRC_DIR ] && { echo "Directory $SRC_DIR not found."; exit 1; }

if [ $DOW_FOR_RM = '7' ] #If this day - sunday or friday then clean all shit =)
then
       rm -rf $DST_DIR[0-9]*
       echo "Sunday cleaning old backups on local storage done"
fi

mkdir -p $DST_DIR$DOW

[ ! -d $DST_DIR$DOW ] && { echo "Failed create dst backup directory!"; exit 1; }

VE_LIST=`ls -1 $SRC_DIR`

echo `date`

for VEID in $VE_LIST
do
                [ ! -d "$SRC_DIR$VEID" ] && continue; #If VEID not a directory - skip it
                        cd "$SRC_DIR$VEID"
                                BACKUP_FILE="$DST_DIR$DOW/$HOSTNAME-$VEID-$DOW.tgz"
                                        echo "VE $VEID backup"
                                                $TAR --file=$BACKUP_FILE ./ 2>&1
done

echo `date`

                echo "VE backup on $HOSTNAME to local storage done"
                trickle -s -u 2048 s3cmd put --recursive --no-progress --multipart-chunk-size-mb=512 $DST_DIR$DOW s3://$HOSTNAME/daily/vz/
                echo "VE backup on $HOSTNAME to cloud done"

Кстати, s3cmd пришлось патчить (на официальном багтрекере нашлось решение), т.к. оригинальная бета была с багом, из-за которого multi-part загрузки не шли. А потом еще раз патчить, потому что при аплоаде с выключенным прогрессом s3cmd вываливался.

А trickle юзается чтобы не перегружать канал.

У нас есть один, фиксированного размера, диск виртуальной машины virtualbox.

Хотим примонтировать его и читать-писать.

root@timba:/media/bckp/vm_hdd# vdfuse -f widxp.vdi /mnt/
root@timba:/media/bckp/vm_hdd# cd /mnt/
root@timba:/mnt# ls
Entire Disk Partition1
root@timba:/mnt# mount /mnt/Partition1 /media/win_rec/
root@timba:/mnt# cd /media/win_rec/
root@timba:/media/win_rec# ls
Documents and Settings WINDOWS
Program Files Windows XP SP3 RUS FULL (5).TIB
System Volume Information

Всё.

Заббикс мог не мониторить какие-либо значения, если не получал их и для значения не было триггера с условием nodata.

Так как на все значения вешать nodata не вариант - делаем проверку на триггеры которые отвалились с ошибкой.
Это делается при помощи запроса select hostid,description,error from items where error is NOT NULL and error !=''; в базе с заббиксом.
Когда триггер отваливается - поле error принимает значение в котором либо просто пишется ZBX_NOTSUPPORTED, либо уточняется почему триггер стал не рабочим.

Чтобы узнать на каком сервере отвалился айтем - делаем запрос,

select hostid,description,error from items where error is NOT NULL and error !='';
+--------+-------------+-------------------------------+
| hostid | description | error                         |
+--------+-------------+-------------------------------+
|  10150 | Stratum num | Not supported by Zabbix Agent |
+--------+-------------+-------------------------------+
1 row in set (0.00 sec)

берём поле hostid - это id сервера на котором отвалился айтем и подставляем его в браузере так - https://zabbix.example.net/items.php?hostid=10150
Заходим и смотрим где, почему и зачем отвалился мониторинг.

А еще можно вот так узнать у каких хостов что-то отвалилось:

select hosts.host,items.description,items.error from items left join hosts on items.hostid = hosts.hostid where items.error is NOT NULL and items.error !='';

Сама проверка делается выглядит так:

UserParameter=zabbix.item_errors, mysql -hdbserver.example.net -uzabbix zabbix -B -s -pm3G4sup3rp4ssw0rD -e "select hostid,description,error from items where error is NOT NULL and error !=''"|wc -l

И создаем триггер, который будет опрашивать параметр "zabbix.item_errors" и, если он больше нуля, будет кричать.

 

 

Скрипт используется для рассылки информации по проблемным направлениям, на которых трафик есть, но почему-то звонки не проходят (ACD<1)

#!/bin/sh
#скрипт мониторинга направлений

DATABASE=ambs
USER=dbuser
PASS=password
VHOUR=`date +%H |sed 's/^0//i'`
YEARANDMONTH=`date +%Y%m`

echo -e "From: [email protected]
To: [email protected]
Cc: [email protected]
Cc: [email protected]
Subject: сабж кириллицей в UTF (можно получить отправив самому себе письмо и открыть его исходник)
Mime-Version: 1.0
Content-Type: text/html;charset='UTF-8'

<html><body>"

mysql -u$USER -p$PASS $DATABASE -B -H -e "SELECT so.SITENAME as ORIG_OPER, st.SITENAME as TERM_OPER, dst.DEST_NAME, SUM(U.ALL_CALLS) as ALL_CALLS, IFNULL(ROUND(sum(U.ALL_MIN)/sum(U.COMPL_CALLS)/60,2),0) AS ACD, sum(U.SUCC_CALLS) as SUCC_CALLS, sum(U.COMPL_CALLS) as COMPL_CALLS, ROUND(sum(U.ALL_MIN)/60,2) as ALL_MIN  FROM ( SELECT  CB.DST_SITE as TERM_OPER_ID, CB.SRC_SITE as ORIG_OPER_ID, CB.DST_DEST as TERM_DEST_ID, C.ELAPSED_TIME as ALL_MIN, 1 as ALL_CALLS, CB.SUCC_FLAG as SUCC_CALLS, (C.ELAPSED_TIME>0) as COMPL_CALLS  FROM CDR_BILL"$YEARANDMONTH" CB join CDR C on C.CID=CB.CID WHERE CB.BILL_DATE=DATE(SUBTIME(NOW(),'1:0:0')) and CB.VHOUR=HOUR(SUBTIME(NOW(),'1:0:0')) and CB.TBLTYPE=1 UNION ALL  SELECT  CB.DST_SITE as TERM_OPER_ID, CB.SRC_SITE as ORIG_OPER_ID, CB.DST_DEST as TERM_DEST_ID, C.ELAPSED_TIME as ALL_MIN, 1 as ALL_CALLS, CB.SUCC_FLAG as SUCC_CALLS, (C.ELAPSED_TIME>0) as COMPL_CALLS  FROM CDR_BILL"$YEARANDMONTH" CB join CDRzero"$YEARANDMONTH" C on C.CID=CB.CID WHERE CB.BILL_DATE=DATE(SUBTIME(NOW(),'1:0:0')) and CB.VHOUR=HOUR(SUBTIME(NOW(),'1:0:0')) and CB.TBLTYPE=0 ) U  JOIN SITE so on so.ID=U.ORIG_OPER_ID  JOIN SITE st on st.ID=U.TERM_OPER_ID  join DEST dst on dst.ID=U.TERM_DEST_ID  GROUP BY U.TERM_OPER_ID,U.ORIG_OPER_ID,U.TERM_DEST_ID  HAVING ALL_CALLS>200 and ACD<'1.00' order by 4 desc ,1,2;"

echo "</body></html>"

 

В кроне это записано как-то так:

00 6,9,13 * * 1,2,3,4,5 root /usr/local/bin/routestat.sh | /usr/sbin/sendmail -t
30 7,10,11,14 * * 1,2,3,4,5 root /usr/local/bin/routestat.sh | /usr/sbin/sendmail -t

 

π