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 的 name
和 key
的值是必需的。如果没有设置 name
或 key
,则会使用默认日志记录。
2.9.1. Kafka 组件和 Operator 的日志记录选项
有关为特定 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 资源定义根日志记录器。
流程
创建 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" # ...
在资源的
spec
中定义 外部日志记录,将logging.valueFrom.configMapKeyRef.name
设置为 ConfigMap 的名称,并将logging.valueFrom.configMapKeyRef.key
设置为此 ConfigMap 中的键。spec: # ... logging: type: external valueFrom: configMapKeyRef: name: logging-configmap key: log4j.properties
创建或更新资源。
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
您可以创建一个或多个过滤器。在这里,为两个 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
)。
流程
更新
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
如果您更新了 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 使用相同的方法。
流程
创建 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) # ...
在资源的
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
- 通过部署 Cluster Operator 来应用更改:
create -f install/cluster-operator -n my-cluster-operator-namespace