优化集中式日志记录的方法:添加 Logstash 过滤器

简介: 优化集中式日志记录的方法:添加 Logstash 过滤器

介绍

Logstash 是一个强大的工具,用于集中和分析日志,可以帮助提供环境概览,并识别服务器的问题。增加 ELK Stack(Elasticsearch、Logstash 和 Kibana)设置的有效性之一是通过收集重要的应用程序日志,并通过使用过滤器对日志数据进行结构化,以便数据可以被轻松分析和查询。我们将围绕“grok”模式构建我们的过滤器,以将日志中的数据解析为有用的信息片段。

先决条件

要遵循本教程,您必须拥有一个正在接收来自 Filebeat 等发货人的日志的 Logstash 服务器。

ELK 服务器假设

  • Logstash 安装在 /opt/logstash
  • 您的 Logstash 配置文件位于 /etc/logstash/conf.d
  • 您有一个名为 02-beats-input.conf 的输入文件
  • 您有一个名为 30-elasticsearch-output.conf 的输出文件

您可能需要在 Logstash 服务器上运行以下命令来创建 patterns 目录:

sudo mkdir -p /opt/logstash/patterns
sudo chown logstash: /opt/logstash/patterns

客户端服务器假设

  • 您已经在每个应用程序服务器上配置了 Filebeat,将 syslog/auth.log 发送到您的 Logstash 服务器(如先决条件教程中的“设置 Filebeat”部分)

如果您的设置不同,请简单地调整本指南以匹配您的环境。

关于 Grok

Grok 通过使用正则表达式解析文本模式,并将其分配给标识符来工作。

Grok 模式的语法是 %{PATTERN:IDENTIFIER}。Logstash 过滤器包括一系列 grok 模式,这些模式匹配并将日志消息的各个部分分配给各个标识符,这就是日志的结构化方式。

要了解更多关于 grok 的信息,请访问 Logstash grok 页面和 Logstash 默认模式列表。

如何使用本指南

本文后续的每个主要部分都将包括必要的附加配置细节,以便为给定应用程序收集和过滤日志。对于要记录和过滤的每个应用程序,您都需要在客户端服务器(Filebeat)和 Logstash 服务器上进行一些配置更改。

Logstash 模式子部分

如果有 Logstash 模式子部分,它将包含可以添加到 Logstash 服务器上 /opt/logstash/patterns 中的新文件中的 grok 模式。这将允许您在 Logstash 过滤器中使用新模式。

Logstash 过滤器子部分

Logstash 过滤器子部分将包括一个过滤器,可以添加到 Logstash 服务器上 /etc/logstash/conf.d 中的新文件中,位于输入和输出配置文件之间。该过滤器确定 Logstash 服务器如何解析相关的日志文件。记得在添加新过滤器后重新启动 Logstash 服务,以加载您的更改。

Filebeat Prospector 子部分

Filebeat Prospector 用于指定要发送到 Logstash 的日志。应在 /etc/filebeat/filebeat.yml 文件中的 prospectors 部分的现有 prospector 之后直接添加额外的 prospector 配置:

