如何使用Fluent Forward和Filelog接收器(详细教程)

552 阅读2分钟

在本指南中,我们将设置一个OpenTelemetry收集器,收集日志并将其发送到Grafana云中运行的Grafana Loki

我们将考虑两个通过OpenTelemetry Collector向Loki发送日志的例子。第一个例子展示了如何用Fluent Forward接收器收集容器日志。第二个例子展示了如何使用Filelog接收器来收集系统日志。

前提条件

在我们开始之前,我们需要运行Grafana Loki和Grafana。你可以自己下载并运行LokiGrafana,或者你可以使用Grafana云,它有一个慷慨的永久免费层,以及适合各种使用情况的计划,你今天就可以注册了。在本指南中,我们将使用Grafana Cloud。

设置Grafana Cloud账户

如果你已经有一个Grafana Cloud账户,请登录,或者注册一个免费账户

打开grafana.com/,点击我的账户。向下滚动到管理你的Grafana Cloud Stack部分。找到Loki块,点击发送日志按钮:

向下滚动到从独立主机发送日志的部分。点击 "现在生成"链接,生成你的API密钥:

你会看到一个弹出式的创建API密钥表格。输入密钥名称,从选择框中选择Metrics Publisher角色。API密钥生成后,配置样本中的客户端URL将被修改。适当的API Key将替代tring。复制网址https://:@logs-prod-eu-west-0.grafana.net/loki/api/v1/push 。我们稍后将在OpenTelemetry Collector的配置文件中使用它。

下载OpenTelemetry Collector的最新版本

你可以在GitHub上下载大多数架构/操作系统的二进制文件,如果有的话,可以下载v0.49.0或更高版本。

在本指南中,我以Mac OS为例:

$ wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.49.0/otelcol-contrib_0.49.0_darwin_amd64.tar.gz
$ gunzip -c otelcol-contrib_0.49.0_darwin_amd64.tar.gz | tar xopf -

这个接收器运行一个TCP服务器,通过Fluent Forward协议接受事件。在这个例子中,我们将从Docker容器中收集日志并将其发送到Grafana Loki。

准备OpenTelemetry采集器的配置文件

创建config.yaml文件:

receivers:
  fluentforward:
    endpoint: 127.0.0.1:24224

processors:
  batch:

exporters:
  logging:
    logLevel: debug

  loki:
    endpoint: "https://:@logs-prod-eu-west-0.grafana.net/loki/api/v1/push"
    tenant_id: "example1"
    labels:
      attributes:
        container_name: ""
        container_id: ""
service:
  pipelines:
    logs:
      receivers: [fluentforward]
      processors: [batch]
      exporters: [logging, loki]

属性container_namecontainer_id 是有效的Loki标签,这就是为什么不需要映射,我们可以留下空字符串。然后运行:

$ ./otelcol-contrib --config ./config.yaml

现在OpenTelemetry Collector正在运行。

设置Docker容器来发送日志到Grafana Loki

让我们在Docker容器中运行Ubuntu镜像,它将每秒产生日志到stdout。

对于Mac OS和Windows:

$ docker run --rm --log-driver=fluentd --log-opt fluentd-address=host.docker.internal:24224 ubuntu sh -c "while true; do echo Hi Loki \$(date); sleep 1; done"

现在你可以在Grafana云中打开Grafana,进入探索,选择Loki,然后看到日志。

Filelog接收器尾随并解析文件中的日志。在这个例子中,我们将尾随系统日志并将其发送到Grafana Loki。

准备OpenTelemetry采集器的配置文件

创建config.yaml文件:

receivers:
  filelog:
    include: [/var/log/*.log]

processors:
  batch:

exporters:
  logging:
    logLevel: debug

  loki:
    endpoint: "https://:@logs-prod-eu-west-0.grafana.net/loki/api/v1/push"
    tenant_id: "example2"
    labels:
      attributes:
        log.file.name: "filename"
service:
  pipelines:
    logs:
      receivers: [filelog]
      processors: [batch]
      exporters: [logging, loki]

我们在这里指定了属性映射log.file.name: "filename" 。因为Loki只接受与^\[a-zA-Z_]*$ ,我们需要提供从记录属性名称到Loki标签的映射。它可以是任何符合重码的字符串。我选择了"filename"

然后运行:

$ ./otelcol-contrib --config ./config.yaml

现在你可以在Grafana云中打开Grafana,进入探索,选择Loki,并看到日志。

OpenTelemetry收集器可以使用一个以上的接收器。有两个接收器的配置将看起来像:

receivers:
  filelog:
    include: [/var/log/*.log]
  fluentforward:
    endpoint: 127.0.0.1:24224

processors:
  batch:

exporters:
  logging:
    logLevel: debug

  loki:
    endpoint: "https://:@logs-prod-eu-west-0.grafana.net/loki/api/v1/push"
    tenant_id: "example2"
    labels:
      attributes:
        log.file.name: "filename"
	  container_id: "",
	  container_name: ""
service:
  pipelines:
    logs:
      receivers: [filelog, fluentforward]
      processors: [batch]
      exporters: [logging, loki]

然后运行:

$ ./otelcol-contrib --config ./config.yaml

现在你可以在云端打开Grafana,进入探索,选择Loki,并看到来自Fluent Forward和Filelog接收器的日志。

总结

在本指南中,我们提供了配置OpenTelemetry收集器所需的所有步骤,以便通过Fluent Forward和Filelog接收器收集容器日志和系统日志,并将它们发送到Grafana云中的Grafana Loki。