iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Software Development

數位醫療與雲原生第一次的親密接觸系列 第 27

Day 27 [ 雲原生 (Cloud Native)] docker-compose安裝Loki(Loki、Promtail、Grafana)

  • 分享至 

  • xImage
  •  

使用docker-compose安裝Loki收集日誌

一、簡介

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的流程圖
https://ithelp.ithome.com.tw/upload/images/20241005/20161987lu1AI6LOrm.png

以下是使用者使用Grafana GUI查詢Log的流程圖

https://ithelp.ithome.com.tw/upload/images/20241005/20161987wSP51MR1we.png

日誌管理系統(如Loki)專注在文本的收集與檢索分析,監控系統(如Promrtheus)則專注於系統狀態及指標的監控,若能搭配使用,對系統的優化非常有幫助。

藉由監控系統及日誌管理系統觀察系統的效能瓶頸及占用的資源等等,回過頭來修改服務的程式碼,進行更快、更出色的應用程式開發,不斷重複此過程,開發(Dev)和維運人員(Ops)的緊密配合,即可稱為DevOps。

二、以docker-compose方式安裝Loki Stack(Loki、Promtail、Grafana)

這份文件以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的目錄結構

目錄如下
https://ithelp.ithome.com.tw/upload/images/20241005/20161987qoCn0PgKS8.png

目錄架構

以下為創建此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 代表背景執行

五、登入Grafana

輸入http://${目標IP}: ${docker-compose裡grafana對外暴露的Port}/login 後出現登入畫面

https://ithelp.ithome.com.tw/upload/images/20241003/20161987XL9pHV2oFs.png
預設帳號密碼為 帳號:admin、密碼:admin

進入主畫面後按下 "Add your first data source "
https://ithelp.ithome.com.tw/upload/images/20241003/20161987ZHNKSAGmfB.png

選擇Loki
https://ithelp.ithome.com.tw/upload/images/20241003/20161987cyApDXJzjU.png

在URL部分輸入 http:// ${目標IP}: ${docker-compose裡Loki對外暴露的Port}/

按 save & test,成功後即代表data source新增成功
https://ithelp.ithome.com.tw/upload/images/20241003/20161987kgPxccdhjY.png

可以在"Explore"部份下LogQL(類似Prometheus的PromQL,但是是Log版本),查詢日志
https://ithelp.ithome.com.tw/upload/images/20241003/20161987jtEejxoW5L.png

查看level為ERROR的log
https://ithelp.ithome.com.tw/upload/images/20241005/20161987jk1rLQYWfV.png

可使用 " Simple Loki Log Dashboard " 這個dashboard
( https://grafana.com/grafana/dashboards/18702-simple-loki-log-dashboard/ )
https://ithelp.ithome.com.tw/upload/images/20241005/20161987brpcaWxfyK.png

可於Grafana Lab的Dashboard搜尋需要的Dashboard
https://grafana.com/grafana/dashboards/
https://ithelp.ithome.com.tw/upload/images/20241005/20161987BAoAqPidiZ.png


上一篇
Day 26 [ 雲原生 ( Cloud Native ) ] K8S安裝Prometheus
下一篇
Day 28 [雲原生( Cloud Native)] K8S安裝Loki
系列文
數位醫療與雲原生第一次的親密接觸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言