1。Filebeat.yml配置filebeat.inputs:-type:logenabled:truepaths:-/usr/local/nginx/logs/access.logexclude_files:['.gz$','INFO']multiline.pattern:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'multiline.negate:truemultiline.match:aftertags:["nginx-log-messages"]fields:log_source:messagesfields_under_root:trueoutput.redis:hosts:["192.168.0.111:6379"]key:nginx_logpassword:nginxredisdb:0参数说明:fields:log_source:messagesfields_under_root:true使用fields表示多了一个字段log_source到filebeat收集的日志,其值为messages,用于logstash的输出输出到elasticsearch时判断日志的来源,从而建立如果对应的索引fields_under_root设置为true,则表示上面新增的字段是顶层参数。输出到elasticsearch的顶级字段的使用如下:[root@es-master21logstash]#vimconfig/logstash.confinput{redis{data_type=>"list"host=>"192.168.0.111"db=>"0"port=>"6379"key=>"nginx_log"password=>"nginxredis"}}output{#根据rediskeymessages_secure对应的list值,每行数据的参数之一来确定日志来源if[log_source]=='messages'{#注意判断条件的写法elasticsearch{hosts=>["192.168.0.111:9200"]index=>"nginx-message-%{+YYYY.MM.dd}"#user=>"elastic"#password=>"elastic123"}}#或者根据标签判断if"nginx-log-messages"in[tags]{elasticsearch{hosts=>[""192.168.0.111:9200"]index=>"nginx-message-%{+YYYY.MM.dd}"}}}2.多个应用的??日志输出到redisfilebeat.inputs:-type:logenabled:truepaths:-/usr/local/nginx/logs/access.log标签:["nginx-log-access"]字段:log_source:accessfields_under_root:true-类型:启用日志:真实路径:-/usr/local/nginx/logs/error.log标签:[“nginx-log-error”]字段:log_source:errorfields_under_root:trueoutput.redis:主机:[“192.168.0.111:6379”]key:nginx_log密码:nginxredisdb:0in在redis中显示的效果会输出到键值对应的列表nginx_log中,不能根据键值区分。只能根据键值列表中每行数据的log_source或者自己定义的属性来判断。哪个应用日志3.不同的应用日志使用不同的rediskey值使用output.redis中的keys值,官方例子:output.redis:hosts:["localhost"]key:"default_list"keys:-key:"error_list"#如果`message`字段包含INFO时发送到info_list。contains:message:"error"-key:"debug_list"#如果`message`字段包含DEBUG时发送到debug_list。contains:message:"DEBUG"-key:"%{[fields.list]}"解释:默认key值为default_list,keys的值是动态分配创建的。当redis收到的日志中message字段的值包含error字段时,创建的key为error_list,当包含DEBUG字段时,创建的key为debug_list。解决方法是在每个应用的输出日志中添加一个可以区分日志的值,然后设置在keys中,这样就可以将不同应用的日志输出到不同的rediskey中。
