;客户;Fluentd

Fluentd Loki输出插件

格拉夫娜·洛基有一个Fluentd输出插件称为fluent-plugin-grafana-loki可以将日志发送到私有Loki实例或Grafana云

插件的源代码在存储库的Fluentd目录

安装

当地的

安装插件使用fluent-gem

安装fluent-plugin-grafana-loki

码头工人形象

Docker形象grafana / fluent-plugin-loki:主人包含默认配置文件.默认情况下,流畅容器使用默认配置。您可以指定您的fluentd.conf具有FLUENTD_CONF环境变量。

这张图还使用了LOKI_URLLOKI_USERNAME,LOKI_PASSWORD环境变量来指定Loki的端点、用户和密码(如果不使用USERNAME和password,可以将它们保留为空)。

此映像将启动Fluentd实例,以将传入的日志转发到指定的Loki URL。作为一种替代方案,集装箱化的应用程序也可以使用Docker驱动插件不需要Fluentd就可以发送日志。

例子

Docker Compose配置如下所示:

服务:fluentd:形象:grafana / fluent-plugin-loki:主人命令:“fluentd”-“v”“p”——“fluentd /插件”环境:LOKI_URL: http://loki: 3100 LOKI_USERNAME: LOKI_PASSWORD:部署:模式:全局配置:——来源:loki_config目标:/ fluentd / etc /洛基/ loki.conf网络:-洛基卷:- host_logs: / var / log # journald日志需要摄入:- /etc/machine-id: / etc / machine-id - /dev/log: / dev / log - /var/run/systemd/journal/: / var /跑步/ systemd /杂志/日志:选择:标签:infra.monitoring

使用

请注意:任意使用<标记>…< / >标签extra_labels设置至少一个标签。

在Fluentd配置中,使用@type洛基.附加配置是可选的。默认值如下所示:

 @type loki url "https://logs-prod-us-central1.grafana.net" username "#{ENV['LOKI_USERNAME']}" password "#{ENV['LOKI_PASSWORD']}" extra_labels {" ENV ":"dev"} flush_interval 10s flush_at_shutdown true buffer_chunk_limit 1m 

添加标签

顶层属性的简单标签

 @type Loki #… #…< / >匹配

您可以重写标签键和下面的键

 @type Loki #… #…< / >匹配

你可以用记录访问器嵌套字段的语法。

 @type Loki #… #…< / >匹配

提取Kubernetes标签

由于Kubernetes标签是一组嵌套的键-值对,因此有一个单独的选项来提取它们。注意特殊字符,如".- /将被改写为_.与remove_keys kubernetes选项可从日志中删除元数据。

 @type Loki #…Extract_kubernetes_labels true remove_keys kubernetes  #…< / >匹配

还可以通过使用自动包含所有kubernetes标签extract_kubernetes_labels真实在构型中。

Multi-worker用法

在Loki中默认启用乱序插入;指接受乱序写入.如果无序插入禁用,如果试图在具有相同标签但时间戳较晚的日志条目之后插入一个时间戳较早的日志条目,则插入将失败HTTP状态码:500,消息:rpc错误:code =未知desc =条目无序.因此,为了在多工人Fluentd设置中使用此插件,您需要在标签中包括工人ID或其他方式确保日志流总是发送到同一工作者

例如,使用fluent-plugin-record-modifier

 @type record_modifier  fluentd_worker "#{worker_id}"    @type Loki #… #…< / >匹配

使用多个缓冲区刷新线程

同样,当使用flush_thread_count> 1在缓冲节中,必须添加线程标识符作为标签,以确保fluund并行刷新Loki的日志块的唯一标签集始终有增加的时间。

这个插件自动添加一个fluentd_thread时用缓冲区刷新线程的名称标记flush_thread_count> 1。

配置

url

要发送日志的Loki服务器的URL。当发送数据时,发布路径(. . / api /洛基/ v1 /推动)会自动添加。默认情况下,url设置为https://logs-prod-us-central1.grafana.net,格拉弗纳实验室的网址bob电竞频道举办了洛基服务。

代理支持

从0.8.0版本开始,该gem使用Excon,它支持使用环境变量的代理

用户名/密码

如果Loki服务器需要身份验证,请指定用户名和密码。如果使用GrafanaLab的托管Loki,用户名需要设置为你的instanceId,密码应该是一个Grafana.com api密钥。

租户

Loki是一个多租户的日志存储平台,所有发送的请求都必须包含一个租户。对于某些安装,租户将由身份验证代理自动设置。否则,您可以定义一个要传递的租户。租户可以是任何字符串值。

租户字段还支持占位符,因此它可以根据标记和记录字段动态更改。每个占位符必须作为缓冲块键添加。以k8s pod标签为例说明:

 @type Loki url "https://logs-prod-us-central1.grafana.net" tenant ${$. kubernets .labels。租户}#…<缓冲区.kubernetes.labels美元。租户> @type memory flush_interval 5s  

客户端证书验证

指定一对客户端证书和私钥cert而且关键如果在Loki前面配置了带有客户端证书验证的反向代理。ca_cert如果服务器使用自定义证书颁发机构,也可以指定。

 @type Loki url "https://loki" cert /path/to/certificate. >Pem key /path/to/key。关键ca_cert/path/to/ca.pem ... 

服务器证书验证

禁用服务器证书验证的标志。默认情况下insecure_tls设置为false。

 @type Loki url "https://loki" insecure_tls true…< / >匹配

输出格式

Loki的目的是仅使用一小组标签对日志流进行索引和分组。它不用于全文索引。当向Loki发送日志时,大多数日志消息将作为单个日志“行”发送。

有一些配置设置来控制输出格式。

  • extra_labels:(默认值:nil)标签集,包括每个Loki流。如{"env":"dev", "datacenter": "dc1"}
  • Remove_keys:(默认值:nil)用逗号分隔的需要删除的记录键列表。所有其他键都将放在日志行中。你可以用record_accessor语法
  • Line_format(默认值:key_value):将记录压扁为日志行时使用的格式。有效值为“json”或“key_value”。如果设置为“json”,发送给Loki的日志行将是fluentd记录(不包括作为标签提取的任何键)转储为json。如果设置为" key_value ",则日志行将记录中的每个项按以下格式连接在一起(由一个空格分隔)<关键> = <值>
  • Drop_single_key:如果设置为true,则一条记录在提取后只有1个key<标记> < / >标签块,将日志行设置为值并丢弃键。
  • Include_thread_label(默认值:true):当使用多个线程进行刷新时,是否包括fluentd_thread标签。

缓冲选项

fluentd-plugin-loki扩展Fluentd内置的输出插件和使用compat_parameters插件辅助。它增加了以下选项:

Buffer_type memory flush_interval 10s retry_limit 17 retry_wait 1.0 num_threads 1.执行以下命令