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