标签: fluent-bit

Fluentbit Kubernetes - 如何从现有日志中提取字段

我已经在我的 Kubernetes 集群上使用 Fluent-bit 配置了 EFK 堆栈。我可以在 Kibana 中看到日志。

我也部署了 nginx pod,我也可以在 Kibana 中看到这个 nginx pod 的日志。但是所有日志数据都发送到单个字段“日志”,如下所示。

在此处输入图片说明

如何将每个字段提取到一个单独的字段中。在这个问题中已经有一个针对 fluentd 的解决方案。Kibana - 如何从现有 Kubernetes 日志中提取字段

但是我怎样才能用 fluent-bit 达到同样的效果呢?

我已经通过在 Kubernetes 的默认 FILTER 部分下再添加一个 FILTER 部分来尝试以下方法,但没有奏效。

[FILTER]
    Name                parser
    Match               kube.*
    Key_name            log
    Parser              nginx
Run Code Online (Sandbox Code Playgroud)

从这个(https://github.com/fluent/fluent-bit/issues/723),我可以看到 fluent-bit 没有 grok 支持。

elasticsearch kibana kubernetes fluent-bit

5
推荐指数
1
解决办法
5303
查看次数

Elasticsearch 动态字段映射和 JSON 点表示法

我正在尝试将日志从 Kubernetes 集群写入 Elasticsearch 索引。Fluent-bit 用于读取标准输出,并使用包括 Pod 标签在内的元数据来丰富日志。一个简化的日志对象示例是

{
  "log": "This is a log message.",
  "kubernetes": {
    "labels": {
      "app": "application-1"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是部署到集群的一些其他应用程序具有以下格式的标签:

{
  "log": "This is another log message.",
  "kubernetes": {
    "labels": {
      "app.kubernetes.io/name": "application-2"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这些应用程序是通过 Helm 图表安装的,较新的应用程序遵循此处列出的标签和选择器约定。标签和选择器的命名约定于 2018 年 12 月更新,请参见此处,但并非所有图表都已更新以反映这一点。

最终结果是,根据哪种类型的标签格式首先将其纳入弹性索引,尝试发送其他类型将引发映射异常。如果我创建一个新的空索引并首先发送命名空间标签,则尝试记录简单app标签将引发此异常:

object mapping for [kubernetes.labels.app] tried to parse field [kubernetes.labels.app] as object, but found a concrete value
Run Code Online (Sandbox Code Playgroud)

相反的情况,第二个发布命名空​​间标签,会导致此异常:

Could not dynamically add mapping for field [kubernetes.labels.app.kubernetes.io/name]. …
Run Code Online (Sandbox Code Playgroud)

elasticsearch logstash kubernetes kubernetes-helm fluent-bit

5
推荐指数
1
解决办法
6698
查看次数

Fluentbit 将 java stacktrace 日志的每一行报告为新日志事件

任何帮助是极大的赞赏。

我在 kubernetes 上运行 fluidd。我有来自java应用程序的日志。堆栈跟踪是多行的,问题是多行日志的每一行都被报告为新的日志事件。

下面是我的配置。有人可以建议配置有什么问题吗?另外,我使用containerd而不是docker来运行容器。

input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On
        Refresh_Interval  10
        Multiline         On
        Parser_Firstline  multiline
        Parser_1          cri

  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://k3s-master.test.com:6443
        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix     kube.var.log.containers.
        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off
    [FILTER]
        Name      parser
        Match     kube.*
        Key_Name  log
        Parser    cri
        Reserve_Data On
    [FILTER]
        Name      parser
        Match     kube.*
        Key_Name  message
        Parser    json
        Reserve_Data On
        Preserve_Key On

  output-elasticsearch.conf: |
    [OUTPUT]
        Name            es
        Match           *
        Host …
Run Code Online (Sandbox Code Playgroud)

java parsing multiline kubernetes fluent-bit

5
推荐指数
1
解决办法
6668
查看次数

如何将 Fargate EKS Fluent Bit Logs 从不同服务发送到单独的 Cloudwatch 组?

我已按照本指南在我的 EKS 集群上配置 Fluent Bit 和 Cloudwatch,但目前所有日志都转到一个日志组。我尝试遵循一个单独的教程,该教程使用 Fluent Bit 的 kubernetes 插件在到达 [OUTPUT] 配置之前标记服务。这导致了问题,因为 Fargate EKS 目前不按照本文档底部处理 Fluent Bit [INPUT] 配置。

以前有人遇到过这种情况吗?我想将日志分成单独的服务。

这是我当前的 YAML 文件。我添加了解析器和过滤器,以查看是否可以获得任何其他信息以在 Cloudwatch 上使用。

kind: Namespace
apiVersion: v1
metadata:
  name: aws-observability
  labels:
    aws-observability: enabled
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: aws-logging
  namespace: aws-observability
data:
  parsers.conf: |
    [PARSER]
        Name docker
        Format json
        Time_Key time
        Time_Format %Y-%m-%dT%H:%M:%S.%L
        Time_Keep On
        
  filters.conf: |
    [FILTER]
        Name kubernetes
        Match kube.*
        Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
        # Kube_Tag_Prefix kube.var.log.containers.
        Kube_URL …
Run Code Online (Sandbox Code Playgroud)

amazon-cloudwatch kubernetes aws-fargate amazon-eks fluent-bit

5
推荐指数
1
解决办法
2489
查看次数

Fluent Bit 1.8+ 和 MULTILINE_PARSER

我的目标是从 Bare Kubernetes 上运行的 Java (Spring Boot) 应用程序收集日志。然后这些日志会被翻译成 ES 并在 Kibana 中可视化。

为此,我通过 Kubernetes 1.22 部署了 Fleunt Bit 1.8.9。由于我使用 Containerd 代替 Docker,所以我的 Fluent Bit 配置如下(请注意,我只指定了一个日志文件):

  fluent-bit.conf: |
    [SERVICE]
        Flush         1
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE output-elasticsearch.conf

  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log
        Read_from_head    true
        Parser            cri

  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix     kube.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed …
Run Code Online (Sandbox Code Playgroud)

fluentd efk fluent-bit

5
推荐指数
1
解决办法
6578
查看次数

Fluentbit 嵌套 json 解析

我有以下日志


{
  "log": {
    "header": {
      "key": "value",
      "nested": "{\"key1\":\"value\",\"key2\":\"value\"}",
      "dateTime": "2019-05-08T20:58:06+00:00"
    },
    "body": {
      "path": "/request/path/",
      "method": "POST",
      "ua": "curl/7.54.0",
      "resp": 200
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Fluentbit 聚合日志,并且希望整个记录为 JSON。具体问题是“log.header.nested”字段,它是一个 JSON 字符串。如何解析该字符串并将其替换为其内容?

我尝试使用Fluentbit的解析器过滤器。但我有一个问题,key_name它不能很好地处理嵌套的 json 值。我尝试使用非嵌套字段在本地测试它,并且以下配置有效:

[INPUT]
    name             tail
    path             nst.log
    read_from_head   true
    Parser           json
[FILTER]
    name          parser
    Match         *
    Parser        json
    key_name      log
    Reserve_Data  On

[FILTER]
    name          parser
    Match         *
    Parser        json
    key_name      nested
    Reserve_Data  On

[OUTPUT]
    name             stdout
    match            *
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用此过滤器来过滤嵌套值时:

[FILTER]
    name          parser
    Match         * …
Run Code Online (Sandbox Code Playgroud)

parsing json fluent-bit

5
推荐指数
1
解决办法
6697
查看次数

更新:流畅地将 JSON 日志解析为文本

我正在使用 fluidd 将日志发送到 ES。应用程序日志采用 JSON 格式。这是其中之一

{"@timestamp":"2022-05-06T06:02:10.669Z", "log.level": "INFO", "message":"INFO Health check ok", "ecs.version": "1.2.0","service.name":"spring-boot-application","event.dataset":"spring-boot-application","process.thread.name":"http-nio-9001-exec-7","log.logger":"com.app.designer.rules.controller.RulesController","transaction.id":"15e36b5ef6cc69dd","trace.id":"fd275718e25c061d309954773985b101"}
Run Code Online (Sandbox Code Playgroud)

在 Kibana 中,我可以看到日志 在此输入图像描述

JSON日志是一个key的值log。但是,我们需要 JSON 日志键值,正如Field and Value 请建议的那样。流畅的位配置图是:

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-designer
data:
  fluent-bit-service.conf: |
    [SERVICE]
        Flush        1
        Daemon       Off
        Log_Level    error
        Parsers_File parsers.conf

  fluent-bit-input.conf: |
    [INPUT]
        Name              tail
        Path              /app/logs/designer-logs.log.json
        Multiline         On
        Parser_Firstline  multiline_pattern
        Refresh_Interval  5
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On
        Path_key          FileName

  fluent-bit-filter.conf: |
    [FILTER]
        Name    modify
        Match   *
        Add     PodName ${POD_NAME}
        Add     Namespace ${NAMESPACE_NAME}

  fluent-bit-output.conf: | …
Run Code Online (Sandbox Code Playgroud)

json elasticsearch kibana fluent-bit

5
推荐指数
1
解决办法
6219
查看次数

fluent-bit 如何向发送到 splunk 的每个事件消息添加自定义元数据

我在 Kubernetes 中使用 fluent-bit 将日志转发到 Splunk。我们将为多个 Kubernetes 集群使用相同的 Splunk 索引,所以我想用它来自的集群标记从 fluent-bit 转发的每个事件。

我尝试使用修改功能在事件中“添加”或“设置”一个新字段。

fluent-bit-filter.conf: |-
   [FILTER]
       Name                kubernetes
       Match               kube.*
       Kube_Tag_Prefix     kube.var.log.containers.
       Kube_URL            https://kubernetes.default.svc:443
       Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
       Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
       K8S-Logging.Parser  On
       K8S-Logging.Exclude On
       Add cluster devcluster
Run Code Online (Sandbox Code Playgroud)

我实际收到的示例日志(缺少新添加的字段“集群”)

[305] kube.var.log.containers.calico-node-xzwnv_kube-system_calico-node-a4a6a2261a76ec419e9cf13ae39732b3e918726573cf1a0dece648e679011578.log: [1565578883.799679612, {"log"=>"2019-08-12 03:01:23.799 [INFO][68] int_dataplane.go 830: Received interface update msg=&intdataplane.ifaceUpdate{Name:"cali5d1a7318787", State:"up"}
Run Code Online (Sandbox Code Playgroud)

logging splunk kubernetes fluent-bit

3
推荐指数
2
解决办法
2359
查看次数

如何使用 docker 容器内的 Fluent-bit 访问记录在 Journald 中的日志

我正在使用 docker-compose.yml 来启动我的服务。所有服务看起来都是这样的:

A-service:
    image: A-service
    restart: always
    network_mode: host
    logging:
      driver: journald
      options: 
        tag: "{{.ImageName}}/{{.Name}}/{{.ID}}"


fluent-bit:
  image: 'bitnami/fluent-bit:latest'
  restart: always
  network_mode: host
  command: /fluent-bit/bin/fluent-bit -c /fluent-bit/etc/fluent-bit.conf
  volumes:
    - ./service/config/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
    - type: bind
      source: /run/log
      target: /run/log
Run Code Online (Sandbox Code Playgroud)

当我运行时journalctl -e -f -u docker,我看到所有日志都被记录得很好。我遇到的问题是我的 fluid-bit 容器在从 systemd 收集时似乎无法获取任何数据:

fluent-bit.conf:
[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    debug

[INPUT]
    Name            systemd
    Tag             *


[OUTPUT]
    Name   stdout
    Match  *
Run Code Online (Sandbox Code Playgroud)

我认为这可能是因为它位于容器中并且无法到达日志位置,但绑定目录/run/log:/run/log没有效果。

所以我的问题是:当日志位于容器内时,Fluent-bit 可以到达 systemd 并读取日志吗?如果是 - 我怎样才能实现这一目标?

logging systemd docker fluent-bit

3
推荐指数
1
解决办法
5312
查看次数

流利地使用java

我正在尝试将日志从基本的 java maven 项目发送到远程计算机上配置的 Fluent-bit。Fluent-bit 然后会将它们写入文件。这是我的基本java配置。

爪哇

private final static Logger logger = LoggerFactory.getLogger(App.class);

public static void main(String[] args) {
   for (int i = 0; ; i++) {
      logger.debug("Warn msg");
      try {
         Thread.sleep(5000);
       } catch (InterruptedException e) {
        // do nothing now
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

和 logback.xml

<appender name="fluentd" class="ch.qos.logback.more.appenders.DataFluentAppender">
   <remoteHost>xx.xxx.xxx.xxx</remoteHost>
   <port>7777</port>
   <encoder>
            <pattern>%message%n</pattern>
    </encoder>
</appender>

<root level="DEBUG">
    <appender-ref ref="fluentd" />
</root>
Run Code Online (Sandbox Code Playgroud)

Fluent位配置:

td-agent-bit.conf

[INPUT]
    Name          tcp
    Listen        xx.xxx.xxx.xxx
    Port          7777
    Parsers_File  /etc/td-agent-bit/parsers.conf
    Parser        custom_parser

[OUTPUT]
    Name          file
    Match         * …
Run Code Online (Sandbox Code Playgroud)

java logging logback photon-os fluent-bit

0
推荐指数
1
解决办法
9111
查看次数