如何采集Nginx的日志?看完这篇你就知道了!

点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

I may not be perfect, but I’m always me. Be yourself, don't change for anyone. If they don't like me at my worst, then they don't deserve me at my best.

我也许不完美,但我一直在做自己。如果他们不能接受最差的我,也就不配拥有最好的我。

每日掏心

随和,是一种能力、素质、文化和心态。随和,是淡泊名利时的超然,是曾经沧海后的井然,是狂风 暴雨中的坦然。

来自:xiejava | 责编:乐乐

链接:cnblogs.com/xiejava/p/12452434.html

程序员小乐(ID:study_tech) 第 888 次推文  图源:百度

往日回顾:用漫画了解 Linux 内核到底长啥样!

     

   正文   

由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。

如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。

大家都知道ELK技术栈是采集、分析日志的利器。所以这里介绍的是从nginx采集日志到ES。当然至于日志采集以后存到看大家的需要。通过logstash可以方便的配置日志输出存储的方式。

一般来说nginx默认安装后,日志文件在 /usr/local/nginx/logs 目录下。分别有 access.log和error.log 访问日志和错误日志。


这次示例Elasitcsearch是三个节点组成的集群172.28.65.22、172.28.65.23、172.28.65.24,172.28.65.30 是kibana的地址,172.28.65.32是数据采集服务器,上面装有logstash、nginx、 filebeat。一般来说采集服务器上有logstash,而nginx、 filebeat应该是装在采集目标上。

一、直接通过filebeat采集日志到ES

在filebeat的安装目录找到filebeat.yml 配置获取日志文件的路径及输出到ES的配置。

具体:

- type: log  # Change to true to enable this input configuration.  enabled: true  # Paths that should be crawled and fetched. Glob based paths.  paths:    #- /var/log/*.log    - /usr/local/nginx/logs/*.log    #- c:\programdata\elasticsearch\logs\*


如果需要在kibana中友好显示的化,可进行kibana配置

输出到es中,在hosts中配置好你的ES服务地址。如果单机只有一个节点,就可以只配一个ip和端口。

启动filebeat 进行日志数据采集

./filebeat -e -c filebeat.yml -d "publish"

通过elasticsearch-head插件查看es索引中的日志信息

可以看到nginx中的access.log和error.log的日志都已经上来了。


在kibana中通过filebeat-*过滤看filebeat的索引,可以看到通过filebeat采过来的数据。


这种直接通过filebeat直接对接ES采日志的方式简单直接,但是无法对采集的日志进行预处理和其他一些操作,也不够灵活。


可以在filebeat 和 ES之间加一层Logstash,可以将filebeat于ES解耦,通过Logstash可以做一些预处理,也可以通过Logstash采集到除ES以外的其他数据存储上。

二、通过filebeat采集日志到logstash再送到ES

首先得安装 logstash ,安装完后在logstash的安装目录下新建vi filebeat-pipeline.conf

filebeat-pipeline.conf的具体配置如下:

input {    beats {        port => "5044"    }}output {    elasticsearch { hosts => ["172.28.65.24:9200"] }    stdout { codec => rubydebug}}


input配置表示通过5044端口接收beats的数据


output配置表示输出到elasticsearch,并且同时输出到标准输出也就是控制台。
然后通过命令

bin/logstash -f filebeat-pipeline.conf --config.reload.automatic

应用filebeat-pipeline.conf启动logstash。

启动以后可以看到logstash的启动日志5044端口的服务已经起了,可以接受通过filebeat通过5044端口传过来的数据了。


接下来配置filebeat


在filebeat的安装目录找到filebeat.yml 配置获取日志文件的路径及输出到logstash的配置。不直接输出到ES了。


具体配置如下:


将output.elasticsearch的配置屏蔽


配置output.logstash,配置正确的logstash的服务主机和端口


启动filebeat 进行日志数据采集

./filebeat -e -c filebeat.yml -d "publish"

我们访问nginx服务提供的web服务http://172.28.65.32/

在logstash的控制台 可以看到相应的访问access.log 日志

