Вы когда -нибудь проводили время, отслеживая ошибку или неудачу, только чтобы обнаружить, что видели ее раньше? Или вариация этой проблемы: при завершении автоматического теста вы должны тратить время на то, чтобы на каждый сбой, хотя многие из них вызваны одной и той же ошибкой. Все это может повлиять на производительность, особенно в средах непрерывной интеграции и непрерывного развертывания (CI/CD), где все меняется быстро.
Существует решение в этом — когда возникает проблема, создайте «подпись», которая ищет конкретные шаблоны в файлах журналов и метрики, которые присутствуют, когда возникает проблема.
Большинство реализаций подписи включают в себя написание сценариев, которые анализируют данные, использующие регулярные выражения (режимы) и стандартные команды UNIX, такие как GREP и AWK.
Пример подписей
В большинстве текущих (нецесбримовых) реализаций подписи создаются с помощью сценариев, которые анализируют данные с использованием регулярных выражений (режимов) и стандартных команд UNIX, таких как GREP и AWK. Вот несколько типичных примеров:
Очень просто: Триггер, когда происходит событие «Хост: Linux01, не найдено», независимо от того, какое имя хоста: Если grep -q "host.*не найдено"
; затем эхо -триггеры; фигура
Просто: Триггер всякий раз, когда событие «использование памяти достигало XX% — происходит внимание», если XX% больше 95%: Awk ‘Match ($ 0,/использование памяти достигнуто. — Внимание необходимо/) {if ($ 4+0> 95) {print «Triggers»}} ‘*00
Это быстро становится сложным: Триггер, когда происходит событие «Хост: Linux01, не найдено», независимо от имени хоста, но только если оно соблюдается в течение 10 минут событием «Использование памяти» достигло XX% — необходимо внимание »и если XX% превышает 95%.
И еще сложнее, когда условия охватывают файлы журнала: Сначала посмотрите в файле журнала1 и найдите, когда тип события 1 происходит в течение 5 минут после типа 2 -го события, затем найдите самое последнее значение идентификатора транзакции, которое было установлено до события 1. Теперь запустите, если тип 3 -го типа 3 находится в файле журнала 2 с одним идентификатором транзакции, если он происходит в рамках временного промежутка между событиями 1 и 2.
Что еще хуже: допустим, вы успешно создаете кучу сценариев. Небольшое изменение линии журнала в новой сборке программного обеспечения может означать, что известные проблемы полностью пропущены.
Что мы видели во многих клиентах, так это то, что практические задачи очень затрудняют строительство и развертывание автоматического обнаружения подписи, за исключением небольшого количества проблем с низким висящим фруктом. Это потому что:
Это требуют специализированных навыков и значительного времени для разработки подписей, поэтому только небольшое подмножество инженеров (иногда в специализированной команде) создают их.
После того, как подписи были созданы, для тестирования, уточнения и поддержания их выпусков продукта требуется дополнительное время.
Ограниченные ресурсы означают, что всегда будет длинная очередь известных проблем, которые еще не имеют подписей.
Помимо проблем создания подписей, он требует значительных инвестиций в людей, инструменты, трубопроводы данных, процессы и инфраструктуру для обеспечения автоматизированного возможностей для управления подписью.
ПЕРЕМЕНСКАЯ
Ключевой частью нашей платформы построена вокруг того, чтобы разработчики и тестеры были простым для создания детерминированных подписей. Наша цель — сделать его настолько простым и быстрым, что он становится частью процесса CI/CD. Вот как это работает:
Как только проблема была решена, пользователь выбирает события и/или метрики, которые характеризуют проблему (это требует нескольких кликов в пользовательском интерфейсе). Поскольку мы используем машинное обучение для идеальной структуры логарифмических линий, мы смогли реализовать «подпись -строитель», предполагает определение, основанное на выбранных событиях, их относительной последовательности и времени, а также значения в параметрах (переменных) событий.
Вот пример того, как это выглядит:
Никогда не устраняйте одну и ту же проблему дважды в этом примере, подпись будет запустить, только если будут найдены три события (A, B и C), и будут выполнены следующие условия:
Событие A происходит первым, за которым следует события B и C.
Три события A, B и C соответствуют точной форме, показанной на рисунке выше (обратите внимание на переменные детали %s и фиксированный текст).
Все три события должны происходить в течение 60 секунд.
Конкретные переменные в событиях A и B должны соответствовать конкретному тексту (остановлен и Servicerunner)
Это выглядит сложным, нуждающимся в опыте создания, потребовалось много времени, чтобы создать, верно?
Вы будете удивлены! Это заняло менее 30 секунд и всего несколько кликов мыши. Фактически, просто выбрав 3 события, подписенный строитель выполнял большую часть работы. Но что действительно впечатляет, так это то, что она была создана, — структуры событий и постоянное управление схемами (поскольку структуры событий могут меняться в разных выпусках) автоматизируется нашим ML.
Пожалуйста, посетите Здесь Для предварительной регистрации для бета-доступа.
Оригинал: «https://dev.to/gdcohen/reliable-signatures-to-detect-known-software-faults-1897»