电商前端Nginx访问日志收集分析实战

使用FileBeat+Logstash+ES实现分布式日志收集

在大型项目中 ,往往服务都是分布在非常多不同的机器上 ,每个机器都会打印自己log日志

但是 ,这样分散的日志 ,本来就无法进行整体分析。再加上微服务的负载均衡体系 ,甚至连请求打到了哪个服务器 上都无法确定。给问题排查带来了很多的困难。 因此就需要将分散的日志收集到一起 ,这样才能整体进行分析。

Java应用中 ,后续我们会介绍使用skywalking ,基于微服务架构进行整体链路追踪。但是这种方式会显得比较  重。如果只是分析nginx这样的中间件 skywalking显然就无能为力了。 因此 ,还需要一个比较简单快捷 ,对应用 无侵入的方式统一收集日志。通常 ,业界常用的还是通过ELK中间件来收集日志。整体的流程是这样的。

le beat,logstashes都是ELK组件中的标准处理组件。其中  ES是一个高度可扩展的全文搜索和分析引擎 ,能够    对大容量的数据进行接近实时的存储、搜索和分析操作 ,通常会Kibana部署在一起  Kibana提供图形化的操    作功能。 LogStash是一个数据收集引擎 ,他可以动态的从各种数据源搜集数 ,并对数据进行过滤、分析和统一格 式等简单操作 ,并将输出结果存储到指定位置上。但是LogStash服务过重 ,如果在每个应用上都部署一个

logStash ,会给应用服务器增加很大的负担。 因此 ,通常会在应用服务器上 ,部署轻量级的le beat组件。le beat 可以持续稳定的收集简单数据 ,比如Log日志 ,统一发给logstash进行收集后 ,再经过处理存到ES

这一套流程是企业中最为基础的分布式日志收集方案。这一章节就带大家实际搭建一个le beatlogstash服务, 用来收集前端项目的nginx日志 ,然后将nginx日志经过logstash保存到es中。

搭建LogStash

去官网下载与ES配套的LogStash 7.17.3版本发布包logstash-7.17.3-linux-x86_64.tar.gz。 下载地址:

Past Releases of Elastic Stack Software | Elastic 

使用tar -zxvf logstash-7.17.3-linux- x86_64.tar.gz 将压缩包解压到es用户根目录。

解压完成后需要配置Logstash需要的JDK。这个JDK不需要额外下载 ,在logstash的安装目录下有一个jdk目录 ,里 面有内置的配套JDK。这时 ,需要配置一个环境变量LS_JAVA_HOME指向这个内置的JDK即可。

接下来可以简单启动一下logstash进行测试。进入logstash的安装目录 ,启动一个简单的logstash任务。

bin/logstash -e 'input { stdin { } } output { stdout {} }'

 ​ 这个任务启动需要一定的时间。

​ 启动完成后,就可以从logstash的控制台输入信息,然后又重新输出到控制台中。使用ctrl_+D退出控制台。

#控制台输入hello
hello    
# 控制台输出logstash处理结果
{"message" => "hello","@version" => "1","host" => "es-node3","@timestamp" => 2022-09-14T02:14:05.709Z
}

 这样一个简单的logstash就安装完成了。

​ 接下来需要对logstash的输入和输出目录进行配置。进入config目录,在目录下直接修改logstash-sample.conf文件即可。

