使用 ELKstack 实现对 nginx accesslog 的收集和监控

2015-12-22 23:12:17   最后更新: 2015-12-22 23:12:17   访问数量:1556




通常,我们使用下面这样的模型进行日志的收集工作:

 

其他的日志收集和展示工具其实也和上图中的结构非常类似,下面,我就介绍一下我最近搭建的,我的博客所在的服务器的 nginx accesslog 的监控

 

在 nginx 配置中,我加入了如下配置:

log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"url":"$uri",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"agent":"$http_user_agent",' '"status":"$status"}';

 

这样,nginx 的 accesslog 就是以 json 格式输出的,通过 logstash 的 json filter 插件可以十分方便的转化为 elasticsearch 中的各个字段

如果使用其他格式的 accesslog 进行存储,则需要通过 logstash filter 的 grok 插件进行解析,或者通过 ruby 插件编写代码进行解析,一来复杂程度比较大,二来在日志收集时比较占用机器资源,因此,我选择了直接打成 json,然后使用 json filter 解析

 

shaper

shaper 的主要工作是将日志收集到作为 broker 的 redis 中:

input { file { path => "/var/log/nginx/access.log" } } output { redis { host => "localhost" data_type => "list" key => "logstash:redis" } }

 

 

然后执行:

bin/logstash agent --verbose --config conf/nginx-shipper.conf --log logs/nginx-shipper.log

 

 

Indexer 配置

Index 就是负责解析 redis 中缓存的收集到的日志,并将解析结果存入作为 storage 的 elasticsearch 中

input { redis { host => "localhost" data_type => "list" key => "logstash:redis" type => "redis-input" } } filter { mutate { convert => [ "upstreamtime", "float" ] } geoip { source => "clientip" database => "/var/geoip/GeoLiteCity.dat" } } output { elasticsearch { embedded => false protocol => "http" host => "localhost" port => "9200" index => "access-%{+YYYY.MM.dd}" } }

 

 

因为在 nginx 的 accesslog 中,如果 upstream 为空,则会写入 '-',因此如果不强制转换为 float 类型,当做数字处理就会报错,强制转换后,'-' 会自动变成 0,方便后续处理

这份配置中,使用 access-%{+YYYY.MM.dd} 作为了 index 的分隔,更加方便后续的查询和处理

 

然后,执行:

bin/logstash agent --verbose --config conf/nginx-indexer.conf --log logs/nginx-indexer.log

 

 

这样,日志收集和存储工作就完成了

 

访问 kibana4 的页面,通过配置指定 index 为 access-* 即可进行相应的操作了

在画布中创建各种监控图表后放置在仪表板中:

 

 






技术帖      access      技术分享      nginx      log      日志      缓存      redis      db      elasticsearch      logstash      kibana      dashboard      accesslog      收集      shipper      indexer      storage     


京ICP备15018585号