前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Beats:运用 Filebeat module 分析 nginx 日志

Beats:运用 Filebeat module 分析 nginx 日志

作者头像
腾讯云大数据
修改于 2021-01-08 08:28:21
修改于 2021-01-08 08:28:21
4.9K00
代码可运行
举报
运行总次数:0
代码可运行

腾讯云 Elasticsearch Service】高可用,可伸缩,云端全托管。集成X-Pack高级特性,适用日志分析/企业搜索/BI分析等场景


在之前的文章中,我介绍了如何使用 Filebeat 把一个日志文件直接写入到 Elasticsearch 中,或通过 Logstash 的方法写到Elasticsearch 中。在今天的文章中,我们来介绍如何运用 Filebeat 来把 nginx 日志导入到 Elasticsearch 中,并进行分析。

Filebeat 模块为你提供了一种快速处理常见日志格式的快速方法。 它们包含默认配置,Elasticsearch 接收节点管道定义和 Kibana 仪表板,以帮助你实施和部署日志监视解决方案。

Filebeat 提供了几种不同的方式来启用模块。 你可以:

  • 在 modules.d 目录中启用模块配置
  • 运行 Filebeat时 启用模块
  • 在 filebeat.yml 文件中启用模块配置

今天我们采用第一种方法来展示如何使用 Filebeat 所提供的模块功能来对 nginx 日志进行分析。

下载测试数据

我已经上传了一个测试数据,它位于:https://github.com/liu-xiao-guo/nginx_log_file。我们可以通过如下的方法来下载这个测试数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/liu-xiao-guo/nginx_log_file

等我们把测试数据克隆下来后,我们可以通过如下的方法来解压,并把它存于到一个我们喜欢的目录中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unzip nginx.zip

我们发现它里面含有一个叫做 nginx.log 的文件。它的大小有 227M。它里面含有1万个 nginx 的日志。

如何得到安装帮助

我们可以先打开我们的Kibana,并点击Kibana左上角的home图标:

点击 “Add log data”,然后,我们可以看到:

点击 “Nginx logs”,然后,你就就可以看到比较全的安装步骤:

在上面,我们根据自己的平台选择适合自己的安装方式。

安装Filebeat

我们可以根据不同的操作系统来进行如下不同的安装:

deb:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-amd64.deb
sudo dpkg -i filebeat-7.3.1-amd64.deb

rpm:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm
sudo rpm -vi filebeat-7.3.1-x86_64.rpm

mac:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.3.1-darwin-x86_64.tar.gz

brew:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew tap elastic/tap
brew install elastic/tap/filebeat-full

linux:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.3.1-linux-x86_64.tar.gz

这样我们的Filebeat就安装好了。请注意:由于ELK迭代比较快,我们可以把上面的版本7.3.1替换成我们需要的版本即可。我们先不要运行Fliebeat。

使用Filebeat模块

当我们安装完 Filebeat 后,我们可以看到在 Filebeat 的安装目录下的文件结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ls -F
LICENSE.txt        filebeat.reference.yml    filebeat_es.yml
NOTICE.txt        filebeat.template.json    kibana/
README.md        filebeat.yml        logs/
data/            filebeat1.yml        module/
fields.yml        filebeat2.yml        modules.d/
filebeat*        filebeat_apache.yml    sample.log

在这里,我们可以看到它里面有一个叫做 filebeat.yml 的配置文件,还有一个叫做 modules.d 的文件夹。在 filebeat.yml 中,我们做如下的修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setup.kibana:
  host: "localhost:5601"
output.elasticsearch:
  hosts: ["localhost:9200"]

在这里,我们把 host 都指向我们的 localhost,这是因为我们的 elasticsearch 及 Kibana 都安装在本地的电脑上。这两个地址需要根据自己实际的部署的地址改变而改变。

显示 Filebeat 支持的模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./filebeat modules list
Enabled:
nginx
Disabled:
apache
auditd
cisco
coredns
elasticsearch
envoyproxy
googlecloud
haproxy
icinga
iis
iptables
kafka
kibana
logstash
mongodb
mssql
mysql
nats
netflow
osquery
panw
postgresql
rabbitmq
redis
santa
suricata
system
traefik
zeek

我们可以看出来目前已经被启动的模块是 nginx。它可以通过如下方式来启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./filebeat modules enable nginx

当然我们也可以通过如下的方式来关闭这个模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./filebeat modules disable nginx

针对我们今天的练习,我们需要启动 nginx 模块。

