輕量日誌系統Loki

一.需求來源

公司之前是有使用elk日誌系統的,由於elk太重,且成本高,不得不拋棄.尋求輕量級日誌系統--->Loki

二.Loki 介紹

Loki是受Prometheus啓發由Grafana Labs團隊開源的水平可擴展,高度可用的多租戶日誌聚合系統。 開發語言: Google Go。它的設計具有很高的成本效益,並且易於操作。使用標籤來作爲索引,而不是對全文進行檢索,也就是說,你通過這些標籤既可以查詢日誌的內容也可以查詢到監控的數據籤,極大地降低了日誌索引的存儲。系統架構十分簡單,由以下3個部分組成 

  • Loki 是主服務器,負責存儲日誌和處理查詢 。
  • promtail 是代理,負責收集日誌並將其發送給 loki 。
  • Grafana 用於 UI 展示

只要在應用程序服務器上安裝promtail來收集日誌然後發送給Loki存儲,就可以在Grafana UI界面通過添加Loki爲數據源進行日誌查詢(如果Loki服務器性能不夠,可以部署多個Loki進行存儲及查詢)。作爲一個日誌系統不關只有查詢分析日誌的能力,還能對日誌進行監控和報警 


二.Loki架構圖

  1. promtail收集並將日誌發送給loki的 Distributor 組件

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

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

  4. Querier 收到HTTP查詢請求,並將請求發送至Ingester 用以獲取內存數據 ,Ingester 收到請求後返回符合條件的數據;
    如果 Ingester 沒有返回數據,Querier 會從後端存儲加載數據並遍歷去重執行查詢 ,通過HTTP返回查詢結果

四、與 ELK 比 較

  • ELK雖然功能豐富,但規模複雜,資源佔用高,操作苦難,很多功能往往用不上,有點殺雞用牛刀的感覺。
  • 不對日誌進行全文索引。通過存儲壓縮非結構化日誌和僅索引元數據,Loki 操作起來會更簡單,更省成本。
  • 通過使用與 Prometheus 相同的標籤記錄流對日誌進行索引和分組,這使得日誌的擴展和操作效率更高。
  • 安裝部署簡單快速,且受 Grafana 原生支持


五.安裝環境 與 部署

服務器

系統

IP

Loki主機

Centos 7.8

192.168.82.217

promtail主機

Centos 7.8

192.168.82.217


Step 1.下載安裝軟件

$ curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip" 
$ curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"


$ mkdir /usr/local/loki
$ unzip -q loki-linux-amd64.zip -d /usr/local/loki/
$ unzip -q promtail-linux-amd64.zip -d /usr/local/loki/


Step 2.1 Loki 配置文件

$ loki-local-config.yaml 

auth_enabled: false

server:
  http_listen_port: 3100     #監聽的端口

ingester:
  lifecycler:
    address: 192.168.82.217 
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
  max_transfer_retries: 0

schema_config:
  configs:
    - from: 2020-07-29
      store: boltdb
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 168h

storage_config:
  boltdb:
    directory: /usr/local/loki/data/index   #自定義boltdb目錄

  filesystem:
    directory: /usr/local/loki/data/chunks  #自定義filesystem目錄

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

chunk_store_config:
  max_look_back_period: 0s

table_manager:
  retention_deletes_enabled: false
  retention_period: 0s


Step 2.2 Promtail 配置文件

$ promtail-local-config.yaml 

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /data/tmp/positions.yaml

clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
- job_name: nginx
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginxlogs
      __path__: /var/log/*log  #自定義被採集的日誌路徑(支持正則表達)


 

Step 3.啓動 Loki  Promtail

  • Loki 監聽端口3100    promtail監聽端口9080
$ nohup /usr/local/loki/loki-linux-amd64 -config.file=/usr/local/loki/loki-local-config.yaml &

$ nohup /usr/local/loki/promtail-linux-amd64 -config.file=/usr/local/loki/promtail-local-config.yaml & 



$ netstat -nvlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15261/sshd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      22765/master        
tcp6       0      0 :::3100                 :::*                    LISTEN      65217/loki-linux-am 
tcp6       0      0 :::33313                :::*                    LISTEN      65227/promtail-linu 
tcp6       0      0 :::9095                 :::*                    LISTEN      65217/loki-linux-am 
tcp6       0      0 :::22                   :::*                    LISTEN      15261/sshd           
tcp6       0      0 :::9080                 :::*                    LISTEN      65227/promtail-linu 
tcp6       0      0 ::1:25                  :::*                    LISTEN      22765/master        


Step 3.安裝grafana

1.安裝依賴
$ yum install initscripts fontconfig  
$ yum install freetype
$ yum install urw-fonts

2.下載 & 安裝
$ wget https://dl.grafana.com/oss/release/grafana-6.7.4-1.x86_64.rpm
$ rpm -ivh grafana-6.7.4-1.x86_64.rpm


3.啓動grafana,監聽端口3000
$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable grafana-server.service
$ sudo /bin/systemctl start grafana-server.service

$ netstat -nvlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15261/sshd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      22765/master        
tcp6       0      0 :::3100                 :::*                    LISTEN      65217/loki-linux-am 
tcp6       0      0 :::33313                :::*                    LISTEN      65227/promtail-linu 
tcp6       0      0 :::9095                 :::*                    LISTEN      65217/loki-linux-am 
tcp6       0      0 :::22                   :::*                    LISTEN      15261/sshd          
tcp6       0      0 :::3000                 :::*                    LISTEN      65513/grafana-serve 
tcp6       0      0 :::9080                 :::*                    LISTEN      65227/promtail-linu 
tcp6       0      0 ::1:25                  :::*                    LISTEN      22765/master    


六.訪問grafana

  • URL: http://192.168.82.217:3000/
  • 首次登陸默認用戶名和密碼 admin,登錄後會提示修改密碼

 

 

1.進入Data Sources添加數據源,選擇Loki,URL爲loki的地址: http://192.168.82:3100 ,Name自己定義

 

2.進入Explore就可以搜索查詢日誌了,日誌查詢由兩部分組成:日誌流選擇器搜索表達式.
   
出於性能原因,需要先通過選擇日誌標籤來選擇日誌流,查詢字段Log labels旁邊的按鈕顯示了可用日誌流的標籤列表.

標籤匹配符:

  • = 完全相等。

  • != 不相等。

  • =~ 正則表達式匹配。

  • !~ 不進行正則表達式匹配。

    {job="nginxlogs",filename="/var/log/yum.log"}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章