From dccd7e4943dc07084d49197763d0acdbfe323361 Mon Sep 17 00:00:00 2001 From: Chris Grindstaff Date: Mon, 17 Jun 2024 14:14:54 -0400 Subject: [PATCH] feat: Harvest should log RSS and MaxRSS every hour A line like this will be logged 2024-06-17T14:07:23-04:00 INF poller/poller.go:1301 > Metadata Poller=sar maxRssKB=25280 rssKB=21280 version="harvest version 2.0.2-rc2 (commit HEAD) (build date undefined) darwin/amd64" --- cmd/poller/poller.go | 55 +++++++++++++++++++++++++++++++++----------- pkg/conf/conf.go | 1 + 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go index cc5f7faa6..dcb8a02c9 100644 --- a/cmd/poller/poller.go +++ b/cmd/poller/poller.go @@ -76,14 +76,15 @@ import ( // default params var ( - pollerSchedule = "1m" - logFileName = "" - logMaxMegaBytes = logging.DefaultLogMaxMegaBytes - logMaxBackups = logging.DefaultLogMaxBackups - logMaxAge = logging.DefaultLogMaxAge - asupSchedule = "24h" // send every 24 hours - asupFirstWrite = "4m" // after this time, write 1st autosupport payload (for testing) - opts *options.Options + pollerSchedule = "1m" + pollerLogSchedule = "1h" + logFileName = "" + logMaxMegaBytes = logging.DefaultLogMaxMegaBytes + logMaxBackups = logging.DefaultLogMaxBackups + logMaxAge = logging.DefaultLogMaxAge + asupSchedule = "24h" // send every 24 hours + asupFirstWrite = "4m" // after this time, write 1st autosupport payload (for testing) + opts *options.Options ) const ( @@ -335,10 +336,22 @@ func (p *Poller) Init() error { } p.schedule = schedule.New() if err = p.schedule.NewTaskString("poller", pollerSchedule, 0, nil, true, "poller_"+p.name); err != nil { - logger.Error().Stack().Err(err).Msg("set schedule:") + logger.Error().Err(err).Msg("set schedule:") return err } - logger.Debug().Msgf("set poller schedule with %s frequency", pollerSchedule) + + if p.params.PollerLogSchedule != "" { + pollerLogSchedule = p.params.PollerLogSchedule + } + if err = p.schedule.NewTaskString("log", pollerLogSchedule, 0, p.logPollerMetadata, true, "poller_log_"+p.name); err != nil { + logger.Error().Err(err).Msg("set schedule:") + return err + } + + logger.Debug(). + Str("pollerSchedule", pollerSchedule). + Str("pollerLogSchedule", pollerLogSchedule). + Msg("set poller schedule") // Check if autosupport is enabled tools := conf.Config.Tools @@ -437,7 +450,8 @@ func (p *Poller) Run() { // poller schedule has the poller and asup task (when enabled) task := p.schedule.GetTask("poller") - asuptask := p.schedule.GetTask("asup") + asupTask := p.schedule.GetTask("asup") + logTask := p.schedule.GetTask("log") // number of collectors/exporters that are still up upCollectors := 0 @@ -534,8 +548,12 @@ func (p *Poller) Run() { } // asup task will be nil when autosupport is disabled - if asuptask != nil && asuptask.IsDue() { - _, _ = asuptask.Run() + if asupTask != nil && asupTask.IsDue() { + _, _ = asupTask.Run() + } + + if logTask.IsDue() { + _, _ = logTask.Run() } p.schedule.Sleep() @@ -1274,6 +1292,17 @@ func (p *Poller) addMemoryMetadata() { p.maxRssBytes = max(p.maxRssBytes, memInfo.RSS) } +func (p *Poller) logPollerMetadata() (map[string]*matrix.Matrix, error) { + rss, _ := p.status.LazyGetValueFloat64("memory.rss", "host") + logger.Info(). + Float64("rssKB", rss). + Uint64("maxRssKB", p.maxRssBytes/1024). + Str("version", strings.TrimSpace(version.String())). + Msg("Metadata") + + return nil, nil +} + func startPoller(_ *cobra.Command, _ []string) { poller := &Poller{} poller.options = opts diff --git a/pkg/conf/conf.go b/pkg/conf/conf.go index d65772ec8..00727ad81 100644 --- a/pkg/conf/conf.go +++ b/pkg/conf/conf.go @@ -515,6 +515,7 @@ type Poller struct { LogSet *[]string `yaml:"log,omitempty"` Password string `yaml:"password,omitempty"` PollerSchedule string `yaml:"poller_schedule,omitempty"` + PollerLogSchedule string `yaml:"poller_log_schedule,omitempty"` SslCert string `yaml:"ssl_cert,omitempty"` SslKey string `yaml:"ssl_key,omitempty"` TLSMinVersion string `yaml:"tls_min_version,omitempty"`