logstash配置文件常用参数

原创
2013/12/07 14:53
阅读数 4.7W

    最近在折腾logstash,其处理流程不过于input、filter、output三个处理流程,以下是我翻译的几个常用的处理参数

output流之http

output {
  http {
    codec => ... # codec (optional), default: "plain"
    content_type => ... # string (optional)
    format => ... # string, one of ["json", "form", "message"] (optional), default: "json"
    headers => ... # hash (optional)
    http_method => ... # string, one of ["put", "post"] (required)
    mapping => ... # hash (optional)
    message => ... # string (optional)
    url => ... # string (required)
    verify_ssl => ... # boolean (optional), default: true
    workers => ... # number (optional), default: 1
}
}
  • codec:  数据类型,默认是“plain”,用来指定输出数据的类型
  • content_type:  值类型是string,默认没有设置该参数,如果没有特别指明,json格式是application/json,form格式是application/x-www-form-urlencoded
  • format:  值可以是json、form、message三种类型,默认是json。用来设置http body的格式,如果是form格式,http body会被影射成一个查询字符串(foo=bar&baz=fizz...),如果是message格式,http body会被格式化成事件???,否则,事件都是以json格式发送
  • headers:  值类型是一个hash,默认是没有设置的。默认使用的格式如下:headers => ["X-My-Header", "%{host}"]
  • http_method:  值可以是put或者post,默认没有设置。
  • mapping:  值是一个hash,默认没有设置,该值可以让你选择事件的一个结构体或者部分发送,例如:mapping => ["foo", "%{host}", "bar", "%{type}"]
  • message:  值是字符串,默认没有设置
  • url:  值是一个字符串,默认没有设置。可以让你使用http或者https进行put或者post。
  • verify_ssl:  值是布尔类型,默认是true,是否验证SSL
  • workers:  值是一个数值。默认是1,用来设置工作者数目。


input流codec之json格式

input {
  file {
    codec => json {
      charset => ["UTF-8"] (optional), default: "UTF-8"
  }
  }
}
  • 被用来解析完全格式的json消息,如果json数据使用'\n'分割的,则可以使用json_lines

filter流之json
filter {
  json {
    add_field => ... # hash (optional), default: {}
    add_tag => ... # array (optional), default: []
    remove_field => ... # array (optional), default: []
    remove_tag => ... # array (optional), default: []
    source => ... # string (required)
    target => ... # string (optional)
}
}
  对一个包含json的字段,可以扩展成一个数据结构
  • add_field:  值类型为hash,默认是{} 空。如果这个过滤成功了,会增加任意field到这个事件。例如:add_field => [ "foo_%{somefield}", "Hello world, from %{host}" ],如果这个事件有一个字段somefiled,它的值是hello,那么我们会增加一个字段foo_hello,字段值则用%{host}代替。
  • add_tag:  值类型为array,默认是[] 空。执行成功会增加一个任意的tags到事件。例如:add_tag => [ "foo_%{somefield}" ]
  • remove_field:  值类型为array,默认是[] 空,执行成功,删除一个field,例如:remove_tag => [ "foo_%{somefield}" ]
  • source:  值类型为字符串,默认没有设置。

filter流之json_encode

filter {
  json_encode {
    add_field => ... # hash (optional), default: {}
    add_tag => ... # array (optional), default: []
    remove_field => ... # array (optional), default: []
    remove_tag => ... # array (optional), default: []
    source => ... # string (required)
    target => ... # string (optional)
}
}
  • 把一个field序列化成json格式。

