︿
Top

Install Loki-stack on Kubernetes by HELM




目前市場上的日誌集中化解決方案五花八門,常聽到的有 ELK、EFK、Graylog、Loki,資源規模與功能需求的大小也如同排序從左至右,根據應用環境的需求有著不同的選擇,而 Loki + Promtail 則是由 Grafana Labs 所推出的輕量級日誌解決方案,有別於 elasticsearch 為資料存儲的設計,Loki 並不索引日誌的內容,而是以標籤取代索引、並以壓縮方式存儲日誌,努力的節省各種資源。

PLG stack 分別指的是 Promtail、Loki、Grafana,資料擷取代理端不一定非得使用 Grafana 家的 Promtail,比如 fluent bit、fluentd …等都各有各的好,本次實驗我們優先採用 Grafana Labs 所提供的日誌解決方案同捆包 PLG stack 來體驗 Loki 的建置。




實驗環境規格

主機安裝的作業系統皆為 CentOS 7.9x64
Kubernetes 建置流程可參閱此篇文章





安裝 PLG

添加倉庫並更新資訊

[root@k8s-master helm-chart]# helm repo add grafana https://grafana.github.io/helm-charts
[root@k8s-master helm-chart]# helm repo update

下載配置檔,挑選版本為接近 Kubernetes v1.21.14 發行日期之後的 Version 2.7.2

[root@k8s-master helm-chart]# helm show values grafana/loki-stack > ./loki-stack-values.yml --version 2.7.2

確認設定檔中需要啟用的服務

loki:
  enabled: true
  
promtail:
  enabled: true
  
grafana:
  enabled: true

透過 helm 安裝 PLG

[root@k8s-master helm-chart]# helm install loki grafana/loki-stack -f ./loki-stack-values.yml --version 2.7.2

確認 helm 安裝成功的 release(chart 安裝成功的實例)

[root@k8s-master helm-chart]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                APP VERSION
loki    default         1               2025-09-08 18:10:49.326349219 +0800 CST deployed        loki-stack-2.7.2     v2.6.1

檢查 promtail 代理,可以看到因為是 daemonset 的部署方式,所以一共有三個 promtail pods 分別安裝在 Kubernetes 集群上的每一台機器

[root@k8s-master helm-chart]# kubectl get daemonset
NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
loki-promtail   3         3         3       3            3           <none>          18h

單獨配置一個 ingress 給 grafana 讓其可被外部存取

apiversion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ing-loki-grafana
  namespace: default
spec:
  ingressClassName: nginx
  rules:
    - host: loki-grafana.test.com
      http:
        paths:
          - pathType: Prefix
            backend: 
              service: 
                name: loki-grafana
                port:
                  number: 80
            path: /
[root@k8s-master helm-chart]# kubectl apply -f ./loki-grafana-ingress.yaml




透過 Loki 查閱 Kubernetes 的日誌資料

查詢 loki 的 svc name,稍後會用到

[root@k8s-master helm-chart]# kubectl get svc
loki              ClusterIP      10.109.67.78     <none>            3100/TCP       17h
loki-grafana      ClusterIP      10.97.102.44     <none>            80/TCP         17h
loki-headless     ClusterIP      None             <none>            3100/TCP       17h
loki-memberlist   ClusterIP      None             <none>            7946/TCP       17h

查詢 Grafana 登入密碼

[root@k8s-master helm-chart]# kubectl get secret loki-grafana \
-o template \
 --template '{{ index .data "admin-password" }}' | base64 -d; echo
PMdkbdHic2N6J8dh7cG2pyQL1oBtSDf9QngCHnDZ

區網任一電腦的 hosts 檔案裡加入一筆 192.168.200.161 指向 loki-grafana.test.com 的資料,再透過電腦瀏覽器網址列輸入 http://loki-grafana.test.com 即可登入我們的 grafana 入口頁面!


添加日誌類別的 loki data source,url 部分輸入上面我們查詢到的 svc name 和 port 號


