2.9. 日志记录配置


在 Kafka 组件和 AMQ Streams Operator 的自定义资源中配置日志记录级别。您可以在自定义资源的 spec.logging 属性中直接指定日志级别。或者,您可以使用 configMapKeyRef 属性在自定义资源中引用的 ConfigMap 中定义日志属性。

使用 ConfigMap 的优点是日志记录属性在一个位置维护,可以被多个资源访问。您还可以为多个资源重复使用 ConfigMap。如果您使用 ConfigMap 为 AMQ Streams Operator 指定日志记录器,您也可以附加日志规格来添加过滤器。

您可以在日志规格中指定 日志类型

  • 直接指定日志记录级别时 内联
  • 引用 ConfigMap 时的外部

内联 日志记录配置示例

spec:
  # ...
  logging:
    type: inline
    loggers:
      kafka.root.logger.level: "INFO"

外部日志记录 配置示例

spec:
  # ...
  logging:
    type: external
    valueFrom:
      configMapKeyRef:
        name: my-config-map
        key: my-config-map-key

ConfigMap 的 namekey 的值是必需的。如果没有设置 namekey,则会使用默认日志记录。

2.9.1. Kafka 组件和 Operator 的日志记录选项

有关为特定 Kafka 组件或 Operator 配置日志记录的更多信息,请参阅以下部分。

2.9.2. 为日志记录创建 ConfigMap

要使用 ConfigMap 定义日志记录属性,您可以创建 ConfigMap,然后将其引用为资源 spec 中的日志记录定义的一部分。

ConfigMap 必须包含适当的日志记录配置。

  • Kafka 组件、zookeeper 和 Kafka Bridge 的 log4j.properties
  • Topic Operator 和 User Operator 的 log4j2.properties

配置必须放在这些属性下。

在此流程中,ConfigMap 为 Kafka 资源定义根日志记录器。

流程

  1. 创建 ConfigMap。

    您可以将 ConfigMap 创建为 YAML 文件或从属性文件创建。

    带有 Kafka 根日志记录器定义的 ConfigMap 示例:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: logging-configmap
    data:
      log4j.properties:
        kafka.root.logger.level="INFO"

    如果您使用属性文件,请在命令行中指定该文件:

    oc create configmap logging-configmap --from-file=log4j.properties

    属性文件定义日志配置:

    # Define the logger
    kafka.root.logger.level="INFO"
    # ...
  2. 在资源的 spec 中定义 外部日志记录,将 logging.valueFrom.configMapKeyRef.name 设置为 ConfigMap 的名称,并将 logging.valueFrom.configMapKeyRef.key 设置为此 ConfigMap 中的键。

    spec:
      # ...
      logging:
        type: external
        valueFrom:
          configMapKeyRef:
            name: logging-configmap
            key: log4j.properties
  3. 创建或更新资源。

    oc apply -f <kafka_configuration_file>

2.9.3. 在 Operator 中添加日志记录过滤器

如果您使用 ConfigMap 为 AMQ Streams Operator 配置(log4j2)日志级别,您还可以定义日志过滤器来限制日志中返回的内容。

当您有大量日志记录消息时,日志记录过滤器很有用。假设您将日志记录器的日志级别设置为 DEBUG (rootLogger.level="DEBUG")。日志记录过滤器减少了该级别上为日志记录器返回的日志数量,以便您可以专注于特定资源。当设置过滤器时,只会记录与过滤器匹配的日志消息。

过滤器使用 标记来指定 日志中包含的内容。您可以为标记指定一个 kind、namespace 和 name。例如,如果 Kafka 集群失败,您可以通过将 kind 指定为 Kafka 来隔离日志,并使用故障集群的命名空间和名称。

本例显示了名为 my-kafka-cluster 的 Kafka 集群的标记过滤器。

基本日志记录过滤器配置

rootLogger.level="INFO"
appender.console.filter.filter1.type=MarkerFilter 1
appender.console.filter.filter1.onMatch=ACCEPT 2
appender.console.filter.filter1.onMismatch=DENY 3
appender.console.filter.filter1.marker=Kafka(my-namespace/my-kafka-cluster) 4

