Поделиться через


Логирование с помощью Elastic Stack

Подсказка

Это фрагмент из электронной книги «Архитектура облачных нативных приложений .NET для Azure», доступен на .NET Docs или как бесплатный загружаемый PDF-файл, который можно прочитать в автономном режиме.

Миниатюра обложки электронной книги Azure с Cloud Native .NET приложениями.

Существует множество хороших централизованных инструментов для ведения журнала, и их стоимость варьируется от бесплатных с открытым исходным кодом до более дорогих вариантов. Во многих случаях бесплатные инструменты так же хороши, как или даже лучше, чем платные версии. Одним из таких средств является сочетание трех компонентов с открытым исходным кодом: Elasticsearch, Logstash и Kibana.

Вместе эти средства называются стеком Elastic Stack или ELK.

Эластичные стеки

Elastic Stack — это мощный вариант сбора информации из кластера Kubernetes. Kubernetes поддерживает отправку журналов в конечную точку Elasticsearch, и в основном, чтобы начать работу, вам нужно задать переменные среды, как показано на рис. 7-5.

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

Рис. 7-5. Переменные конфигурации для Kubernetes

На этом шаге Elasticsearch будет установлена в кластере, и все журналы кластера будут отправлены туда.

Пример панели мониторинга Kibana, показывающей результаты запроса к журналам, извлечённым из Kubernetes Рисунок 7-6. Пример панели мониторинга Kibana с результатами запроса к журналам, которые собираются из Kubernetes

Дополнительные сведения о конфигурации см. в разделе "Настройка ведения журнала( Kibana)".

Каковы преимущества Эластичного стека?

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

Logstash

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

Serilog — это библиотека ведения журналов для языков .NET, которая позволяет выполнять параметризованное ведение журнала. Вместо создания текстового сообщения журнала, которое внедряет поля, параметры хранятся отдельно. Эта библиотека обеспечивает более интеллектуальную фильтрацию и поиск. Пример конфигурации Serilog для записи в Logstash отображается на рисунке 7-7.

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

Рис. 7-7. Конфигурация Serilog для записи сведений журнала непосредственно в logstash по протоколу HTTP

Logstash будет использовать конфигурацию, как показано на рис. 7-8.

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index=>"sales-%{+xxxx.ww}"
    }
}

Рис. 7-8. Настройка Logstash для обработки логов из Serilog

В сценариях, когда обширные операции с журналами не требуются, существует альтернатива Logstash, известная как Beats. Beats — это семейство инструментов, которые могут собирать разнообразные типы данных: от журналов до сетевых данных и сведений о времени безотказной работы. Многие приложения будут использовать Logstash и Beatstash.

Как только журналы были собраны Logstash, их нужно где-то сохранить. Хотя Logstash поддерживает множество различных выходных данных, одним из самых интересных является Elasticsearch.

Elasticsearch

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

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

Запрос, который ищет 10 самых популярных страниц, посещаемых jill@example.com, отображается на рис. 7-9.

"query": {
    "match": {
      "user": "jill@example.com"
    }
  },
  "aggregations": {
    "top_10_pages": {
      "terms": {
        "field": "page",
        "size": 10
      }
    }
  }

Рис. 7-9. Запрос Elasticsearch для поиска 10 страниц, посещаемых пользователем

Визуализация сведений с помощью веб-панелей мониторинга Kibana

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

Установка Elastic Stack в Azure

Эластичные стеки можно установить в Azure различными способами. Как всегда, можно настроить виртуальные машины и установить на них Elastic Stack напрямую. Этот вариант предпочтительнее для некоторых опытных пользователей, так как он предлагает самую высокую степень настраиваемости. Развертывание в инфраструктуре как услуга представляет значительные затраты на управление, заставляя тех, кто принимает этот путь, чтобы взять на себя владение всеми задачами, связанными с инфраструктурой как службой, такой как защита компьютеров и сохранение up-to-date с исправлениями.

Вариант с меньшими накладными расходами — использовать один из многих контейнеров Docker, на которых уже настроена Elastic Stack. Эти контейнеры можно внедрить в существующие кластеры Kubernetes и запустить вместе с кодом приложения. Контейнер sebp/elk — это хорошо документируемый и проверенный контейнер Elastic Stack.

Другим вариантом является недавно объявленное предложение ELK-as-a-service.

Ссылки