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
相关产品推荐
相关产品推荐

