Loki Stack 是由Loki、Promtail、Grafana三樣工具組成的日志管理系統,Loki是日志管理系統的後端程式;Promtail是負責抓取Log file並將Log傳到Loki的agent tool ; Grafana則是提供視覺化界面的GUI,有許多開源的Dashboards。
這份文件使用的Loki和Promtail版本為2.7.0。
當Loki Stack建立好後,以下是Loki和Promtail儲存Log的流程圖
以下是使用者使用Grafana GUI查詢Log的流程圖
日誌管理系統(如Loki)專注在文本的收集與檢索分析,監控系統(如Promrtheus)則專注於系統狀態及指標的監控,若能搭配使用,對系統的優化非常有幫助。
藉由監控系統及日誌管理系統觀察系統的效能瓶頸及占用的資源等等,回過頭來修改服務的程式碼,進行更快、更出色的應用程式開發,不斷重複此過程,開發(Dev)和維運人員(Ops)的緊密配合,即可稱為DevOps。
這份文件以docker-compose的方式建立Loki Stack,方便在不同的VM上快速建立,只須事先安裝好docker和docker-compose環境,即可一鍵安裝Loki Stack。
可自行創建Loki和Promtail的config file,對Loki Stack進行精細化配置。Grafana Lab將許多可進行更改的功能配置以描述檔呈現,只需要修改描述檔即可改變程式功能,做到 CaC ( Configuration as Code )。
可將Promtail container的 /var/log mount上需要收集Log file的目錄,以此抓取Log file。
以下為創建此Loki Stack的目錄結構
目錄如下
目錄架構
以下為創建此Loki Stack的目錄結構
.
├── config
│ ├── loki-config.yaml
│ └── promtail-config.yaml
├── docker-compose.yaml
├── grafana-data
│ ├── alerting
│ ├── csv
│ ├── grafana.db
│ ├── plugins
│ └── png
└── tmp
└── loki
創建loki-config.yaml
### 創建loki-config.yaml
vim loki-config.yaml
---------------------------------------------------------------------------
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2022-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
table_manager:
retention_deletes_enabled: true
retention_period: 240h
ruler:
alertmanager_url: http://localhost:9093
---------------------------------------------------------------------------
/tmp/loki是loki儲存日誌的位置
創建promtail-config.yaml
### 創建promtail-config.yaml
vim promtail-config.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: logs
__path__: /var/log/*log
---------------------------------------------------------------------------
### clients的url是需要傳送日誌的服務的url
### scrape_configs裡的job是Promtail要進行的抓取Log工作,在docker-compose.yaml將Promtail container裡的/var/log mount上要抓取Log file的目錄,以此讀取本機的.log檔。
創建docker-compose.yaml
### 創建docker-compose.yaml
vim docker-compose.yaml
docker-compose.yaml
---------------------------------------------------------------------------
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.7.0
user: root
restart: always
ports:
- "3111:3100"
volumes:
- ./config/loki-config.yaml:/etc/loki/local-config.yaml
- ./tmp/loki:/tmp/loki
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:2.7.0
volumes:
- ./config/promtail-config.yaml:/etc/promtail/config.yaml
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
image: grafana/grafana:9.5.3
user: root
restart: always
ports:
- "3050:3000"
volumes:
- ./grafana-data:/var/lib/grafana
networks:
- loki
---------------------------------------------------------------------------
### 執行docker-compose
docker-compose up -d
註:-d 代表背景執行
輸入http://${目標IP}: ${docker-compose裡grafana對外暴露的Port}/login 後出現登入畫面
預設帳號密碼為 帳號:admin、密碼:admin
進入主畫面後按下 "Add your first data source "
選擇Loki
在URL部分輸入 http:// ${目標IP}: ${docker-compose裡Loki對外暴露的Port}/
按 save & test,成功後即代表data source新增成功
可以在"Explore"部份下LogQL(類似Prometheus的PromQL,但是是Log版本),查詢日志
查看level為ERROR的log
可使用 " Simple Loki Log Dashboard " 這個dashboard
( https://grafana.com/grafana/dashboards/18702-simple-loki-log-dashboard/ )
可於Grafana Lab的Dashboard搜尋需要的Dashboard
https://grafana.com/grafana/dashboards/