Logstash 入门

编辑

本节将指导您完成安装 Logstash 并验证一切正常运行的过程。在学习如何存储您的第一个事件后,您将继续创建一个更高级的管道,该管道将 Apache Web 日志作为输入、解析日志,并将解析后的数据写入 Elasticsearch 集群。然后,您将学习如何将多个输入和输出插件拼接在一起,以统一来自各种不同来源的数据。

本节包括以下主题

Java (JVM) 版本

编辑

Logstash 需要以下版本之一

  • Java 11
  • Java 17(默认)。请查看 使用 JDK 17 以获取设置信息。

使用 官方 Oracle 发行版 或开源发行版,例如 OpenJDK。有关跨版本支持的官方版本,请参阅 Elastic 支持矩阵

捆绑的 JDK

Logstash 提供特定于架构的 下载,其中包括 Adoptium Eclipse Temurin 17,即 JDK 的最新长期支持 (LTS) 版本。

如果您想使用捆绑版本以外的 JDK,请使用 LS_JAVA_HOME 环境变量。如果设置了 LS_JAVA_HOME 环境变量以使用自定义 JDK,即使您升级后,Logstash 仍将继续使用您指定的 JDK 版本。

检查您的 Java 版本

编辑

运行以下命令

java -version

在安装了 Java 的系统上,此命令会产生类似于以下内容的输出

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

LS_JAVA_HOME

编辑

Logstash 包含一个捆绑的 JDK,该 JDK 已验证可与每个特定版本的 Logstash 一起使用,并且通常提供最佳的性能和可靠性。如果您需要使用捆绑版本以外的 JDK,请将 LS_JAVA_HOME 环境变量设置为要使用的版本。

在某些 Linux 系统上,您可能需要在安装 Logstash 之前导出 LS_JAVA_HOME 环境变量,尤其是在您从 tarball 安装 Java 的情况下。Logstash 在安装期间使用 Java 自动检测您的环境并安装正确的启动方法(SysV init 脚本、Upstart 或 systemd)。如果在软件包安装期间 Logstash 无法找到 LS_JAVA_HOME 环境变量,您可能会收到错误消息,并且 Logstash 将无法正常启动。

使用 JDK 17

编辑

Logstash 默认使用 JDK 17,但如果您是从 Logstash 7.11.x(或更早版本)升级到 7.12 或更高版本,则需要在 jvm.optionslog4j2.properties 中更新设置。

jvm.options 的更新
编辑

config/jvm.options 文件中,删除所有与 CMS 相关的标志

## GC configuration
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly

有关如何使用 jvm.options 的更多信息,请参阅 JVM 设置

log4j2.properties 的更新
编辑

config/log4j2.properties

  • 将以 appender.rolling.avoid_pipelined_filter.* 开头的属性替换为

    appender.rolling.avoid_pipelined_filter.type = PipelineRoutingFilter
  • 将以 appender.json_rolling.avoid_pipelined_filter.* 开头的属性替换为

    appender.json_rolling.avoid_pipelined_filter.type = PipelineRoutingFilter
  • 将以 appender.routing.* 开头的属性替换为

    appender.routing.type = PipelineRouting
    appender.routing.name = pipeline_routing_appender
    appender.routing.pipeline.type = RollingFile
    appender.routing.pipeline.name = appender-${ctx:pipeline.id}
    appender.routing.pipeline.fileName = ${sys:ls.logs}/pipeline_${ctx:pipeline.id}.log
    appender.routing.pipeline.filePattern = ${sys:ls.logs}/pipeline_${ctx:pipeline.id}.%i.log.gz
    appender.routing.pipeline.layout.type = PatternLayout
    appender.routing.pipeline.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%n
    appender.routing.pipeline.policy.type = SizeBasedTriggeringPolicy
    appender.routing.pipeline.policy.size = 100MB
    appender.routing.pipeline.strategy.type = DefaultRolloverStrategy
    appender.routing.pipeline.strategy.max = 30