1
MarkerFilter 类型比较指定的标记用于过滤。
2
如果标记匹配,则 onMatch 属性接受日志。
3
如果标记不匹配,则 onMismatch 属性会拒绝日志。
4
用于过滤的标记采用 KIND (NAMESPACE/NAME-OF-RESOURCE) 格式。

您可以创建一个或多个过滤器。在这里,为两个 Kafka 集群过滤日志。

多个日志记录过滤器配置

appender.console.filter.filter1.type=MarkerFilter
appender.console.filter.filter1.onMatch=ACCEPT
appender.console.filter.filter1.onMismatch=DENY
appender.console.filter.filter1.marker=Kafka(my-namespace/my-kafka-cluster-1)
appender.console.filter.filter2.type=MarkerFilter
appender.console.filter.filter2.onMatch=ACCEPT
appender.console.filter.filter2.onMismatch=DENY
appender.console.filter.filter2.marker=Kafka(my-namespace/my-kafka-cluster-2)

在 Cluster Operator 中添加过滤器

要向 Cluster Operator 添加过滤器,请更新其日志记录 ConfigMap YAML 文件(install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml)。

流程

  1. 更新 050-ConfigMap-strimzi-cluster-operator.yaml 文件,将过滤器属性添加到 ConfigMap 中。

    在本例中,过滤器属性只返回 my-kafka-cluster Kafka 集群的日志:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: strimzi-cluster-operator
    data:
      log4j2.properties:
        #...
        appender.console.filter.filter1.type=MarkerFilter
        appender.console.filter.filter1.onMatch=ACCEPT
        appender.console.filter.filter1.onMismatch=DENY
        appender.console.filter.filter1.marker=Kafka(my-namespace/my-kafka-cluster)

    或者,直接编辑 ConfigMap

    oc edit configmap strimzi-cluster-operator
  2. 如果您更新了 YAML 文件而不是直接编辑 ConfigMap,请通过部署 ConfigMap 来应用更改:

    oc create -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml

在 Topic Operator 或 User Operator 中添加过滤器

要将过滤器添加到 Topic Operator 或 User Operator,请创建或编辑日志记录 ConfigMap。

在此过程中,使用 Topic Operator 的过滤器创建日志 ConfigMap。用户 Operator 使用相同的方法。

流程

  1. 创建 ConfigMap。

    您可以将 ConfigMap 创建为 YAML 文件或从属性文件创建。

    在本例中,过滤器属性只返回 my-topic 主题的日志:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: logging-configmap
    data:
      log4j2.properties:
        rootLogger.level="INFO"
        appender.console.filter.filter1.type=MarkerFilter
        appender.console.filter.filter1.onMatch=ACCEPT
        appender.console.filter.filter1.onMismatch=DENY
        appender.console.filter.filter1.marker=KafkaTopic(my-namespace/my-topic)

    如果您使用属性文件,请在命令行中指定该文件:

    oc create configmap logging-configmap --from-file=log4j2.properties

    属性文件定义日志配置:

    # Define the logger
    rootLogger.level="INFO"
    # Set the filters
    appender.console.filter.filter1.type=MarkerFilter
    appender.console.filter.filter1.onMatch=ACCEPT
    appender.console.filter.filter1.onMismatch=DENY
    appender.console.filter.filter1.marker=KafkaTopic(my-namespace/my-topic)
    # ...
  2. 在资源的 spec 中定义 外部日志记录,将 logging.valueFrom.configMapKeyRef.name 设置为 ConfigMap 的名称,并将 logging.valueFrom.configMapKeyRef.key 设置为此 ConfigMap 中的键。

    对于主题 Operator,日志记录在 Kafka 资源的 topicOperator 配置中指定。

    spec:
      # ...
      entityOperator:
        topicOperator:
          logging:
            type: external
            valueFrom:
              configMapKeyRef:
                name: logging-configmap
                key: log4j2.properties
  3. 通过部署 Cluster Operator 来应用更改:
create -f install/cluster-operator -n my-cluster-operator-namespace
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.