Logstash:

  • 数据收集、日志数据

  • 配置框架


input {
    ...
}

filter {
    ...
}

output {
    ...
}
  • 四种类型的插件:input ,filter ,codec, output

  • 数据类型

Array: [item1,item2,...]
Boolean: true, false
Bytes:
codec: 编码器
Hash: key => value
Number:
Password:
Path: 文件系统路径
String: 字符串
  • 条件判断

==, != ,< ,<= ,> ,>=
=~ , !~
in , not in 
and , or
()
  • logstash的工作流程:input | filter |output ,如无需对数据进行额处理,filter可省略

    从标准输入,至标准输出


input {
    stdin{}
}

output {
    stdout {
        codec => rubydebug
    }
}

  • logstash的插件:



    • input插件:

      • file:从指定的文件中读取事件流;其工作特性类似于tail -f -1,使用FileWatch(ruby gem库)来监听文件是否发生变化;

      • .sincedb:记录了每个被监听的文件的inode,major,number,minor number,pos;

      示例:

input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

     


     udp:通过udp协议从网络连接来读取messages,其必备参数为port,用于指明自己监听的端口,host则用指明自己监听的地址;

    示例:

input {
    udp {
	port => 25826
	codec => collectd {}
	type => "collectd"
	}
}

output {
    stdout {
	codec => rubydebug
	}
}

  • filter插件:

    用于将event执行ouput之前对其实现处理功能;

    • grok:用于分析并结构化文本数据;目前,是logstash中将非结构化日志数据转化为结构化的可查询数据的不二之选。

模式定义位置:

 /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns

语法格式:

    %{SYNTAX:SEMANTIC}

    SYNTAX:预定义模式名称

    SEMANTIC:匹配到的文本的自定义标识符;

示例:

input {
    stdin{}
}

filter {
    grok {
        match => { "message" => "%{IP:clientip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
    }
}

output {
    stdout {
        codec => rubydebug
    }
}


1.1.1.1 GET /index.html 30 0.23
					
%{IP:clientip} %{WORD:methond} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
					
{
    "message" => "1.1.1.1 GET /index.html 30 0.23",
     "@version" => "1",
    "@timestamp" => "2018-05-15T04:16:39.808Z",
    "host" => "0.0.0.0",
    "clientip" => "1.1.1.1",
    "method" => "GET",
    "request" => "/index.html",
    "bytes" => "30",
    "duration" => "0.23"
}


自定义grok的模式:

  grok的模式是基于正则表达式编写,其元字符与其它用到正则表达式的工具差别不大。


output插件:

示例:

stdout{}
			
elasticsearch{
	cluster => "myes"
	index => "logstash-%{+YYYY.MM.dd}"
				
}
			
			
redis {
	port => "6379"
	host => ["127.0.0.1"]
	data_type => "list"
	key =>
}