Введение:

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

Цель:

Основная цель этого проекта состояла в том, чтобы использовать возможности машинного обучения для автоматического анализа последовательностей журналов для обнаружения отклонений. Таким образом, он будет использоваться в качестве инструмента автоматизации, способного выявлять аномалии или неожиданное поведение. Эта возможность поможет легко обнаружить и быстро решить проблему. Первым набором данных, использованным в проекте, были журналы Apache с почти 2000 строками, затем он был перенесен на использование набора данных журналов BGL, в котором журналы собираются с суперкомпьютера BlueGene/L, у которого были аномалии и журналы нормального выполнения. Его также можно использовать для обнаружения аномалий в журналах терраформирования.

Методология:

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

Следующий метод был принят, поскольку мы могли использовать существующие инструменты, такие как logmine, который используется для создания шаблонов, и Word2Vec, который представляет собой модель преобразования текста в вектор.

Реализация:

1. Необработанные бревна:

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

2. Анализ журналов:

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

3. Сопоставьте закономерности с журналами:

  • На этом этапе он берет шаблоны, сгенерированные в результате анализа журналов, и сопоставляет их с исходными журналами, чтобы определить, какой шаблон был журналом.
  • Это помогает создавать последовательности, которые используются для обучения модели машинного обучения.
def insert_inline(self, line):
        patterns = self.patterns
        
        tokens = re.split(self.delimiters, line.strip())
        lineScore = []
        for i in range(len(patterns)):
            patt = patterns[i]
            score = self.scorer.distance(
                patt, tokens, self.max_dist
            )
            lineScore.append(score)
            if score <= self.max_dist:
                if tokens[0] == "-":
                    txt = "P"+str(i+1)+" - "+"\n"
                    print(txt)
                else:
                    txt = "P"+str(i+1)+"\n"
                self.newFile.write(txt)
                break

4. Извлечение функций:

  • Возьмите этот сопоставленный файл журнала, чтобы извлечь последовательности без журналов.
  • Используйте эти последовательности и превратите их в фиксированное окно последовательностей.

5. Преобразуйте каждый шаблон в вектор с помощью Word2Vec:

  • Предоставьте эти последовательности окон в качестве входных данных для модели word2vec, чтобы преобразовать их в векторы.
  • Word2vec — это модель, которая преобразует слова в предложениях в векторы.
model = Word2Vec(window = 1000, min_count=1, vector_size = 10)
model.build_vocab(pandasSequences,progress_per=100)
model.train(pandasSequences, total_examples=model.corpus_count, epochs=10)

6. Преобразуйте каждую последовательность журналов в матрицу, используя среднее значение:

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

7. Обнаружение аномалий:

  • Существует множество моделей, которые можно использовать для обнаружения аномалий, таких как Наивный Байес, Случайный лес, Нейронная сеть, называемая автоматическим кодировщиком, для обнаружения аномалий в последовательностях.
  • Мы передаем эти обучающие данные в эти модели и обучаем их с помощью данных последовательности журналов.

Ниже приведен фрагмент одной из моделей под названием Классификатор случайного леса, используемой при обнаружении аномалий.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X_train, X_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2, random_state=0)
rfc = RandomForestClassifier(n_estimators=100, random_state=0)
rfc.fit(X_train, y_train)
y_pred = rfc.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: {:.2f}%'.format(accuracy*100))
print(X_test)
print(rfc.predict(X_test[0:10]))

9. Тестирование:

  • Случайным образом выберите несколько строк в исходном наборе данных.
  • Проверьте эти строки с помощью обученного набора данных, чтобы проверить точность, точность и отзыв.

Результаты и выводы:

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

На изображении выше показан образец шаблонов журнала, всего 274, которые я получил из файла журнала, в котором было 42 тысячи строк журнала.

На изображении выше показан образец шаблонов, которые я сопоставил с исходным файлом журнала.

На изображении выше описано обучение модели Word2Vec преобразованию последовательностей журналов в числовые значения.

На изображении выше показан вектор, который я получил в результате обучения модели Word2Vec.

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

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

Проблемы:

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

Заключение:

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