es实战-收集Nginx日志可视化监控

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Kibana 展示 Nginx 记录的访问 ES 日志

需求场景:ES 集群通过 Nginx 做了网关代理,需要把访问 ES 集群的请求进行统计监控。
使用组件:Filebeat 收集,写入 ES 集群,通过 Kibana 的 dashboard 进行展示,即 ELK 的老本行,采用更轻量级的日志收集工具 Filebeat 而没有使用 Logstash。

1. Nginx

对 Nginx 默认的日志格式进行了微调,将默认的$time_local修改为$time_iso8601,日志变化如下所示:

#before
171.0.0.1 - - [11/Nov/2021:00:00:02 +0800] 1.300 0.982 200 731171 "POST /index1/_search?timeout=30s HTTP/1.1" "-" "axios/0.19.2" "-"
#after
171.0.0.1 - - [2021-11-25T11:29:13+08:00] 0.008 0.008 200 137 "GET /index1/_search HTTP/1.1" "-" "python-urllib3/1.26.2" "-"

Nginx 日志每行12个字段含义如下:

字段 含义
remote_addr 客户端IP地址
- 占位符
remote_user 客户端登录用户名没有则置为占位符 -
time 访问时间和时区
request_time 整个请求的总时间
upstream_response_time Nginx向后端请求的时间
status 请求返回的http状态码
body_bytes_sent 发送给客户端的字节数
request 请求的URI和HTTP协议
http_referer 哪个页面链接访问
http_user_agent 客户端访问信息,如浏览器、手机客户端等
http_x_forwarded_for 客户端的真实ip通常web服务器放在反向代理的后面

2. Filebeat

Filebeat 配置比较简单,开箱即用,配置好 Input 为 Log,Output 为 ES 即可,如下所示:

filebeat.inputs:
#=========================== Filebeat inputs =============================
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access_whsh.log
#=========================== Filebeat inputs =============================
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
#=========================== Filebeat inputs =============================
setup.template.settings:
  index.number_of_shards: 1
  #index.codec: best_compression
setup.template.name: "es-request-log"
setup.template.pattern: "es-request-log-*"
setup.template.enabled: false
setup.template.overwrite: true
setup.template.fields: "esrequestfields.yml"
setup.ilm.enabled: false
#=========================== Filebeat inputs =============================
output.elasticsearch:
  hosts: ["172.0.0.1:9200","172.0.0.2:9200","172.0.0.3:9200"]
  index: "es-request-log-%{+yyyy.MM.dd}"
  pipeline: "es-request-log"
  # Protocol - either `http` (default) or `https`.
  protocol: "https"
  #api_key: "id:api_key"
  username: "elastic"
  password: "changeme"
  ssl.verification_mode: "none"
#=========================== Filebeat inputs =============================
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

这里修改了 Filebeat 自带的默认日志模板和默认输出到 ES 的索引,并添加了一个 pipeline 用于对 Nginx 日志进行拆分处理(Filebeat默认将每行日志输出到message字段)。
修改默认索引的模板字段fields.yml,并将其导出录入到 ES 集群内作为记录日志索引的 template,具体做法可以参考官网:Load the Elasticsearch index template

3. ES

ES 侧需要配置好存放日志数据索引的模板、ILM策略(非必须)、以及用到的 pipeline,名称和上一步 Filebeat 配置中要对应。

  1. 模板设置:

日志索引模板
设置好别名、匹配的索引前缀、一些你想配置的 settings 以及字段结构:包括 Filebeat 自带的一些字段以及主要的日志字段message和我们将通过 pipeline 拆解message字段获取的一些将用于日志分析的字段。

  1. pipeline设置:

拆解message的pipeline
pipeline 主要作用是对message字段拆解:

- 通过`grok`正则匹配方式匹配到`message`内部的每个字段,并将其抽出;
- 通过`script`可以加一些对抽出字段的判断,将请求聚类分析。

这里可以任意处理数据,获取自己想要的分析内容,或者也可以引入Logstash对数据进行处理。

4. Kibana

经过以上三步,数据已经进入到 ES 集群内,通过 Kibana 可以对数据分析结果进行可视化展示,忽略一些 Filebeat 自带的字段,数据内容如下所示:
数据示例
我们可以对时间字段,某些 keyword 类字段进行聚合等统计数一些日志分析结果,并使用 dashboard 进行展示,部分示例如下:

  1. 统计请求的响应状态:

可视化示例

  1. 分类统计时间段的请求数量:

可视化示例

  1. 统计查询耗时的 pct (参考 jmeter 指标):

可视化示例

  1. 展示部分请求的部分字段(data table展示topN耗时等):

可视化示例

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
15天前
|
Java Maven Spring
超实用的SpringAOP实战之日志记录
【11月更文挑战第11天】本文介绍了如何使用 Spring AOP 实现日志记录功能。首先概述了日志记录的重要性及 Spring AOP 的优势,然后详细讲解了搭建 Spring AOP 环境、定义日志切面、优化日志内容和格式的方法,最后通过测试验证日志记录功能的准确性和完整性。通过这些步骤,可以有效提升系统的可维护性和可追踪性。
|
2月前
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
23 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
2月前
|
存储 监控 固态存储
如何监控和优化 WAL 日志文件的存储空间使用?
如何监控和优化 WAL 日志文件的存储空间使用?
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
3月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
327 0
|
3月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
128 0
|
4月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
51 0
|
4月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
58 0
|
23天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
170 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
253 3