我有一个“ELK 堆栈”配置,起初,我使用 elasticsearch 输出插件从 logstash 执行标准“filebeat”系统日志馈送。它工作得很好。
现在我添加了一个 TCP 输入端口(为该数据分配了“类型”,以便执行 if [type] == "thistype" 来区分过滤器)、它自己的 grok 过滤器,以及使用其自己唯一的索引名称和 document_type 名称和文件向 elasticsearch 输出的数据。当数据通过 TCP 端口进入时,它会按照文件输出插件中的预期将格式正确的数据写入输出文件,但当我选择给定的索引时,Kibana 中没有显示任何数据。Kibana 从我的输出配置中识别索引,并列出我在 grok 过滤器中分配的所有字段/键;但是,同样,没有数据可搜索。正如我提到的那样,数据肯定被正确 grok 了,因为它出现在文件插件输出中。
我在这里做错了什么?我的配置如下:
input {
tcp {
host => "10.1.1.10"
port => 12345
type => "odata"
id => "odata"
codec => line
}
}
filter {
if [type] == "odata" {
grok {
match => { "message" => "%{QUOTEDSTRING:oid},\"%{WORD:oword1}\",\"%{IPV4:oclientip}\",\"%{DATA:otimestamp}\",%{QUOTEDSTRING:opl},%{QUOTEDSTRING:oos},%{QUOTEDSTRING:oua}" }
remove_field => "message"
}
date {
match => ["otimestamp", "YYYY-MM-dd HH:mm:ss Z"]
}
mutate {
remove_field => "otimestamp"
remove_field => "host"
remove_field => "@version"
}
}
}
output {
# the if .. is here because there are other types that are handled in this output since I centralize the input, filter, and output files to three distinct files.
if [type] == "odata" {
elasticsearch {
hosts => ["10.1.1.1:9200", "10.1.1.2:9200"]
sniffing => false
index => "odataindex"
document_type => "odatatype"
}
file {
path => "/tmp/odata_output"
}
}
}
同样,grok 过滤器很好;数据通过 tcp 提取得很好;文件输出插件很好地输出了解释/grokd 字段。Kibana 从 grok 过滤器中看到了“odataindex”索引和字段(例如 oid、oclientip、oua 等)。当我进行搜索时,它没有返回任何数据。
有什么想法吗?我是 elastic/kibana/logstash 的新手,也希望得到有关调试这些内容的任何提示。
先感谢您!
答案1
由于不熟悉 Kibana,我不知道默认搜索/显示的数据的时间限制仅为 15 分钟。传入的数据通过“date”插件带有原始打开日期的时间戳(@timestamp 键),而不是通过 TCP 端口到弹性插入事件的时间;因此,没有显示任何数据,我不知道默认情况下只显示基于 @timestamp 的过去 15 分钟的数据。如果我读过关于时间限制的部分,我就会知道。所以我只是调整了时间以回溯无限年并查看了我的数据。
因此,如果其他人遇到这个问题,可能是因为您创建了时间相关索引,但还没有单击右上角的“时间”按钮并更改时间范围。
朋友们,这就是你们阅读手册的原因!