Pull to refresh

Comments 18

Я использую похожий самописный скрипт для резервных копий, но у меня он отрабатывает в тихую без лишних писем, он просто пишет лог файл, подобный вашему, а во время ошибок отправляет email. Ошибки отлавливаются проверкой кода возврата — переменная "$?", написал функцию checkretval и вставил ее после каждой команды.
Изначально у меня был скрипт который генерал каждый день письмо, но когда серверов стало больше 10 это превратилось в ужас:-)
если код возврата команды не равен нулю, то скрипт прерывается и отправляет письмо содержащее команду на которой произошла ошибка.
У меня примерно так же, только скрипт отрабатывает до конца в любом случае, если ошибок не было — touch /var/log/backup.ok. Заббикс смотрит дату этого файла, если он старше 25 часов — алерт.
Не стоит так делать… В вашем случае может быть так, что скрипт по какой-то причине не отработает (например, не запустится, из-за ошибки настройки крона, после очередных правок на сервере) и вы не получите никакого письма и будете думать, что все ок, а в один момент… Ну вы поняли. Так же не исключены ошибки в самом скрипте, которые могли остаться незамеченными во время тестов. Сам с таким сталкивался.

Ниже gaser предложил более лучшее решение. Я его тоже использую в связке с уведомлениями по эл. почте.
У меня все бэкапирование завязано на bacula. После отработки задания бакула присылает письмо с темой
[<Status>] Backup <ServerName>
Например
[OK] Backup Zabbix
В теле письма лог задания (простым текстом, без вложений).
Так же все состояния заданий (текущие, выполненные, запланированные) отображаются в вебморде webacula.
В почтовом клиенте есть папки, имена которых созданы по типу сервиса, например, backups, а в них подпапки ОК и ERROR, в которые фильтром раскладываются письма от бакулы и других систем. Утром мне достаточно посмотреть сколько писем в какой папке и сделать вывод, все ли удачно прошло. А дублирование в zabbix облегчает поиск, где конкретно возникла несостыковка.
> Так же не исключены ошибки в самом скрипте, которые могли остаться незамеченными во время тестов.
Для этого сначала нужно гонять задание в дебаг-режиме какое-то время и проверять успешность. И неуспешность тоже. Потом, когда все оттестировано — переключать в менее ругательный режим.

> Утром мне достаточно посмотреть сколько писем в какой папке и сделать вывод, все ли удачно прошло.
Тут основной вопрос в количестве серверов и количестве заданий. Если серверов штук 10 и заданий по 2-3 на каждом, и ты — единственный админ на этих серверах, то еще можно как-то это контролировать.
Если же количество серверов переваливает за 100, то «сколько там ОК? 448. А должно быть? 448 или 449? А, хрен с ними — FAIL нет и ладно».
Другой вопрос, если проверка будет автоматизирована. Но тут уже проще обойтись без почты и проверять лог-файл. Или слать в Zabbix сообщения через zabbix_sender и вешать в нем триггер.
Ошибки могут годами быть не замеченными, даже в дебаг режиме. А что если по какой-то причине запустится 2 копии скрипта? А если какую-то внешнюю прогу не сможет запустить скрипт? А что если… И так можно чуть ли не до бесконечности продолжать. Все не предусмотришь. Даже в серьезных программах и скриптах, которые хорошо отлажены, встречаются ошибки. Например, года два назад писал багрепорт автору ghettoVCB.sh, И это хорошо отлаженный и оттестированный скрипт (без сарказма).

Это не основа, а дополнение! Что хорошо видно из моего комментария… Например, вот
Так же все состояния заданий (текущие, выполненные, запланированные) отображаются в вебморде webacula.
и вот
А дублирование в zabbix облегчает поиск, где конкретно возникла несостыковка.

Если несколько админов… Что мешает сделать общий ящик (как пример)?
А что мешает количество указать в названии папки?
Если несколько админов… Что мешает сделать общий ящик (как пример)?

Я не говорю про оповещения разным людям. Я говорю про то, что разные люди по-разному пишут скрипты. И вывод может отличаться. Утвердить общий формат входа-выхода частично поможет, но как показывает опыт, полностью это проблемы не решит.
А что мешает количество указать в названии папки?