前往 Expore 搜尋篩選出所需的日誌,在 log browser 搜尋框中輸入「{」符號,即會自動跳出搜尋關鍵字供用戶選擇,本例我們選擇 pod,接著會自動跳出 pod name 供選擇,本例我們選擇 ingress-nginx,最後按下右上方「Run query」按鈕進行 ingress 的 nginx access 日誌查詢


單獨用指令方式輸出的 Kubernetes 相關日誌

[root@k8s-master helm-chart]# kubectl logs ingress-nginx-controller-lzp4d -n ingress-nginx
192.168.88.20 - - [09/Sep/2025:04:20:21 +0000] "GET /api/search?limit=30&starred=true HTTP/1.0" 200 2 "https://loki-grafana.test.com/?orgId=1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 706 0.001 [default-loki-grafana-80] [] 10.244.2.166:3000 2 0.001 200 c6c63be4d5efa8c7eb7ff0adea0d26a4
192.168.88.20 - - [09/Sep/2025:04:20:40 +0000] "GET /api/datasources/proxy/1/loki/api/v1/query_range?direction=BACKWARD&limit=1000&query=%7Bpod%3D%22ingress-nginx-controller-lzp4d%22%7D&start=1757370040128000000&end=1757391640128000000&step=30 HTTP/1.0" 200 48485 "https://loki-grafana.test.com/dashboard/new?utm_source=grafana_gettingstarted&orgId=1&editPanel=2" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 923 0.004 [default-loki-grafana-80] [] 10.244.2.166:3000 48506 0.004 200 ff60f8d964d4915e87fa8bcded416bea
192.168.88.20 - - [09/Sep/2025:04:20:53 +0000] "GET /public/app/plugins/panel/logs/img/icn-logs-panel.svg HTTP/1.0" 200 2419 "https://loki-grafana.test.com/dashboard/new?utm_source=grafana_gettingstarted&orgId=1&editPanel=2" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 793 0.000 [default-loki-grafana-80] [] 10.244.2.166:3000 2419 0.001 200 5c144656dac272af3fc1985ff648a129
192.168.88.20 - - [09/Sep/2025:04:24:36 +0000] "GET /api/dashboards/home HTTP/1.0" 200 1347 "https://loki-grafana.test.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 685 0.014 [default-loki-grafana-80] [] 10.244.2.166:3000 1347 0.014 200 ad5caa75eac40579fb4c43cd3003e68f
192.168.88.20 - - [09/Sep/2025:04:24:36 +0000] "GET /api/plugins?embedded=0&core=0 HTTP/1.0" 200 2 "https://loki-grafana.test.com/?orgId=1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 703 0.001 [default-loki-grafana-80] [] 10.244.2.166:3000 2 0.001 200 1621183ca966aa5900634feab83c557c
192.168.88.20 - - [09/Sep/2025:04:24:36 +0000] "GET /api/search?limit=30 HTTP/1.0" 200 2 "https://loki-grafana.test.com/?orgId=1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 693 0.001 [default-loki-grafana-80] [] 10.244.2.166:3000 2 0.001 200 854dedfb07dd5e9b4537752137fd790c
192.168.88.20 - - [09/Sep/2025:04:24:36 +0000] "GET /api/search?limit=30 HTTP/1.0" 200 2 "https://loki-grafana.test.com/?orgId=1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 693 0.001 [default-loki-grafana-80] [] 10.244.2.166:3000 2 0.001 200 c809a09520eda8887f25c1439aaf31f1
192.168.88.20 - - [09/Sep/2025:04:24:40 +0000] "GET /api/datasources/uid/P8E80F9AEF21F6940 HTTP/1.0" 200 334 "https://loki-grafana.test.com/datasources/edit/P8E80F9AEF21F6940" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 737 0.001 [default-loki-grafana-80] [] 10.244.2.166:3000 334 0.001 200 693901c32c1eb0326425f83523b87c89

對比一下使用 loki 的日誌查詢結果,不能說完全一樣,只能說別無二致,非常便利!





本文內容參閱以下連結:
Day 26 Loki - 把 Log 蒐集儲存起來吧

推薦閱讀:

tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言