logstash配置详解

logstash配置详解
#logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter。从input读取事件源,(经过filter解析和处理之后),从output输出到目标存储库(elasticsearch或其他)
###命令
     bin/logstash [OPTIONS]
        -n	#logstash实例的名称,如果不设置默认为当前的主机名(比如我的主机名为sqczm)。
        -f	#配置文件,我们可以指定一个特定的文件,也可以指定一个特定的目录,如果指定的是特定的目录,则logstash会读取该目录下的所有文本文件,将其在内存中拼接成完整的大配置文件,再去执行。
        -e	#给定的可直接执行的配置内容,也就是说我们可以不指定-f参数,直接把配置文件中的内容作为字符串放到-e参数后面。
        -w	#指定工作线程的个数
        -p	#logstash用来加载插件的目录
        -l	#日志输出文件,如果不设置,logstash将会把日志发送至标准的output
        -t	#检查配置的语法是否正确并退出
        -r	#监视配置文件的变化,并且自动重新加载修改后的配置文件
        -config.reload.interval RELOAD_INTERVAL	#为了检查配置文件是否改变,而去拉取配置文件的频率
        -http.host HTTP_HOST	#Web API绑定的主机,默认为“127.0.0.1”
        -http.port HTTP_PORT	#Web API绑定的端口,默认为9600-9700之间
        -log.format FORMAT	#logstash写它自身日志的时候使用json还是文本格式,默认是“plain”
        -path.settings SETTINGS_DIR	#设置包含logstash.yml配置文件的目录,比如log4j日志配置。也可以设置LS_SETTINGS_DIR环境变量

### stdin 标准输入
### file 从文件读取数据 
    file{
        path => ['/var/log/nginx/access.log']  #要输入的文件路径
        type => 'nginx_access_log'
        start_position => "beginning"
    }
    # path  可以用/var/log/*.log,/var/log/**/*.log,如果是/var/log则是/var/log/*.log
    # type 通用选项. 用于激活过滤器
    # start_position 选择logstash开始读取文件的位置,beginning或者end。
    #还有一些常用的例如:discover_interval,exclude,sincedb_path,sincedb_write_interval等可以参考官网
### syslog 通过网络将系统日志消息读取为事件
    syslog{
        port =>"514" 
        type => "syslog"
    }
    # port 指定监听端口(同时建立TCP/UDP的514端口的监听)
    #从syslogs读取需要实现配置rsyslog:
    # cat /etc/rsyslog.conf   加入一行
    *.* @172.17.128.200:514   #指定日志输入到这个端口,然后logstash监听这个端口,如果有新日志输入则读取
    # service rsyslog restart   #重启日志服务
### beats 从Elastic beats接收事件 
    beats {
        port => 5044   #要监听的端口
    }
    # 还有host等选项
    # 从beat读取需要先配置beat端,从beat输出到logstash。
    # vim /etc/filebeat/filebeat.yml 
        ..........
        output.logstash:
        hosts: ["localhost:5044"]
### kafka  将 kafka topic 中的数据读取为事件
    kafka{
        bootstrap_servers=> "kafka01:9092,kafka02:9092,kafka03:9092"
        topics => ["access_log"]
        group_id => "logstash-file"
        codec => "json"
    }
    kafka{
        bootstrap_servers=> "kafka01:9092,kafka02:9092,kafka03:9092"
        topics => ["weixin_log","user_log"]  
        codec => "json"
    }
    # bootstrap_servers 用于建立群集初始连接的Kafka实例的URL列表。# topics  要订阅的主题列表,kafka topics# group_id 消费者所属组的标识符,默认为logstash。kafka中一个主题的消息将通过相同的方式分发到Logstash的group_id
    # codec 通用选项,用于输入数据的编解码器。

