From eab0104633275e84cc59d18ecce76dba856a5d8e Mon Sep 17 00:00:00 2001 From: "Marcelo E. Magallon" Date: Thu, 5 Oct 2023 14:39:53 -0600 Subject: [PATCH] Drop k6's debug output from logs pushed to Loki This is not really helping the user debug anything. If we need to, we can send it to our own instance, as it's more relevant to us that it's to the user. Signed-off-by: Marcelo E. Magallon --- internal/k6runner/k6runner.go | 17 +++++++++++--- internal/prober/multihttp/script_test.go | 21 ++++++++++++++---- internal/testhelper/testhelper.go | 28 ++++++++++++++++++++++++ xk6/sm/output.go | 5 ++++- 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/internal/k6runner/k6runner.go b/internal/k6runner/k6runner.go index 6da6aac7..5afd869f 100644 --- a/internal/k6runner/k6runner.go +++ b/internal/k6runner/k6runner.go @@ -181,12 +181,23 @@ func k6LogsToLogger(logs []byte, logger logger.Logger) error { // labels. dec := logfmt.NewDecoder(bytes.NewBuffer(logs)) +NEXT_RECORD: for dec.ScanRecord() { var line []interface{} + var source, level string for dec.ScanKeyval() { - key := dec.Key() - value := dec.Value() - line = append(line, string(key), string(value)) + key := string(dec.Key()) + value := string(dec.Value()) + switch key { + case "source": + source = value + case "level": + level = value + } + line = append(line, key, value) + } + if level == "debug" && source == "" { // if there's no source, it's probably coming from k6 + continue NEXT_RECORD } _ = logger.Log(line...) } diff --git a/internal/prober/multihttp/script_test.go b/internal/prober/multihttp/script_test.go index f10eaa78..ca9a7748 100644 --- a/internal/prober/multihttp/script_test.go +++ b/internal/prober/multihttp/script_test.go @@ -4,10 +4,12 @@ import ( "bytes" "context" "net/http/httptest" + "path/filepath" "strings" "testing" kitlog "github.com/go-kit/kit/log" //nolint:staticcheck // TODO(mem): replace in BBE + "github.com/go-kit/log/level" "github.com/grafana/synthetic-monitoring-agent/internal/k6runner" "github.com/grafana/synthetic-monitoring-agent/internal/testhelper" sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" @@ -755,6 +757,8 @@ func TestSettingsToScript(t *testing.T) { require.NotEmpty(t, actual) check := sm.Check{ + Target: settings.Entries[0].Request.Url, + Job: "test", Settings: sm.CheckSettings{ Multihttp: settings, }, @@ -762,16 +766,25 @@ func TestSettingsToScript(t *testing.T) { ctx, cancel := testhelper.Context(context.Background(), t) t.Cleanup(cancel) - logger := zerolog.New(zerolog.NewTestWriter(t)) - runner := k6runner.New("k6") + // logger := zerolog.New(zerolog.NewTestWriter(t)) + logger := zerolog.Nop() + k6path := filepath.Join(testhelper.ModuleDir(t), "dist", "k6") + runner := k6runner.New(k6path) prober, err := NewProber(ctx, check, logger, runner) require.NoError(t, err) reg := prometheus.NewPedanticRegistry() + require.NotNil(t, reg) + var buf bytes.Buffer - plogger := kitlog.NewLogfmtLogger(&buf) - prober.Probe(ctx, "foo", reg, plogger) + userLogger := level.NewFilter(kitlog.NewLogfmtLogger(&buf), level.AllowInfo(), level.SquelchNoLevel(false)) + require.NotNil(t, userLogger) + + success := prober.Probe(ctx, check.Target, reg, userLogger) + require.True(t, success) + + t.Log(buf.String()) } func TestReplaceVariablesInString(t *testing.T) { diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go index 3bb57e9d..c49307f6 100644 --- a/internal/testhelper/testhelper.go +++ b/internal/testhelper/testhelper.go @@ -3,6 +3,8 @@ package testhelper import ( "context" "os" + "path/filepath" + "runtime" "testing" "time" @@ -27,3 +29,29 @@ func MustReadFile(t *testing.T, filename string) []byte { return data } + +func ModuleDir(t *testing.T) string { + t.Helper() + + _, filename, _, ok := runtime.Caller(1) + if !ok { + // uh? + return "" + } + dir := filepath.Dir(filename) + for dir != "/" { + gomod := filepath.Join(dir, "go.mod") + _, err := os.Stat(gomod) + switch { + case err == nil: + return dir + case os.IsNotExist(err): + dir = filepath.Join(dir, "..") + continue + default: + panic(err) + } + } + + return dir +} diff --git a/xk6/sm/output.go b/xk6/sm/output.go index 5441d66f..b1ef954e 100644 --- a/xk6/sm/output.go +++ b/xk6/sm/output.go @@ -15,8 +15,10 @@ import ( "go.k6.io/k6/output" ) +const ExtensionName = "sm" + func init() { - output.RegisterExtension("sm", New) + output.RegisterExtension(ExtensionName, New) } // Output is a k6 output plugin that writes metrics to an io.Writer in @@ -118,6 +120,7 @@ func (o *Output) Stop() error { // might end up with invalid label values. This is probably a job for Loki, // meaning we need an structured way of storing this information in logs. fields := logrus.Fields{ + "source": ExtensionName, "metric": metricName, "scenario": scenario, "value": value,