日志收集
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 集成,可在仪表盘中查看日志:
- 打开 Grafana
- 进入 Explore
- 选择 VictoriaLogs 数据源
- 输入 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 中配置基于日志的告警规则。
日志最佳实践
-
保留合适时间:根据合规要求和存储空间设置保留期
-
关注关键日志:
- FATAL 和 ERROR 级别日志
- 认证相关日志
- 复制相关日志
-
日志分析:
- 定期分析慢查询日志优化性能
- 分析错误日志排查问题
-
日志保护:
- 日志文件权限 0640
- 集中存储防止篡改
-
日志轮转:
- 配置自动轮转避免磁盘撑满
- 归档重要日志