我们可以通过如下的命令查看在 modules.d 目录下的文件变化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ls modules.d
apache.yml.disabled        mssql.yml.disabled
auditd.yml.disabled        mysql.yml.disabled
cisco.yml.disabled        nats.yml.disabled
coredns.yml.disabled        netflow.yml.disabled
elasticsearch.yml.disabled    nginx.yml
envoyproxy.yml.disabled        osquery.yml.disabled
googlecloud.yml.disabled    panw.yml.disabled
haproxy.yml.disabled        postgresql.yml.disabled
icinga.yml.disabled        rabbitmq.yml.disabled
iis.yml.disabled        redis.yml.disabled
iptables.yml.disabled        santa.yml.disabled
kafka.yml.disabled        suricata.yml.disabled
kibana.yml.disabled        system.yml.disabled
logstash.yml.disabled        traefik.yml.disabled
mongodb.yml.disabled        zeek.yml.disabled

我们可以看到 nginx.yml 文件的最后没有 “disabled” 字样,表明它已经被启动成功。我们进一步编辑这个 nginx.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.3/filebeat-module-nginx.html
- module: nginx
  # Access logs
  access:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/Users/liuxg/data/nginx.log"]
  # Error logs
  error:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths: ["/var/log/nginx/error.log"]

在这里,我把文件路径 /Users/liuxg/data/nginx.log 写入到该文件,这是因为我的 nginx.log 文件是位于这个路径的。这个路径需要你依据把 nginx 的日志文件路径改变而改变。

启动模块

为了能够使得我们的 nginx 模块能够正确地被 Kibana 显示,我们必须运行如下的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./filebeat setup
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64
(base) localhost:filebeat-7.3.0-darwin-x86_64 liuxg$ ./filebeat setup
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Loaded machine learning job configurations
Loaded Ingest pipelines

注意:在安装或升级 Filebeat 时,或在启用新模块后,必须执行 setup 命令

运行Filebeat

上面我们已经配置好,下面我们通过如下的命令来把我们的 nginx 日志导入到我们的 Elasticsearch 中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./filebeat -e

我们可以在 Kibana的 “Dev tools” 可以看到最新被创建的 index:

这里的 filebeat-7.3.0 是一个 alias,它指向我们刚被创建的一个 index,比如 filebeat-7.3.0-2019.09.28-000001。

在这里显示的数据是10,000,其实这不是一个真实的文档的数目。它的真实的文档个数是:

这里要注意的一件事是响应中的 hits.total。 它具有10,000和 “relation” =“ gte” 的值。 索引中实际上有 984,887 个文档,我们已经创建了全部。 在 7.0 版发布之前,hits.total 始终用于表示符合查询条件的文档的实际数量。 在 Elasticsearch 7.0 版中,如果匹配数大于10,000,则不会计算 hits.total。 这是为了避免为给定查询计算精确匹配文档的不必要开销。 我们可以通过将 track_total_hits = true 作为请求参数来强制进行精确匹配的计算。

一旦数据被导入到 Elasticsearch 中,我们就可以开始对数据进行分析了。

运用 Kibana 来分析数据

在之前我们已经通过 ./filebeat setup 命令,已经把针对 nginx 的模块仪表盘导入到 Kibana 中了。下面我们就可以使用标准的 dashboard 来对 nginx 数据进行展示及分析。

打开 Discover 查看数据,index pattern 选择 filebeat-*,把时间选择到2018年10月-2018年12月停止

————————————————

版权声明:本文为CSDN博主「Elastic 中国社区官方博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://elasticstack.blog.csdn.net/article/details/101604717


最新活动

包含文章发布时段最新活动,前往ES产品介绍页,可查找ES当前活动统一入口

Elasticsearch Service自建迁移特惠政策>>

Elasticsearch Service 新用户特惠狂欢,最低4折首购优惠 >>