А вот это не понял. Указать в названии папки количество писем, которое каждый день должно появляться? Или вопрос про что-то другое?
А что если по какой-то причине запустится 2 копии скрипта?

Предусмотреть просто, проверить тоже.
А если какую-то внешнюю прогу не сможет запустить скрипт? А что если…

Ну так если не сможет, как раз придет FAIL. А если скрипт будет с ошибкой, но покажет ОК, значит этот скрипт как-то неправильно написан, и его нужно исправлять.
Ошибки могут годами быть не замеченными, даже в дебаг режиме.

Ну это же не причина оставлять дебаг навсегда. Если бы винда всегда загружалась как в safe mode — с выводом всех драйверов, которые она подгружает, пользы бы совсем не прибавилось, в отличие от вопросов.
Это не основа, а дополнение!

А если это дополнение, то опять же ничего хорошего. Потому что на «дополнительные» задачи всегда можно забить и проверить потом, попозже. А потом через недельку выясняется, что писем ОК собралась пара-тройка сотен, и проверять их все не очень-то и охота (или нет времени), FAIL'ов ведь нету.
А дублирование в zabbix

А в чем польза в таком дублировании? Зачем с утра 1) заходить в вебакулу, 2) смотреть почту 3) смотреть заббикс? Если можно просто 1) посмотреть заббикс. Опять же, через какое-то время при увеличении количества серверов/сервисов/задач все начинают забивать на дополнительные методы и проверять только один.

Если не секрет, сколько серверов в управлении и сколько задач на них крутится?
Я говорю про то, что разные люди по-разному пишут скрипты.

В моем случае это не имеет значения.

Указать в названии папки количество писем, которое каждый день должно появляться?

Да. Например, «Databases [41]». Но это всего-то пример.

Да и в целом… Я считаю, что делать уведомление для всех по мылу, как основу, идиотизмом. Мыло/джаббер/скайп/смс это уже личное дело каждого админа. Лично мне не удобно постоянно заглядывать в заббикс или еще куда, чтобы проверить, не упало ли что, не поступила ли заявка в саппорт и т.п. Мне удобно когда я могу работать не отвлекаясь на это. А если что-то пошло не так, то мне придет мыло, смс или сообщение в джаббер. Так же мне удобнее узнать о сбое, например, когда я на обеде (уведомление на мобильный по смс/мылу/джабберу; и сразу удаленно починить (если это возможно)), а не когда я вернусь с обеда — от начальства.
Или… Упала почта — уведомление в джаббер, упал инет — уведомление по смс, упал гипервизор — уведомление по всем доступным каналам.

Дальше, похоже, вы меня не поняли. Все это я приводил в пример, не более. Понятное дело, что проверить просто. К тому же это простые примеры. Но бывает и так, что ошибка возникнет только при стечении каких-то особых обстоятельств. Ради примера… Когда в 60-70 годах (не помню точно) американцы запускали ракету и она рванула… Ошибка была в том, что в программист поставил одно равно (=) вместо двух (==). И этот код прошел тщательные тесты же… Это я к тому, что все предвидеть и проверить невозможно.

На счет дополнения и дублирования…
Уведомления от моих скриптов и бакулы идут только мне по мылу. Заббикс для всего отдела и начальства (тех. дир., например). Считаю этот подход наиболее правильным и удобным — есть общей мониторинг для всех (в придачу, всегда есть что показать начальству) + для своих основных задач каждый настраивает мониторинг так, как ему удобно (часто бывает надо мониторить что-то специфическое, что не нужно в общем мониторинге или есть что-то не критичное, но ты хочешь знать, если что не так с этим пойдет; опять же, это просто примеры).
webacula удобна, когда надо подробности о каком-то задании посмотреть (мне лично через нее удобнее, чем через консоль) + когда меня нету, чтобы коллеги могли проверить и убедиться что все ок или что-то не так.

На счет количества… Точное число называть не буду… Более 50 серверов (без учета тестовых), несколько сотен сервисов (задач?). И это число растет.
Да. Например, «Databases [41]». Но это всего-то пример.

И менять это у каждого админа, когда какой-то скрипт добавляется?

