我想做一个简单的 POC 来了解 Grafana/Loki 的工作原理以及如何使用它来查询我的 Pod 日志。
我进行了以下设置: 我使用以下配置创建了一个本地类集群(k8s 版本 v1.27.1):
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
然后我使用以下命令安装了grafana(通过prometheus helm)和loki:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
# get the UI admin password
k get secret prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
#install loki
helm repo add grafana https://grafana.github.io/helm-chartshelm repo update
helm repo update
helm install --values values.yaml loki grafana/loki --set loki.auth_enabled=false
# values.yaml content
# minio:
# enabled: true
# port forward to access the UI
kubectl port-forward deployment/prometheus-grafana 3000
之后我从 Grafana UI 添加了 loki url
http://loki-gateway
然后,我创建了一个简单的应用程序来验证我是否可以使用以下配置查询其日志:
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: app1
component: foo1
spec:
containers:
- name: foo-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=hello from namespace default"
---
kind: Service
apiVersion: v1
metadata:
name: foo1
spec:
type: LoadBalancer
selector:
component: foo1
ports:
# Default port used by the image
- port: 5678
当我访问该应用程序时,我可以看到来自
kubectl logs foo-app
的日志:
2023/06/13 14:30:27 Server is listening on :5678
2023/06/13 14:30:43 localhost:3001 127.0.0.1:60142 "GET / HTTP/1.1" 200 29 "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/114.0" 65.864µs
2023/06/13 14:30:45 localhost:3001 127.0.0.1:60142 "GET / HTTP/1.1" 200 29 "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/114.0" 56.885µs
2023/06/13 14:30:46 localhost:3001 127.0.0.1:60142 "GET / HTTP/1.1" 200 29 "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/114.0" 9.868µs
我无法从 Loki 看到其日志。在我看来,洛基看不到这个吊舱的存在。
我认为这可能与 Loki 权限有关,但查看集群角色似乎权限就在那里。我还可能错过什么?
我尝试重新创建自定义应用程序,但没有成功。我还尝试再次向 Loki ClusterRole 添加更多权限,但没有成功
最后我使用
promtail
helm 图表解决了这个问题,并使用此配置将日志发送到 loki:
config:
clients:
- url: http://loki-gateway/loki/api/v1/push
tenant_id: 1
snippets:
pipelineStages:
- docker: {}
Loki 不会从任何来源抓取日志...它公开 API 端点来接收日志。 日志必须由 Promtail、Grafana Agent、Grafana Alloy(推荐)
等客户端抓取