Elasticsearch Service 企业首购特惠,助力企业复工复产>>

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【开发规范系列】(四)前端开发规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路行驶。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。
程序员朱永胜
2023/09/01
8260
制定自己团队的前端开发规范
后续的文章我也补充齐全了,一共有两篇,都是实战篇,一篇是制定自己团队的前端开发规范之 eslint,另外一篇是手摸手带你实践标准的前端开发规范,希望大家可以去看一下,然后把这套规范实践起来,让自己的开发存在更少的bug。
用户1462769
2019/08/09
9460
GOGO-前端开发规范
根据公司业务要求而定,一般: 主流程测试:Chrome 30+、IE9+; 完整测试: Chrome 21、IE8+、360浏览器、微信webview/QQ手机浏览器。
用户2293540
2023/10/18
2720
4.HTML样式布局区块标签元素介绍
本章节,主要介绍HTML布局与区块的元素介绍, 比如头部,中部,尾部以及行内区块与行外区块等,具体讲解如下述所示。
全栈工程师修炼指南
2023/03/21
1.4K0
4.HTML样式布局区块标签元素介绍
前端编码规范
基本原则 结构、样式、行为分离 统一缩进(建议 两个空格) 文件编码统一 不带BOM的UTF-8 一律使用小写字母 省略外链资源 URL 协议部分(FTP等其他URL不省略) 统一注释 HTML 标签 自闭合无需闭合img input br hr 等 可选闭合需闭合 尽量减少标签 class & id 以功能或内容命名, 不以表现形式命名 以-分隔 属性顺序 id > class > name > data-xxx > src,for,type,href > title,alt > aria-xxx,rol
用户1667431
2018/04/18
1.8K0
Html5+CSS3命名规范(前端web开发命名规范,符合SEO规范)
任何代码编程都有各自特点的常用命名规范,div+css页面设计也不例外。遵守常用的css命名规范有利于代码的升级和扩展,也有利于让别人读懂你的css代码,让你的页面显得清晰有条理。
李洋博客
2021/06/15
1.8K0
HTML5+CSS3命名规范
任何代码编程都有各自特点的常用命名规范,div+css页面设计也不例外。遵守常用的css命名规范有利于代码的升级和扩展,也有利于让别人读懂你的css代码,让你的页面显得清晰有条理。
闲花手札
2021/08/24
7740
高级攻城狮从代码规范开始——web前端代码规范
命名规范 文件和文件夹命名 文件夹和文件名采用英文小写字母命名,多个英语单词用 “-” 分割,不使用驼峰命名,如:hello-world 编写组件使用 “c-” 打头,如:编写一个select组件,文件夹或者文件名定义[c-select] 样式表命名 样式表命名采用英文小写字母命名,多个英语单词用 “-” 分割,不使用驼峰命名,如:hello-world JS命名 js变量使用驼峰命名,不使用-号分割 // 不推荐 let foo_
Javanx
2019/09/04
5330
Web前端开发代码规范(基础)
对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护。
用户7705674
2021/09/19
2.2K0
前端开发博客一周面试题汇总
感谢管理员一周的面试题汇总。希望大家多多支持我们的管理员,记得赞赏、点好看、转发一条龙支持他的工作。
前端开发博客
2020/11/04
2510
前端开发博客一周面试题汇总
HTML+CSS+JS 实现登录注册界面[通俗易懂]
鉴于小伙伴们没有csdn积分,我把代码压缩成了一个压缩包,放在了gitee上面,需要的请点击下载 点击下载
全栈程序员站长
2022/09/13
26K0
HTML+CSS+JS 实现登录注册界面[通俗易懂]
pc 和 ipad 端网站适配
方法一:设置fontsize 按照iphone 5的适配 1em=10px 适配320
公众号---人生代码
2020/11/11
3K0
前端代码规范(es6,eslint,vue)
为每个 HTML 页面的第一行添加标准模式(standard mode)的声明,这样能够确保在每个浏览器中拥有一致的展现。
山河木马
2019/03/05
6.1K0
前端代码规范(es6,eslint,vue)
前端开发规范Javascript
文件注释用于告诉不熟悉这段代码的读者这个文件中包含哪些东西。 应该提供文件的大体内容, 它的作者, 依赖关系和兼容性信息。如下:
PM吃瓜
2019/08/12
7080
通过分析Github众多前端代码库,总结出来的前端代码书写规范
永远一致同一套编码规范,可以是这里列出的,也可以是你自己总结的。如果您发现本规范中有任何错误,敬请在问题中指正。
用户5997198
2019/10/31
1.2K0
Web前端开发规范手册
为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档。
用户7705674
2021/09/19
2.8K0
谷歌 HTML/CSS 规范
这篇文章定义了 HTML 和 CSS 的格式和代码规范,旨在提高代码质量和协作效率。 通用样式规范 协议 省略图片、样式、脚本以及其他媒体文件 URL 的协议部分(http:,https:),除非文件
用户1667431
2018/04/18
2.2K0
谷歌 HTML/CSS 规范
前端开发面试题
本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习、透彻学习,形成自己的知识链。万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的!不可能的!不可能的!
用户1065635
2019/03/21
5.2K0
前端开发面试题
记录前端开发过程中遇到的一个问题
博客新增菜单后,点击新菜单后其中的js不生效,刷新页面后才生效,这个页面是通过<a href="xxx" target=_self>标签跳转过来的。下面上我的代码
晓果冻
2022/09/08
2890
记录前端开发过程中遇到的一个问题
前端开发知识汇总--JS
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/67642677
j_bleach
2019/07/02
1.4K0
相关推荐
【开发规范系列】(四)前端开发规范
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验