配置文件名字可以随便取,后续启动时需要指定配置文件。

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.input {beats {port => 5044}
}filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}"}}
}output {elasticsearch {hosts => ["http://localhost:9200"]#index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"index => nginxloguser => "elastic"password => "123456"}
}

这个配置中:

input表示输入,这里表示从filebeat输入消息,接收的端口是5044。

output表示数据的输出,这里表示将结果输出到本机的elasticsearch中,索引是nginxlog。

filer表示对输入的内容进行格式化处理。这里指定的grok是logstash内置提供的一个处理非结构化数据的过滤器。他可以以一种类似于正则表达式的方式来解析文本。简单的配置规则比如:%{NUMBER:duration} %{IP:client} 就是从文本中按空格,解析出一个数字型内容,转化成duration字段。然后解析出一个IP格式的文本,转换成client字段。而示例中使用的COMBINEDAPACHELOG则是针对APACHE服务器提供的一种通用的解析格式,对于解析Nginx日志同样适用。

一条nginx的日志大概是这样:

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png
HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

解析出来的是一个json格式的数据,包含以下字段

InformationField Name
IP Addressclientip
User IDident
User Authenticationauth
timestamptimestamp
HTTP Verbverb
Request bodyrequest
HTTP Versionhttpversion
HTTP Status Coderesponse
Bytes servedbytes
Referrer URLreferrer
User agentagent

​ 配置好这个文件后,就可以直接启动了。

nohup bin/logstash -f config/logstash-sample.conf --config.reload.automatic &

config.reload.automatic表示配置自动更新,也就是说以后只要改动了配置文件,就会及时生效,不需要重启logstash

nohup指令只是表示不要占据当前控制台,将控制台日志打印到nohup.out文件中。

logstash更详细的配置说明参见官方文档:Logstash Reference [7.17] | Elastic

​ 然后,搭建filebeat

​ 之前已经启动了logstash服务,通过5044端口监听filebeat服务。接下来就需要在各个应用服务器上部署filebeat,往logstash发送日志消息即可。

​ filebeat的下载地址: Past Releases of Elastic Stack Software | Elastic 。同样选择配套的7.17.3版本filebeat-7.17.3-linux-x86_64.tar.gz。并使用tar -zxvf filebeat-7.17.3-linux-x86_64.tar.gz指令解压。

​ 在解压目录下已经提供了一个模版配置文件filebeat.yml,我们只需要修改这个文件即可。 这个模板文件里面的示例非常清楚,从文件读取日志,输出到logstash的配置,文件当中都有。这里只列出修改的部分。

​ 先修改文件输入的部分配置

# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: filestream# Change to true to enable this input configuration.enabled: true # Paths that should be crawled and fetched. Glob based paths.paths:- /www/wwwlogs/access.log#- c:\programdata\elasticsearch\logs\*

​ 然后修改输出到logstash的部分配置

# ------------------------------ Logstash Output -------------------------------
output.logstash:# The Logstash hostshosts: ["192.168.65.114:5044"]

默认打开的是output.elasticsearch,输入到es,这部分配置要注释掉。

​ 这样就完成了最简单的filebeat配置。接下来启动filebeat即可

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

​ filebeat任务启动后,就会读取nginx的日志,一旦有新的日志记录,就会将日志转发到logstash,然后经由logstash再转发到ES中。并且filebeat对于读取过的文件,都是有记录的,即便文件改了名字也不会影响读取的进度。比如对log日志,当前记录的log文件,即便经过日志轮换改成了其他的名字,读取进度也不会有变化。而新生成的log日志也可以继续从头读取内容。如果需要清空filebeat的文件记录,只需要删除安装目录下的data/registry目录即可。

更详细的配置参见官方文档: Configure the Logstash output | Filebeat Reference [7.17] | Elastic

​ 接下来,进入ES查看数据是否生效

​ 进入Kibana的前端页面,即可查询到nginxlog索引下的日志记录

 后续就可以针对这些nginx的日志信息,进行分析。nginx的日志基本上是所有大型项目进行日志收集必不可少的一个重要数据来源,从nginx的日志中可以分析出大量有用的结果。比如最常见的PV,UV,还有热点功能等。

​ 例如,在Kibana中,可以通过统计Nginx的日志条数,计算出每天的PV

GET nginxlog/_count
{"query": {"range": {"timestamp": {"gte": "2022-10-21"}}}
}

​ 用clientip来区分不同访客,就可以统计出每天的UV

GET nginxlog/_search
{"query": {"range": {"timestamp": {"gte": "2022-10-21"}}},"size": 0,"aggs": {"visitOrder": {"terms": {"field": "clientip.keyword","size": 10}}}
}

​ 课上就只带大家搭建最简单的一组服务了。在搭建过程中可以看到,filebeat和logstash对于常见的输入输出源都已经提供了实现,大部分情况下,只需要简单配置即可。在实际项目中,往往会以此为基础构建更复杂的分布式日志处理方案。 比如在logstash后增加一个Kafka,将LogStash收集的日志消息存入到kafka ,再经过基于Kafka的流式计算,将PV,UV这类的统计结果存入ES。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93865.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TwinCAT3示例项目1

目录一、需求分析二、程序编写1.实现1盏灯的自控(IF、TOF)2. 添加模式控制(Case、枚举)3. 添加多盏灯(FOR、数组)4. 添加多组灯(二维数组)END项目结合了,FB,I…

如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能

这篇文章详细介绍了如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能,通过 PCI 设备直通(Pass-Through)技术将显卡分配给虚拟机使用: 在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能 1. 检查…

设计模式(二十二)行为型:策略模式详解

设计模式(二十二)行为型:策略模式详解策略模式(Strategy Pattern)是 GoF 23 种设计模式中最具实用性和广泛影响力的行为型模式之一,其核心价值在于定义一系列算法或行为,并将每个算法封装到独立…

AI+向量化

要理解 Java 如何结合 AI 与向量化,我们需要从向量化的核心概念、AI 中向量化的作用、Java 生态中的实现工具以及具体实践案例四个维度展开。以下是详细解析:一、核心概念:向量化与 AI 的关系向量化(Vectorization)是将…

Bootstap Vue 之b-form-radio-group 不显示选中状态问题

代码类似&#xff1a;<b-form-radio-groupclass"mt-2"required:disabled"dfrmDisabled"v-model"childDikeForm.SafetyAppraisalRank":options"[一, 二, 三, 四]"name"rankradioopt"></b-form-radio-group>经过测…

Shell 脚本实战:基于 for 循环的批量操作三例(账户创建、网络检测与密码管理)

一、编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如:test1、test2、test3、......、test10实现思路通过read命令获取用户输入的账户前缀和初始密码&#xff1b;加入非空校验&#xff1a;若前…

PBR技术

一 、PBR的概述1.定义策略路由&#xff1a; PBR 是一种覆盖路由器默认路由决策机制的技术。它允许管理员根据策略&#xff08;而不仅仅是目标地址&#xff09;来设置数据包的下一跳 IP 地址、出站接口、IP 优先级/DSCP 值等。路由策略&#xff1a;是指在路由器或三层设备上&…

STM32-ESP8266Wi-Fi模块使用USART实现通信/创建AP和STA模式配置教程(寄存器版)

本章思维导图&#xff1a;ESP8266WIFI模块简介ESP8266 是一款由乐鑫科技推出的低成本、高性能 Wi-Fi 模块&#xff0c;广泛应用于物联网和嵌入式开发领域。WIFI的频段5G和2.4G2.4G Wi-Fi与5G Wi-Fi最本质的区别即工作频段&#xff08;无线电波的频率&#xff09;不一样&#xf…

算法26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c;你…

ROS2中传输样条曲线

在ROS2中传输样条曲线需要解决两个核心问题&#xff1a;**如何结构化表示曲线数据**和**如何高效传输**。以下是一套完整方案&#xff0c;结合自定义消息设计、序列化优化和QoS配置实现可靠传输&#xff1a;---### &#x1f4d0; 一、定义样条曲线的自定义消息 样条曲线通常由控…

Win11怎样安装DirectX 9

通过微软官方下载安装&#xff1a;确认系统兼容性并准备&#xff1a;确保显卡驱动为最新版本&#xff0c;因为 DirectX 与显卡驱动程序紧密相关。同时&#xff0c;可暂时关闭防病毒软件和防火墙&#xff0c;防止其干扰安装过程。下载安装程序&#xff1a;访问微软官方网站下载 …

RAGFLOW~Enable RAPTOR

Enable RAPTOR 一种递归抽象方法&#xff0c;用于长上下文知识检索和摘要&#xff0c;在广泛语义理解和细微细节之间取得平衡。 RAPTOR&#xff08;递归抽象处理用于树状组织检索&#xff09;是一种在2024年论文中引入的增强文档预处理技术。它旨在解决多跳问答问题&#xff0c…

【机器人+相机通讯】宇树科技相机通信

https://github.com/unitreerobotics/xr_teleoperate/blob/main/README_zh-CN.md 相机驱动与服务端 https://github.com/unitreerobotics/xr_teleoperate/blob/main/teleop/image_server/image_server.py 其中相机如果是realsense, 安装好驱动后&#xff0c;可以使用命令查看…

机械学习中的一些优化算法(以逻辑回归实现案例来讲解)

一、混淆矩阵混淆矩阵是机器学习中评估分类模型性能的重要工具&#xff0c;尤其适用于二分类或多分类任务。它通过展示模型预测结果与实际标签的匹配情况&#xff0c;帮助理解模型的错误类型&#xff08;如假阳性、假阴性等&#xff09;。以下通过二分类场景为例&#xff0c;结…

龙蜥受邀参加2025开放计算技术大会,解码基础模型驱动下的系统创新与生态共建

开放计算技术大会由全球最大的开放计算社区 OCP 发起&#xff0c;是开放计算领域生态覆盖最广且最具影响力的亚洲年度技术盛会。本届大会由 OCP 与 OCTC&#xff08;中国电子工业标准化技术协会开放计算标准工作委员会&#xff09;两大开放组织联合主办&#xff0c;将于 8 月 7…

第三阶段—8天Python从入门到精通【itheima】-140节(pysqark实战——基础准备)

目录 140节——pysqark实战——基础准备 1.学习目标 2.pysqark库的安装 3.pyspark的路径安装问题 一、为什么不需要指定路径&#xff1f; 二、如何找到 pyspark 的具体安装路径&#xff1f; 三、验证一下&#xff1a;直接定位 pyspark 的安装路径 四、总结&#xff1a;记…

数据库中使用SQL作分组处理01(简单分组)

1.简单分组GroupBy什么就Select什么SELECT Name,Score From StudentScore GROUP BY Name,Score2.聚合函数(MAX SUM AVG COUNT)&#xff08;1&#xff09;计算1.表的全部字段都可以用聚合函数&#xff0c;但是筛选聚合函数的结果要用Having关键字2.聚合函数默认排除Null值IDName…

Linux基本服务——web服务解析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 Web服务解析 虚拟Web主机 Web目录访问控制 Web服务解析 用途&#xff1a;基于 B/S 架构提供网页的服务端程序 应用层协议&#xff1a;HTTP&#xff08;TCP 80…

深入理解缓存淘汰策略:LRU vs LFU 完全解析

深入理解缓存淘汰策略&#xff1a;LRU vs LFU 完全解析 文章目录深入理解缓存淘汰策略&#xff1a;LRU vs LFU 完全解析前言一、基础概念解析1.1 LRU&#xff08;Least Recently Used&#xff09;- 最近最少使用1.2 LFU&#xff08;Least Frequently Used&#xff09;- 最少使用…

【C语言】字符函数与字符串函数详解

文章目录一、字符分类函数二、字符转换函数三、strlen函数&#xff1a;计算字符串长度功能说明使用示例模拟实现四、strcpy函数&#xff1a;字符串拷贝功能说明模拟实现五、strcat函数&#xff1a;字符串追加功能说明模拟实现六、strcmp函数&#xff1a;字符串比较比较规则模拟…