Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подсказка
Это фрагмент из электронной книги «Архитектура облачных нативных приложений .NET для Azure», доступен на .NET Docs или как бесплатный загружаемый PDF-файл, который можно прочитать в автономном режиме.
Существует множество хороших централизованных инструментов для ведения журнала, и их стоимость варьируется от бесплатных с открытым исходным кодом до более дорогих вариантов. Во многих случаях бесплатные инструменты так же хороши, как или даже лучше, чем платные версии. Одним из таких средств является сочетание трех компонентов с открытым исходным кодом: 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 будет установлена в кластере, и все журналы кластера будут отправлены туда.
Рисунок 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.