filebeat:
  # List of prospectors to fetch data.
  prospectors:
    -
      - /var/log/secure
      - /var/log/messages
      document_type: syslog
    -
      paths:
        - /var/log/app/*.log
      document_type: app-access
...

在上面的示例中,红色突出显示的行表示一个 Prospector,它将 /var/log/app/ 中的所有 .log 文件以 app-access 类型发送到 Logstash。在进行任何更改后,必须重新加载 Filebeat 以使任何更改生效。

现在您知道如何使用本指南,接下来的部分将向您展示如何收集和过滤应用程序日志!

应用程序:Nginx

Logstash 模式:Nginx

Nginx 日志模式未包含在 Logstash 的默认模式中,因此我们将手动添加 Nginx 模式。

在您的 ELK 服务器 上,创建一个名为 nginx 的新模式文件:

sudo vi /opt/logstash/patterns/nginx

然后插入以下行:

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

保存并退出。NGINXACCESS 模式解析并将数据分配给各种标识符(例如 clientipidentauth 等)。

接下来,更改模式文件的所有权为 logstash

sudo chown logstash: /opt/logstash/patterns/nginx

Logstash 过滤器:Nginx

在您的 ELK 服务器 上,创建一个名为 11-nginx-filter.conf 的新过滤器配置文件:

sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

然后添加以下过滤器:

filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
  }
}

保存并退出。请注意,此过滤器将尝试使用上面定义的 NGINXACCESS 模式匹配 nginx-access 类型的消息。

现在重新启动 Logstash 以重新加载配置:

sudo service logstash restart

Filebeat Prospector:Nginx

在您的 Nginx 服务器 上,打开 filebeat.yml 配置文件进行编辑:

sudo vi /etc/filebeat/filebeat.yml

filebeat 部分添加以下 Prospector,将 Nginx 访问日志作为 nginx-access 类型发送到您的 Logstash 服务器:

-
      paths:
        - /var/log/nginx/access.log
      document_type: nginx-access

保存并退出。重新加载 Filebeat 以使更改生效:

sudo service filebeat restart

现在您的 Nginx 日志将被收集和过滤!

应用程序:Apache HTTP Web 服务器

Apache 的日志模式已包含在默认的 Logstash 模式中,因此设置其过滤器相当容易。

Logstash 过滤器:Apache

在您的 ELK 服务器 上,创建一个名为 12-apache.conf 的新过滤器配置文件:

sudo vi /etc/logstash/conf.d/12-apache.conf

然后添加以下过滤器:

filter {
  if [type] == "apache-access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}

保存并退出。请注意,此过滤器将尝试使用默认的 Logstash 模式之一 COMBINEDAPACHELOG 匹配 apache-access 类型的消息。

现在重新启动 Logstash 以重新加载配置:

sudo service logstash restart

Filebeat Prospector:Apache

在您的 Apache 服务器 上,打开 filebeat.yml 配置文件进行编辑:

sudo vi /etc/filebeat/filebeat.yml

filebeat 部分添加以下 Prospector,将 Apache 日志作为 apache-access 类型发送到您的 Logstash 服务器:

-
      paths:
        - /var/log/apache2/access.log
      document_type: apache-access

保存并退出。重新加载 Filebeat 以使更改生效:

sudo service filebeat restart

现在您的 Apache 日志将被收集和过滤!

结论

几乎可以收集和解析任何类型的日志。尝试编写自己的过滤器和模式来处理其他日志文件。

欢迎在评论中提出您希望看到的过滤器,或者提供您自己的模式!

如果您不熟悉如何使用 Kibana,请查看本教程:如何使用 Kibana 可视化和仪表板。


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
4月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
314 6
|
5月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
172 4
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
977 5
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
994 54
|
7月前
|
Prometheus 监控 Cloud Native
使用docker-compose管理多服务项目:日志监控方法指南
通过上述步骤,可以建立有效的日志监控系统,这不仅有助于问题的迅速定位和解决,而且对于分析系统性能、用户行为模式等都是一个宝贵的资源。只要正确配置和维护,Docker Compose管理的多服务项目可以高效地进行日志监控与分析。
324 0
|
10月前
|
存储 Windows
【Azure Cloud Service】微软云服务上的日志收集方法
本文介绍了在使用微软云服务(Cloud Service Extended Support)时,如何收集日志以分析未记录在应用日志中的服务异常。由于云服务基于传统虚拟机模式,需通过远程桌面登录实例,查看IIS、Windows Event及云服务组件日志(如WindowsAzureGuestAgent)。此外,可使用CollectGuestLogs.exe工具打包日志,或通过“File Server Resource Manager”检查日志存储配额是否不足。附参考文档链接供深入学习。
335 29
|
10月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
10月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
277 0
优化 Apache 日志记录的 5 个最佳实践
|
关系型数据库 MySQL
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
297 3
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
552 5