需完成loki服务部署、promtail采集配置、命名空间隔离及基础查询验证四个核心环节:部署单节点loki并禁用分布式组件,配置promtail采集带app标签的pod日志,通过logging命名空间隔离,最后用logcli和grafana验证日志查询。

在Kubernetes集群中快速搭建一套不依赖Elasticsearch、资源占用低、能直接对接Grafana查询Pod日志的轻量级日志方案,需完成Loki服务部署、Promtail采集配置、命名空间隔离及基础查询验证四个核心环节。
部署Loki服务(单节点轻量模式)
添加Grafana官方Helm仓库并更新索引:
helm repo add grafana https://grafana.github.io/helm-charts && helm repo update
创建loki-values.yaml,关键点是禁用多副本和分布式组件,强制使用filesystem存储后端,并关闭认证以降低开销:
loki:
commonConfig:
replication_factor: 1
storage:
type: 'filesystem'
singleBinary:
enabled: true
persistence:
enabled: true
storageClassName: 'local-path'
size: 10Gi
执行安装命令,指定logging命名空间并自动创建该命名空间:
helm install loki grafana/loki -n logging --create-namespace -f loki-values.yaml
【必须确认loki Pod处于Running状态且Ready为1/1,否则后续Promtail无法连接】
配置Promtail采集Pod标准输出日志
创建promtail-values.yaml,重点在于scrapeConfigs中启用Kubernetes Pod服务发现,并通过relabel_configs保留所有带app标签的Pod日志:
config:
clients:
- url: http://loki.logging.svc.cluster.local:3100/loki/api/v1/push
snippets:
scrapeConfigs: |
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: keep
regex: .+
安装Promtail时复用logging命名空间,确保ServiceAccount权限已就绪:
helm install promtail grafana/promtail -n logging -f promtail-values.yaml
这一步操作起来很简单,直接把文件拖进去就行。但若Promtail Pod反复CrashLoopBackOff,请检查loki.logging.svc.cluster.local是否能从Pod内DNS解析成功——可进Promtail容器执行nslookup loki.logging.svc.cluster.local验证。
验证日志采集与基础检索
第一步:确认Promtail已正常运行并抓取到目标Pod日志:
kubectl -n logging get pods -l app.kubernetes.io/name=promtail
第二步:在default命名空间部署一个带app=nginx标签的测试Pod:
kubectl run nginx-test --image=nginx --labels=app=nginx --restart=Never
第三步:等待约30秒后,使用logcli查询该Pod日志(需提前安装logcli):
logcli --addr=http://loki.logging.svc.cluster.local:3100 query '{app="nginx"}' --limit=10
若返回类似level=info ts=2026-10-02T23:35:42.123Z msg="started server"的日志行,说明采集链路已通。此时可跳转至Grafana界面,在Explore面板中选择Loki数据源,输入相同LogQL语句进行图形化检索。











