9.16. 配置日志记录级别


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

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

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

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

内联 日志记录配置示例

# ...
logging:
  type: inline
  loggers:
    kafka.root.logger.level: INFO
# ...
Copy to Clipboard Toggle word wrap

外部日志记录 配置示例

# ...
logging:
  type: external
  valueFrom:
    configMapKeyRef:
      name: my-config-map
      key: my-config-map-key
# ...
Copy to Clipboard Toggle word wrap

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

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

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

9.16.2. 为日志创建 ConfigMap

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

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

  • Kafka 组件、ZooZ 和 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"
    Copy to Clipboard Toggle word wrap

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

    oc create configmap logging-configmap --from-file=log4j.properties
    Copy to Clipboard Toggle word wrap

    属性文件定义日志配置:

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

    # ...
    logging:
      type: external
      valueFrom:
        configMapKeyRef:
          name: logging-configmap
          key: log4j.properties
    # ...
    Copy to Clipboard Toggle word wrap
  3. 创建或更新资源。

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap

9.16.3. 配置 Cluster Operator 日志

Cluster Operator 日志记录通过名为 strimzi-cluster-operatorConfigMap 配置。安装 Cluster Operator 时会创建一个包含日志记录配置的 ConfigMap。这个 ConfigMap 在文件 install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml 中描述。您可以通过更改此 ConfigMap 中的 data.log4j2.properties 值来配置 Cluster Operator 日志记录。

要更新日志记录配置,您可以编辑 050-ConfigMap-strimzi-cluster-operator.yaml 文件,然后运行以下命令:

oc create -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
Copy to Clipboard Toggle word wrap

或者,直接编辑 ConfigMap

oc edit configmap strimzi-cluster-operator
Copy to Clipboard Toggle word wrap

使用这个 ConfigMap,您可以控制日志记录的各个方面,包括根日志记录器级别、日志输出格式和不同组件的日志级别。monitorInterval 设置决定了日志记录配置重新加载的频率。您还可以控制 Kafka AdminClientZooKTrustManager、Netty 和 OkHttp 客户端的日志级别。Netnetty 是 Apache Kafka 用于网络通信的框架,而 OkHttp 是用于发出 HTTP 请求的库。

如果部署 Cluster Operator 时缺少 ConfigMap,则使用默认的日志记录值。

如果在部署 Cluster Operator 后 ConfigMap 意外删除,则会使用最近载入的日志配置。创建新的 ConfigMap 以加载新的日志记录配置。

注意

不要从 ConfigMap 中删除 monitorInterval 选项。

如果您使用 ConfigMap 为 Apache Kafka 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
Copy to Clipboard Toggle word wrap

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)
Copy to Clipboard Toggle word wrap

在 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)
    Copy to Clipboard Toggle word wrap

    或者,直接编辑 ConfigMap

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

    oc create -f install/cluster-operator/050-ConfigMap-strimzi-cluster-operator.yaml
    Copy to Clipboard Toggle word wrap

在主题 Operator 或 User Operator 中添加过滤器

要在主题 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)
    Copy to Clipboard Toggle word wrap

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

    oc create configmap logging-configmap --from-file=log4j2.properties
    Copy to Clipboard Toggle word wrap

    属性文件定义日志配置:

    # 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)
    # ...
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
  3. 通过部署 Cluster Operator 来应用更改:
create -f install/cluster-operator -n my-cluster-operator-namespace
Copy to Clipboard Toggle word wrap

9.16.5. 集群操作的锁定获取警告

Cluster Operator 通过使用锁定确保每个集群只运行一个操作。如果另一个操作试图在锁被保存时启动,它会等待当前操作完成。

集群创建、滚动更新、缩减和扩展等操作由 Cluster Operator 管理。

如果获取锁定的时间超过配置的超时时间(STRIMZI_OPERATION_TIMEOUT_MS),则会记录 DEBUG 信息:

锁定获取的 DEBUG 消息示例

DEBUG AbstractOperator:406 - Reconciliation #55(timer) Kafka(myproject/my-cluster): Failed to acquire lock lock::myproject::Kafka::my-cluster within 10000ms.
Copy to Clipboard Toggle word wrap

下一次定期协调期间将重试超时操作,间隔由 STRIMZI_FULL_RECONCILIATION_INTERVAL_MS (默认为 120 秒)定义。

如果 INFO 信息继续显示相同的协调号,这可能表示锁定发行错误:

协调的 INFO 消息示例

INFO  AbstractOperator:399 - Reconciliation #1(watch) Kafka(myproject/my-cluster): Reconciliation is in progress
Copy to Clipboard Toggle word wrap

重启 Cluster Operator 可能会解决这个问题。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat