繁体   English   中英

使用 fluentbit 收集日志到 loki - 索引自定义标签

[英]Collecting logs with fluentbit to loki - Indexing custom labels

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

我有这种 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 中的CalculationPod ID 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

任何帮助将不胜感激。

我设法通过将它添加到正在引用 JSON 信息和 kubernetes 过滤器调用的 kubernetes 标签中来获取calculationId标签及其值。 你可以在这里看到更多关于这个

所以整个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 文档说

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

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


重要的

我在这里使用 loki 堆栈附带的 fluent-bit 收集器代理,这意味着这种安装方法 适时强调一下,这不是官方的fluent-bit收集器,官方的就是这个 现在有人要求弃用fluent-bit grafana loki 堆栈以支持官方堆栈,因此将适时强调这一点,并考虑使用官方堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM