【问题标题】:How to construct filter for Elastic Search on Log Stash with NEST?如何使用 NEST 在 Logstash 中为 Elasticsearch 构建过滤器?
【发布时间】:2014-04-03 01:40:28
【问题描述】:

我设置了一个 logstash/elasticsearch/kibana 系统,结构化 json 类型的日志正在进入弹性搜索(不是来自 C# 应用程序)并且在 kibana 中可见。

我使用 NEST 是因为我想从 logstash 中分割数据。

以下代码正在生成“命中”结果,我可以在调试器中检查这些结果。

ElasticClient client = new ElasticClient(settings);


var searchResults = client.Search( s  => s
                                      .From(0)
                                      .Size(100)
                                      .AllIndices()

                                      .SortDescending("@timestamp")
                                  );

但是,如果我尝试扩展搜索以包含我认为存在于日志中的内容(在 Kibana 中可见),我现在会得到结果。

 var searchResults = client.Search( s  => s
                                      .From(0)
                                      .Size(100)
                                      .AllIndices()
                                      .Query(q => q
                                         .Term("MySpecialFieldName", "ValueThatAppears")
                                       )
                                       .SortDescending("@timestamp")
                                   );

我还想利用示例中显示的类型安全和其他机制。我不确定这是否相关。

( 我正在单独解决这个问题:在搜索中添加一个像“client.Search(无法反序列化或以其他方式过滤...)

【问题讨论】:

  • 在使用交互式查询工具时,我看到 logstash 字段最终命名为“log.MySpecialFieldName.Raw”。到目前为止我已经尝试过,但没有成功,这是正确的方向吗?正确使用术语?

标签: elasticsearch logstash nest


【解决方案1】:

找到了正确的设置来完成这项工作:

当它被弹性搜索索引时,logstash 系统将其放入一个类型(我认为是日志或日志)中。此外,该术语需要以“.raw”作为后缀。所以工作示例最终是:

 var searchResults = client.Search<MyClass>( s  => s
                                      .From(0)
                                      .Size(100)
                                      .AllIndices()
                                      .AllTypes()
                                      .Query(q => q
                                         .Term("MySpecialFieldName.raw", "ValueThatAppears")
                                       )
                                       .SortDescending("@timestamp")
                                   );

【讨论】:

  • 要强类型,你可以这样做.Term(p=&gt;p.MySpecialFieldName.Suffix("raw"), "")你提出了一个可能受益于内置支持的特殊用例。如果 NEST 在 Nest.Logstash 命名空间中带有 Logstash DTO 类,你会使用它吗?
  • 是的,在这种情况下我只是使用nest来处理logstash数据
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多