Logstash - 错误事件类型,Non-string/integer 类型值集
Logstash - Bad event type, Non-string/integer type value set
我想使用 Log4j 从 Java 应用程序通过 TCP 将日志发送到我的 logstash 服务器。
两台服务器之间的通信运行良好,但是当我从我的 Java 应用程序接收日志时,我在 logstash 的日志文件中遇到错误:
[2017-04-19T09:15:18,549][WARN ][logstash.outputs.elasticsearch] Failed action. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"hadoopws_log-2017.04.19", :_type=>"[\"log4j\", \"001\"]", :_routing=>nil}, 2017-04-19T07:15:18.486Z 10.10.2.100:60283 "ROUM" 8962 001 2 3136 109 3245], :response=>{"index"=>{"_index"=>"hadoopws_log-2017.04.19", "_type"=>"[\"log4j\", \"001\"]", "_id"=>"AVuFEL1uRiFXDsNz9hxO", "status"=>400, "error"=>{"type"=>"invalid_type_name_exception", "reason"=>"mapping type name [[\"log4j\", \"001\"]] should not include ',' in it"}}}}
我的 logstash 配置文件:
input {
log4j {
mode => "server"
host => "hadoopmasterdev"
port => 3456
type => "log4j"
}
}
filter {
grok {
match => { "message" => "%{DATA:request} %{WORD:idgroup} %{WORD:type} %{NUMBER:nb} %{NUMBER:process_time} %{NUMBER:render_time} %{NUMBER:total_time}" }
}
}
output {
elasticsearch {
hosts => ["hadoopmasterdev:9200"]
index => "hadoopws_log-%{+YYYY.MM.dd}"
}
}
然后,我发送那些日志:
"test 1" 28 001 26 33 116 149
当我尝试使用 GrokDebug 验证我的 Grok 模式时,它运行良好...
非常感谢:)
您需要将第三个字段名称从 type
更改为其他名称,因为这会干扰 log4j
输入中定义的 type: log4j
字段。结果,type
字段变成一个包含两个值的数组,即 log4j
和 001
,并且不能用于定义 elasticsearch 输出中的映射类型。
只需将您的 grok
模式更改为此即可。
grok {
match => { "message" => "%{DATA:request} %{WORD:idgroup} %{WORD:datatype} %{NUMBER:nb} %{NUMBER:process_time} %{NUMBER:render_time} %{NUMBER:total_time}" }
}
我想使用 Log4j 从 Java 应用程序通过 TCP 将日志发送到我的 logstash 服务器。 两台服务器之间的通信运行良好,但是当我从我的 Java 应用程序接收日志时,我在 logstash 的日志文件中遇到错误:
[2017-04-19T09:15:18,549][WARN ][logstash.outputs.elasticsearch] Failed action. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"hadoopws_log-2017.04.19", :_type=>"[\"log4j\", \"001\"]", :_routing=>nil}, 2017-04-19T07:15:18.486Z 10.10.2.100:60283 "ROUM" 8962 001 2 3136 109 3245], :response=>{"index"=>{"_index"=>"hadoopws_log-2017.04.19", "_type"=>"[\"log4j\", \"001\"]", "_id"=>"AVuFEL1uRiFXDsNz9hxO", "status"=>400, "error"=>{"type"=>"invalid_type_name_exception", "reason"=>"mapping type name [[\"log4j\", \"001\"]] should not include ',' in it"}}}}
我的 logstash 配置文件:
input {
log4j {
mode => "server"
host => "hadoopmasterdev"
port => 3456
type => "log4j"
}
}
filter {
grok {
match => { "message" => "%{DATA:request} %{WORD:idgroup} %{WORD:type} %{NUMBER:nb} %{NUMBER:process_time} %{NUMBER:render_time} %{NUMBER:total_time}" }
}
}
output {
elasticsearch {
hosts => ["hadoopmasterdev:9200"]
index => "hadoopws_log-%{+YYYY.MM.dd}"
}
}
然后,我发送那些日志:
"test 1" 28 001 26 33 116 149
当我尝试使用 GrokDebug 验证我的 Grok 模式时,它运行良好...
非常感谢:)
您需要将第三个字段名称从 type
更改为其他名称,因为这会干扰 log4j
输入中定义的 type: log4j
字段。结果,type
字段变成一个包含两个值的数组,即 log4j
和 001
,并且不能用于定义 elasticsearch 输出中的映射类型。
只需将您的 grok
模式更改为此即可。
grok {
match => { "message" => "%{DATA:request} %{WORD:idgroup} %{WORD:datatype} %{NUMBER:nb} %{NUMBER:process_time} %{NUMBER:render_time} %{NUMBER:total_time}" }
}