标签: logstash-grok

使用grok将日志文件名添加为logstash中的字段

我正在使用Grok和Logstash将访问日志从Nginx发送到Elastic搜索.我给Logstash所有的访问日志(使用通配符,效果很好),我想得到文件名(确切地说是其中的一部分)并将其用作字段.

我的配置如下:

input {
  file {
    path => "/var/log/nginx/*.access.log"
    type => "nginx_access"
  }
}

filter {
  if [type] == "nginx_access" {
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:app}.access.log" }
      add_field => { "app" => "%{app}" }
    }
  }
}
output{
   # whatever
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用:该app字段已添加,但具有%{app}(未替换)的值.

我尝试了不同的东西但无济于事.我可能会遗漏一些东西......有什么想法?

非常感谢

regex logstash logstash-grok

10
推荐指数
1
解决办法
1万
查看次数

多个Grok过滤器不存储第一个过滤器匹配记录

我正在使用Logstash来解析postfix日志.我主要专注于从postfix日志中获取退回的电子邮件日志,并将其存储在数据库中.

为了获取日志,首先我需要找到与我的message-id对应的postfix生成的ID,并使用该Id,我需要查找电子邮件的状态.对于以下配置,我可以获取日志.

grok {
       patterns_dir => "patterns"
       match => [
            "message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}",
            "message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}"
        ]
        named_captures_only => true
    }
Run Code Online (Sandbox Code Playgroud)

我使用以下if条件来存储与模式匹配的日志:

if "_grokparsefailure" not in [tags] {
   #database call
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用两种模式从一个日志文件中查找相应的两个不同日志.

现在,我想根据标签区分两种模式.所以我修改了我的配置如下:

  grok {
       patterns_dir => "patterns"
       match => [
            "message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}"
        ]
        add_tag => ["BOUNCED"]
        remove_tag => ["_grokparsefailure"]
        named_captures_only => true
    }

    grok {
       patterns_dir => "patterns"
       match => [
            "message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}"            
        ]
        add_tag => ["INTIALIZATION"]
        remove_tag => ["_grokparsefailure"]
        named_captures_only => true
    }
Run Code Online (Sandbox Code Playgroud)

现在,它只存储%{POSTFIXCLEANUP}模式日志.如果我颠倒了订单,它只存储%{POSTFIXBOUNCE}模式.

因此,消除,如果条件下,我发现从第一过滤器正在分析该消息有"_grokparsefailure"标签和第一过滤器标签,并且因为它没有存储该记录之后.

任何人都可以告诉我需要做些什么来纠正这个问题?我有没有犯错?

logstash logstash-grok

10
推荐指数
1
解决办法
1万
查看次数

有一个grok过滤器创建嵌套字段作为结果

我有一个drupal watchdog syslog文件,我想解析基本上两个嵌套字段,syslog部分和消息部分,以便我得到这个结果

syslogpart: {
  timestamp: "",
  host: "",
  ...
},
messagepart:{
  parsedfield1: "",
  parsedfield2: "",
  ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试制作一个如下所示的自定义模式:

DRUPALSYSLOG (%{SYSLOGTIMESTAMP:date} %{SYSLOGHOST:logsource} %{WORD:program}: %{URL:domain}\|%{EPOCH:epoch}\|%{WORD:instigator}\|%{IP:ip}\|%{URL:referrer}\|%{URL:request}\|(?<user_id>\d+)\|\|)

然后跑 match => ['message', '%{DRUPALSYSLOG:drupal}'}

但我没有得到嵌套的响应,我得到一个文本块drupal: "ALL THE MATCHING FIELDS IN ONE STRING",然后单独的所有匹配,但不是在drupal下嵌套,而是在同一级别.

syslog logstash logstash-grok

10
推荐指数
2
解决办法
7186
查看次数

根据Logstash中的事件消息添加字段不起作用

我已经安装了ELK并在我的机器上工作,但现在我想根据事件消息进行更复杂的过滤和字段添加.

具体来说,我想根据消息模式设置"id_error"和"descripcio".

我在"logstash.conf"文件中尝试了很多代码组合,但是我无法获得预期的行为.

有人能告诉我我做错了什么,我该做什么或者这是不可能的?提前致谢.

这是我的"logstash.conf"文件,我做了最后一次测试,结果没有在Kibana中捕获事件:

input { 
    file {
        path => "C:\xxx.log"
    }
}

filter {
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR2:error2}" ]
        add_field => [ "id_error", "2" ]
        add_field => [ "descripcio", "error2!!!" ]
    }
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR1:error1}" ]
        add_field => [ "id_error", "1" ]
        add_field => [ "descripcio", "error1!!!" ]
    }
    if ("_grokparsefailure" in [tags]) { drop {} }
}

