#asp.net-core #elasticsearch #kibana #serilog
Вопрос:
Я пытаюсь начать вход в ElasticSearch, но на сервере не найдено журналов, и если я включу режим диагностики, возникнет исключение:
Вот как выглядит мой Startup.cs:
//ElasticSearch Logs
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://myserver.com:9243/"))
{
ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "mypassword"),
AutoRegisterTemplate = true,
})
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
Ниже приведена моя программа.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseSerilog();
});
Это то, что у меня есть внутри контроллера:
_logger.LogError(new Exception("test"), "An error has occurred.");
_logger.LogInformation("The {User} has just executed {Action}.", "username", "actionName");
Log.Error("this is my first log");
Исключение, которое я получаю:
2021-08-19T21:09:15.2793348 Z Не удалось создать шаблон. Исключение Elasticsearch.Net.ElasticsearchClientException: Запрос не удалось выполнить. Вызов: Код статуса 400 из: PUT /_template/serilog-события-шаблон. Ошибка сервера: Тип: исключение mapper_parsing_exception Причина: «Не удалось проанализировать сопоставление [_doc]: Определение корневого сопоставления содержит неподдерживаемые параметры: [по умолчанию : {dynamic_templates=[{numerics_in_fields={match_pattern=регулярное выражение, path_match=поля.[d ]$, сопоставление={нормы=ложь, индекс=истина, тип=текст}}}, {строковые поля={сопоставление={нормы=ложь, индекс=истина, тип=текст, поля={необработанные={ignore_above=256, индекс=истина, тип=ключевое слово}}}, match_mapping_type=строка, соответствие=}}], свойства={сообщение={индекс=истина, тип=текст}, исключения={тип=вложенный, свойства={Исключениеmessage={тип=объект, свойства={Тип члена={тип=целое число}}}, StackTraceString={индекс=истина, тип=текст}, HResult={тип=целое число}, RemoteStackTraceString={индекс=истина, тип=текст}, RemoteStackIndex={тип=целое число}, Глубина={тип=целое число}}}}}]» Причина: «Тип: исключение mapper_parsing_exception Причина: «Определение корневого сопоставления содержит неподдерживаемые параметры: [по умолчанию : {dynamic_templates=[{numerics_in_fields={match_pattern=регулярное выражение, path_match=поля.[выражениеD ]$, отображение={нормами,=ложь,=индекс есть, тип=текст}}}, {string_fields={картографическая={нормами,=ложь,=индекс есть, тип=текст, поля={сырьем={ignore_above=256, индекс=есть, тип=ключевое слово}}}, match_mapping_type=строке, матч=}}], свойства={сообщение={индекс=есть, тип=текст}, исключения={тип=вложенными, свойства={Сообщение_об_исключении={тип=объект, свойства={свойством membertype={тип=целое число}}}, StackTraceString={индекс=есть, тип=текст}, значение HRESULT={тип=целое число}, RemoteStackTraceString={индекс=есть, тип=текст}, RemoteStackIndex={тип=целое число}, глубина={тип=целое число}}}}}]»» на решение Elasticsearch.Сеть.Транспорт 1.HandleElasticsearchClientException(RequestData data, Exception clientException, IElasticsearchResponse response) at Elasticsearch.Net.Transport
1.Завершение ответа[TResponse](данные запроса, данные запроса, трубопровод IRequestPipeline, Список 1 seenExceptions, TResponse response) at Elasticsearch.Net.Transport
1.Запрос[TResponse](метод HttpMethod, путь к строке, данные postData, параметры запроса IRequestParameters) в Elasticsearch.Net.ElasticLowLevelClient.doRequest[TResponse](метод HttpMethod, путь к строке, данные postData, параметры запроса IRequestParameters) в Elasticsearch.Net.NamespacedClientProxy.doRequest[TResponse](сообщение HttpMethod, URL-адрес строки, тело данных postData, параметры параметров IRequestParameters) в Elasticsearch.Net.Спецификация.Индексапи.Пространство имен нижнего уровня.PutTemplateForAll[TResponse](имя строки, тело postData, параметры запроса PutIndexTemplateRequestParameters) в Serilog.Умывальники.Эластичный поиск.ElasticsearchSinkState.зарегистрироватьтемплатеобходимо()
Есть какие-нибудь подсказки, чего мне может не хватать, или какие-либо советы о том, как узнать, где ошибка?
Ответ №1:
Похоже, приемник не смог зарегистрировать шаблон с помощью Elasticsearch. Возможно, это связано с тем, что вы используете более свежую версию Elasticsearch и не указываете, какую версию вы используете, поэтому приемник предполагает, что вы используете более старую версию до 5.0:
При использовании
AutoRegisterTemplate
функции это позволяет установить версию Elasticsearch. В зависимости от версии будет выбран шаблон. По умолчанию установлено значение до версии 5.0.
Вы должны AutoRegisterTemplateVersion.ESv7
или AutoRegisterTemplateVersion.ESv6
в зависимости от того, какую версию вы используете
напр.
Log.Logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200") )
{
AutoRegisterTemplate = true,
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7, // <<<<<#####
})
.CreateLogger();