2018-06-06 Обработка Лог.файлов

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
правила_разработки:как_не_надо_делать:2018-06-06_обработка_лог.файлов [06.07.2018 10:01]
nikolay_carbonsoft1 создано
правила_разработки:как_не_надо_делать:2018-06-06_обработка_лог.файлов [20.05.2019 15:18] (текущий)
Строка 1: Строка 1:
-1+**Нарушено правило**:​ Полная обработка лог.файлов неизвестного размера в неконтроллируемой системе.\\ 
 +**Постановка задачи**:​ Анализировать в системе мониторинга /​var/​log/​messages на предмет ошибок raid, дисковой и файловой подсистемы.\\ 
 +**Ошибка**:​ Во время анализа выполнялся cat лог.файла целиком,​ размер лог-файлов в системе не ограничен и может достигать десятков гигабайт. Тест мог очень сильно нагружать систему при анализе большого лога, работа системы была бы нарушена,​ работа анализатора лога могла не завершиться.\\ 
 +**Исключение**:​ Файл предназначен для работы на не поддерживаемой системе. Если файл предназначен для развертывания на поддерживаемом продукте или сервере компании,​ то повышенная нагрузка или падение скрипта анализа лога помогла бы выявить проблему разрастания лог.файлов (что было бы выявлено тестов load average, например). По аналогичной причине в crab_style bash мы не используем trap exit для удаления временных файлов скрипта - наличие большого количества неудаленного мусора скрипта сигнализирует о проблемах в скрипте,​ которые необходимо исправить.\\ 
 +**Как надо делать**:​ Вместо вычитывания всего файла с помощью команды cat, нужно использовать команду tail с большим (но не бесконечным) количеством строк. В этом случае разрастание лога не приведет к проблемам выполнения скрипта.\\ 
 + 
 + 
 +<color #​ed1c24>​**Неверное решение**</​color>​\\ 
 +<code bash> 
 + #​!/​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  
 +</​code>​ 
 + 
 +<color #​22b14c>​**Правильное решение:​**</​color>​\\ 
 +<code bash> 
 + #​!/​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  
 +</​code>​ 
  
 /*Не удаляйте эту строку и ниже!*/ /*Не удаляйте эту строку и ниже!*/
Строка 5: Строка 71:
 {(rater>​id=1|name=Прочитал_правила_разработки:​как_не_надо_делать:​2018-06-06_обработка_лог.файлов|type=vote|trace=user|tracedetails=1)} {(rater>​id=1|name=Прочитал_правила_разработки:​как_не_надо_делать:​2018-06-06_обработка_лог.файлов|type=vote|trace=user|tracedetails=1)}
  
 +
 +~~OWNERAPPROVE~~