output {
  elasticsearch {
    host => "localhost" …
Run Code Online (Sandbox Code Playgroud)

elasticsearch logstash kibana logstash-grok

10
推荐指数
1
解决办法
1万
查看次数

如何从文本文件行解析logstash/grok中的json?

我有一个看起来像这样的日志文件(简化)

日志样本

MyLine data={"firstname":"bob","lastname":"the builder"}
Run Code Online (Sandbox Code Playgroud)

我想提取数据中包含的json 并创建两个字段,一个用于firstname,一个用于last.但是,我得到的输出是这样的:

{"message":"Line data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}\r","@version":"1","@timestamp":"2015-11-26T11:38:56.700Z","host":"xxx","path":"C:/logstashold/bin/input.txt","MyWord":"Line","parsedJson":{"firstname":"bob","lastname":"the builder"}}
Run Code Online (Sandbox Code Playgroud)

如你看到的

..."parsedJson":{"firstname":"bob","lastname":"the builder"}}
Run Code Online (Sandbox Code Playgroud)

这不是我需要的,我需要在kibana中为firstname和lastname创建字段,但是logstash没有使用json过滤器提取字段.

LogStash配置

input {
  file {
        path => "C:/logstashold/bin/input.txt"        
       }
}

filter {     

   grok {
            match => { "message" => "%{WORD:MyWord} data=%{GREEDYDATA:request}"}        
        }   

    json{
        source => "request"
        target => "parsedJson"
        remove_field=>["request"]
    }   
}   

output {  
    file{
        path => "C:/logstashold/bin/output.txt"
    }   
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助,我确信我错过了一些简单的东西

谢谢

elasticsearch logstash logstash-grok

10
推荐指数
1
解决办法
3万
查看次数

解析日志时,Logstash报告[0] _grokparsefailure

我有来自这种格式的日志.我已将logstash变量分配给下面的模式.我相信我已经使用随附的预定义Grok标记正确分配了这些元素.但是,当我运行logstash时,它反映:[0]"_ grokparsefailure"表示它无法解析请求.对于我的conf确实出错了,我感到很茫然.这里有没有人知道是什么原因造成的?我对logstash很新.提前致谢

1383834858 0 71.172.136.12 20097903 198.2.20.171 80 TCP_HIT/200 252 HEAD http://podcasts.someserver.com/80830A/podcasts.someserver.com/nyv/voice-film-club/2013/11/the-sexy-god -thor.mp3 - 0 355" - ""Podcasts/2.0"33546" - "

要么

%{BASE10NUM:timestamp} = 1383834858
%{BASE10NUM:time_taken} = 0
%{IP:clientip} = 71.172.136.12
%{BASE10NUM:filesize} = 20097903
%{IP:serverip} = 198.2.20.171
%{BASE10NUM:port} = 80
%{WORD:status_code} = TCP_HIT/200
%{BASE10NUM:sc_bytes} = 252
%{WORD:method} = HEAD
%{URI:cs_uri} = http://podcasts.someserver.com/80830A/podcasts.someserver.com/nyv/voice-   film-club/2013/11/the-sexy-god-thor.mp3
%{NOTSPACE:ignore2} = -
%{BASE10NUM:rs_duration} = 0
%{BASE10NUM:rs_bytes} = 355
%{QS:c_referrer} = "-"
%{QS:user_agent} = "Podcasts/2.0"
%{BASE10NUM:customerid} = 33546
%{QS:ignore} = "-"
Run Code Online (Sandbox Code Playgroud)

我的logstash.conf文件如下所示:

input {
    #wpa_media logs from the …
Run Code Online (Sandbox Code Playgroud)

redis elasticsearch logstash kibana logstash-grok

9
推荐指数
1
解决办法
4万
查看次数

默认grok模式路径

我在Ubuntu Server 14上安装了Logstash.在哪里可以找到Logstash过滤日志时使用的默认grok模式?谢谢.

logstash logstash-grok

9
推荐指数
2
解决办法
9497
查看次数

logstash:具有不同模式的多个日志文件

我们想为我们公司的几个不同项目设置logstash服务器.现在我尝试在Kibana中启用它们.我的问题是:如果我有不同的日志文件模式,我如何为它们构建过滤器?示例:logstash.conf:

input {
  file {
    type => "A"
    path => "/home/logstash/A/*"
    start_position => "beginning"
  }
 file {
    type => "B"
    path => "/home/logstash/B*"
    start_position => "beginning"
  }
}

filter {
  multiline {
      pattern => "^%{TIMESTAMP_ISO8601}"
      negate => true
      what => "previous"
  }
  grok {
     type => A
     match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{DATA:thread %{LOGLEVEL:level}\s*%{DATA:logger_name}\s*-\s*%{GREEDYDATA:log_text}"]

    add_tag => [ "level_%{level}" ]
  }
  date {
        match => ["logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
  }
  grok {
        type => B
        match => [ any other pattern ... …
Run Code Online (Sandbox Code Playgroud)

logfiles filter logstash kibana logstash-grok

8
推荐指数
1
解决办法
2万
查看次数

如何在logstash中删除空行

在我的logstash日志中,我有时空行或只有空格的行.

要删除空行,我创建了一个dropemptyline过滤器文件

# drop empty lines
filter {
    if [message] =~ /^\s*$/ {
        drop { }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是空行过滤器没有按预期工作,主要是因为这个特定的过滤器在链中的其他过滤器之后有过滤器.

00_input.conf
05_syslogfilter.conf
06_dropemptylines.conf
07_classifier.conf
Run Code Online (Sandbox Code Playgroud)

所以我认为我的特定过滤器可以工作,如果它是唯一的,但不是.

2015-02-11 15:02:12.347  WARN 1 --- [tp1812226644-23] o.eclipse.jetty.servlet.ServletHandler   : 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of cluster state is {type=Unknown, servers=[{address=mongo:27017, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.UnknownHostException: mongo: unknown error}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out …
Run Code Online (Sandbox Code Playgroud)

logstash logstash-grok

8
推荐指数
1
解决办法
4279
查看次数

Logstash配置,"如果字符串包含......"

所以,我们假设我的日志行的一部分看起来像这样:

GET /restAPI/callMethod1/8675309
Run Code Online (Sandbox Code Playgroud)

GET匹配一个http方法,得到提取,余数匹配一个URI,并且也被提取.现在在logstash配置中让我们假设我想做这样的事情......

if [METHOD] == "GET" {
    if [URI] (CONTAINS <--Is there a way to do this?) =="restAPI/callMethod1"{
        ....
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?如果是这样,我该怎么做呢?

谢谢

logstash logstash-grok logstash-configuration

8
推荐指数
1
解决办法
2万
查看次数