使用 API 后搜索不返回日志

问题描述

我想在使用 nesT 的 asp.net 核心 Web api 应用程序中从 elasticsearch 返回包含“level”:“error”的日志。我查看了 search_after api {{3} } 并查看了 Search After API 的另一个资源。在 Kibana CLI 上,我写了以下内容

GET elastic-search-app-log*/_search
{
  "size": 3000,"query": {
    "match": {
      "level": "Error"
    }
  },"search_after": [3000],"sort":[
    {"@timestamp": "asc"}
  ]
}

我只是将大小设置为随机大小,并在每 3000 个索引后搜索

因此,在 .net 方面,我尝试将其翻译为:

ESFieldsController

        private readonly IElasticclient _elasticclient;

        public ESFieldsController(IElasticclient elasticclient)
        {
            _elasticclient = elasticclient;
        }

        [HttpGet]
        public async Task<ESFields> Get()
        {
            var response = await _elasticclient.SearchAsync<ESFields>(s => s
                .Index("elastic-search-app-logs*")
                .Size(3000)
                .Query(q => q.Match(m => m.Field(f => f.Level == "error")))
                .SearchAfter(3000)
                .sort(srt => srt
                      .Ascending(p => p.TimeStamp)));

            Console.WriteLine(response);
            
            return response?.Documents?.FirstOrDefault();
        }

ESFields

namespace ESPractice.Models
{
    public class ESFields
    {
        public String Level { get; set; }
        public DateTime TimeStamp { get; set; }
    }
}

但是,当我运行应用程序并出现 swagger 时,我尝试执行 get cmd 以查看它是否有效,但它不返回包含 "level": "error" 的日志。 我在翻译时做错了什么吗?

Paginate Search After

enter image description here


附加信息:

startup.cs

        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",new OpenApiInfo { Title = "ESPractice",Version = "v1" });
            });

            // create a new node instance 
            var node = new Uri("http://localhost:9200");
            // settings instance for the node
            var settings = new ConnectionSettings(node);

            services.AddSingleton<IElasticclient>(new Elasticclient(settings));
        }

以下所有内容均来自我将日志写入 elasticsearch 的单独应用程序:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSerilog((context,configuration) =>
                {
                    configuration.Enrich.FromLogContext()
                        .Enrich.WithMachineName()
                        .Writeto.Console()
                        .Writeto.Elasticsearch(
                            new ElasticsearchSinkOptions(new Uri(context.Configuration["ElasticConfiguration:Uri"]))
                            {
                               IndexFormat = $"{context.Configuration["ApplicationName"]}-logs-{context.HostingEnvironment.EnvironmentName?.ToLower().Replace(".","-")}-{DateTime.UtcNow:yyyy-MM}",AutoRegisterTemplate = true,})
                        .Enrich.WithProperty("Environment",context.HostingEnvironment.EnvironmentName)
                        .ReadFrom.Configuration(context.Configuration);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

appsettings.json

{
  "ApplicationName": "elastic-search-app","Serilog": {
    "MinimumLevel": {
      "Default": "information","Override": {
        "Microsoft": "information","System": "Warning"
      }
    }
  },"ElasticConfiguration": {
    "Uri": "http://localhost:9200"
  },"AllowedHosts": "*"
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...