elasticsearch 在Logstash中筛选我的自定义日志,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat" /> elasticsearch 在Logstash中筛选我的自定义日志,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat" />

elasticsearch 在Logstash中筛选我的自定义日志

elasticsearch 在Logstash中筛选我的自定义日志,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat,我是ELK stack的新手,我想使用ELK stack将日志推送到elastic,以便在em上使用Kibana。以下是我的自定义日志格式: Date Time INFO - searchinfo#username#searchQuery#latitude#longitude#client_ip#responseTime 下面是遵循以下格式的日志示例 2017-07-04 11:16:10 INFO - searchinfo#null#gate#0.0#0.0#180.179.209.54#

我是ELK stack的新手,我想使用ELK stack将日志推送到elastic,以便在em上使用Kibana。以下是我的自定义日志格式:

Date Time INFO - searchinfo#username#searchQuery#latitude#longitude#client_ip#responseTime
下面是遵循以下格式的日志示例

2017-07-04 11:16:10 INFO  - searchinfo#null#gate#0.0#0.0#180.179.209.54#598
现在我正在使用
filebeat
将我的
.log
文件推送到
logstash
中,而logstash会将数据推送到elastic中

我需要帮助,为
logstash
的配置编写一个
过滤器
,它只需使用
#
进行拆分,然后将数据放入各个字段中的弹性索引中


我该怎么做

您需要使用
grok过滤器来解析日志

您可以尝试以下方法:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<var1>[^#]*)#(?<var2>[^#]*)#(?<var3>[^#]*)#(?<var4>[^#]*)#(?<var5>[^#]*)#(?<var6>[^#]*)#(?<var7>[^#]*)" }
  }
}
过滤器{
格罗克{
match=>{“message”=>“\A%{TIMESTAMP_ISO8601:TIMESTAMP}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?)
}
}

这将解析您的日志,并将名为var0、var1等的字段添加到解析的文档中。您可以根据需要重命名此变量。

您需要使用
grok筛选器来解析日志

您可以尝试以下方法:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<var1>[^#]*)#(?<var2>[^#]*)#(?<var3>[^#]*)#(?<var4>[^#]*)#(?<var5>[^#]*)#(?<var6>[^#]*)#(?<var7>[^#]*)" }
  }
}
过滤器{
格罗克{
match=>{“message”=>“\A%{TIMESTAMP_ISO8601:TIMESTAMP}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?)
}
}
这将解析您的日志,并将名为var0、var1等的字段添加到解析的文档中。您可以根据需要重命名此变量。

尝试使用将日志解析为结构化数据:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<searchinfo>[^#]*)#(?<username>[^#]*)#(?<searchQuery>[^#]*)#(?<latitude>[^#]*)#(?<longitude>[^#]*)#(?<client_ip>[^#]*)#(?<responseTime>[^#]*)" }
  }
}
过滤器{
格罗克{
match=>{“message”=>“\A%{TIMESTAMP_ISO8601:TIMESTAMP}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?)
}
}
您可以调试它:

尝试使用将日志解析为结构化数据:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<searchinfo>[^#]*)#(?<username>[^#]*)#(?<searchQuery>[^#]*)#(?<latitude>[^#]*)#(?<longitude>[^#]*)#(?<client_ip>[^#]*)#(?<responseTime>[^#]*)" }
  }
}
过滤器{
格罗克{
match=>{“message”=>“\A%{TIMESTAMP_ISO8601:TIMESTAMP}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?)
}
}
您可以调试它:


谢谢你的回答,你能告诉我如何编辑变量名吗?或者只是通过这个查询,我可以替换var0和ALL,您只需更改var0和另一个名称即可。过滤器存在这个问题,响应时间不是数字类型,而是文本类型的数组。如何将其设置为数字类型?文本数组??显示一个在kibanaI上显示的已解析文档的示例。我提出了一个不同的问题。我已经切换到apache日志,因为这看起来很乏味。谢谢你的回答,你能告诉我如何编辑变量名吗?或者只是通过这个查询,我可以替换var0和ALL,您只需更改var0和另一个名称即可。过滤器存在这个问题,响应时间不是数字类型,而是文本类型的数组。如何将其设置为数字类型?文本数组??显示一个在kibanaI上显示的已解析文档的示例。我提出了一个不同的问题。我已经切换到apache日志,因为这看起来很乏味。过滤器存在这个问题,响应时间不是数字类型,而是文本类型的数组。如何将其设置为数字类型?@AdityaSharma使用来实现这一点。过滤器存在这个问题,响应时间不是数字类型,而是文本类型的数组。我该如何将其设置为数字类型?@AdityaSharma用它来实现这一点。