promtail+loki+Grafana(适合轻量级-数据量不大)

轻量级 Grafana 非 Docker 部署:接入 Nginx 日志

你需要部署一套轻量级的 Grafana 环境来接入 Nginx 日志,且明确要求不使用 Docker 方案,同时考虑到流量不大的场景,我会为你提供一套基于 Linux 系统的原生部署方案,核心采用 Grafana + Promtail + Loki 的轻量级组合(Loki 专为日志场景优化,比 ELK 更轻量)。

一、部署环境说明

以主流的 CentOS 7/8 或 Ubuntu 20.04/22.04 为例,所有组件均采用二进制包部署,无需容器化,适合小流量场景。

前置条件:

  • 服务器已安装 wgetcurlunzipsystemd(主流 Linux 系统默认自带)

  • 关闭防火墙/放行 3000(Grafana)、9080(Promtail)、3100(Loki)端口

二、部署步骤(以 CentOS 7 为例,Ubuntu 仅包管理命令不同)

步骤 1:系统基础准备


# 1. 关闭防火墙(测试环境,生产环境建议精准放行端口)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 2. 创建专用用户(避免 root 运行)
useradd -r -s /sbin/nologin grafana

步骤 2:部署 Loki(日志存储,轻量级)

Loki 是 Grafana 官方的日志聚合工具,比 Elasticsearch 更轻量,适合小流量场景。


# 1. 下载 Loki 二进制包(选择最新稳定版,此处以 v2.9.0 为例)
cd /usr/local/src
wget https://github.com/grafana/loki/releases/download/v2.9.0/loki-linux-amd64.zip
unzip loki-linux-amd64.zip
chmod +x loki-linux-amd64
mv loki-linux-amd64 /usr/local/bin/loki

# 2. 创建 Loki 配置文件(轻量级配置,适配小流量)
mkdir -p /etc/loki /var/lib/loki
cat > /etc/loki/loki-config.yaml << EOF
auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9095

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

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

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
EOF

# 3. 创建 systemd 服务文件
cat > /usr/lib/systemd/system/loki.service << EOF
[Unit]
Description=Loki Log Aggregator
After=network.target

[Service]
User=grafana
Group=grafana
Type=simple
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 4. 启动并设置开机自启
systemctl daemon-reload
systemctl start loki
systemctl enable loki
# 验证启动状态
systemctl status loki

步骤 3:部署 Promtail(采集 Nginx 日志)

Promtail 是 Loki 的日志采集端,负责将 Nginx 日志推送到 Loki。


# 1. 下载 Promtail 二进制包
cd /usr/local/src
wget https://github.com/grafana/loki/releases/download/v2.9.0/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
chmod +x promtail-linux-amd64
mv promtail-linux-amd64 /usr/local/bin/promtail

# 2. 创建 Promtail 配置文件(指定 Nginx 日志路径,需替换为你的实际路径)
mkdir -p /etc/promtail
cat > /etc/promtail/promtail-config.yaml << EOF
server:
  http_listen_port: 9080
  grpc_listen_port: 0

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

clients:
  - url: http://127.0.0.1:3100/loki/api/v1/push

scrape_configs:
- job_name: nginx_logs
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginx_access
      __path__: /var/log/nginx/access.log  # Nginx 访问日志路径
  - targets:
      - localhost
    labels:
      job: nginx_error
      __path__: /var/log/nginx/error.log   # Nginx 错误日志路径

  # 解析 Nginx 日志格式(适配 Nginx 默认日志格式,若你自定义了格式需调整)
  pipeline_stages:
  - match:
      selector: '{job="nginx_access"}'
      stages:
      - regex:
          expression: '^(?P<remote_addr>\S+) - (?P<remote_user>\S+) \[(?P<time>[^\]]+)\] "(?P<request>[^"]+)" (?P<status>\d+) (?P<body_bytes_sent>\d+) "(?P<http_referer>[^"]+)" "(?P<http_user_agent>[^"]+)"$'
      - labels:
          status:
          remote_addr:
      - timestamp:
          source: time
          format: '02/Jan/2006:15:04:05 -0700'
EOF

# 3. 创建数据目录并授权
mkdir -p /var/lib/promtail
chown -R grafana:grafana /var/lib/promtail

# 4. 创建 systemd 服务文件
cat > /usr/lib/systemd/system/promtail.service << EOF
[Unit]
Description=Promtail Log Collector for Loki
After=network.target loki.service

[Service]
User=grafana
Group=grafana
Type=simple
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail-config.yaml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 5. 启动并设置开机自启
systemctl daemon-reload
systemctl start promtail
systemctl enable promtail
# 验证启动状态
systemctl status promtail

步骤 4:部署 Grafana(可视化面板)


# 1. 安装 Grafana(以 CentOS 为例,Ubuntu 可替换为 apt 源)
cat > /etc/yum.repos.d/grafana.repo << EOF
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

yum install -y grafana

# 2. 启动并设置开机自启
systemctl start grafana-server
systemctl enable grafana-server
# 验证启动状态
systemctl status grafana-server

步骤 5:Grafana 配置接入 Loki(可视化 Nginx 日志)

  1. 访问 Grafana:浏览器打开 http://服务器IP:3000,默认账号/密码:admin/admin,首次登录需修改密码。

  2. 添加数据源:

    • 左侧菜单 → Configuration → Data sources → Add data source → 选择 Loki。

    • URL 填写:http://127.0.0.1:3100,其余默认,点击 Save & test,提示 “Data source is working” 即成功。

  3. 查看 Nginx 日志:

    • 左侧菜单 → Explore → 顶部选择 Loki 数据源 → 标签筛选:{job="nginx_access"}{job="nginx_error"} → 点击 Run query 即可查看日志。
  4. (可选)导入 Nginx 可视化面板:

    • 左侧菜单 → Dashboards → Import → 输入面板 ID:11055(官方 Nginx 监控面板)→ 选择 Loki 数据源 → Import,即可看到 Nginx 访问量、状态码、响应时间等可视化指标。

三、关键配置调整(适配你的实际环境)

  1. Nginx 日志路径:若你的 Nginx 日志不在 /var/log/nginx/,需修改 Promtail 配置文件中 __path__ 字段。

  2. Nginx 日志格式:若你自定义了 Nginx 日志格式,需调整 Promtail 配置中的 regex 表达式,确保能正确解析日志字段。

  3. 日志保留时间:Loki 默认按 24h 分片存储,若需调整保留时间,可在 Loki 配置中添加 retention_period: 720h(保留 30 天)。

总结

  1. 本次部署采用 Grafana + Loki + Promtail 轻量级组合,无 Docker 依赖,适配小流量 Nginx 日志场景,资源占用远低于 ELK。

  2. 核心流程:Promtail 采集 Nginx 日志 → 推送到 Loki 存储 → Grafana 从 Loki 读取并可视化日志。

  3. 关键验证点:确保 Loki、Promtail、Grafana 服务均正常运行,Grafana 能成功连接 Loki 数据源,即可正常查看 Nginx 日志。

posted @ 2026-02-02 14:59  Rocky_940120  阅读(40)  评论(0)    收藏  举报