nginx日志解析输出elasticstack

nginx解析elastic stack(采集,解析分离)

需求:实时读取nginx access日志经过采集,缓存,最终导入到elasticsearch平台进行展示查询。由于nginx日志源主机与elasticsearch平台在不同的内网网段内,所以没有采用通常直接的logstash读取并解析然后直接输出到elasticsearch。而是在日志源运行logstash作为采集并转发到隔离网关的redis集群,然后内网内部运行logstash从redis读取并解析再输出到elasticsearch平台。

采集

日志采集的logstash角色被称为shipping,仅读取并转存,不进行格式解析,使用如下配置:

input {
    file {
        path => "/var/log/nginx/access.log"
        start_position => beginning
        codec => plain {
            charset => "UTF-8"
        }
        type => "nginx"
    }
}
output {
    redis {
        host => "192.168.100.42"
        port => 7021
        data_type => "list"    
        key => "logstash-key"
    }
    stdout {
        codec => rubydebug
    }
}
#注: redis-cli连接redis,查看list类型的key值
lpop "logstash-key"    

解析

解析端的logstash从redis集群读取list,并按照nginx日志模板解析输出到elasticsearch平台。

input {
    redis {
        host => "192.168.100.42"
        port => 7021
        type => "redis_input"
        codec => "json"
        data_type => "list"
        key => "logstash-key"    #该key与采集端的logstash:redis key一致
    }
}
filter {
    grok {
        patterns_dir => "/usr/local/logstash-5.1.1/patt"
        match => {
            "message" => "%{NGINXACCESS}%"
        }
        overwrite => ["message"]
    }
    date {
        match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
}

output {
    elasticsearch {
        hosts => "192.168.100.41:9200"
        index => "shopweb_nginx"
    }
    stdout {
        codec => rubydebug
    }
}
## grok模板
CACHE_STAT \w+|-
RE_TIME %{NUMBER}|-
the_URI %{URI}|-
NGINXACCESS1 %{IP:client} - - \[%{HTTPDATE:localtime}\] \"%{WORD:method} %{URIPATHPARAM:uri_parm} HTTP/%{NUMBER:ver}\" %{NUMBER:status:int} %{NUMBER:body_bytes_sent:int} \"%{the_URI:referer}\" %{NUMBER:bytes_sent:int} %{NUMBER:request_length:int} \"%{GREEDYDATA:agent}\" \"-\" \"%{CACHE_STAT:cache_status}\" %{RE_TIME:request_time} %{RE_TIME:up_response_time}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值