Docker(七): 安裝Loki


洛基(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展示。

系統架構

LokiAt

  1. Promtail收集並將日志發送給Loki的 Distributor 組件

  2. Distributor會對接收到的日志流進行正確性校驗,並將驗證后的日志分批並行發送到Ingester

  3. Ingester 接受日志流並構建數據塊,壓縮后存放到所連接的存儲后端

  4. 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

  1. 登錄到Grafana實例。 如果這第一次運行Grafana,則用戶名和密碼均默認為admin。
  2. 在Grafana中,通過左側欄中的齒輪圖標提添加數據源。
  3. 選擇Loki數據源
  4. 添加監聽接口http://loki:3100
  5. 左側欄中的Explore中選擇labels查看日志。

UI控制台

http://localhost:3000
賬號:admin
密碼: admin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM