7.14. 从特定 pod 转发应用程序日志

作为集群管理员,您可以使用 Kubernetes pod 标签从特定 pod 收集日志数据并将其转发到日志收集器。

假设您的应用由容器集组成,并与不同命名空间中的其他容器集一起运行。如果这些 pod 具有标识应用程序标签,您可以收集和输出其日志数据到特定的日志收集器。

要指定 pod 标签,请使用一个或多个 matchLabels 键值对。如果指定了多个键值对,pod 必须与要选择的所有值匹配。

流程

  1. 创建或编辑定义 ClusterLogForwarder CR 对象的 YAML 文件。在文件中,使用 inputs[].name.application.selector.matchLabels 下的简单基于平等的选择器来指定 pod 标签,如下例所示。

    ClusterLogForwarder CR YAML 文件示例

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      pipelines:
        - inputRefs: [ myAppLogData ] 3
          outputRefs: [ default ] 4
          parse: json 5
      inputs: 6
        - name: myAppLogData
          application:
            selector:
              matchLabels: 7
                environment: production
                app: nginx
            namespaces: 8
            - app1
            - app2
      outputs: 9
        - default
        ...

    1
    ClusterLogForwarder CR 的名称必须是 instance
    2
    ClusterLogForwarder CR 的命名空间必须是 openshift-logging
    3
    指定来自 inputs[].name 的一个或多个以逗号分隔的值。
    4
    指定来自 outputs[] 的一个或多个以逗号分隔的值。
    5
    可选:指定是否转发结构化 JSON 日志条目作为 structured 项中的 JSON 对象。日志条目必须包含有效的结构化 JSON;否则,OpenShift Logging 会删除 structured 字段,并将日志条目发送到默认索引 app-00000x
    6
    为具有一组唯一 pod 标签的每个应用程序定义唯一的 inputs[].name
    7
    指定您要收集的日志数据的 pod 标签的键值对。您必须指定一个键和值,而不仅仅是一个键。要被选择,pod 必须与所有键值对匹配。
    8
    可选:指定一个或多个命名空间。
    9
    指定要将日志数据转发到的一个或多个输出。此处显示的可选默认输出将日志数据发送到内部 Elasticsearch 实例。
  2. 可选: 要将日志数据收集限制为特定的命名空间,请使用 inputs[].name.application.namespaces,如上例中所示。
  3. 可选: 您可以从具有不同 pod 标签的额外应用程序向同一管道发送日志数据。

    1. 对于 pod 标签的每个唯一组合,创建一个类似于显示的 inputs[].name 部分。
    2. 更新选择器(selectors)以匹配此应用的容器集标签。
    3. 将新的 inputs[].name 值添加到 inputRefs。例如:

      - inputRefs: [ myAppLogData, myOtherAppLogData ]
  4. 创建 CR 对象。

    $ oc create -f <file-name>.yaml

其他资源