搭建轻量级日志系统:Loki + Promtail 完全指南

将多台云主机的日志集中管理,资源占用低,部署简单

为什么需要日志系统?

当你有多台云服务器时,分散的日志让排查问题变得困难:

  • SSH 每台服务器查看日志效率低下
  • 日志分散无法进行统一分析
  • 日志丢失没有历史记录可查

本文介绍一套基于 Loki + Promtail 的轻量级日志集中方案:

  • 超低资源占用:Agent 仅需 10-30MB 内存
  • 部署简单:二进制文件,无需复杂依赖
  • 完美集成 Grafana:如果你已有 Prometheus + Grafana,直接复用

方案架构

搭建轻量级日志系统:Loki + Promtail 完全指南

组件介绍

组件作用资源占用
Loki日志存储和聚合服务~150MB RAM
Promtail日志采集 Agent~20MB RAM
Grafana日志查询和展示已有

部署步骤

第一步:部署 Loki(Homelab 主机)

创建工作目录:

mkdir -p /opt/loki/{config,data}
cd /opt/loki

编写配置文件 config/loki-config.yml

server:
http_listen_port: 3100

common:
path_prefix: /loki
storage:
  filesystem:
    chunks_directory: /loki/chunks
    rules_directory: /loki/rules
replication_factor: 1
ring:
  kvstore:
    store: inmemory

limits_config:
retention_period: 30d
allow_structured_metadata: false

schema_config:
configs:
  - from: 2024-01-01
    store: boltdb-shipper
    object_store: filesystem
    schema: v11
    index:
      prefix: index_
      period: 24h

使用 Docker Compose 启动:

# docker-compose.yml
version: "3.8"

services:
loki:
  image: grafana/loki:3.6.4
  container_name: loki
  restart: unless-stopped
  ports:
    - "3100:3100"
  volumes:
    - ./config/loki-config.yml:/etc/loki/local-config.yaml:ro
    - ./data:/loki
  command: -config.file=/etc/loki/local-config.yaml

启动服务:

docker-compose up -d
curl http://localhost:3100/ready
# 返回 ready 表示成功

第二步:部署 Promtail(云主机)

下载并安装 Promtail:

VERSION="3.6.4"
wget https://github.com/grafana/loki/releases/download/v${VERSION}/promtail-linux-amd64.zip -O /tmp/promtail.zip
unzip /tmp/promtail.zip -d /tmp/
sudo mv /tmp/promtail-linux-amd64 /usr/local/bin/promtail
sudo chmod +x /usr/local/bin/promtail

创建配置文件 /etc/promtail/config.yml

server:
http_listen_port: 9080

positions:
filename: /var/lib/promtail/positions.yaml

clients:
- url: http://<你的Loki地址>:3100/loki/api/v1/push
  tenant_id: "1"

scrape_configs:
# 系统日志
- job_name: system
  static_configs:
    - labels:
        job: system
        hostname: 主机名
        __path__: /var/log/messages

# Nginx 访问日志
- job_name: nginx-access
  static_configs:
    - labels:
        job: nginx
        type: access
        hostname: 主机名
        __path__: /var/log/nginx/access.log
    - labels:
        job: nginx
        type: access
        hostname: 主机名
        __path__: /var/wwwlogs/*.log

# Nginx 错误日志
- job_name: nginx-error
  static_configs:
    - labels:
        job: nginx
        type: error
        hostname: 主机名
        __path__: /var/log/nginx/error.log

# Docker 容器日志
- job_name: docker
  static_configs:
    - labels:
        job: docker
        hostname: 主机名
        __path__: /var/lib/docker/containers/*/*-json.log

创建 systemd 服务:

sudo tee /etc/systemd/system/promtail.service > /dev/null <<'EOF'
[Unit]
Description=Promtail log agent
After=network-online.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/config.yml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable promtail
sudo systemctl start promtail

第三步:配置 Grafana

  1. 打开 Grafana → ConfigurationData Sources
  2. 点击 Add data source,选择 Loki
  3. 配置如下:
    • Name: Loki
    • URL: http://loki:3100
    • HTTP Headers: 添加 X-Scope-OrgID: 1
  4. 点击 Save & Test

第四步:查询日志

在 Grafana Explore 页面,使用 LogQL 查询语言:

# 查看所有日志
{job="system"}

# 查看特定主机的日志
{hostname="tokyo"}

# 查看包含错误的日志
{job="nginx"} |= "error"

# 查看状态码非 200 的请求
{job="nginx", type="access"} | json | status != "200"

# 统计日志量
count_over_time({job="system"}[1h])

常见问题

Q: Promtail 不支持 systemd journal 怎么办?

A: 1、使用 /var/log/messages 文件代替,配置方式见上文。

A: 2、使用 docker部署。

Q: 日志文件权限被拒绝?

A: 修改日志文件权限:

chmod 644 /var/log/messages
chmod 644 /var/log/nginx/*.log

Q: Docker 容器日志无法采集?

A: 确保 Promtail 以 root 运行,或修改目录权限。

Q: Loki 返回 401 错误?

A: 在 Grafana 数据源配置中添加 HTTP Header:X-Scope-OrgID: 1

搭建轻量级日志系统:Loki + Promtail 完全指南

总结

这套方案的优点:

  • 轻量级:Agent 内存占用仅 20MB
  • 简单:配置文件清晰,易于维护
  • 可靠:基于 Grafana 官方技术栈
  • 免费:开源软件,无商业限制

如果你已经使用 Prometheus + Grafana 监控服务器,添加 Loki 作为日志系统是自然而然的选择。


软件版本:Loki 3.6.4 | Promtail 3.6.4

相关链接

给TA打赏
共{{data.count}}人
人已打赏
Zabbix监控

Zabbix部署及基础配置完全指南

2025-8-4 14:13:49

SRE可观测性监控

基于 Dify + Grafana MCP 的智能巡检与日志分析系统

2026-2-8 20:43:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索