實戰(zhàn):基于Loki采集K8s日志
一、 Loki介紹
1、 Loki是一個水平可擴展、高可用性、輕量易用、多租戶的日志聚合系統(tǒng),它的設(shè)計非常經(jīng)濟高效且易于操作,因為它不會為日志內(nèi)容編制索引,而是為每一個日志流編制一組標(biāo)簽,項目是受Prometheus啟發(fā),專門為Prometheus和k8s用戶做了相關(guān)優(yōu)化。
2、 Loki的架構(gòu)非常簡單,主要由以下三部分組成: ①,Loki:主服務(wù)器,負(fù)責(zé)存儲日志和處理查詢,類似于es,使用了和Prometheus相同的服務(wù)發(fā)現(xiàn)機制,將標(biāo)簽添加到日志流中而不是構(gòu)建全文索引。因此,從promtail接收到的日志和應(yīng)用的metrics指標(biāo)就具有相同的標(biāo)簽集。它不僅提供了更好的日志和指標(biāo)之間的上下文切換,還避免了對日志進行全文索引。
②,promtail:采集端,負(fù)責(zé)采集日志發(fā)送給Loki,類似于filebeat,該工具主要包括發(fā)現(xiàn)采集目標(biāo)以及給日志流添加上label標(biāo)簽,然后發(fā)送給Loki。promtail的服務(wù)發(fā)現(xiàn)是基于Prometheus的服務(wù)發(fā)現(xiàn)機制實現(xiàn)的。
③,grafana(大家都已很熟悉了):負(fù)責(zé)采集日志的展示,支持非常豐富的數(shù)據(jù)源。在Loki技術(shù)棧中g(shù)rafana主要用來展示來自Prometheus和Loki等數(shù)據(jù)源的時間序列數(shù)據(jù),還允許進行查詢、可視化、告警等操作,可以在頁面查詢指定標(biāo)簽pod的日志。
二,安裝helm
注:Loki提供了helm的安裝方式,可以直接下載包進行安裝,所以先進行helm的安裝(master節(jié)點安裝)
1,下載helm安裝包
[root@master ~]# wget https://get.helm.sh/helm-v3.9.0-linux-amd64.tar.gz
圖片
2、 解壓安裝包,并將helm的可執(zhí)行命令移動到/usr/bin/目錄下(安裝簡單)
[root@master ~]# tar -xf helm-v3.9.0-linux-amd64.tar.gz #解壓
[root@master ~]# cd linux-amd64/
[root@master linux-amd64]# ls
helm LICENSE README.md
[root@master linux-amd64]# mv helm /usr/bin/
圖片
3、 設(shè)置helm的自動補全
[root@master linux-amd64]# vim /etc/profile #編輯該文件
source <(helm completion bash) #文檔最后寫入該命令
[root@master linux-amd64]# source /etc/profile #使其生效
圖片
4、 驗證是否安裝成功
[root@master ~]# helm version #查看版本
version.BuildInfo{Version:"v3.9.0", GitCommit:"7ceeda6c585217a19a1131663d8cd1f7d641b2a7", GitTreeState:"clean", GoVersion:"go1.17.5"}
[root@master ~]# helm repo list #查看倉庫
Error: no repositories to show #還沒有添加倉庫
[root@master ~]# helm env #查看helm的配置信息
HELM_BIN="helm"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry/config.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
三,部署Loki
1、 添加helm源(倉庫)
[root@master ~]# helm repo add grafana https://grafana.github.io/helm-charts #添加倉庫
"grafana" has been added to your repositories
[root@master ~]#
[root@master ~]#
[root@master ~]# helm repo list #查看倉庫
NAME URL
grafana https://grafana.github.io/helm-charts
[root@master ~]# helm search repo | grep loki #在倉庫中搜索可用的helm的charts
grafana/loki 5.36.3 2.9.2 Helm chart for Grafana Loki in simple, scalable...
grafana/loki-canary 0.14.0 2.9.1 Helm chart for Grafana Loki Canary
grafana/loki-distributed 0.76.1 2.9.2 Helm chart for Grafana Loki in microservices mode
grafana/loki-simple-scalable 1.8.11 2.6.1 Helm chart for Grafana Loki in simple, scalable...
grafana/loki-stack 2.9.11 v2.6.1 Loki: like Prometheus, but for logs. #下載最后一個堆棧類型,包含了各日志工具
2、下載helm的charts 注:也可以直接安裝,因需要修改一些配置,可以選擇先下載到本地
[root@master ~]# helm pull grafana/loki-stack #下載
[root@master ~]# ls
anaconda-ks.cfg calico.yaml helm-v3.9.0-linux-amd64.tar.gz linux-amd64 loki-stack-2.9.11.tgz
2、 解壓
[root@master ~]# tar -xf loki-stack-2.9.11.tgz #解壓
[root@master ~]# cd loki-stack
[root@master loki-stack]# ls #可以看到,解壓后目錄下會有多個資源文件
charts Chart.yaml README.md requirements.lock requirements.yaml templates values.yaml
4、修改主配置文件(資源文件),啟用grafana
[root@master loki-stack]# vim values.yaml
36 grafana:
37 enabled: true #由false修改為true,啟用grafana
38 sidecar:
39 datasources:
40 label: ""
41 labelValue: ""
42 enabled: true
43 maxLines: 1000
44 image:
45 tag: 8.3.5
圖片
5、安裝部署應(yīng)用并查看資源
先創(chuàng)建一個名為loki的命名空間
[root@master loki-stack]# kubectl create ns loki
namespace/loki created
[root@master loki-stack]# helm install loki -n loki . #安裝,這里最后有個點,為引用當(dāng)前目錄下的資源
NAME: loki
LAST DEPLOYED: Sat Nov 18 14:43:20 2023
NAMESPACE: loki
STATUS: deployed
REVISION: 1
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See http://docs.grafana.org/features/datasources/loki/ for more detail.
[root@master loki-stack]# kubectl -n loki get pods #查看pod資源
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 8m43s
loki-grafana-6b5f7dc79-rjcwm 2/2 Running 0 8m43s
loki-promtail-t69rd 1/1 Running 0 8m43s
loki-promtail-tckwm 1/1 Running 0 8m43s
[root@master loki-stack]#
[root@master loki-stack]#
[root@master loki-stack]#
[root@master loki-stack]# kubectl -n loki get deploy #查看控制器
NAME READY UP-TO-DATE AVAILABLE AGE
loki-grafana 1/1 1 1 8m49s
圖片
此時grafana的service類型為clusterip,需要修改類型為nodeport,以供外網(wǎng)訪問
圖片
6、 通過edit修改grafana的service類型
[root@master loki-stack]# kubectl -n loki edit svc loki-grafana
service/loki-grafana edited #修改類型為nodeport
[root@master loki-stack]# kubectl -n loki get svc #查看暴露的端口
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki ClusterIP 10.96.209.225 <none> 3100/TCP 14m
loki-grafana NodePort 10.96.164.26 <none> 80:31276/TCP 14m
loki-headless ClusterIP None <none> 3100/TCP 14m
loki-memberlist ClusterIP None <none> 7946/TCP 14m
四、 訪問
1、 先獲取登錄密碼
[root@master loki-stack]# kubectl get secret -n loki loki-grafana -o jsnotallow="{.data.admin-password}" | base64 --decode ; echo
hdHI2C0vBAWdE6dw8Mbx7j846JZSsCUXbmUXLx4g #獲取到的密碼
2、 登錄,任一節(jié)點ip+端口 用戶為admin,密碼為命令行獲取到的密碼
圖片
默認(rèn)已經(jīng)添加了Loki數(shù)據(jù)源
圖片
3、 導(dǎo)入模板
可以到官網(wǎng)下載
grafana模板官網(wǎng):https://grafana.com/grafana/dashboards/?search=linux
導(dǎo)入下載的模板,并選擇Loki數(shù)據(jù)源
圖片
日志展示
圖片
圖片