Ошибка была в том, что в программист поставил одно равно (=) вместо двух (==). И этот код прошел тщательные тесты же…

Вот поэтому теперь на это выдается warning во многих компилерах :)

Уведомления от моих скриптов и бакулы идут только мне по мылу

А когда вы в отпуске, это никто не проверяет?

Лично мне не удобно постоянно заглядывать в заббикс

А зачем заглядывать? Заббикс как раз оповестит обо всем, что нужно. Я-то как раз и говорю, что заглядывать куда-либо не нужно. Вы же говорите, что нужно проверять все скрипты каждый день. А по-моему, должно быть «нет сообщения — нет ошибки».

В общем-то спорить тут бесполезно. Это предпочтение каждого человека. Моя позиция — минимум сообщений, чтоб не замыливался взор и не отвлекали по ненужным вещам. Ваша — проверить все, что можно и неможно, на всякий случай. Ничего не имею против, если админ, с которым я буду работать, будет так делать. Главное, чтоб это не отвлекало от других задач меня и его.
И менять это у каждого админа, когда какой-то скрипт добавляется?
Я же говорю, каждый сам решает как что-то конкретное свое мониторить. Мне удобен такой подход. Да и даже вручную сделать правку не такая большая проблема. Хотя лично я бы не стал использовать такой подход для более чем 2 человек.

Вот поэтому теперь на это выдается warning во многих компилерах :)
Опять вы меня не поняли… Я не говорю о том, что изменилось. А привожу примеры ошибок, которые оставались незамеченными до возникновения критической ситуации. Т.е. я говорю о том, что все не предусмотришь и ошибки имеют место быть в любом коде!!!

А когда вы в отпуске, это никто не проверяет?
1. Есть webacula, о которой я говорил уже.
2. Все уведомления идут на отдельный адрес. А сервер все входящие перенаправляет в мой ящик. На случай отпуска не проблема добавить еще один алиас и проинструктировать коллегу.

Заббикс как раз оповестит обо всем, что нужно.
А если заббикс упал (не важно почему и как)? Только не надо рассказывать про кластеры, избыточность и т.п.

А по-моему, должно быть «нет сообщения — нет ошибки».
Эх… Когда же это уже прекратится… Я, честное слово, устал от этого :( Это типичная ошибка большинства новичков. И очень печально, что это встречается и среди опытных айтишников. Ошибки могут быть не только в коде, но и в логике/алгоритме. Что если скрипт не запустится? Проверять его другим скриптом? :-D Что если заббикс упал? Что если ошибка в триггере? Что если электричество вырубили, а в упсе батарея уже не держит? Что если крыса завелась? Что если здание взорвалось? Слишком много «что если»!!! Вы надеетесь, что все предусмотрели. Я же подхожу сразу с двух сторон. И меня это не отвлекает: дежурные уведомления приходят только 1 раз в день, т.е. я приехал на работу и вижу результат; а если что-то произошло в течение дня, то я получу тут же алерт под одному или нескольким каналам (в зависимости от критичности). «нет сообщения — нет ошибки» можно сравнить с тем, что вы входите в серверную, а там тишина. Сообщения должны быть всегда, как и кулеры шуршать в серверной!

Это предпочтение каждого человека.
В целом согласен. Но… Я бы не стал работать с человеком, у которого предпочтения «нет сообщения — нет ошибки». Ибо лучше заметить проблему на ранней стадии, а еще лучше, до ее фактического возникновения, чем дожидаться, когда произойдет сбой. Хотя бы поэтому сообщения должны быть всегда.
На случай отпуска не проблема добавить еще один алиас и проинструктировать коллегу.

А коллега будет каждый день сидеть и разбираться в письмах с заголовком «Все в порядке»? Если это не его основная обязанность, то не думаю.
Что если крыса завелась? Что если здание взорвалось? Слишком много «что если»!!!

Я думаю, в таком случае:
1) вам будет не до почты по поводу бэкапа, будете заниматься восстановлением или будете проверять корректность заданий уже на следующий день
2) в случае мегакатастрофы почта тогда уж тоже может упасть. Или шлюз до этой почты, да много всего может произойти. И вам придется заходить на сервера и проверять все логи. Ведь вебакула может все отобразить как ОК, а на самом деле там может быть ошибка!!!

