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