日志收集

VictoriaLogs 集中收集与分析日志。

Pigsty 使用 Vector 收集各组件日志,集中存储到 VictoriaLogs 进行分析和查询。


日志架构

┌─────────────────────────────────────────────────────────────┐
│                     VictoriaLogs                             │
│                    (日志存储与查询)                           │
└───────────────────────────┬─────────────────────────────────┘
                            │ Push
                            │
┌───────────────────────────┴─────────────────────────────────┐
│                         Vector                               │
│                      (日志收集代理)                           │
└───────────────────────────┬─────────────────────────────────┘
                            │ 文件采集
    ┌───────────┬───────────┼───────────┬───────────┐
    │           │           │           │           │
    ▼           ▼           ▼           ▼           ▼
┌───────┐  ┌───────┐  ┌───────┐  ┌───────┐  ┌───────┐
│Postgres│  │Patroni│  │Pgbouncer│ │pgBackRest│ │System│
│  log  │  │  log  │  │  log  │  │  log  │  │  log │
└───────┘  └───────┘  └───────┘  └───────┘  └───────┘

日志来源

PostgreSQL 组件日志

组件 日志路径 说明
PostgreSQL /pg/log/postgres/ 数据库日志
Patroni /pg/log/patroni/ 高可用组件日志
Pgbouncer /pg/log/pgbouncer/ 连接池日志
pgBackRest /pg/log/pgbackrest/ 备份日志

系统日志

日志 路径 说明
系统日志 /var/log/messages 系统事件
认证日志 /var/log/secure 认证事件

PostgreSQL 日志配置

默认配置

# postgresql.conf
log_destination: csvlog
logging_collector: 'on'
log_directory: /pg/log/postgres
log_filename: 'postgresql-%a.log'    # 按星期轮转
log_file_mode: '0640'
log_rotation_age: '1d'
log_truncate_on_rotation: 'on'

# 日志内容
log_checkpoints: 'on'
log_lock_waits: 'on'
log_replication_commands: 'on'
log_statement: ddl                   # 记录 DDL
log_min_duration_statement: 100      # 记录 >100ms 的查询

增强配置(crit.yml)

log_connections: 'receipt,authentication,authorization'
log_disconnections: 'on'
log_lock_failures: 'on'

日志查询

VictoriaLogs 查询语法

# 查询 PostgreSQL 错误日志
{filename="/pg/log/postgres/postgresql-*.log"} | error

# 查询认证失败
{filename=~"/pg/log/.*"} | "authentication failed"

# 查询慢查询
{job="pgsql"} | duration > 1000ms

# 按实例过滤
{ins="pg-meta-1"} | FATAL

Grafana 集成

VictoriaLogs 与 Grafana 集成,可在仪表盘中查看日志:

  1. 打开 Grafana
  2. 进入 Explore
  3. 选择 VictoriaLogs 数据源
  4. 输入 LogsQL 查询

日志存储

存储配置

vlogs_enabled: true
vlogs_port: 9428
vlogs_options: >-
  -retentionPeriod=15d
  -retention.maxDiskSpaceUsageBytes=50GiB

存储路径

/data/victorialogs/      # 日志数据目录

日志告警

常见告警场景

场景 日志模式 说明
认证失败 authentication failed 可能的暴力破解
连接拒绝 no pg_hba.conf entry HBA 配置问题
磁盘空间 No space left 磁盘已满
OOM out of memory 内存不足
复制中断 replication connection 复制问题

配置日志告警

在 AlertManager 中配置基于日志的告警规则。


日志最佳实践

  1. 保留合适时间:根据合规要求和存储空间设置保留期

  2. 关注关键日志

    • FATAL 和 ERROR 级别日志
    • 认证相关日志
    • 复制相关日志
  3. 日志分析

    • 定期分析慢查询日志优化性能
    • 分析错误日志排查问题
  4. 日志保护

    • 日志文件权限 0640
    • 集中存储防止篡改
  5. 日志轮转

    • 配置自动轮转避免磁盘撑满
    • 归档重要日志