По поводу падения заббикса — вернули заббикс на место, он сам все проверит и скажет, какие есть проблемы.

Эх… Когда же это уже прекратится… Я, честное слово, устал от этого :( Это типичная ошибка большинства новичков. И очень печально, что это встречается и среди опытных айтишников.

Я бы мог сказать, что это типичная ошибка людей, у которых много времени.
А еще я бы мог сказать: «Когда же это уже прекратится?.. Я уже устал от того, что народ генерит кучу ненужного хлама, с которым даже разбираться не нужно».

Я бы не стал работать с человеком, у которого предпочтения «нет сообщения — нет ошибки»

А я бы не стал работать с человеком, который полдня тратит на проверку корректности всех заданий. Т.к. задач, которыми можно заняться, всегда много а времени всегда мало.

И еще — раз письмо FAIL не гарантия обнаружения фейла, нужно ведь тщательно еще проверять и ОК, читать их полностью. А тогда уже и заббиксу и другим системам мониторинга тоже нельзя доверять и каждый день проверять все параметры самому. Мне почему-то кажется, что так вы не считаете. А это всего лишь небольшое развитие ваших идей.

Паранойя — это в какой-то мере хорошо, но не нужно с ней переусердствовать. У меня идея проста — нужно свести возможность ошибки человека к минимуму. Если человек будет проверять большую кучу писем, а от этого будет зависеть какая-то задача. то рано или поздно он может ошибиться, и задача может быть не выполнена. Или не этот человек, а его временная замена (вспомним про отпуск).
Ладно, друг друга мы не переубедим, это было ясно с самого начала. Предлагаю окончить спор.
Когда у меня был заббикс, я по первой тупо пропускал таблицы с историей значений и т.д. Почему? Мы как-то считали что хер с ней с историей, главное не похерить все те метрики и настройки которые долгое время туда вбивались.

Ну а потом я им написал скрипт, который делал инкрементальный бэкап используя всю ту же перкону xtrabackup.
Кстате, вот он. Не мешало бы ещё закинуть некоторые проверки возвращаемых статусов, но в целом использовать можно.

Умеет бекапить/восстанавливать и т.д.

# Restoring the DB for Percona Server 
0) time ./myXtraBackup.sh --job=restore --database="monitoring" --path=/root/backup/streams/ --dest=/root/backup/data/ --log=/root/backup/logs/restore.log --do-not-delete --stream=tar --export
--
1) p=`pwd`; for tbl in $(ls -1); do echo "Processing $tbl"; mysql zabbix18 <  ${p}/${tbl}; done;
2) for TABLE in $(echo "show tables" | mysql -B -N zabbix18); do echo "Discarding table ${TABLE}"; echo "set FOREIGN_KEY_CHECKS=0; ALTER TABLE ${TABLE} DISCARD TABLESPACE" | mysql -B -N zabbix18; done
3) rsync -rvP --include="*/" --include='*.ibd' --include='*.exp' --exclude='*' /home/restore/full/zabbix18/ /var/lib/mysql/zabbix18/
4) chown mysql:mysql /var/lib/mysql/zabbix18
5) for TABLE in $(echo "show tables" | mysql -B -N zabbix18); do echo "Importing table ${TABLE}"; echo "set FOREIGN_KEY_CHECKS=0; ALTER TABLE ${TABLE} IMPORT TABLESPACE" | mysql -B -N zabbix18; done

Спасибо. Очень хороший скрипт.
Бекаплю Zabbix селектеловскими supload + sbackup. Один раз восстанавливался — всё прошло гладко.
Он использует mysqldump. Автор же наоборот отказался от него, т.к. mysqldump, в его случае, очень долго отрабатывает.
А почему вы делаете запись в лог только ошибок? Ведь не всегда по одной ошибке можно понять, в чем проблема. Может все же стоит писать еще и обычный вывод, т.е. ... >>$MAILFILE 2>&1?
Раньше писал. Потом понял, что мне достаточно ошибок и той информации, которая представлена в письме (время завершения каждого этапа, размер полученных архивов и оставшееся место на диске).
Sign up to leave a comment.

Articles