From eac5941e62d0b96cb00a732920155c2bcdc0c929 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Tue, 25 Jul 2023 17:44:25 +0800 Subject: [PATCH] fix(host): try reloading telegraf by restarting docker --- pkg/hostman/system_service/telegraf.go | 43 +++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/pkg/hostman/system_service/telegraf.go b/pkg/hostman/system_service/telegraf.go index 08dda7cc59..094e01d4d6 100644 --- a/pkg/hostman/system_service/telegraf.go +++ b/pkg/hostman/system_service/telegraf.go @@ -21,7 +21,10 @@ import ( "strings" "yunion.io/x/log" + "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/httputils" + + "yunion.io/x/onecloud/pkg/util/procutils" ) type STelegraf struct { @@ -205,11 +208,43 @@ func (s *STelegraf) BgReloadConf(kwargs map[string]interface{}) { } func (s *STelegraf) ReloadTelegraf() error { - log.Infof("Start reolad telegraf...") + log.Infof("Start reloading telegraf...") + errs := []error{} + if err := s.reloadTelegrafByDocker(); err != nil { + errs = append(errs, errors.Wrap(err, "reloadTelegrafByDocker")) + if err := s.reloadTelegrafByHTTP(); err != nil { + errs = append(errs, errors.Wrap(err, "reloadTelegrafByHTTP")) + return errors.NewAggregate(errs) + } + } + log.Infof("Finish reloading telegraf") + return nil +} + +func (s *STelegraf) reloadTelegrafByDocker() error { + log.Infof("Reloading telegraf by docker...") + output, err := procutils.NewRemoteCommandAsFarAsPossible("sh", "-c", "/usr/bin/docker ps --filter 'label=io.kubernetes.container.name=telegraf' --format '{{.ID}}'").Output() + if err != nil { + return errors.Wrap(err, "using docker ps find telegraf container") + } + id := strings.TrimSpace(string(output)) + if len(id) == 0 { + return errors.Errorf("not found telegraf running container") + } + if err := procutils.NewRemoteCommandAsFarAsPossible("sh", "-c", "/usr/bin/docker restart "+id).Run(); err != nil { + return errors.Wrapf(err, "restart telegraf container %q", id) + } + return nil +} + +func (s *STelegraf) reloadTelegrafByHTTP() error { telegrafReoladUrl := "http://127.0.0.1:8087/reload" - _, _, err := httputils.JSONRequest( + log.Infof("Reloading telegraf by %q ...", telegrafReoladUrl) + if _, _, err := httputils.JSONRequest( httputils.GetDefaultClient(), context.Background(), "POST", telegrafReoladUrl, nil, nil, false, - ) - return err + ); err != nil { + return errors.Wrap(err, "reload telegraf by http reload api") + } + return nil }