点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

由于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的访问日志和错误日志的几种方式,具体需要根据实际情况灵活的运用。

来源:https://dwz.cn/ofiCxRK0

热门内容:浅析 VO、DTO、DO、PO 的概念、区别和用处!学会 IDEA REST Client后,postman就可以丢掉了...
Java 处理 Exception 的 9 个最佳实践!
阿里巴巴为什么不用 ZooKeeper 做服务发现?短信验证码的登录流程为什么要放弃 Lombok ?
这12张手绘图,让我彻底搞懂了微服务架构!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

如何采集Nginx的日志?相关推荐

  1. 采集Nginx日志的几种方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://dwz.cn/ofiCxRK0 ...

  2. 闭眼入!采集 Nginx 日志的几种方式!

    作者:xiejava 来源:cnblogs.com/xiejava/p/12452434.html 由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服 ...

  3. 通过filebeat、logstash、rsyslog采集nginx日志的几种方式

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

  4. filebeat采集nginx日志

    背景 我们公司项目组用的是elastic的一整套技术栈,es,kibana,filebeat和apm,目前已经可以采集网关+各个微服务的日志. 架构图 现在需要在原来的基础上把nginx这的日志也采集 ...

  5. niginx查看服务器日志信息,nginx 远程日志服务器

    nginx 远程日志服务器 内容精选 换一换 为加强对系统数据的容灾管理,云堡垒机支持配置日志备份,提高审计数据安全性和系统可扩展性.本小节主要介绍如何在系统配置Syslog服务器参数,将日志远程备份 ...

  6. 调整 Docker 中 nginx 的日志级别

    调整 Docker 中 nginx 的日志级别 Intro 最近发现我们的一个应用产生了很多日志,而这些日志大多都是 nginx 的 access_log,我们默认会把标准输出收集到 es 里分析应用 ...

  7. logstash 过虑nginx访问日志

    标题是不是可以翻译成这样:logstash Filters nginx access log 好了,进入正题,日志管理服务器我用ElasticSearch+LogStash+Kibana+Redis ...

  8. Ekl去记录nginx的日志

    什么是 ELK? ELK 是 Elasticsearch.Logstash.Kibana 三大开源框架首字母大写简称. Elasticsearch 是强大的数据搜索引擎,是分布式.通过 restful ...

  9. 网站用户行为日志采集和后台日志服务器搭建

    原文地址: 网站用户行为日志采集和后台日志服务器搭建 1.简介 网站流量数据统计分析,可以帮助网站管理员.运营人员.推广人员等实时获取网站流量信息,并从流量来源.网站内容.网站访客特性等多方面提供网站 ...

最新文章

  1. PCL基础1:点云数据结构
  2. JSP第二次作业_5小题
  3. VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一
  4. sae mysql django_Django中MySQL读写分离技术
  5. ABAP 判断某个或者某段字符串是否为汉字
  6. php 取url根域名,php中取得URL的根域名的代码
  7. python多个main方法_Python,main方法未运行(同一文件中有多个类)
  8. 操作系统【四】分页存储管理
  9. VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件
  10. mysql偏移注入_移位溢注:告别靠人品的偏移注入
  11. shell脚本:批量修改文件名(文件名中添加字符)
  12. android给数组添加新元素_「数组赋值」什么是数组、如何创建数组、数组赋值、数组增加一个新元素 - seo实验室...
  13. 数字图像相关基础知识
  14. 中国手机摄像头产业链
  15. Richpedia: A Large-Scale, Comprehensive Multi-Modal Knowledge Graph
  16. 360 和 qq 之争
  17. 为什么进程切换比线程切换耗费资源?
  18. 《基础会计学》期末模拟试题及答案
  19. 前美团COO干嘉伟:好的管理,打得、骂得,又哄得
  20. css动态飞飞荷包蛋

热门文章

  1. Java中常量定义的几种方式
  2. C++ 学习笔记之——文件操作和文件流
  3. Go-技篇第一 技巧杂烩
  4. EasyRTMP手机直播推送rtmp流flash无法正常播放问题
  5. IOS沙盒Files目录说明和常用操作
  6. Oracle DMP 操作笔记之根据DMP逆向推导出导出的表空间名称
  7. interface IEngineControl封装引擎通用操作
  8. ASP.NET Cookie
  9. EasyPHP-2.0b1+ Mantis-1.1.0安装及技巧
  10. MOG2 成员函数参数设定