关于java:采集-Nginx-日志的几种方式你知道几种

68次阅读

共计 4301 个字符,预计需要花费 11 分钟才能阅读完成。

起源:cnblogs.com/xiejava/p/12452434.html

因为 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/sysl…

具体配置如下:在 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.confsyslog-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 的拜访日志和谬误日志的几种形式,具体须要依据理论状况灵便的使用。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 别在再满屏的 if/ else 了,试试策略模式,真香!!

3. 卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅公布,光明模式太炸了!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0