程式狂想筆記

一個攻城師奮鬥史

0%

使用 Helm 快速安裝 Loki

參考: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 可以查詢