0

我正在尝试使用 fluent-bit 将日志从日志文件发送到正在侦听端口 8094 的电报。我可以通过这样的终端向该端口发送数据

回声“some_log_data”| 数控本地主机 8094

但是当我使用 fluent-bit formward 输出插件将数据发送到同一个端口时,它在 fluent-bit 日志中给出了这个错误

流利位_1 | [2019/11/21 11:14:44] [error] [io] TCP connection failed: localhost:8094 (Connection denied)
fluent-bit_1 | [2019/11/21 11:14:44] [错误] [out_fw] 没有可用的上游连接

这是我的 docker-compose 文件:

version: '3'

services:
  # Define a Telegraf service
  telegraf:
    image: telegraf
    volumes:
      - ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
    ports:
      - "8092:8092/udp"
      - "8094:8094"
      - "8125:8125/udp"
      - "9126:9126"
    networks:
      - mynet

  fluent-bit:
    image: fluent/fluent-bit:1.3.2-debug
    volumes:
      - ./fluent-bit:/fluent-bit/etc
      - ./access_logs/localhost_access_log:/logs
    depends_on:
      - telegraf
    networks:
      - mynet

networks:
  mynet:

流利的bit.conf:

[SERVICE]
    Flush           2
    Parsers_File    parsers.conf

[INPUT]
    Name                tail
    Tag                 cuic.logs
    Path                /logs/*.log
    Path_Key            File_Path
    Multiline           On
    Parser_Firstline    start

[OUTPUT]
    Name          forward
    Match         *
    Host          localhost
    Port          8094
    Tag           cuic.logs

电报.conf:

[[outputs.file]]
  files = ["/tmp/metrics.out"]
  data_format = "json"
  json_timestamp_units = "1s"

[[inputs.socket_listener]]
  service_address = "tcp://:8094"
  socket_mode = "777"
  data_format = "grok"
  grok_patterns = ["%{CUSTOM_LOG}"]
  grok_custom_patterns = '''
    SOME_GROK_PATTERN
    '''

[[aggregators.histogram]]
 period = "10s"
 drop_original = false
 [[aggregators.histogram.config]]
   buckets = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0]
   measurement_name = "access_log"
   fields = ["resp_time"]

有人可以帮我弄清楚我做错了什么吗?

4

3 回答 3

0

我认为问题出在使用主机名“localhost”时。对于网络级别的容器 localhost 将是它自己的网络范围,它将无法根据需要访问其他容器的 TCP 端口。

您可以在此处阅读有关同一问题的更多信息:

如何在两个不同的 Docker 容器之间共享 localhost?

并且...请注意,Fluent Bit 中的 Forward 输出协议使用二进制协议,而不是我怀疑您想要使用的普通 JSON。请改用 tcp 输出插件。

于 2019-11-28T04:26:28.633 回答
0

这绝对是您正在使用的输出/输入插件。Telegraf在这里有一个 FluentD 插件,它看起来像这样:

    # Read metrics exposed by fluentd in_monitor plugin
[[inputs.fluentd]]
  ## This plugin reads information exposed by fluentd (using /api/plugins.json endpoint).
  ##
  ## Endpoint:
  ## - only one URI is allowed
  ## - https is not supported
  endpoint = "http://localhost:24220/api/plugins.json"

  ## Define which plugins have to be excluded (based on "type" field - e.g. monitor_agent)
  exclude = [
      "monitor_agent",
      "dummy",
  ]

您的Fluent-Bit http 输出配置如下所示:

[INPUT]
    Name  cpu
    Tag   cpu

[OUTPUT]
    Name  http
    Match *
    Host  192.168.2.3
    Port  80
    URI   /something

但 Fluent-Bit 也有一个InfluxDB 输出插件

于 2020-02-06T23:04:35.230 回答
0

Fluent-bit 有一个名为 forward 的 out 插件,它可以根据 fluentd 协议转发输出。您可以根据此文档进行设置:https ://docs.fluentbit.io/manual/pipeline/inputs/forward

然后,您会发现 telegraf 有一个名为 fluentd 的输入插件,将其设置为输入,然后从 fluentd 客户端端点收集可以满足您要求的指标。

于 2020-07-24T17:02:00.957 回答