Рубрики
Uncategorized

Машинное обучение для журналов (часть 1 из 5)

В нашем последнем блоге мы обсудили необходимость автономных решений для мониторинга, чтобы помочь разработчикам и OPE … Tagged с DevOps, MachineLearning.

В нашем Последний блог Мы обсудили необходимость автономных решений для мониторинга, чтобы помочь разработчикам и пользователям операций сохранять все более крупные и сложные распределенные приложения.

Хотя автономный мониторинг включает в себя все три столпа наблюдения (метрики, трассировки и бревна), в зееде мы начали с журналов (но следите за обновлениями). Это связано с тем, что журналы, как правило, представляют собой наиболее полный источник истины во время инцидентов и широко используются для поиска основной причины. Управление журналами и мониторинг журнала также — это область, которая, по нашему мнению, не очень развивалась за последние 20 лет. Большинство решений для журнала по -прежнему разработаны вокруг «совокупного, индекса и поиска». И они в основном используются реактивно квалифицированными пользователями, которые вручную ищут основную причину.

Основная причина, по которой инструменты ведения журнала не развивались в последние два десятилетия, заключается в том, что использование машинного обучения (ML) с журналами сложно. Журналы невероятно огромные, шумные и в основном неструктурированные. На сегодняшний день работа ML в логарифмическом пространстве была либо чисто академической, либо ограничена обнаружением основных аномалий, которые являются шумными и не легко свернуты в реальные инциденты, о которых необходимо знать пользователи.

Эта серия блогов подробно расскажет о том, как Зебриум использовал уникальный подход к применению машинного обучения к журналам, но чтобы понять, как этот подход превосходит, наша история начинается с каких подходов, которые были опробованы ранее.

Машинное обучение для журналов

Машинное обучение (ML) использует статистические модели для прогнозирования. Для мониторинга журналов полезным прогнозом будет возможность классифицировать, является ли конкретное событие журнала или набор событий, вызывает реальный инцидент, который требует действия для решения. Другим полезным прогнозом было бы соотносить инцидент с основной причиной, чтобы пользователи могли легко исправить проблему.

В ML, как правило, чем больше данных, тем точнее ML -модель будет делать прогнозы. Вот почему модели обычно становятся более точными с течением времени. Тем не менее, это имеет две проблемы — это приводит к длительному времени заказа до стоимости, то есть система требует нескольких дней или недель данных, чтобы служить точным прогнозам, а не повышать ложные оповещения (также называемые «ложными положительными»).

Хуже того, Mlow Learning ML на самом деле не очень полезно, когда поведение самого приложения продолжает меняться, например, потому что частые обновления развертываются для каждого из его микросервисов. Если точность плохая, то мы в конечном итоге начнем игнорировать модель, поскольку она будет генерировать слишком много спам -оповещений.

Есть также два основных подхода для обучения моделей ML на существующих данных: контролируемые и неконтролируемые. Наблюдаемое обучение требует маркированного набора данных, обычно производимого вручную людьми, чтобы помочь модели понять причину и следствие данных. Например, мы можем пометить все события журнала, которые относятся к реальному инциденту, чтобы модель снова узнает этот инцидент, если он увидит те же события или шаблон журнала.

Как вы можете себе представить, это может занять много усилий, особенно учитывая, что миллионы потенциальных режимов сбоя могут генерировать комплексные программные услуги. Поэтому еще один подход, используемый для обучения моделей ML, — это неконтролируемое обучение. При таком подходе модель будет пытаться выяснить закономерности и корреляции в наборе данных, которые затем можно использовать для обслуживания прогнозов.

Однако задача с использованием ML с журналами заключается в том, что каждая среда отличается. Хотя могут быть некоторые общие сторонние услуги, общие между средами (например, компоненты с открытым исходным кодом, такие как MySQL, Nginx, Kubernetes и т. Д.), Скорее всего, будут также пользовательские приложения, которые являются уникальными для конкретной среды и генерируют уникальный поток журналов. и узоры.

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

Еще одна проблема — это то, что любой подход ML должен выяснить, как быть точным в прогнозах быстро и с ограниченными данными, чтобы пользователь не ожидал дни или недели для получения точных предупреждений.

