Logstash语法常用案例解析(一)

2018-02-06 20:03:00
aolens
原创
420

一:基础运行

建议使用supervisor来管理ELK中的各个组件,方便同一管理 

提供一个常用的配置: 


[program:logstash] 

command=/opt/logstash/bin/logstash -f /opt/logstash/conf/index.conf 

numprocs=1 

;开几个进程 

dirrectory=/opt/logstash user=root 

;用户 

stdout_logfile=/opt/logstash/logs/logstash.log 

stdout_logfile_maxbytes=1MB 

;每个日志大小

stdout_logfile_backups=10 

;保留10个日志文件 

stderr_logfile=/opt/logstash/logs/logstash_err.log

stderr_logfile_maxbytes=1MB 

stderr_logfile_backups=10 



运行参数:


启动logstash服务(常用supervisor守护进程) 

./bin/logstash -f /etc/logstash/conf.d/* -t 

#检查配置文件是否ok

./bin/logstash -f conf.d/nginx.conf -w 5 -l /var/log/logstash/  

二:配置语法

1,区域:(section)

  Logstash用{}来定义区域。可以在区域中定义多个插件区域,插件区域内可以定义键值对
    
  eg:
        input {                         # 输入数据
               file {
                  path => ["/var/log/messages","/var/log/*.log"]
                    type => "system"
                    start_position => "beginning"
               }
        }
filter {            # 数据过滤处理
     if [type] == "system" {
        grok {
            match => ["message", %{COMBINEDAPACHELOG}]
        }
    }
}
output {            # 数据处理输出
    stdout{
        codec=>rubydebug
    }
}

2,数据类型:


string——普通字符串
    name => "Hello world"
    name => 'It\'s a beautiful day'

array——数组可以是单个或者多个字符串值。
    path => [ "/var/log/messages", "/var/log/*.log" ]
    path => "/data/mysql/mysql.log"

hash——键值对,注意多个键值对用空格分隔,而不是逗号。
    match => {
        "field1" => "value1"
        "field2" => "value2"
        ... }
Codec——用来表示数据编码。用于input和output段。便于数据的处理。
    codec => "json"

number——必须是有效的数值,浮点数或者整数。
    port => 33

boolean——布尔值必须是TRUE或者false。
    ssl_enable => true

bytes——指定字节单位。默认是byte。
    my_bytes => "1113" # 1113 bytes
    my_bytes => "10MiB" # 10485760 bytes
    my_bytes => "100kib" # 102400 bytes  Binary (Ki,Mi,Gi,Ti,Pi,Ei,Zi,Yi) 单位1024       
    my_bytes => "180 mb" # 180000000 bytes  SI (k,M,G,T,P,E,Z,Y) 单位基于1000

password——一个单独的字符串。
    my_password => "password"

path——代表有效的操作系统路径。
    my_path => "/tmp/logstash"

3:字段引用


Logstash配置中要使用字段的值,只需要把字段的名字写在中括号[]里。只要是input输入的值,都可以引用 
eg: [geoip][location][-1]


4,条件判断


表达式支持的操作符

==(等于),!=(不等),<(小于),>(大于),<=(小等),>=(大等)
=~(匹配正则),!~(不匹配正则)
in(包含),not
in(不包含)
and(与),or(或),nand(与非),xor(非或)
()(复合表达式),!()(取反复合表达式结果)

三:常用插件

1,插件管理


./bin/plugin -h install uninstall update list 
eg: 
bin/plugin install logstash-output-webhdfs 
bin/plugin update logstash-input-tcp  


2,常用插件 input,output,filter,codec

2.1 Input插件

  • stdin:标准输入,常用于测试,


input { 
    stdin { 
    type => "string"; 
    tags => ["add"]
    codec=>"plain"
    } 
}


  • file:从文件系统中读取文件,类似linux下的tail -f
input{
  stdin {}
      }
     output{
    file {
        path => "/tmp/test.log"                                    # 指定写入文件路径
        message_format => "%{message}"                  # 指定写入格式       
        flush_interval => 0                                            # 指定刷新间隔,0代表实时写入  
        #gzip => true
    }
}
  • redis:从redis服务器读取,同时使用redis channel和redis list。


output {
    # 输出到控制台
    # stdout { codec => rubydebug }

    # 输出到redis
    redis {
        host => "10.140.45.190"      # redis主机地址
        port => 6379                        # redis端口号
        db => 8                                 # redis数据库编号
        data_type => "channel"       # 使用发布/订阅模式
        key => "logstash_list_0"        # 发布通道名称
    }
}


  • TCP/UDP: 输入


#nc127.0.0.18888 /var/log/nginx/access.json 
# 可以是json文件直接传值 
#echo'{name:liuziping,age:18}' |nc127.0.0.18888 
input { 
tcp { 
    port = 8888     # 定义tcp监听端口 
    codec=json     # 规定传入的数据为json格式,k/v结构方便分析 
    mode = server 
  } 
}


  • syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。


input { 
    syslog { 
        port = 514
     } 
}


  • beats: 通过Filebeat发送事件。
发表评论
评论通过审核后显示。
文章分类
联系我们
联系人: aolens
Email: aolens@126.com