Пользовательская регистрация в IIS с Elastic - PullRequest
0 голосов
/ 15 января 2020

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

Текущая настройка состоит в том, что у нас есть несколько серверов, на которых несколько сайтов IIS запускают свои собственные копии. сайт. Журналы могут быть загружены по мере необходимости. Все сайты запускают одно и то же приложение, но для многих клиентов. К сожалению, этот сайт не предназначен для нескольких арендаторов. Есть много вопросов для решения. Сайты работают на. NET 4.5.2 и IIS 7.5. Но первое, что я хочу решить, - это получить представление о том, что происходит с помощью централизованного сервера журналов.

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

Я нашел функцию AppendToLog в объекте Response. Это позволяет мне добавлять информацию о том, что это за сайт и какая у него версия.

Я решил добавить эту информацию как JSON. Например {'site': 'SiteA', 'version': '4.3.2'}. Однако это добавлено в странное место в журнале. Он вставляется сразу после позиции cs-uri-stem. Поскольку cs-uri-query идет после Uri-stem Elasti, c просто помещает строку JSON без разбора в поле url.query. Я надеялся, что это будет добавлено в конец журнала, и я смогу проанализировать JSON как отдельные поля. Но заголовок поля также не появляется в журнале.

Чтобы вставить новую информацию журнала, которую я подключил в событие OnEndRequest в модуле HttpModule, как это:

public class CustomIISLogModule : IHttpModule
    {
        public void Dispose()
        {

        }

        public void Init(HttpApplication context)
        {
            var helper = new EventHandlerTaskAsyncHelper(async (sender, args) =>
            {
                var app = (HttpApplication)sender;

                var customLogEntry = new
                {
                    Version = app.Context.Items.Contains("CorrelationId") ? app.Context.Items["CorrelationId"].ToString() : "-",
                    Site = app.Context.Items.Contains("Site") ? app.Context.Items["Site"].ToString() : "-"
                };

                app.Context.Response.AppendToLog(JsonConvert.SerializeObject(customLogEntry));
            });

            context.AddOnEndRequestAsync(helper.BeginEventHandler, helper.EndEventHandler);
        }
    }

У меня пока есть просто используйте FileBeat с модулем IIS для загрузки журналов.

Я не могу найти какую-либо документацию или сообщения в блоге о том, как добиться добавления нового настраиваемого поля в заголовки журналов и как выполнить поиск elasti c для анализа значения полей. Я надеюсь, что кто-то может помочь мне с несколькими указателями.

Спасибо

...