;客户;Logstash

Logstash

Grafana Loki有一个Logstash输出插件logstash-output-loki可以将日志发送到Loki实例或Grafana云

安装

当地的

如果你需要手动安装Loki输出插件,你可以简单地使用下面的命令:

安装logstash-output-loki

这将下载输出插件的最新gem并将其安装在logstash中。

码头工人

我们还提供了一个docker映像码头工人中心.映像包含logstash和已经预安装的Loki输出插件。

例如,如果你想在docker中运行logstashloki.conf作为管道配置,您可以使用下面的命令:

Docker运行-v ' pwd ' /loki-test.conf:/home/logstash/——rm grafana/logstash-output-loki:1.0.1 -f loki-test.conf

Kubernetes

我们还提供了默认的头盔值与Filebeat抓取日志,并将它们转发给洛基与我们的logstashloki-stack伞图表。可以使用以下命令从Promtail切换到logstash:

头盔升级——安装Loki Loki / Loki -stack \——set filebeat.enabled=true,logstash.enabled=true,promtail。enabled=false \——set loki. fullnameoverride =loki, logash . fullnameoverride = logash -loki

这将自动抓取集群中的所有pod日志,并将它们发送给Loki,并附加Kubernetes元数据作为标签。您可以使用values.yaml文件作为您自己配置的起点。

用途与配置

要配置Logstash以将日志转发到Loki,只需添加洛基输出到您的Logstash配置文件如下所示:

输出{洛基{[url = > " |默认= |没有要求= true] [tenant_id = >字符串|默认= nil所需| = false] [message_field = >字符串|默认=所需的“消息”| = false] [include_fields = > |默认=[]数组需要| = false] [batch_wait = > |违约数量= 1 (s) |要求= false] [batch_size = > |违约数量= 102400(字节)| = false] [min_delay = > |违约数量= 1 (s) |要求= false] [max_delay = > = 300 (s) | |违约数量要求= false][重试= > |数量Default = 10 | required=false] [username => string | Default = nil| required=false] [password => secret | Default = nil| required=false] [cert => path | Default = nil| required=false] [ca_cert => path | Default = nil| required=false] [insecure_skip_verify => Boolean | Default =false | required=false]}}

默认情况下,Loki将从它接收到的事件字段中创建条目。logstash事件,如下所示。

{“@timestamp”= > 2017 - 04 - 26 t19:33:39.257z“src”= >“localhost”、“@version”= >“1”、“主机”= >“localhost。localdomain", "pid" => "1", "message" => "Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool…","type" => "stdin", "prog" => "systemd",}

包含一个消息而且@timestamp字段,分别用于形成Loki入口日志行和时间戳。

您可以使用configuration属性为日志行使用不同的属性message_field.如果您还需要更改时间戳值,请使用Logstash日期过滤器来更改@timestamp字段。

所有其他字段(嵌套字段除外)将形成附加到日志行的标签集(键值对)。这意味着您要负责突变和删除高基数标签比如客户端ip。您通常可以通过使用变异过滤器。

注意:在这个插件的1.1.0及更高版本中,你也可以通过allowlist来指定一个标签列表include_fields配置。

例如下面的配置:

输入{…} filter {mutate {add_field => {"cluster" => "us-central1" "job" => "logstash"} replace => {"type" => "stream"} remove_field => ["src"]}} output {Loki {url => "http://myloki。域名:3100/loki/api/v1/push"}}

将增加集群而且工作静电标签,取下src字段和替换类型被命名

如果您想包含嵌套字段或元数据字段(从@)你需要重新命名它们。

例如,当使用Filebeat和add_kubernetes_metadata处理器,它将附加Kubernetes元数据到你的事件如下:

{“kubernetes”:{"标签":{“应用”:“我的程序”,“pod-template-hash”:“959 f54cd”,“服务”:“真正的”、“版本”:“1.0”,“想象”:“true”},“pod”:{“uid”:“e20173cb - 3 - c5f - 11 - ea - 836 - e - 02 - c1ee65b375”,“名字”:“我-应用- 959 f54cd lhd5p”},“节点”:{“名称”:“ip-xxx-xx-xx-xxx.ec2.internal”},“容器”:{“名称”:“istio”},“名称”:“生产”、“replicaset”:{“名称”:“我-应用程序- 959 f54cd”}},“消息”:“未能解析配置”、“@timestamp”:“2017 - 04 - 26 t19:33:39.257z}

下面的过滤器展示了如何将这些Kubernetes字段提取到标签中(container_name名称空间圆荚体而且宿主):

过滤{if [kubernetes] {mutate {add_field => {"container_name" => "%{[kubernetes][container][name]}" "namespace" => "%{[kubernetes][namespace]}" "pod" => "%{[kubernetes][pod][name]}"} replace => {"host" %{[kubernetes][node][name]}"}}} mutate {remove_field => ["tags"]}}

配置属性

url

Loki服务器发送日志的url。当发送数据时,还需要提供推送路径。http://localhost:3100/loki/api/v1/push

如果你想送去GrafanaCloud你可以用https://logs-prod-us-central1.grafana.net/loki/api/v1/push

用户名/密码

如果Loki服务器需要基本身份验证,请指定用户名和密码。如果使用GrafanaLab托管洛基,用户名需要设置为您的实例/用户id,密码应该是Grafana.com api密钥。

message_field

日志行使用的消息字段。你可以使用logstash键访问器语言来获取嵌套属性,例如:[登录][信息]

include_fields

当配置此列表时,将映射到标签并发送给Loki的字段数组只有这些字段将被发送,所有其他字段将被忽略。

batch_wait

将一批记录推送给洛基之前等待的时间间隔。这意味着即使批量大小没有达到batch_wait将发送部分批处理,这是为了确保数据的新鲜度。

batch_size

推送到洛基之前所累积的最大批大小。缺省值为102400字节

倒扣配置

Min_delay => 1(1s)

重试之间的初始回退时间

Max_delay => 300(5m)

重试之间的最大回退时间

10 . Retries =>

最大重试次数。设置为0将无限重试。

tenant_id

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

客户端证书验证

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

insecure_skip_verify

禁用服务器证书验证的标志。默认设置为

完整配置示例

input {beats {port => 5044}} filter {if [kubernetes] {mutate {add_field => {"container_name" => "%{[kubernetes][container][name]}" namespace" => "%{[kubernetes][namespace]}" pod" => "%{[kubernetes][pod][name]}"} replace => {"host" => "%{[kubernetes][node][name]}"}}} mutate {remove_field => ["tags"] #注:{}输出{loki {url => "https://logs-prod-us-central1.grafana.net/loki/api/v1/push" username => "3241" password => "REDACTED" batch_size => 112640 #112.64 kilobytes retries => 5 min_delay => 3 max_delay => 500 message_field => "message" include_fields => ["container_name","namespace","pod","host"]} # stdout {codec => rubydebug}}