我有一个简单的设置,通过HTTP和TCP捕获日志。
我在/etc/logstash/conf.d/
创建了两个配置文件(见下文),但通过HTTP发送的日志也通过TCP管道传递,反之亦然。例如,当我通过TCP发送日志时,它会在http-logger-*
索引和tcp-logger-*
中结束..这对我没有意义:(
http_logger.conf
input {
http {
port => 9884
}
}
filter {
grok {
match => ["[headers][request_path]", "\/(?<component>[\w-]*)(?:\/)?(?<env>[\w-]*)(?:\/)?"]
}
}
output {
amazon_es {
hosts => ['XXXXX']
region => 'us-west-2'
aws_access_key_id => 'XXXXX'
aws_secret_access_key => 'XXXXX'
index => 'http-logger-%{+YYYY.MM.dd}'
}
stdout { codec => rubydebug }
}
tcp_logger.conf
input {
tcp {
port => 9885
codec => json
}
}
filter {
}
output {
amazon_es {
hosts => ['XXXXX']
region => 'us-west-2'
aws_access_key_id => 'XXXXX'
aws_secret_access_key => 'XXXXX'
index => 'tcp-logger-%{+YYYY.MM.dd}'
}
stdout { codec => rubydebug }
}
关于我缺少什么的任何想法? 谢谢
答案 0 :(得分:1)
输入,过滤器和输出配置即使在处理它时在logstash中分割不同的文件也会将其作为单个大配置进行处理,就好像在单个文件中指定了所有输入,过滤器和输出一样。
所以说进入logstash的事件将通过配置的所有输出和过滤插件,在你的情况下,TCP和HTTP输入插件拾取的每个事件都将通过http_logger中配置的过滤器插件和输出插件。 conf和tcp_logger.conf,这就是你在http-logger-*
和tcp-logger-*
索引中隐藏事件的原因
因此,为了解决这个问题,我们可以为tcp
和http
输入插件选择的事件指定唯一的类型字段,然后有选择地使用类型中设置的类型应用过滤器和输出插件。输入插件如下所示
input {
http {
port => 9884
type => "http_log"
}
}
filter {
if [type] == "http_log"
{
grok {
match => ["[headers][request_path]", "\/(?<component>[\w-]*)(?:\/)?(?<env>[\w-]*)(?:\/)?"]
}
}
}
output {
if ([type] == "http_log")
{
amazon_es {
hosts => ['XXXXX']
region => 'us-west-2'
aws_access_key_id => 'XXXXX'
aws_secret_access_key => 'XXXXX'
index => 'http-logger-%{+YYYY.MM.dd}'
}
}
stdout { codec => rubydebug }
}
input {
tcp {
port => 9885
codec => json
type => "tcp_log"
}
}
output {
if ([type] == "tcp_log")
{
amazon_es {
hosts => ['XXXXX']
region => 'us-west-2'
aws_access_key_id => 'XXXXX'
aws_secret_access_key => 'XXXXX'
index => 'tcp-logger-%{+YYYY.MM.dd}'
}
}
stdout { codec => rubydebug }
}
答案 1 :(得分:0)
@Ram提供的解释是有点现象,但有一种更清晰的方法来解决问题:输入pipelines.yml。
默认情况下,它看起来像这样:
- pipeline.id: main
path.config: "/etc/logstash/conf.d/*.conf"
基本上它加载并组合所有* .conf文件 - 在我的情况下我有两个。
要解决此问题,只需将管道分开即可:
- pipeline.id: httplogger
path.config: "/etc/logstash/conf.d/http_logger.conf"
- pipeline.id: tcplogger
path.config: "/etc/logstash/conf.d/tcp_logger.conf"
管道现在单独运行:)
P.S。在此处进行任何更改后,请不要忘记重新加载logstash