Ведение журнала с помощью Log4Net и gelf4net в ELK, работающий на Docker, через порт Udp — DZone Big Data

В этой статье мы увидим, как настроить ELK, работающий в Docker, и настроить log4net для отправки сообщений Gelf в ELK с помощью gelf4net. Пример кода написан на C# и в проекте консоли .NET Framwork.

ELK — проект с открытым исходным кодом; это аббревиатура от Elasticsearch, Logstash и Kibana. Вкратце: Elasticsearch — это поисковая и аналитическая система. Logstash — это конвейер обработки данных на стороне сервера, способный принимать данные из нескольких источников, преобразовывать их и затем отправлять в Elasticsearch. Kibana используется для визуализации данных с помощью диаграмм и графиков в Elasticsearch.

Библиотека Apache log4net — это популярный инструмент, который позволяет вам выводить операторы журнала на различные цели вывода.

Библиотека gelf4net — это адаптер log4net, который форматирует журналы в соответствии со спецификацией GELF и упрощает их отправку по Udp. Gelf означает расширенный формат журнала Graylog (GELF). GELF — отличный выбор для ведения журнала из приложений, а GELF можно отправлять по UDP, поскольку вам не нужно беспокоиться о тайм-аутах, проблемах с подключением или о чем-то еще, что может нарушить работу вашего приложения из класса, который вы используете для ведения журнала. Подробнее о GELF можно прочитать по этой ссылке http://docs.graylog.org.

Приступая к работе: для начала мы создадим собственный образ из общедоступного образа sebp/elk в Docker Hub. Образ sebp/elk Docker предоставляет удобный централизованный сервер журналов и веб-интерфейс управления журналами, объединяя Elasticsearch, Logstash и Kibana, вместе известные как ELK.

Шаги 1. Создайте файл Docker, который будет использоваться для создания образа ELK.

Название изображения

Шаг 2. Создайте файл gelf-30.conf для Logstash, который будет добавлен в образ. Этот файл указывает, какие плагины мы хотим использовать, и настройки для каждого плагина. В нашем случае мы будем использовать плагин ввода GELF. Плагины позволяют Logstash читать определенный источник событий. Вы заметите, что во входном плагине мы не указали порт. Следовательно, Logstash будет использовать порт по умолчанию 12201.

Название изображения

Шаг 3. Мы запустим команду сборки Docker для создания образа из файла докера выше.

# Docker build -t  victorbit8/elk -f Dockerfile

Шаг 4. Запустите команду Docker, чтобы увидеть образ, созданный сверху, и отправить его в свой репозиторий в Doker Hub, выполнив команду push Docker.

#Docker image ls.

#docker push victorbit8/elk

Название изображения

Шаг 5. Теперь мы можем создать контейнер из образа выше, выполнив команду Docker ниже. Примечание: мы добавили порт, по которому мы можем получить доступ к стеку ELK вне контейнера. Вы можете продолжить изучение сети Docker из https://docs.docker.com/network/.

# docker run --privileged -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5300:5300/udp -p                             12201:12201/udp victorbit8/elk

Название изображения

Шаг 6. Откройте браузер и перейдите на http://локальный:9200/ для Elasticsearch и http://локальный:5601/ (или же http://127.0.0.1:5601/) — вы должны увидеть что-то вроде скриншота ниже.

Название изображения

Название изображения

Шаг 6. Создайте пример проекта консоли .NET Framework с помощью Visual Studio. Добавьте ссылку на log4net, Newtonsoft.json и Gelf4Net из диспетчера пакетов NuGet.

Название изображения

Шаг 7. Включите в проект файл log4net.config, как показано ниже. Обратите внимание, что мы используем GelfUdpAppender. У нас есть другие приложения, которые мы не будем использовать в этой статье.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" />
    </configSections>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true" />
    </appSettings>
    <log4net>
        <logger name="LogSendToElkAppender">
            <level value="ALL" />
            <appender-ref ref="GelfUdpAppender" />
        </logger>
        <appender name="GelfUdpAppender" type="Gelf4Net.Appender.GelfUdpAppender, Gelf4Net">
            <remoteAddress value="127.0.0.1" />
            <remotePort value="12201" />
            <layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net">
                <param name="AdditionalFields" value="app:UdpAppender,version:1.0,Environment:Dev,Level:%level" />
                <param name="Facility" value="RandomPhrases" />
                <param name="IncludeLocationInformation" value="true" />
                <param name="SendTimeStampAsString" value="false" />
            </layout>
        </appender>
    </log4net>
</configuration>

Шаг 8. Добавьте приведенный ниже код в класс Assembly.cs.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

Название изображения

Шаг 9. Создайте класс с именем logger и вставьте приведенный ниже код.

using log4net;

namespace ConsoleTest
{
public class Logger
{
private static readonly ILog logSendToElk =  log4net.LogManager.GetLogger("LogSendToElkAppender");
  public static void logToELK(string message)
  {
       logSendToElk.Info(message);
   }
 }
}

Наконец, вызовите метод класса в основном методе program.cs.

class Program
{
  static void Main(string[] args)
  {
    Logger.logToELK("the quick brown fox jumped over the lazy dog test");
    Console.ReadLine();
  }
}

Шаг 10. Теперь мы запустим консольную программу и просмотрим Kibana, чтобы увидеть сообщение журнала. Служба Logstash прослушивает порт 12201 через UDP, получает сообщение и отправляет его в Elasticsearch. Мы можем визуализировать журнал, создав шаблон индекса с помощью Kibana.

Название изображения

Название изображения

Название изображения

Шаг 11. Теперь мы можем перейти в Kibana, чтобы просмотреть журнал, отправленный из нашего консольного проекта Visual Studio.

Название изображения

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *