Contents

Loki 初體驗教學(在Raspberry 啟用 Docker-Loki-Driver)

最近在三台樹莓派使用 Docker 架設服務
但是查看 log 真的不是很方便
最近剛完 Prometheus 看到 Loki
跟 Prometheus 很像,又是跟 Container 很有關係
看了一下部署流程,並不是非常難
所以就食做看看

使用官方 docker-compose loki/docker-compose.yaml at master · grafana/loki · GitHub
grafana 帳號密碼為 admin/admin
進去新加 datasource 為 loki
這樣就算部屬完成

Grafana 要點選 expore 才能看到日誌

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: "3"

networks:
  loki:

services:
  loki:
    image: grafana/loki:2.0.0
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.0.0
    volumes:
      - /var/log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

本機是linux 的話, /var/log/底下都會傳到 loki 日誌去
可以用 volume 把日誌掛到 containr 那邊去
應該也有一樣的效果
不過我下面還有比較好的方法

加 loki datasource 和 explore操作
Loki轻量级日志系统_Kammingo的博客-CSDN博客

輕量級日誌系統Loki原理簡介和使用_平凡人筆記 - MdEditor

docker 實作 Loki 日誌

再 container 把日誌輸出來不是很方便
所以我們是使用 docker 直接輸出日誌
可算非常方便

參考來源:
loki收集docker容器里运行服务的日志,loki+grafana_十个菜-CSDN博客

docker swarm结合loki搭建轻量级日志监控系统 - 琴弦上的尼古丁

安裝 docker loki driver

Docker driver | Grafana Labs

1
2
3
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions 
# 完成可用這個指令
docker plugin ls       

相關升級、移除可以在官網看到

其他
Loki | 数据过期自动删除策略设计 - 华为云

比較有趣看到yaml 模板寫法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3.4"
 
x-logging:
  &loki-logging
  driver: loki
  options:
    loki-url: "http://YOUR_IP:3100/loki/api/v1/push"
    max-size: "50m"
    max-file: "10"
 
services:
  host:
    container_name: grafana
    image: grafana/grafana
    environment:
    - TZ=Asia/Shanghai
    - LANG=zh_CN.UTF-8
    logging: *loki-logging
# ————————————————
# 版权声明:本文为CSDN博主「2018_like菜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# 原文链接:https://blog.csdn.net/u014756339/article/details/111992382

樹莓派安裝法

參考:docker plugin enable Loki gives an error · Issue #974 · grafana/loki · GitHub

  1. 嚐試安裝
1
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions 
  1. 看到錯誤
1
Error response from daemon: dial unix /run/docker/plugins/61d4906b35d0d106db69561446160ba63bddb5f9a30d765293ddc75d11a6935b/loki.sock: connect: no such file or directory
  1. git clone loki
1
git clone --depth=1 https://github.com/grafana/loki.git
  1. 在 loki 資料夾輸入
1
2
3
4
5

# 安裝 golang
sudo apt install golang
# 編譯
GOOS=linux GOARCH=arm GOARM=7 go build ./cmd/docker-driver

樹莓派 build 一直失敗,後來發想到 Golang 也是跨平台
所以我在x86主機編譯順利。

  1. 編譯檔案(docker-driver)複製到/var/lib/docker/plugins/<ALPHA_NUMERIC_FOLDER>/rootfs/bin

把編譯好的 docker-driver,

1
2
sudo ls /var/lib/docker/plugins/
# 有一個很長編碼資料夾就是
  1. 啟動 docker plugin
1
docker plugin enable loki

這邊之前啟動的 docker containr 要刪掉重新起新的 container 才會有用

全局設定

編輯daemon.json。linux下默認路徑是/etc/docker/daemon.json (需要sudo), windows則默認是%userprofile%.docker\daemon.json

1
2
3
4
5
6
7
8
9
{
  "log-driver": "loki",
  "log-opts": {
    "loki-url": "http://YOUR_IP:3100/loki/api/v1/push",
    "max-size": "50m",
    "max-file": "10"
  },
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

參考:loki收集docker容器裡運行服務的日誌,loki+grafana_十個菜-CSDN博客

各自設定

在 docker-compose 裡面加 logging

1
2
3
4
5
6
7
8
version: "3.7"
services:
  logger:
    image: grafana/grafana
    logging:
      driver: loki
      options:
        loki-url: "http://localhost:3100/loki/api/v1/push"

就可以完成

指令可以用

1
2
3
4
5
6
docker run --rm --name=grafana --log-driver=loki --log-opt loki-url="http://YOUR_IP:3100/loki/api/v1/push" --log-opt max-size=50m --log-opt max-file=10 grafana/grafana

# --log-driver=loki指定日志驱动器为loki
# --log-opt loki-url则指定了loki的url
# --log-opt max-size日志最大大小
# --log-opt max-file日志文件最大数量

參考:* loki收集docker容器里运行服务的日志,loki+grafana_十个菜-CSDN博客

使用 Loki 做 Traefik Acess Log 分析

loki 架好後,相關 docker log 設定完
Grafana 設定好 loki 資源
這邊記得把 traefik access log 改成 json

1
2
#traefik
    - "--accesslog.format=json"

import 這個 dashboard Traefik Via Loki dashboard for Grafana | Grafana Labs

還要把 json 內容裡面 label 改掉

1
{job=\"/var/log/traefik.log\"}

換成(這邊換成你電腦相對位置)

1
{container_name=\"rpi-traefik_traefik_1\",host=\"PI202\"}

Traefik 2 监控系统之Grafana Prometheus Promtail Loki完美结合 - 简书
詳細也可以看這篇,也寫得很完整

也有看到非常強的 dashboard
Loki v2 Web Analytics Dashboard for NGINX dashboard for Grafana | Grafana Labs