掌握 Fluent Bit:开发人员的前 3 大遥测管道输入插件(第 6 部分)

这是一个面向想要学习云原生计算基金会(CNCF)项目 Fluent Bit 的通用入门指南系列。

  • 每篇文章内容:每篇文章针对一个主题,提供该主题是什么、为何感兴趣、从何处开始以及如何动手学习与 Fluent Bit 项目相关的内容等方面的见解,各篇文章可独立阅读,也能引导逐步提升用 Fluent Bit 遥测管道实现解决方案的能力。
  • 本文主题及相关内容

    • 主题:使用 Fluent Bit 为开发者提供的技巧
    • Pipeline Input Tricks(管道输入技巧)

      • Dummy Input Plugin(虚拟输入插件):在调试遥测管道过滤或解析动作时,可将环境简化为可控的日志输入进行处理,dummy输入插件能帮助处理复杂的正则表达式或 Lua 脚本,以下是简单示例配置及输出:
    service:
    flush: 1
    log_level: info
    http_server: on
    http_listen: 0.0.0.0
    http_port: 2020
    hot_reload: on
    
    pipeline:
    inputs:
      # 生成成功消息
      - name:  dummy
        tag:   event.success
        dummy: '{"message":"true 200 success"}'
    
      # 生成失败消息
      - name:  dummy
        tag:   event.error
        dummy: '{"message":"false 500 error"}'
    
    filters:
      # 示例测试过滤器用于修改事件
      - name: modify
        match: '*'
        condition:
          - Key_Value_Equals message 'true 200 success'
        remove: message
        add:
          - valid_message true
          - code 200
          - type success
    
    outputs:
      - name: stdout
        match: '*'
        format: json_lines
    # 源安装
    $ fluent-bit --config fluent-bit.yaml
    
    # 容器安装(使用 Buildfile 构建新镜像)
    # FROM ghcr.io/fluent/fluent-bit:4.0.8
    # COPY./fluent-bit.yaml /fluent-bit/etc/fluent-bit.yaml
    # CMD [ "fluent-bit", "-c", "/fluent-bit/etc/fluent-bit.yaml" ]
    $ podman build -t fb -f Buildfile
    $ podman run --rm fb
    
    ...
    {"date":1756813283.411961,"valid_message":"true","code":"200","type":"success"}
    {"date":1756813283.413117,"message":"false 500 error"}
    {"date":1756813284.410205,"valid_message":"true","code":"200","type":"success"}
    {"date":1756813284.41048,"message":"false 500 error"}
    {"date":1756813285.410716,"valid_message":"true","code":"200","type":"success"}
    {"date":1756813285.410987,"message":"false 500 error"}
    ...
      - **Tail Input Plugin(尾输入插件)**:在云原生环境中处理动态日志和流数据,[`tail`输入插件](https://docs.fluentbit.io/manual/data-pipeline/inputs/tail)可连接并发送传入的遥测数据到 Fluent Bit 管道,以下是配置及相关要点:
    service:
    flush: 1
    log_level: info
    http_server: on
    http_listen: 0.0.0.0
    http_port: 2020
    hot_reload: on
    
    pipeline:
    inputs:
      - name: tail
        tag: kube.*
        read_from_head: true
        path: /var/log/containers/*.log
        multiline.parser: docker, cri
      
    outputs:
      - name: stdout
        match: '*'
        format: json_lines
          json_date_format: java_sql_timestamp

    要点包括:连接到 Kubernetes 集群的日志收集路径时,tail插件仅从当前时刻开始收集数据;使用read_from_head: true确保看到完整的测试应用日志;通过path指定具体的日志路径可缩小数据范围;需使用管道配置中的filters减少遥测噪声。

      - **Head Input Plugin(头输入插件)**:与 UNIX 命令`head`类似,[`head`输入插件](https://docs.fluentbit.io/manual/data-pipeline/inputs/head)可读取文件顶部的指定行数,以下是示例配置:
    service:
    flush: 1
    log_level: info
    http_server: on
    http_listen: 0.0.0.0
    http_port: 2020
    hot_reload: on
    
    pipeline:
    inputs:
      - name: head
        tag: head.kube.*
        path: /var/log/containers/*.log
        lines: 30
        multiline.parser: docker, cri
      
    outputs:
      - name: stdout
        match: '*'
        format: json_lines
          json_date_format: java_sql_timestamp

    此插件可用于收集大型和动态文件的遥测数据。

      - **Exec Input Plugin(执行输入插件)**:[`exec`输入插件](https://docs.fluentbit.io/manual/data-pipeline/inputs/exec)可执行任何命令并将输出处理到管道中,以下是示例配置:
    service:
    flush: 1
    log_level: info
    hot_reload: on
    
    pipeline:
    inputs:
      - name: exec
        tag: exec_demo
        command: 'for s in $(seq 1 10); do echo "The count is: $s"; done;'
        oneshot: true
        exit_after_oneshot: true
    
    outputs:
      - name: stdout
          match: '*'

    还可用于捕获 Java 服务的暴露指标,以下是配置示例:

    service:
    flush: 1
    log_level: info
    http_server: on
    http_listen: 0.0.0.0
    http_port: 2020
    hot_reload: on
    
    pipeline:
    inputs:
      - name: exec
        tag: exec_metrics_demo
        command: 'curl curl http://localhost:7777/metrics'
        oneshot: true
        exit_after_oneshot: true
        propagate_exit_code: true
    
    outputs:
      - name: stdout
          match: '*'
  • 开始学习的步骤:应探索本系列的先前文章,以在开发者的本地机器上安装和开始使用 Fluent Bit,可使用源代码容器镜像,文末链接指向可详细探索 Fluent Bit 的免费实践工作坊,可通过以下方式验证安装是否正常:

    # 源安装
    $ fluent-bit -i dummy -o stdout
    
    # 容器安装
    $ podman run -ti ghcr.io/fluent/fluent-bit:4.0.8 -i dummy -o stdout
  • 系列后续内容:本文介绍了使用 Fluent Bit 服务部分的技巧以改善开发者内部循环体验,此系列后续将探索更多有趣的 Fluent Bit 输出插件等内容。
阅读 41
0 条评论