Имея в виду эти проблемы, нам нужно решение ML, которое может быстро тренироваться в относительно небольшом наборе данных и делать это без аспекта, чтобы в конечном итоге генерировать точные прогнозы инцидентов в уникальных средах и продолжать постоянно развиваться приложение.

Существующие подходы и проблемы

Несмотря на то, что по этому вопросу было много академических работ, подходы обычно делятся на две категории, которые объясняются ниже:

Обобщенные алгоритмы

Эта категория относится к алгоритмам, которые были разработаны для обнаружения аномальных паттернов в данных на основе строк. Две популярные модели в этой категории являются линейные векторные машины поддержки (SVM) и случайный лес.

Используя SVM в качестве примера, он классифицирует вероятность того, что определенные слова в строке журнала коррелируют с инцидентом. Некоторые слова, такие как «ошибка» или «безуспешная», могут коррелировать с инцидентом и получать более высокий показатель вероятности, чем другие слова, такие как «успешные» или «подключенные». Объединенный балл сообщения используется для обнаружения проблемы.

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

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

Глубокое обучение

Глубокое обучение — очень мощная форма ML, обычно называемой искусственным интеллектом (ИИ). Обучая нейронные сети на больших объемах данных, глубокое обучение может найти закономерности в данных, но обычно используется с контролируемым обучением с использованием помеченных наборов данных. ИИ использовался для таких сложных проблем, как изображение и распознавание речи с большими результатами.

Одной из лучших академических работ для этого подхода является Deeplog Paper из Университета Юты, которая использует глубокое обучение для обнаружения аномалий в журналах. Интересно, что они также применили ML для разбора журналов в типы событий, что аналогично подходу Зебрия, обсуждаемого позже, поскольку это значительно повышает точность обнаружения аномалий.

Проблема с этим подходом снова заключается в том, что для того, чтобы он стал точным, требуется большой объем данных. Это означает, что новые среды займет больше времени, прежде чем они смогут обслуживать точные прогнозы, и меньшие среды могут никогда не создавать достаточно данных для того, чтобы модель была достаточно точной.

Однако, в отличие от статистических алгоритмов, обсуждаемых ранее, еще одна проблема с глубоким обучением заключается в том, что он очень интенсивен. Многие ученые по данным будут проходить дорогие экземпляры графических процессоров, чтобы быстрее обучать модели, но при значительной стоимости. Если нам нужно обучать модель в каждой уникальной среде индивидуально и непрерывно с течением времени, это был бы чрезвычайно дорогой способ для автономного обнаружения инцидентов, и поэтому этот подход не рекомендуется для мониторинга журналов для среды, работающих на пользовательском программном обеспечении.

Некоторые поставщики обучали алгоритмы глубокого обучения на общих сторонних услугах (то есть MySQL, NGINX и т. Д.). Этот подход может работать, так как они могут взять большой объем общедоступных наборов данных и режимов ошибок для обучения модели, а обученная модель может быть развернута для всех их пользователей. Однако, поскольку ни одна среда не работает только в этих сторонних услугах и имеет пользовательское программное обеспечение, которое работает только в этой среде, этот подход ограничивается только обнаружением инцидентов в сторонних службах, а не на пользовательском программном обеспечении, работающем в самой среде.

Принимая другой подход

Как мы обсуждали выше, обобщенные алгоритмы и глубокое обучение, как применялось до сих пор, имеют слишком много ограничений, чтобы обеспечить действительно автономное, неконтролируемое решение для мониторинга журнала.

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

Следующие блоги будут подробно рассмотрены на каждом этапе этого процесса и обсуждают, как он помогает достичь точного обнаружения автономного инцидента и идентификации основной причины.

Если вы не можете дождаться завершения серии блогов, пожалуйста, загрузите нашу белую бумагу Здесь или попробуйте наш Бесплатная бета Анкет

[Опубликовано с разрешения автора Дэвида Гильде @ Zebrium]

Оригинал: «https://dev.to/gdcohen/machine-learning-for-logs-part-1-of-5-5473»