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

WPF应用使用NLog向Grafana Cloud Loki推送日志失败求助

问题:WPF应用NLog推日志到Grafana Cloud Loki失败

我有一个旧版WPF应用,想添加告警功能,注册了Grafana Cloud免费账号,希望在平台查看应用日志。当前应用使用NLog,已添加NLog.Loki NuGet包,并在nlog.config中配置了Loki目标:

<extensions>
    <add assembly="NLog.Loki" />
</extensions>

<target xsi:type="Loki"
        name="loki"
        endpoint="https://<my_client_id>:<my_access_token>@logs-prod-012.grafana.net/loki/api/v1/push"
        >

但日志并未出现在Grafana Cloud中,查看NLog内部日志发现如下报错:

2023-09-28 23:37:00.9032 Warn lokiTarget(Name=loki): WriteAsyncTask failed on completion. Sleep 250 ms Exception: System.Net.Http.HttpRequestException: Failed pushing logs to Loki.
   in NLog.Loki.HttpLokiTransport.<ValidateHttpResponse>d__7.MoveNext()
--- End of stacktrace ---
   in System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter.GetResult()
   in NLog.Loki.HttpLokiTransport.<WriteLogEventsAsync>d__4.MoveNext()

我尝试过多种URL组合,但问题仍未解决。作为Grafana Cloud新手,不确定是否需要在平台端调整配置,目前Loki数据源显示“无数据”,请问哪里操作出错了?


排查步骤与解决方案

1. 修正Loki目标的认证配置

Grafana Cloud的Loki Push URL不需要直接在地址中拼接client_id和access_token,正确做法是拆分认证信息,让NLog.Loki自动处理Basic Auth:

<target xsi:type="Loki"
        name="loki"
        endpoint="https://logs-prod-012.grafana.net/loki/api/v1/push"
        username="<my_client_id>"
        password="<my_access_token>"
        >

这种方式可避免URL编码导致的认证失败问题。

2. 校验Access Token权限

Grafana Cloud的API Key必须具备Logs Publisher权限:

  • 登录Grafana Cloud,进入Security > API Keys
  • 检查目标Key是否勾选Logs Publisher,若没有则重新生成带该权限的Key

3. 确认NLog日志路由规则

确保nlog.config中存在将日志推送到Loki的规则,否则日志不会被转发:

<rules>
    <logger name="*" minlevel="Info" writeTo="loki" />
</rules>

4. 开启NLog详细内部日志

通过更详细的内部日志获取HTTP请求的具体错误信息(如状态码、响应内容):

<nlog internalLogLevel="Debug" internalLogFile="nlog-internal.log">
    <!-- 原有配置内容 -->
</nlog>

查看生成的nlog-internal.log,可定位是认证、URL还是网络问题。

5. 检查网络连通性

旧版WPF应用(基于.NET Framework)可能存在网络访问限制:

  • 在应用运行的机器上,尝试用浏览器访问Loki Endpoint,确认网络连通
  • 若有代理,需在Loki目标中添加代理配置:
<target xsi:type="Loki" ... >
    <proxy address="http://your-proxy-address:port" />
</target>

6. 验证Grafana Loki数据源配置

在Grafana平台检查Loki数据源配置:

  • 数据源URL填写https://logs-prod-012.grafana.net
  • 认证方式选择Basic Auth,填入对应的client_id和access_token
  • 点击Save & test测试连通性,确保数据源能正常连接

内容的提问来源于stack exchange,提问作者Krzysztof Skowronek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:30:12