fix: 替换所有中文括号为英文括号

feat: 新增操作审计字段 user/action/target/result 到 syslog 输出
docs: 更新 README 输出格式和配置示例说明
This commit is contained in:
QClaw Bot
2026-05-13 13:33:45 +08:00
parent 46651fdc10
commit ebc1a2a87c
5 changed files with 104 additions and 70 deletions

View File

@@ -1,6 +1,6 @@
# db_log_exporter
从 MySQL / PostgreSQL 数据库表中**定时拉取日志**,写入标准 **syslog 格式**RFC 5424 变体文本文件。
从 MySQL / PostgreSQL 数据库表中**定时拉取日志**,写入标准 **syslog 格式**(RFC 5424 变体)文本文件。
---
@@ -22,20 +22,24 @@
## 输出格式
每行一条日志,格式如下RFC 5424 变体
每行一条日志,格式如下(RFC 5424 变体)
```
<priority>1 2026-05-12T15:30:00.123456+08:00 hostname app_name[12345]: [trace=abc123] [span=def456] 日志内容
<priority>1 2026-05-12T15:30:00.123456+08:00 hostname app_name[12345]: [user=张三] [action=删除订单] [target=订单系统] [result=成功] [trace=abc123] [span=def456] 日志内容
```
| 字段 | 说明 |
|------|------|
| `<priority>` | syslog 优先级,`<6>`=INFO `<4>`=WARN `<3>`=ERROR 等 |
| `version` | RFC 5424 版本号,始终为 `1` |
| `timestamp` | ISO 8601 时间含微秒和时区 |
| `hostname` | 配置文件中的 hostname默认系统 hostname |
| `timestamp` | ISO 8601 时间(含微秒和时区) |
| `hostname` | 配置文件中的 hostname(默认系统 hostname) |
| `app_name[pid]` | 配置的 app_name + 本进程 PID |
| `[trace=...] [span=...]` | 结构化数据trace_id / span_id 等) |
| `[user=...]` | 操作人用户名 |
| `[action=...]` | 操作动作,如:删除/创建/更新/登录等 |
| `[target=...]` | 操作对象,如:订单系统/用户管理/配置项等 |
| `[result=...]` | 操作结果,如:成功/失败/超时等 |
| `[trace=...] [span=...]` | 结构化数据(trace_id / span_id 等) |
| `message` | 日志正文 |
---
@@ -70,7 +74,7 @@ sudo mkdir -p /etc/db_log_exporter
sudo nano /etc/db_log_exporter/config.yaml
```
参考 `config.yaml.example`本仓库根目录,主要填:
参考 `config.yaml.example`(本仓库根目录),主要填:
```yaml
databases:
@@ -93,7 +97,7 @@ sources:
message: message
```
### 4. 测试连接Dry-run
### 4. 测试连接(Dry-run)
```bash
python3 /opt/db_log_exporter/db_log_exporter.py \
@@ -103,7 +107,7 @@ python3 /opt/db_log_exporter/db_log_exporter.py \
### 5. 运行方式
**方式 Asystemd 守护进程推荐**
**方式 Asystemd 守护进程(推荐)**
```bash
# 复制 service 文件
@@ -113,7 +117,7 @@ sudo systemctl enable --now db_log_exporter
sudo journalctl -u db_log_exporter -f # 实时查看日志
```
**方式 Bcron 定时任务单次模式**
**方式 Bcron 定时任务(单次模式)**
```bash
# crontab -e
@@ -121,7 +125,7 @@ sudo journalctl -u db_log_exporter -f # 实时查看日志
-c /etc/db_log_exporter/config.yaml --once
```
**方式 C直接运行前台守护**
**方式 C直接运行(前台守护)**
```bash
python3 /opt/db_log_exporter/db_log_exporter.py \
@@ -139,7 +143,7 @@ global:
output_dir: /var/log/db_exporter # 日志输出目录
checkpoint_dir: /var/lib/... # 断点文件目录
hostname: myserver # syslog hostname
interval: 30 # 默认轮询间隔(秒)
interval: 30 # 默认轮询间隔(秒)
batch_size: 1000 # 默认每次最多读条数
databases:
@@ -168,9 +172,14 @@ sources:
message: message
trace_id: trace_id # 可选
span_id: span_id # 可选
# 操作审计字段
user: user # 操作人
action: action # 操作动作
target: target # 操作对象
result: result # 操作结果
```
### 数据库用户权限最小权限
### 数据库用户权限(最小权限)
**MySQL:**
```sql
@@ -192,7 +201,7 @@ GRANT SELECT ON audit_log TO log_reader;
## 与日志采集系统集成
### rsyslog服务器接收
### rsyslog(服务器接收)
```conf
# /etc/rsyslog.d/60-db-exporter.conf
@@ -204,7 +213,7 @@ input(type="imfile"
Facility="local0")
```
### Filebeat采集到 Elasticsearch
### Filebeat(采集到 Elasticsearch)
```yaml
# filebeat.yml
@@ -217,7 +226,7 @@ filebeat.inputs:
fields_under_root: true
```
### PromtailLoki 采集
### Promtail(Loki 采集)
```yaml
# promtail.yml
@@ -240,7 +249,7 @@ scrape_configs:
| 连接被拒绝 | 确认数据库允许该 IP 连接,检查防火墙/安全组 |
| 权限不足 | 确认运行用户对 `output_dir``checkpoint_dir` 有写权限 |
| 日志重复 | 删除对应断点文件并重启,程序会从头拉取 |
| 中文乱码 | 确认数据库字符集为 `utf8mb4`MySQL`UTF8`PG |
| 中文乱码 | 确认数据库字符集为 `utf8mb4`(MySQL)`UTF8`(PG) |
| 连接超时 | 在 `databases` 中加 `connect_timeout: 10` |
---
@@ -249,7 +258,7 @@ scrape_configs:
```
db_log_exporter/
├── db_log_exporter.py # 主程序Python 守护进程
├── db_log_exporter.py # 主程序(Python 守护进程)
├── config.yaml.example # 配置文件示例
├── requirements.txt # Python 依赖
├── db_log_exporter.service # systemd 服务文件
@@ -262,11 +271,11 @@ db_log_exporter/
## 命令行参数
```
-c, --config YAML 配置文件路径必填
--once 仅执行一次轮询后退出适合 cron
-c, --config YAML 配置文件路径(必填)
--once 仅执行一次轮询后退出(适合 cron)
--dry-run 仅测试数据库连接,不写文件
--log-level 日志级别: DEBUG|INFO|WARNING|ERROR默认 INFO
--log-file 本程序日志输出文件默认 stdout
--log-level 日志级别: DEBUG|INFO|WARNING|ERROR(默认 INFO)
--log-file 本程序日志输出文件(默认 stdout)
```
---