Kubernetes日誌系統新貴Loki-Stack
阿新 • • 發佈:2020-12-01
### Loki簡介
Grafana Loki是可以組成功能齊全的日誌記錄堆疊的一組元件。
與其他日誌記錄系統不同,Loki是基於僅索引有關日誌的元資料的想法而構建的:標籤(就像Prometheus標籤一樣)。 然後,日誌資料本身被壓縮並存儲在物件儲存(例如S3或GCS)中的塊中,甚至儲存在檔案系統本地。 小索引和高度壓縮的塊簡化了操作,並大大降低了Loki的成本。
相較於EKL,Loki就顯得很輕量級了;用了Loki以後,ELK突然不香了!哈哈~~~
### Loki-stack元件
先放兩張圖
![](https://img2020.cnblogs.com/blog/2156744/202012/2156744-20201201111110243-1325749092.png)
![](https://img2020.cnblogs.com/blog/2156744/202012/2156744-20201201111115553-1047215453.png)
- **Promtail**
> Promtail 是用來將容器日誌傳送到 Loki 或者 Grafana 服務上的日誌收集工具,該工具主要包括髮現採集目標以及給日誌流新增上 Label 標籤,然後傳送給 Loki,另外 Promtail 的服務發現是基於 Prometheus 的服務發現機制實現的。
- **Loki**
> Loki 是可以水平擴充套件、高可用以及支援多租戶的日誌聚合系統,使用了和 Prometheus 相同的服務發現機制,將標籤新增到日誌流中而不是構建全文索引。因此,從 Promtail 接收到的日誌和應用的 metrics 指標就具有相同的標籤集。它不僅提供了更好的日誌和指標之間的上下文切換,還避免了對日誌進行全文索引。
- **Grafana**
> Grafana 是一個用於監控和視覺化觀測的開源平臺,支援非常豐富的資料來源,在 Loki 技術棧中它專門用來展示來自 Prometheus 和 Loki 等資料來源的時間序列資料。還允許進行查詢、視覺化、報警等操作,可以用於建立、探索和共享資料 Dashboard
接下來我們就來上手體驗Loki-stack
### 使用helm部署loki-stack
1、前提,需要有一個k8s叢集和安裝好helm工具
2、新增helm源
```shell
helm repo add loki https://grafana.github.io/loki/charts
下載到本地,也可以直接安裝,因為需要修改儲存類及其他一些配置,我習慣下載到本地,方便修改除錯
helm fetch loki/loki-stack
tar -zxf loki-stack-0.38.1.tgz
cd loki-stack/
[root@ loki-stack]# ls -al
drwxr-xr-x. 7 root root 85 Jul 2 07:25 charts
-rwxr-xr-x. 1 root root 369 Jul 1 01:46 Chart.yaml
-rwxr-xr-x. 1 root root 342 Jul 1 01:46 .helmignore
-rwxr-xr-x. 1 root root 1662 Jul 1 01:46 README.md
-rwxr-xr-x. 1 root root 533 Jul 1 01:46 requirements.lock
-rwxr-xr-x. 1 root root 595 Jul 1 01:46 requirements.yaml
drwxr-xr-x. 3 root root 80 Jul 2 08:46 templates
-rwxr-xr-x. 1 root root 206 Jul 16 00:53 values.yaml
```
3、修改loki-stack的values.yaml檔案,我這裡只安裝了loki和promtail,而grafana和prometheus我就用叢集已經部署好的prometheus-operator了
```yaml
[root@ ]# cat values.yaml
loki:
enabled: true
promtail:
enabled: true
```
4、修改loki的values.yaml,
主要修改storageClass和persistence size,開啟serviceMonitor以便監控loki
```shell
[root@ loki-stack]# cd charts/loki/
[root@ loki]# ll
total 20
-rw-r--r-- 1 root root 367 Nov 28 00:31 Chart.yaml
-rw-r--r-- 1 root root 1846 Nov 28 00:31 README.md
drwxr-xr-x 2 root root 4096 Dec 1 09:14 templates
-rw-r--r-- 1 root root 6695 Dec 1 09:15 values.yaml
persistence:
enabled: true
storageClass: "rbd"
accessModes:
- ReadWriteOnce
size: 100Gi
annotations: {}
serviceMonitor:
enabled: true
interval: ""
additionalLabels: {}
annotations: {}
# scrapeTimeout: 10s
```
5、修改promtail的values.yaml
如果你想新增更多的日誌目錄,可以在這裡新增
```shell
# Extra volumes to scrape logs from
volumes:
- name: docker
hostPath:
path: /var/lib/docker/containers
- name: pods
hostPath:
path: /var/log/pods
```
6、執行部署
```shell
cd loki-stack
kubectl create ns loki
helm install loki -n loki -f values.yaml .
[root@ loki-stack]# helm ls -n loki
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
loki loki 1 2020-12-01 09:15:22.971437761 +0800 CST deployed loki-stack-2.1.0 v2.0.0
```
7、登入到已有的grafana介面,新增loki源
首先獲取到loki的服務地址
```shell
[root@ loki-stack]# kubectl get svc -n loki
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki NodePort 10.101.12