filter流之grep
filter {
  grep {
    add_field => ... # hash (optional), default: {}
    add_tag => ... # array (optional), default: []
    drop => ... # boolean (optional), default: true
    ignore_case => ... # boolean (optional), default: false
    match => ... # hash (optional), default: {}
    negate => ... # boolean (optional), default: false
    remove_field => ... # array (optional), default: []
    remove_tag => ... # array (optional), default: []
}
}

   grep过滤器,如果你不想通过哪些事件可以把它drop掉,或者给每个匹配的事件增加tags和fields。如果negate的值是true,则匹配到的事件会被丢弃。

  • add_field:  值类型是hash,默认是{} 空。过滤成功,会增加一个field到事件。例如:add_field => [ "foo_%{somefield}", "Hello world, from %{host}" ]
  • add_tag:  值类型是array,默认是[] 空。过滤成功,会增加一个tags到事件,例如:add_tag => [ "foo_%{somefield}" ]
  • drop:  值是布尔类型,默认是true。drop掉不匹配的事件,如果该值设置为false,则不会有事件被drop。
  • ifnore_case:  值类型是布尔类型,默认是false。不区分大小写匹配,类似于grep -i,如果是true,则区分大小写
  • match:  值是hash类型,默认是{} 空。一个hash匹配field=>regxp。如果有多个匹配,则必须所有的都成功。例如:match => [ "message", "hello world" ]
  • negate:  值是布尔类型,默认值是false。类似于grep -v
  • remove_field:  值是array类型,默认是[] 空。如果成功,删除一个fields。
  • remove_tag:  值是array类型,同上。


filter流之grok

filter {
  grok {
    add_field => ... # hash (optional), default: {}
    add_tag => ... # array (optional), default: []
    break_on_match => ... # boolean (optional), default: true
    drop_if_match => ... # boolean (optional), default: false
    keep_empty_captures => ... # boolean (optional), default: false
    match => ... # hash (optional), default: {}
    named_captures_only => ... # boolean (optional), default: true
    overwrite => ... # array (optional), default: []
    patterns_dir => ... # array (optional), default: []
    remove_field => ... # array (optional), default: []
    remove_tag => ... # array (optional), default: []
    tag_on_failure => ... # array (optional), default: ["_grokparsefailure"]
}
}


   解析任意文本并且结构化他们。grok目前是logstash中最好的解析非结构化日志并且结构化他们的工具。这个工具非常适合syslog、apache log、mysql log之类的人们可读日志的解析。


展开阅读全文
打赏
2
16 收藏
分享
加载中
input {
file {
path=>"/data/sflowjava/logs/*"
   start_position=>"beginning"
type => "log"
codec => multiline {
pattern => "^%{MONTHDAY}[./-]%{MONTH}[./-]%{YEAR}"
auto_flush_interval => 10
negate => true
what => "previous"
}
   }

}
filter {

json {
source => "message"
}
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => ["192.168.0.190:9200"]
index => "logstash-kafka-%{+YYYY-MM-dd}"
}
stdout { codec => rubydebug }
}
2019/07/09 16:23
回复
举报
China_OS博主
解析完结果
{
"@timestamp" => 2019-07-09T09:41:43.516Z,
"agent_address_type" => "ipv4",
"host" => "xxx",
"name" => "main",
"ST1" => "2019-06-27 12:13:29.342 [main] INFO cn.com.asd.analyze.SflowFlowSampleMethod",
"class" => "cn.com.asd.analyze.SflowFlowSampleMethod",
"des_mac" => "341e6b218000",
"ST2" => "{\"version\":\"5\", \"agent_address_type\":\"ipv4\", \"agent_ip\":\"-64.168.0.223\", \"original_packet_length\":\"64\",\"src_mac\":\"20283e6f641d\", \"des_mac\":\"341e6b218000\"}",
"agent_ip" => "-64.168.0.223",
"@version" => "1",
"logtime" => "2019-06-27 12:13:29.342",
"level" => "INFO",
"path" => "/tmp/111.log",
"original_packet_length" => "64",
"version" => "5",
"src_mac" => "20283e6f641d"
}
2019/07/09 17:43
回复
举报
China_OS博主
filter {
mutate {
split => {"message" => " - "}
add_field => { "ST1" => "%{[message][0]}" }
add_field => { "ST2" => "%{[message][1]}" }
}
grok {
match => { "ST1" => "^%{TIMESTAMP_ISO8601:logtime} \[%{USERNAME:name}\] %{WORD:level} %{JAVACLASS:class}" }
}
json {
source => "ST2"
remove_field => ["message"]
}
}
2019/07/09 17:45
回复
举报
更多评论
打赏
3 评论
16 收藏
2
分享
返回顶部
顶部