From 325fb3097592b967a93f5ed5f4b30cb5c1200382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=90=AF=E8=88=AA?= <101104760+ZhangSetSail@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:07:57 +0800 Subject: [PATCH] fix: log can not look (#2105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张启航 <101104760+ZhangSetSail@users.noreply.github.com> --- api/eventlog/db/eventFilePlugin.go | 10 ++++- api/eventlog/db/filePlugin.go | 1 + config/configs/rbdcomponent/api_config.go | 50 ++++++++++++++++++++--- pkg/component/storage/local_storage.go | 4 ++ pkg/component/storage/s3_storage.go | 40 ++++++++++++++++++ pkg/component/storage/storage.go | 1 + 6 files changed, 98 insertions(+), 8 deletions(-) diff --git a/api/eventlog/db/eventFilePlugin.go b/api/eventlog/db/eventFilePlugin.go index f3cbf5b5d8..2fa5745986 100644 --- a/api/eventlog/db/eventFilePlugin.go +++ b/api/eventlog/db/eventFilePlugin.go @@ -22,6 +22,7 @@ import ( "bufio" "fmt" eventutil "github.com/goodrain/rainbond/api/eventlog/util" + "github.com/goodrain/rainbond/pkg/component/storage" "io" "os" "path" @@ -43,6 +44,7 @@ func (m *EventFilePlugin) SaveMessage(events []*EventLogMessage) error { if len(events) == 0 { return nil } + logrus.Info("init event file plugin save message") filePath := eventutil.EventLogFilePath(m.HomePath) if err := util.CheckAndCreateDir(filePath); err != nil { return err @@ -67,7 +69,7 @@ func (m *EventFilePlugin) SaveMessage(events []*EventLogMessage) error { writeFile.Write([]byte(e.Message)) writeFile.Write([]byte("\n")) } - return nil + return storage.Default().StorageCli.UploadFileToFile(filename, filename, nil) } // MessageData message data 获取指定操作的操作日志 @@ -92,7 +94,11 @@ func (m *EventFilePlugin) GetMessages(eventID, level string, length int) (interf if err != nil { logrus.Errorf("check file exist error %s", err.Error()) } - return message, nil + err = storage.Default().StorageCli.DownloadFileToDir(apath, path.Join(m.HomePath, "eventlog")) + if err != nil { + logrus.Errorf("download file to dir failure:%v", err) + return message, nil + } } eventFile, err := os.Open(apath) if err != nil { diff --git a/api/eventlog/db/filePlugin.go b/api/eventlog/db/filePlugin.go index ee8adce93e..39a7412999 100644 --- a/api/eventlog/db/filePlugin.go +++ b/api/eventlog/db/filePlugin.go @@ -64,6 +64,7 @@ func (m *filePlugin) getStdFilePath(serviceID string) (string, error) { } func (m *filePlugin) SaveMessage(events []*EventLogMessage) error { + logrus.Info("init file plugin save message") if len(events) == 0 { return nil } diff --git a/config/configs/rbdcomponent/api_config.go b/config/configs/rbdcomponent/api_config.go index ab0f16c292..d65001419b 100644 --- a/config/configs/rbdcomponent/api_config.go +++ b/config/configs/rbdcomponent/api_config.go @@ -3,11 +3,10 @@ package rbdcomponent import ( "github.com/goodrain/rainbond-operator/util/constants" "github.com/goodrain/rainbond/api/eventlog/conf" - "github.com/goodrain/rainbond/api/eventlog/entry" - "github.com/goodrain/rainbond/api/eventlog/exit/web" utils "github.com/goodrain/rainbond/util" "github.com/sirupsen/logrus" "github.com/spf13/pflag" + "github.com/thejerf/suture" ) // APIConfig config @@ -62,10 +61,49 @@ func AddAPIFlags(fs *pflag.FlagSet, apic *APIConfig) { } type EventLogConfig struct { - Conf conf.Conf - Entry *entry.Entry - Logger *logrus.Logger - SocketServer *web.SocketServer + Conf conf.Conf + Entry *Entry + Logger *logrus.Logger +} + +type Entry struct { + supervisor *suture.Supervisor + log *logrus.Entry + conf EntryConf +} + +type EntryConf struct { + EventLogServer EventLogServerConf + DockerLogServer DockerLogServerConf + MonitorMessageServer MonitorMessageServerConf + NewMonitorMessageServerConf NewMonitorMessageServerConf +} + +type EventLogServerConf struct { + BindIP string + BindPort int + CacheMessageSize int +} + +// MonitorMessageServerConf monitor message server conf +type MonitorMessageServerConf struct { + SubAddress []string + SubSubscribe string + CacheMessageSize int +} + +// NewMonitorMessageServerConf new monitor message server conf +type NewMonitorMessageServerConf struct { + ListenerHost string + ListenerPort int +} + +// DockerLogServerConf docker log server conf +type DockerLogServerConf struct { + BindIP string + BindPort int + CacheMessageSize int + Mode string } func AddEventLogFlags(fs *pflag.FlagSet, elc *EventLogConfig) { diff --git a/pkg/component/storage/local_storage.go b/pkg/component/storage/local_storage.go index dceb4225e4..5dd8554527 100644 --- a/pkg/component/storage/local_storage.go +++ b/pkg/component/storage/local_storage.go @@ -225,3 +225,7 @@ func CopyWithProgress(srcFile SrcFile, dstFile DstFile, allSize int64, logger ev func (l *LocalStorage) DownloadDirToDir(srcDir, dstDir string) error { return nil } + +func (l *LocalStorage) DownloadFileToDir(srcFile, dstDir string) error { + return nil +} diff --git a/pkg/component/storage/s3_storage.go b/pkg/component/storage/s3_storage.go index bb5bc4bf8d..bcdff98773 100644 --- a/pkg/component/storage/s3_storage.go +++ b/pkg/component/storage/s3_storage.go @@ -489,3 +489,43 @@ func (s3s *S3Storage) DownloadDirToDir(srcDir, dstDir string) error { return nil } + +func (s3s *S3Storage) DownloadFileToDir(srcFile, dstDir string) error { + // 解析 S3 路径 + bucketName, key, err := s3s.ParseDirPath(srcFile, false) + if err != nil { + return fmt.Errorf("解析源路径失败: %v", err) + } + // 检查目标目录是否存在,如果不存在则创建 + if err := os.MkdirAll(dstDir, 0755); err != nil { + return fmt.Errorf("无法创建目录 %s: %v", dstDir, err) + } + + // 构造目标文件路径 + dstFilePath := fmt.Sprintf("%s/%s", dstDir, filepath.Base(key)) + + // 从 S3 下载文件 + input := &s3.GetObjectInput{ + Bucket: aws.String(bucketName), + Key: aws.String(key), + } + + result, err := s3s.s3Client.GetObject(input) + if err != nil { + return fmt.Errorf("无法从 S3 下载文件 %s: %v", key, err) + } + defer result.Body.Close() + + // 创建目标文件 + dstFile, err := os.OpenFile(dstFilePath, os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return fmt.Errorf("无法打开文件 %s: %v", dstFilePath, err) + } + defer dstFile.Close() + + // 将 S3 文件内容写入目标文件 + if _, err := io.Copy(dstFile, result.Body); err != nil { + return fmt.Errorf("无法写入文件 %s: %v", dstFilePath, err) + } + return nil +} diff --git a/pkg/component/storage/storage.go b/pkg/component/storage/storage.go index 9b60102a2a..4703913a16 100644 --- a/pkg/component/storage/storage.go +++ b/pkg/component/storage/storage.go @@ -72,6 +72,7 @@ type InterfaceStorage interface { SaveFile(fileName string, reader multipart.File) error UploadFileToFile(src string, dst string, logger event.Logger) error DownloadDirToDir(srcDir, dstDir string) error + DownloadFileToDir(srcFile, dstDir string) error } type SrcFile interface {