elasticsearch 如何获取metricbeat文件的系统参数值?,elasticsearch,nest,metricbeat,elasticsearch,Nest,Metricbeat" /> elasticsearch 如何获取metricbeat文件的系统参数值?,elasticsearch,nest,metricbeat,elasticsearch,Nest,Metricbeat" />

elasticsearch 如何获取metricbeat文件的系统参数值?

elasticsearch 如何获取metricbeat文件的系统参数值?,elasticsearch,nest,metricbeat,elasticsearch,Nest,Metricbeat,我是ElasticStack的新手,希望在我的.NET核心项目中从Metricbeat获得Cpu/Memory/diskio等系统参数的值 我想创建一个类似于kibana dashboard的页面。因此,我需要通过query/API从metricbeat文件中获取它们 我已经编写了以下代码 ConnectionSettings connectionSettings; ElasticClient elasticClient;

我是ElasticStack的新手,希望在我的.NET核心项目中从Metricbeat获得Cpu/Memory/diskio等系统参数的值

我想创建一个类似于kibana dashboard的页面。因此,我需要通过query/API从metricbeat文件中获取它们

我已经编写了以下代码

            ConnectionSettings connectionSettings;
            ElasticClient elasticClient;
            StaticConnectionPool connectionPool;
            var nodes = new Uri[]
            {
                new Uri(_options.Value.ElasticSearchUrl),
            };
            connectionPool = new StaticConnectionPool(nodes);
            string indexName = "metricbeat*";
            connectionSettings = new ConnectionSettings(connectionPool).DefaultIndex(indexName);
            elasticClient = new ElasticClient(connectionSettings);


            var elasticResponse = await elasticClient.SearchAsync<object>(s => s.Size(1).
Query(q => q.Bool(b => b.Must(m => m.Range(r => r.Field("system.memory.actual.used.pct").GreaterThan(0).LessThan(1))))));
但我只想

              "actual" : {
                "free" : 23516848128,
                "used" : {
                  "pct" : 0.3028,
                  "bytes" : 10214834176
                }
              }
请帮忙

解决方案:

var elasticResponse=elasticClient.Search(s=>s
.DocValueFields(dvf=>dvf.Fields(“system.memory.*”、“system.cpu.*”))
.尺寸(2)
);

您可以使用它告诉elasticsearch您感兴趣的领域。 使用NEST,您的搜索请求将如下所示

var elasticResponse = await client.SearchAsync<object>(s => s
    .Source(sf => sf.Includes(i => i.Fields("system.memory.actual.*")))
    .Size(1)
    .Query(q => q.Bool(b => b.Must(m =>
        m.Range(r => r.Field("system.memory.actual.used.pct").GreaterThan(0).LessThan(1))))));

希望这能有所帮助。

感谢Rob的回复,但这并不像预期的那样,也不像以前从系统到pct的多个级别的keyValuePair一样。您是否希望得到一个扁平的字段结构作为响应?我想,如果我能在“system.memory.actual.*”之后获得所有字段值的话。嗨,Rob,您让我开心了。这正是我需要的。更新的代码可以在我的部分看到。
var elasticResponse = await client.SearchAsync<object>(s => s
    .Source(sf => sf.Includes(i => i.Fields("system.memory.actual.*")))
    .Size(1)
    .Query(q => q.Bool(b => b.Must(m =>
        m.Range(r => r.Field("system.memory.actual.used.pct").GreaterThan(0).LessThan(1))))));
var elasticResponse = await client.SearchAsync<object>(s => s
    .DocValueFields("system.memory.actual.*") 
    .Size(1)
    .Query(q => q.Bool(b => b.Must(m =>
        m.Range(r => r.Field("system.memory.actual.used.pct").GreaterThan(0).LessThan(1))))));

foreach (var fields in elasticResponse.Fields)
{
    foreach (var value in fields)
    {
        Console.WriteLine($"{value.Key}: {fields.Value<object>(value.Key)}");
    }
}
system.memory.actual.free: 23516848128
system.memory.actual.used.bytes: 10214834176
system.memory.actual.used.pct: 0.302799999713898