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

简介: 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耗时等):

可视化示例

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
1086 122
基于docker搭建监控系统&日志收集
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
1108 1
日志收集和Spring 微服务监控的最佳实践
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
1233 90
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
304 4
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
1079 90
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
834 51
|
运维 安全 数据可视化
日志审查安排工具实战攻略:中小团队如何通过日志审查安排工具建立可控、安全的审查机制?
在审计敏感时代,日志审查安排工具成为安全运维与合规管理的关键利器。它实现审查任务的流程化、周期化与可视化,支持多系统协作、责任到人,确保“可控、可查、可追”的日志治理。工具如板栗看板、Asana、Monday 等提供任务调度、问题闭环与合规对接能力,助力企业构建高效、透明的日志审查体系,提升安全与合规水平。
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
818 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
455 3

热门文章

最新文章