Я только что познакомился со старым веб-приложением, которое нуждается в любви. Одна из первых вещей, которые я хочу сделать, - это установить и запустить надлежащую регистрацию с помощью 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 для анализа значения полей. Я надеюсь, что кто-то может помочь мне с несколькими указателями.
Спасибо