同时在ES 中也可以看到有相应的日志数据

三、直接通过rsyslog采集日志到logstash在送到ES

在很多情况下你需要采集的web服务器并不是自己能够控制的,不是说你想装filebeat就可以让你装的,这时候就可以要求目标数据源通过 syslog 的方式将日志发出来。我们可以再通过 logstash送到ES或其他的日志存储处理平台。

通过syslog往日志服务器上发nginx的日志有两种方式,一种就是利用nginx的配置往外发日志,一种就是通过配置linux的rsyslog的配置往外发日志。

1、通过nginx配置发送syslog到logstash


参考见nginx官方文档:http://nginx.org/en/docs/syslog.html
具体配置如下:

在nginx的配置文件nginx.conf中


在server下配置access_log和error_log的输出方式

access_log syslog:server=172.28.65.32:514,facility=local7,tag=nginx_access_log,severity=info;
error_log syslog:server=172.28.65.32:514,facility=local7,tag=nginx_error_log,severity=info;
配置完成后执行 ./nginx -s reload 使配置生效。这样就通过linux的rsyslog服务将
nginx的日志往外发了。
接着来配置logstash的syslog的服务接收配置 。在logstash的安装目录下新建
vi syslog-pipeline.conf
syslog-pipeline.conf的具体配置如下:
input {    syslog{        type => "system-syslog"        port => 514    }}output {    elasticsearch {        hosts => ["172.28.65.24:9200"]        index => "system-syslog-%{+YYYY.MM}"    }    stdout { codec => rubydebug}}


input配置表示通过514端口接收syslog的数据


output配置表示输出到elasticsearch,并且同时输出到标准输出也就是控制台。


通过执行 bin/logstash -f syslog-pipeline.conf --config.reload.automatic 启动logstash

可以看到logstash启动以后开启了514端口的tcp和upd协议的侦听。

我们访问nginx服务提供的web服务http://172.28.65.32/
在logstash的控制台 可以看到相应的nginx访问access和error的日志

同样通过Elasticsearch-head在ES 中也可以看到有相应的日志数据

2、通过配置rsyslog发送syslog日志到logstash


有些老版本的nginx不支持配置syslog输出日志,或者说我想输出其他不是nginx的日志该怎么办呢?可以通过直接配置rsyslog的方式来往外发送日志。

在/etc/rsyslog.conf 中配置

$IncludeConfig /etc/rsyslog.d/*.conf


意思是可以引用外部的配置文件,引用外部的配置文件一方面可以不影响主配置文件,另一方面也比较好管理


在/etc/rsyslog.d目录下新建nginx-log.conf
配置如下:

$ModLoad imfile$InputFilePollInterval 1$WorkDirectory /var/spool/rsyslog$PrivDropToGroup adm
##Nginx访问日志文件路径,根据实际情况修改:$InputFileName /usr/local/nginx/logs/access.log$InputFileTag nginx-access:$InputFileStateFile stat-nginx-access$InputFileSeverity info$InputFilePersistStateInterval 25000$InputRunFileMonitor
##Nginx错误日志文件路径,根据实际情况修改:$InputFileName /usr/local/nginx/logs/error.log$InputFileTag nginx-error:$InputFileStateFile stat-nginx-error$InputFileSeverity error$InputFilePersistStateInterval 25000$InputRunFileMonitor
*.* @172.28.65:514


配置好了以后,重启rsyslog服务

systemctl restart rsyslog


我们访问nginx服务提供的web服务http://172.28.65.32/

在logstash的控制台 可以看到同样的效果。

本文介绍了如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志的几种方式,具体需要根据实际情况灵活的运用。

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入订阅号程序员小乐技术群,在后台回复“加群”或者“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

基础原理系列:服务端 TCP 连接的 TIME_WAIT 问题

JAVA 泛型中的通配符 T,E,K,V,?

SpringBoot 源码分析之 SpringBoot 可执行文件解析

关注订阅号「程序员小乐」,收看更多精彩内容

嘿,你在看吗

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值