洛基(Loki),是北歐神話中的惡作劇和謊言之神,亦是火神。他是巨人法布提(Farbauti)和女巨人勞菲(Laufey)的兒子,阿薩神族主神奧丁(Odin)的義兄弟,雖然他比奧丁要年輕許多。但他的個性狡猾奸詐,經常出言不遜,與其他神祇爭吵不休。他是北歐神話體系里極為重要的神祇之一,他在諸神黃昏扮演重要角色。
簡介
Loki是受Prometheus啟發由Grafana Labs團隊最新的開源項目,是水平可擴展,高可用性,多租戶的日志聚合系統。 Google go語言開發。它的設計非常經濟高效且易於操作,因為它不會為日志內容編制索引,而是為每個日志流編制一組標簽。官方的介紹就是:Like Prometheus, but for logs.,類似於 Prometheus 的日志系統。
特性
- 不對日志進行全文索引。
Loki中存儲的是壓縮后的非結構化日志,並且只對元數據建立索引,因此Loki具有操作簡單、低成本的優勢。 - 使用與 Prometheus 相同的標簽。
Loki通過標簽對日志進行索引和分組,這使得日志的擴展和操作效率更高。 - 特別適合儲存 Kubernetes Pod 日志。諸如 Pod 標簽之類的元數據會被自動刪除和編入索引。
- Grafana 原生支持。
Loki 日志系統由以下3個部分組成:
- loki是主服務器,負責存儲日志和處理查詢。
- promtail是專為loki定制的代理,負責收集日志並將其發送給 loki 。
- Grafana用於 UI展示。
系統架構

-
Promtail收集並將日志發送給Loki的 Distributor 組件
-
Distributor會對接收到的日志流進行正確性校驗,並將驗證后的日志分批並行發送到Ingester
-
Ingester 接受日志流並構建數據塊,壓縮后存放到所連接的存儲后端
-
Querier 收到HTTP查詢請求,並將請求發送至Ingester 用以獲取內存數據 ,Ingester 收到請求后返回符合條件的數據 ;
如果 Ingester 沒有返回數據,Querier 會從后端存儲加載數據並遍歷去重執行查詢 ,通過HTTP返回查詢結果。
Loki與ELK比較
- ELK功能豐富,但是架構復雜,資源占用高,很多功能系統用不上,造成很多資源浪費。
- ELK進行全文索引。安裝部署復雜。
- Loki不對日志全文索引。通過存儲壓縮非結構化日志和僅索引元數據,Loki 操作起來會更簡單,更省成本。
- Loki通過使用與 Prometheus 相同的標簽記錄流對日志進行索引和分組,這使得日志的擴展和操作效率更高。
- Loki安裝部署簡單快速,且受 Grafana 原生支持。
假如系統依賴於ES,建議使用ELK作為日志系統。若系統不依賴ES,選擇用Loki。
安裝部署Loki
使用docker-compose安裝
編寫docker-compose.yaml文件
version: "3"
networks:
loki:
services:
loki:
container_name: loki
image: grafana/loki:1.5.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
container_name: promtail
image: grafana/promtail:1.5.0
volumes:
- /home/chinda/logs:/var/log
- /mydata/loki/promtail/promtail.yaml:/etc/promtail/docker-config.yaml
command: -config.file=/etc/promtail/docker-config.yaml
networks:
- loki
grafana:
container_name: grafana
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
注意: 數據卷需將promtail.yaml文件創建出來。
配置promtail.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
運行容器
docker-compose -f docker-compose.yaml up -d
配置Grafand
- 登錄到Grafana實例。 如果這第一次運行Grafana,則用戶名和密碼均默認為admin。
- 在Grafana中,通過左側欄中的齒輪圖標提添加數據源。
- 選擇Loki數據源
- 添加監聽接口http://loki:3100
- 左側欄中的Explore中選擇labels查看日志。
UI控制台
http://localhost:3000
賬號:admin
密碼: admin
