我们一直在运行ElasticSearch v.1.6.0和Kibana v.4.1.0,NGINX作为代理生产大约两个月,并且设置处理多个应用程序的记录。 我们有830.000个文档,总共450MB和一个节点。所有日志语句都使用Serilog发送到ElasticSearch,后者每天创建一个索引。
一周前,Kibana开始变得非常缓慢。我想我终于找到了原因;在Kibana中创建索引时,我们没有选中“使用事件时间来创建索引名称”框,因此我猜即使我们只查询过去15分钟内发生的日志语句,那么Kibana实际上要求ElasticSearch查看在所有指数中。
因此,我在Kibana创建了一个新索引,格式为[serilog-] YYYY.MM.DD,Kibana承认该模式遵循所有现有索引。 然而,它在指数中找到了超过18000个字段。许多领域看起来像
fields.modelState.Value.Value.Culture.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.IsReadOnlye
(其中IsReadOnly
因字段而异,同样也有嵌套Parent
的数量。
这似乎会导致问题,因为当我转到Discover标签时,我在控制台中收到JavaScript错误:
注意indexPattern.fields
未定义的方式。在这个错误之后,我收到了413:
Kibana看起来像
这些字段不在我们的旧索引中(格式为serilog- *)。我想这是因为在我们初始部署到生产之后,这些字段首先出现在日志语句中。
更新
curl -XGET 'localhost:9200/.kibana/index-pattern/_search'
收益
但是,在“设置”标签下我可以看到
我不需要所有带有模式的字段
fields.modelState.Value.Value.Culture.Parent.