參考:kubernetes部署loki日志系统_willblog的博客-CSDN博客_k8s安装loki
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
helm upgrade --install loki grafana/loki-stack \
--namespace=loki-stack \
--create-namespace \
--set grafana.enabled=true \
--set prometheus.enabled=true \
--set prometheus.server.persistentVolume.enabled=false \
--set prometheus.alertmanager.persistentVolume.enabled=false
# 假如有設定反向代理需要注意
# --set grafana.grafana\\.ini.server.root_url='http://localhost:3000/grafana'
# 設定 Grafana Service 為 NodePort
kubectl -n loki-stack patch svc loki-grafana -p '{"spec": {"type": "NodePort"}}'
# 登入 Grafana 密碼\
kubectl get secret --namespace loki-stack loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
|
這邊快速完成佈置。後面有在 value.yml 配置,可參考後面筆記。
rewrite/prefix 反向代理設定
做反向代理做 rewrite/prefix 可能需要注意的事情,因為 Prefix
到 ReverseProxy 會用一般 url 連到 Server,可以看到下圖會比較清楚,但很多網站大多數都會做 domain/path/
前面會加domain(ip)
,沒強制是還好,如./dir/a.html
沒固定連結,但這種也不是很好的做法,大多網站都會強制固定link連結。
graph LR
Client -->|http://ip/prometheus| ReverseProxy
ReverseProxy --> |http://ip/| Server
Server --> |redirect http://ip/login | ReverseProxy
ReverseProxy --> | http://ip/login|Client
官網範例,因為我不是用 ingress ,我是用 Traefik 來做反向代理,所以就不需要寫這一段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 官網範例
# https://github.com/grafana/helm-charts/tree/main/charts/grafana
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: "true"
path: /grafana/?(.*)
hosts:
- k8s.example.dev
grafana.ini:
server:
root_url: http://localhost:3000/grafana # this host can be localhost
|
因為我不是用 nginx controller ,所以我就稍微改了一下方法,上面nginx controller 我不需要設定。
1
2
3
4
5
6
|
helm upgrade --install loki grafana/loki-stack \
--set grafana.enabled=true \
--set prometheus.enabled=true \
--set prometheus.server.persistentVolume.enabled=false \
--set prometheus.alertmanager.persistentVolume.enabled=false \
--set grafana.grafana\\.ini.server.root_url='http://localhost:3000/grafana'
|
traefik-ingress.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traefik-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
nginx.ingress.kubernetes.io/ssl-redirect: "false"
traefik.ingress.kubernetes.io/router.middlewares: default-testpath-prefix@kubernetescrd,default-grafana-prefix@kubernetescrd
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/testpath"
backend:
service:
name: nginx
port:
number: 80
- http:
paths:
- pathType: Prefix
path: "/grafana"
backend:
service:
name: loki-grafana
port:
number: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: testpath-prefix
namespace: default
spec:
stripPrefix:
prefixes:
- /testpath
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: grafana-prefix
namespace: default
spec:
stripPrefix:
prefixes:
- /grafana
|
這邊因為我 ingress 跨 namespace 會抓不到 Server,聽說 ingressroute 可以跨 namespace,相同 namespace 沒有這個問題,所以我先用相同 namespace。
彩蛋
使用 Loki 收集 Traefik 日志 - 云+社区 - 腾讯云
helm-charts/charts/grafana at main · grafana/helm-charts
traefik 打開一般 log
command 加上設定就能執行,參考:使用 Loki 收集 Traefik 日志 - 云+社区 - 腾讯云
。
1
2
3
4
|
containers:
- args:
- --accesslog=true
- --accesslog.format=json
|
helm traefik 設定
1
|
helm upgrade traefik traefik/traefik --set service.type=NodePort --set logs.access.enabled=true
|
Grafana 可以查詢