#filter plugin 过滤器插件,对事件执行中间处理
### grok   解析文本并构造 。把非结构化日志数据通过正则解析成结构化和可查询化 .
    #grok 语法:%{SYNTAX:SEMANTIC}   即 %{正则:自定义字段名}
    #多个match匹配规则,如果前面的匹配失败可以使用后面的继续匹配
    grok {
        match => ["message", "%{IP:clientip} - %{USER:user} \[%{HTTPDATE:raw_datetime}\] \"(?:%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion})\" (?:\"%{DATA:body}\" )?(?:\"%{DATA:cookie}\" )?%{NUMBER:response} (?:%{NUMBER:bytes:int}|-) \"%{DATA:referrer}\" \"%{DATA:agent}\" (?:(%{IP:proxy},? ?)*|-|unknown) (?:%{DATA:upstream_addr} |)%{NUMBER:request_time:float} (?:%{NUMBER:upstream_time:float}|-)"]
        match => ["message", "%{IP:clientip} - %{USER:user} \[%{HTTPDATE:raw_datetime}\] \"(?:%{WORD:verb} %{URI:request} HTTP/%{NUMBER:httpversion})\" (?:\"%{DATA:body}\" )?(?:\"%{DATA:cookie}\" )?%{NUMBER:response} (?:%{NUMBER:bytes:int}|-) \"%{DATA:referrer}\" \"%{DATA:agent}\" (?:(%{IP:proxy},? ?)*|-|unknown) (?:%{DATA:upstream_addr} |)%{NUMBER:request_time:float} (?:%{NUMBER:upstream_time:float}|-)"]       
    }
### date   日期解析  解析字段中的日期,然后转存
    date{
        match => ["raw_datetime","YYYY-MM-dd HH:mm:ss,SSS"]
        remove_field =>["raw_datetime"]
    }
### mutate  对字段做处理 重命名、删除、替换和修改字段。
    #covert 类型转换。类型包括:integer,float,integer_eu,float_eu,string和boolean 
    filter{
        mutate{
            covert => ["response","integer","bytes","float"]  #数组的类型转换
            convert => {"message"=>"integer"}
        }
    }
    #split   使用分隔符把字符串分割成数组
    #merge  合并字段  。数组和字符串 ,字符串和字符串
    #rename   对字段重命名
    #remove_field    移除字段
    #join  用分隔符连接数组,如果不是数组则不做处理 

    #gsub  用正则或者字符串替换字段值。仅对字符串有效 
    #update  更新字段。如果字段不存在,则不做处理

    #replace 更新字段。如果字段不存在,则创建
### geoip  根据来自Maxmind GeoLite2数据库的数据添加有关IP地址的地理位置的信息 
### ruby    ruby插件可以执行任意Ruby代码
### urldecode    用于解码被编码的字段,可以解决URL中 中文乱码的问题 
### kv   通过指定分隔符将字符串分割成key/value 
### useragent 添加有关用户代理(如系列,操作系统,版本和设备)的信息
### logstash 比较运算符
  等于:   ==, !=, <, >, <=, >=
  正则:   =~, !~ 
  包含关系:  in, not in
  支持的布尔运算符:and, or, nand, xor
  支持的一元运算符: !
### output plugin  输出插件,将事件发送到特定目标。
    #stdout标准输出。将事件输出到屏幕上 
        output{
            stdout{
                codec => "rubydebug"
            }
        }
    #file将事件写入文件
        file {
           path => "/data/logstash/%{host}/{application}
           codec => line { format => "%{message}"} 
        }
    #kafka  将事件发送到kafka 
        kafka{
            bootstrap_servers => "localhost:9092"
            topic_id => "test_topic"  #必需的设置。生成消息的主题
        }
    #elasticseach  在es中存储日志 
        elasticsearch {
            hosts => "localhost:9200"
            index => "nginx-access-log-%{+YYYY.MM.dd}"  
        }
        #index 事件写入的索引。可以按照日志来创建索引,以便于删旧数据和按时间来搜索日志

你可能感兴趣的:(elk,logstash,elk)