【问题标题】:Collecting logs with fluentbit to loki - Indexing custom labels使用 fluentbit 收集日志到 loki - 索引自定义标签
【发布时间】:2021-11-10 12:31:08
【问题描述】:

我想和你一起检查以下内容:

我有这种 YAML 清单,它是一个在我的应用发生事件时触发的 pod:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2021-11-10T12:13:46Z"
  generateName: job-1bb229b1-aa15-4349-b676-ad9cf840b44a-
  labels:
    app: CalculationPod
    calculationId: "1467"
    controller-uid: 75d707d6-aab6-446d-9726-7ffafde29191
    job-name: job-1bb229b1-aa15-4349-b676-ad9cf840b44a
  name: job-1bb229b1-aa15-4349-b676-ad9cf840b44a-h4pj

我正在使用 fluent-bit(来自 Loki 堆栈)在我的 k8s 集群中收集日志。 实际上,我想索引我在 pod 中的 calculationId: "1467" 标签,使其出现在 grafana-Loki 中,例如 app: CalculationPod 现在在图片中:

这是我在 fluetbit configmap 端输出的 Loki 插件配置:

我正在尝试以这种方式获取calculationId 标签的值并将其作为参数传递给Labels 参数处的标签集:

[Output] 
        Name grafana-loki
        Match *
        Url http://loki:3100/loki/api/v1/push
        TenantID ""
        BatchWait 1
        BatchSize 1048576
        Labels {job="fluent-bit",calculationId="$calculationId"} # SEE HERE
        RemoveKeys kubernetes,stream
        AutoKubernetesLabels false
        LabelMapPath /fluent-bit/etc/labelmap.json
        LineFormat json
        LogLevel warn

但我看不到我的 Loki UI 没有任何变化。 我不确定这是否是添加要索引的新标签的正确方法我正在检查这个https://docs.fluentbit.io/manual/pipeline/outputs/loki#labels

任何帮助将不胜感激。

【问题讨论】:

    标签: logging fluent-bit grafana-loki


    【解决方案1】:

    我设法通过将calculationId 标签和它的值添加到 kubernetes 标签中,JSON 信息被引用并且 kubernetes 过滤器调用。你可以看到更多关于这个here

    所以整个configmap/loki-fluent-bit-loki的配置文件是这样的:

    apiVersion: v1
    data:
      fluent-bit.conf: |-
        [SERVICE]
            HTTP_Server    On
            HTTP_Listen    0.0.0.0
            HTTP_PORT      2020
            Flush          1
            Daemon         Off
            Log_Level      warn
            Parsers_File   parsers.conf
        [INPUT]
            Name           tail
            Tag            kube.*
            Path           /var/log/containers/*.log
            Parser         docker
            DB             /run/fluent-bit/flb_kube.db
            Mem_Buf_Limit  1000MB
        [FILTER]
            Name           kubernetes
            Match          kube.*
            Kube_URL       https://kubernetes.default.svc:443
            Merge_Log On
            K8S-Logging.Exclude Off
            K8S-Logging.Parser Off
        [Output]
            Name grafana-loki
            Match *
            Url http://loki:3100/loki/api/v1/push
            TenantID ""
            BatchWait 1
            BatchSize 1048576
            Labels {job="fluent-bit"}
            RemoveKeys kubernetes,stream
            AutoKubernetesLabels false
            LabelMapPath /fluent-bit/etc/labelmap.json
            LineFormat json
            LogLevel warn
      labelmap.json: |-
        {
          "kubernetes": {
            "container_name": "container",
            "host": "node",
            "labels": {
              "app": "app",
              "release": "release",
              "calculationId": "calculationId" # IT WAS ADDED HERE
            },
           "namespace_name": "namespace",
           "pod_name": "instance"
          },
          "stream": "stream"
        }
      parsers.conf: |-
        [PARSER]
            Name        docker
            Format      json
            Time_Key    time
            Time_Format %Y-%m-%dT%H:%M:%S.%L 
    kind: ConfigMap
    metadata:
      annotations:
        meta.helm.sh/release-name: loki
        meta.helm.sh/release-namespace: monitoring
      creationTimestamp: "2021-10-26T10:23:32Z"
      labels:
        app: fluent-bit-loki
        app.kubernetes.io/managed-by: Helm
        chart: fluent-bit-2.3.0
        heritage: Helm
        release: loki
      name: loki-fluent-bit-loki
      namespace: monitoring  
    

    然后我现在得到了 calculationId 标签索引:

    我没有尝试,但是根据 loki fluentbit 输出插件的工作方式,LabelKeys 参数还允许我添加一个自定义标签,如我的calculationId 并让它使用它来获取它的日志流

    grafana loki documentation says:

    LabelKeys:逗号分隔的键列表,用作流标签。所有其他键将被放置到日志行中。使用 LabelMapPath 标签映射配置时,LabelKeys 被停用。

    所以据此,LabelKeys 应该也可以工作,然后如果我使用它,我不需要使用LabelMapPath 参数在 json 中引用所需的标签。


    重要

    我在这里使用的是 loki 堆栈附带的 fluent-bit 收集器代理,它的意思是this installation approach。有必要强调一下,这不是官方的fluent-bit收集器,官方是this。现在there is a request to deprecatefluent-bit grafana loki stack 支持官方的,所以有机会强调一下,并考虑使用官方的。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 2020-07-29
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多