在 Debian 上对 Golang 日志进行审计的落地方案
一 审计目标与总体架构
二 应用侧日志规范与示例
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
)
func main() {
cfg := zap.Config{
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
},
OutputPaths: []string{"/var/log/myapp/audit.log"},
ErrorOutputPaths: []string{"/var/log/myapp/audit_error.log"},
}
logger, err := cfg.Build()
if err != nil { panic(err) }
defer logger.Sync()
// 审计事件示例
logger.Info("user login",
zap.String("user_id", "u1001"),
zap.String("ip", "192.0.2.10"),
zap.String("action", "login"),
zap.String("status", "success"),
zap.String("trace_id", "abc-123-def"),
)
}
三 系统侧日志采集与轮转
/var/log/myapp/audit.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 myapp adm
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}
chown myapp:adm /var/log/myapp/audit.log; chmod 640 /var/log/myapp/audit.log四 查询分析与监控告警
tail -f /var/log/myapp/audit.loggrep -i "error\|fail" /var/log/myapp/audit.logmultitail /var/log/myapp/*.log,lnav /var/log/myapp/audit.log五 安全加固与合规要点