2018-06-06 Обработка Лог.файлов
Нарушено правило: Полная обработка лог.файлов неизвестного размера в неконтроллируемой системе.
Постановка задачи: Анализировать в системе мониторинга /var/log/messages на предмет ошибок raid, дисковой и файловой подсистемы.
Ошибка: Во время анализа выполнялся cat лог.файла целиком, размер лог-файлов в системе не ограничен и может достигать десятков гигабайт. Тест мог очень сильно нагружать систему при анализе большого лога, работа системы была бы нарушена, работа анализатора лога могла не завершиться.
Исключение: Файл предназначен для работы на не поддерживаемой системе. Если файл предназначен для развертывания на поддерживаемом продукте или сервере компании, то повышенная нагрузка или падение скрипта анализа лога помогла бы выявить проблему разрастания лог.файлов (что было бы выявлено тестов load average, например). По аналогичной причине в crab_style bash мы не используем trap exit для удаления временных файлов скрипта - наличие большого количества неудаленного мусора скрипта сигнализирует о проблемах в скрипте, которые необходимо исправить.
Как надо делать: Вместо вычитывания всего файла с помощью команды cat, нужно использовать команду tail с большим (но не бесконечным) количеством строк. В этом случае разрастание лога не приведет к проблемам выполнения скрипта.
Неверное решение
#!/bin/bash set -eu . /opt/crab/crab_utils/bin/crab_sys.sh Или sys::usage "$@" ### --help Info: Скрипт поиска ошибок raid ### --help Usage: ### --help Example: ERROR=0 # TODO вызывать mdadm # Провеiряем, есть ли в /var/log/messages или в dmesg ошибки ( cat /var/log/messages; dmesg || true ) \ | grep -e 'hostbyte=DID_BAD_TARGET'\ -e 'I/O error, dev [^ ]*, sector'\ -e 'Disk failure on [^ ]*, disabling device'\ -e 'device reported invalid CHS sector'\ -e 'raid.*rescheduling sector'\ -e 'raid.*redirecting sector [^ ]* to other mirror'\ && ERROR=1 /agent/bin/sensor_send s_group=host s_type=raid_errors s_val=${ERROR} s_alarm_max=1 exit 0
Правильное решение:
#!/bin/bash set -eu . /opt/crab/crab_utils/bin/crab_sys.sh Или sys::usage "$@" ### --help Info: Скрипт поиска ошибок raid ### --help Usage: ### --help Example: ERROR=0 # TODO вызывать mdadm # Провеiряем, есть ли в /var/log/messages или в dmesg ошибки ( tail -n 10000 /var/log/messages; dmesg || true ) \ | grep -e 'hostbyte=DID_BAD_TARGET'\ -e 'I/O error, dev [^ ]*, sector'\ -e 'Disk failure on [^ ]*, disabling device'\ -e 'device reported invalid CHS sector'\ -e 'raid.*rescheduling sector'\ -e 'raid.*redirecting sector [^ ]* to other mirror'\ && ERROR=1 /agent/bin/sensor_send s_group=host s_type=raid_errors s_val=${ERROR} s_alarm_max=1 exit 0
Прочитал правила разработки как не надо делать 2018-06-06 обработка лог.файлов |
~~OWNERAPPROVE~~
Обсуждение