日志服务器

PLG(Promtail + Loki + Grafana)

轻量级的日志采集和展示框架。

日志采集

Promtail(暂时不用)

看起来是每个节点需要部署的,用于收集日志并且发送给loki的工具。

Docker driver

插件安装

Docker driver client | Grafana Loki documentation

# 安装docker插件 --alias用于推送
docker plugin install grafana/loki-docker-driver:2.9.2 --alias inner-harbor.faceunity.com/alg/grafana/loki-docker-driver:2.9.2 --grant-all-permissions

# 推送插件到self-hosted docker registry
docker plugin push inner-harbor.faceunity.com/alg/grafana/loki-docker-driver:2.9.2

# 随后可以从harbor上重新安装并且定义--alias loki
docker plugin install inner-harbor.faceunity.com/alg/grafana/loki-docker-driver:2.9.2 --alias loki --grant-all-permissions

# 查看插件
docker plugin ls

# 更新docker driver client
docker plugin disable loki --force
docker plugin upgrade loki grafana/loki-docker-driver:2.9.2 --grant-all-permissions
docker enable loki
sudo systemctl restart docker

# 卸载
docker plugin disable loki --force
docker plugin rm loki

docker配置

Docker driver client configuration | Grafana Loki documentation

Loki配置

services:
  loki:
    image: grafana/loki:latest
    container_name: loki
    user: "${UID}"
    ports:
      - "31000:3100"
    volumes:
      - ./data/loki/config:/etc/loki
      - ./data/loki/loki-storage:/tmp/loki
    command: -config.file=/etc/loki/local-config.yml
UID=1000
GID=1000
# This is a complete configuration to deploy Loki backed by the filesystem.
# The index will be shipped to the storage via tsdb-shipper.

auth_enabled: false

server:
  http_listen_port: 3100

common:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory
  replication_factor: 1
  path_prefix: /tmp/loki

schema_config:
  configs:
  - from: 2024-11-24
    store: tsdb
    object_store: filesystem
    schema: v13
    index:
      prefix: index_
      period: 24h

storage_config:
  filesystem:
    directory: /tmp/loki/chunks

测试

# 首先写入log.json
{
  "streams": [
    {
      "stream": {
        "label1": "value1",
        "label2": "value2"
      },
      "values": [
        ["1732492800000000000", "I am just testing."]
      ]
    }
  ]
}

# 时间戳获取的方法是:$(date -d "2024-11-25T00:00:00Z" +%s)000000000 ns
curl -X POST "http://localhost:3100/loki/api/v1/push" -H "Content-Type: application/json" --data-binary @log.json

Grafana配置

// 需要看看怎么把配置或者一些信息固化平且映射出去
services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    user: "${UID}"
    ports:
      - "30000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - ./data/grafana:/var/lib/grafana