You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server下Fluentd向Loki发送消息时添加主机名标签失败

解决Windows Server下Fluentd向Loki添加hostname标签的问题

问题分析

你尝试的三种Filter配置未生效,核心原因有两点:

  1. Windows环境下Ruby的Socket.gethostname存在兼容性问题,无法稳定获取主机名;
  2. 未在fluent-plugin-grafana-loki的Output配置中,将过滤后的字段映射为Loki的标签(Loki的标签需要在Output阶段明确指定)。

有效配置方案

方案1:通过Filter添加主机名字段,再在Output中转为标签

先用record_transformer过滤插件添加主机名字段(借助Windows系统环境变量COMPUTERNAME,兼容性更可靠):

<filter loki>
  @type record_transformer
  enable_ruby true
  <record>
    hostname "${ENV['COMPUTERNAME'].downcase}"
  </record>
</filter>

再在Loki的Output配置里,通过label_keys把该字段转为标签:

<output loki>
  @type grafana_loki
  url "http://你的Loki地址:3100/loki/api/v1/push"
  <label>
    job "fluentd"
  </label>
  label_keys ["hostname"]
  <buffer>
    @type memory
    flush_interval 5s
  </buffer>
</output>

方案2:直接在Output配置中添加hostname标签(无需Filter)

跳过Filter步骤,直接在Loki Output的<label>块中通过Ruby代码获取主机名:

<output loki>
  @type grafana_loki
  url "http://你的Loki地址:3100/loki/api/v1/push"
  <label>
    job "fluentd"
    hostname "${ENV['COMPUTERNAME'].downcase}"
  </label>
  <buffer>
    @type memory
    flush_interval 5s
  </buffer>
</output>

原配置失效原因说明

  • 配置1/2:Socket.gethostname在Windows环境下可能返回异常值,且未在Output中配置标签映射,导致字段仅存在于日志内容而非Loki标签;
  • 配置3:同样存在Socket.gethostname的兼容性问题,且缺少标签映射的关键步骤。

内容的提问来源于stack exchange,提问作者John Grieb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:32:38