Logstash的介绍和配置书写

Logstash是一个数据采集、加工处理以及传输的工具
• 特点:
– 所有类型的数据集中处理;
– 不同模式和格式数据的正常化;
– 自定义日志格式的迅速扩展;
– 为自定义数据源轻松添加插件;

Logstash安装:
– Logstash依赖Java环境,需要安装java-1.8.0-openjdk
– Logstash没有默认的配置文件,需要手动配置
– Logstash安装在/opt/logstash目录下
# yum –y install logstash

#yum –y install  java-1.8.0-openjdk

Logstash工作结构:
{ 数据源 } ==>
                 input { } ==>
                              filter { } ==>
                                           output { } ==>
                                                            { ES }

Logstash类型及条件判断:

Logstash里面的类型:
– 布尔值类型: ssl_enable => true
– 字节类型:bytes => "1MiB"
– 字符串类型: name => "xkops"
– 数值类型: port => 22
– 数组: match => ["datetime","UNIX"]
– 哈希: options => {k => "v",k2 => "v2"}
– 编码解码: codec => "json"
– 路径: file_path => "/tmp/filename"
– 注释: #

Logstash条件判断:
– 等于: ==
– 不等于: !=
– 小于: <
– 大于: >
– 小于等于: <=
– 大于等于: >=
– 匹配正则: =~
– 不匹配正则: !~

– 包含: in
– 不包含: not in
– 与: and
– 或: or
– 非与: nand
– 非或: xor
– 复合表达式: ()
– 取反符合: !()

Logstash配置文件(没有配置文件,需要自己书写):

[root@logstash ~]# mkdir  /etc/logstash

[root@logstash ~]# vim  /etc/logstash/logstash.conf                                   

input{
    stdin{}
}
filter{ }
output{
     stdout{}
}

这是logstash的基本格式,需要定义输入日志input, 定义输入文件处理规则(更改日志结构), 最后需要将更改后的日志输出到elaticsearch之类的软件中

启动并验证:
[root@logstash ~]# /opt/logstash/bin/logstash -f  /etc/logstash/logstash.conf

Logstash插件:

上面的配置文件使用了logstash-input-stdin和logstash-output-stdout两个插件, Logstash还有filter和codec类插件,查看插件的方式是:

[root@logstash ~]#/opt/logstash/bin/logstash-plugin list         //会列出所有在input, filter 和 output中使用的插件

filter grok插件:
– 解析各种非结构化的日志数据插件;
– grok使用正则表达式把飞结构化的数据结构化;
– 在分组匹配,正则表达式需要根据具体数据结构编写;
– 虽然编写困难,但适用性极广;
– 几乎可以应用于各类数据.
grok{
        match => {"message" => "%{COMBINEDAPACHELOG}"}          //宏的调用方法
}

grok{
        match => {"(?<key>reg)"}          //正则的调用方法
}

案例:

[root@logstash ~]#vim  /etc/logstash/logstash.conf

input{
 # file {                                                     #file指名进入的数据是文件类型
 #   path => ["/var/log/a.log"]                   #本机的服务日志文件路径,因为web服务在web_httpd上搭建的,所一这一段注释掉
 #   start_position => "beginning"            #设置logstash从日志的哪个位置开始读取
 #   sincedb_path => "/dev/null"               #logstash默认会从上次读取的位置继续读,将存储读取位置的文件路径设置为黑洞,会始终从头开始读取日志信息
 #   type => "testlog"                               #给日志打一个标记
 # }
  beats {                                                   #打开5044端口,通过filebeat从web_http服务器上获取日志信息
    port => 5044
  }
}

filter{                                                       #filter是对数据进行处理的过程
  grok {                                                    #grok正则分组匹配,利用正则表达式将日志机构化,可以自己写,也可以直接调用软件的宏
    match => {"message" => "%{COMBINEDAPACHELOG}"}
  }
}

output{                                                    #将处理过的数据传输给ES集群
  if [type] == "apache_log" {                   #判断语句,apache_log是在filebeat中定义的: document_type: apache_log (72行)
  elasticsearch {
    hosts => ["es1:9200","es2:9200","es3:9200"]            #主机名多定义几台,备用
    index => "weblog"                                                      #定义这个日志的索引名
    flush_size => 2000
    idle_flush_time => 10
  }
 }
}

filter日志结构处理可以改为下面内容(自定义正则表达式):

filter{
  grok{
    match => {"message" => "(?<client_ip>[0-9.]+).+\[(?<time>.+)\] \"(?<method>[A-Z]+) (?<url>\S+) (?<proto>[A-Z]+)\/(?<version>[0-9.]+)\" (?<return_code>[0-q]+) (?<size>[0-9]+)" }
  }
}

插件及帮助文档地址:

https://www.elastic.co/guide/en/logstash/current/index.html

logstash的配置文件,日志的结构化既可以自己使用正则表达式来书写,也可以通过调用软件本身的宏来直接调用,宏所在的文件位置如下:

[root@logstash ~]#vim   /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns

猜你喜欢

转载自blog.csdn.net/sxjwcs/article/details/92806696