Loki 数据源
夜莺( Nightingale Loki 数据源
接入 Loki 数据源
在数据源管理—>右上角点击新增—>选择 Loki

根据要求填写相关信息即可,如果 Loki 服务没有配置多租户模式就不用填写下面的 Header 和 Value,租户 ID 可以联系 Loki 管理员。

URL 部分通常是需要带有
/lokiurlpath 的,请注意!
如何确认是否开启多租户呢?其实很简单,不带租户 ID 请求一下服务,看返回结果就可以知道了。
返回no org id,那就是需要租户 ID,如下图所示。

正常返回数据就不需要租户 ID ,如下图所示。

查询数据
场景一:查询每个具有 401 状态的日志行{container="evaluate-loki-flog-1"} | json | status="401"

场景二:查询最近5分钟状态码是401的日志数量count_over_time({container="evaluate-loki-flog-1"} |= "401" [5m])

配置报警
告警场景:如果查询最近5分钟状态码是401的日志数量大于0 触发报警
这个告警场景可以灵活替换日志关键词,比如 ERROR 出现的次数或者xxx错误码出现的次数等。
在告警配置中选择 Loki 告警源,配置告警表达式。

配置完成后在历史告警中可以查看告警详情。

排错分析
告警配置完成未能正常告警,可以通过查看 DEBUG.log 查看相关报错,关键词可以查询rule_eval和告警 ID 。

常见问题
Q1:Loki URL 怎么填?
A:填 Loki Distributor / Query Frontend 的 HTTP 地址(如 http://loki:3100)。注意不要带 /loki/api/v1/... 路径,只填到端口这一级,n9e 会自己拼接 API path。
Q2:保存成功但查不到日志?
A:
- 租户头:Loki 启用了 multi-tenancy 模式时需要传
X-Scope-OrgID头,在数据源的 Header 配置里加; - 标签选择器:LogQL 查询必须带至少一个
{label="value"}选择器,不能空查; - 时间范围:默认查最近 1 小时,Loki 长期日志要主动扩大;
- Promtail / Vector / Fluentd 是否真的在写入 Loki — 直接用
logcli命令行确认。
Q3:LogQL 跟 PromQL 有什么差异?
A:
- 选择器:LogQL
{job="nginx"}vs PromQLnode_load1{job="nginx"}(LogQL 无 metric name); - 管道:LogQL 支持
|=(包含)、!=(不含)、|~(正则)、!~(正则反向)过滤日志; - 解析:用
| json、| logfmt、| pattern从日志里提取字段做后续聚合; - 数值聚合:
rate({...}[1m])类似 PromQL 但作用于日志条数。
Q4:和 ES / SLS / CLS 选哪个?
A:
- Loki:K8s 场景 + 想跟 Grafana 系统集成 + 不想运维 ES → 首选;
- ES:日志要做全文搜索 + 复杂聚合分析;
- SLS / CLS:用阿里云 / 腾讯云生态、不想运维存储层。