centos

Golang日志在CentOS中如何进行日志审计

小樊
36
2025-12-05 18:33:15
栏目: 编程语言

在 CentOS 中对 Golang 应用进行日志审计的完整方案


一、总体思路与分层


二、应用层 Golang 日志规范与示例

package main

import (
	"github.com/sirupsen/logrus"
	"gopkg.in/natefinch/lumberjack.v2"
	"os"
)

func main() {
	log := logrus.New()
	log.SetFormatter(&logrus.JSONFormatter{})
	log.SetLevel(logrus.InfoLevel)

	log.SetOutput(&lumberjack.Logger{
		Filename:   "/var/log/myapp/app.log",
		MaxSize:    100, // MB
		MaxBackups: 30,
		MaxAge:     90,  // days
		Compress:   true,
	})

	log.WithFields(logrus.Fields{
		"user_id": "u1001",
		"action":  "login",
		"ip":      "192.168.1.10",
		"method":  "POST",
		"path":    "/api/v1/login",
		"status":  200,
	}).Info("user login")
}

三、系统层 Linux 审计 auditd 配置

sudo yum -y install audit auditd-libs
sudo systemctl enable --now auditd
sudo tee /etc/audit/rules.d/99-golang-audit.rules >/dev/null <<'EOF'
-a always,exit -F path=/usr/local/bin/myapp -F perm=x -k myapp_exec
-a always,exit -F dir=/var/log/myapp/ -F perm=rwa -k myapp_log
-a always,exit -F path=/etc/myapp/ -F perm=rwa -k myapp_conf
-w /var/lib/myapp/ -p wa -k myapp_data
EOF
sudo augenrules --load
sudo systemctl restart auditd

四、日志收集传输与集中分析

input {
  file {
    path => "/var/log/myapp/app.log"
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb_myapp"
    codec => json
  }
}
filter {
  date {
    match => [ "ts", "ISO8601" ]
    target => "@timestamp"
  }
}
output {
  elasticsearch {
    hosts => ["http://es:9200"]
    index => "myapp-audit-%{+YYYY.MM.dd}"
  }
}

五、运行维护与合规要点

0
看了该问题的人还看了