-
Notifications
You must be signed in to change notification settings - Fork 5k
Expand file tree
/
Copy pathbenchmark_test.go
More file actions
114 lines (103 loc) · 3.38 KB
/
Copy pathbenchmark_test.go
File metadata and controls
114 lines (103 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package beatprocessor
import (
"context"
"fmt"
"testing"
"github.com/elastic/beats/v7/libbeat/beat"
"go.opentelemetry.io/collector/pdata/plog"
"go.uber.org/zap"
)
// Runs the OTel Beat processor with a no-op processor inside
// to measure the overhead of the OTel processor itself.
func BenchmarkBeatProcessor(b *testing.B) {
testCases := []testCase{
{
name: "empty log record",
logRecord: func() plog.LogRecord {
logRecord := plog.NewLogRecord()
logRecord.Body().SetEmptyMap()
return logRecord
},
},
{
name: "message",
logRecord: func() plog.LogRecord {
logRecord := plog.NewLogRecord()
logRecord.Body().SetEmptyMap()
logRecord.Body().Map().PutStr("message", "test log message")
return logRecord
},
},
{
name: "Kubernetes log",
logRecord: func() plog.LogRecord {
logRecord := plog.NewLogRecord()
logRecord.Body().SetEmptyMap()
logRecord.Body().Map().PutStr("time", "2026-01-13T13:01:05.551185505Z")
logRecord.Body().Map().PutStr("stream", "stderr")
logRecord.Body().Map().PutStr("log", "W0113 13:01:05.550863 1 warnings.go:70] v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice")
return logRecord
},
},
{
name: "Nginx access log",
logRecord: func() plog.LogRecord {
logRecord := plog.NewLogRecord()
logRecord.Body().SetEmptyMap()
logRecord.Body().Map().PutStr("timestamp", "2025-10-05T13:33:14+00:00")
logRecord.Body().Map().PutStr("pid", "30")
logRecord.Body().Map().PutStr("client_ip", "172.19.0.1")
logRecord.Body().Map().PutStr("request_id", "72e5a0eeb44b6608d161254a5eaf1662")
logRecord.Body().Map().PutStr("http_method", "GET")
logRecord.Body().Map().PutStr("http_path", "/")
logRecord.Body().Map().PutStr("protocol", "HTTP/1.1")
logRecord.Body().Map().PutStr("host", "localhost")
logRecord.Body().Map().PutStr("user_agent", "curl/8.5.0")
logRecord.Body().Map().PutStr("referer", "")
logRecord.Body().Map().PutInt("status_code", 200)
logRecord.Body().Map().PutInt("bytes_sent", 615)
logRecord.Body().Map().PutDouble("request_time_secs", 0.01)
return logRecord
},
},
}
benchmarkBeatProcessor(b, 0, testCases[0])
for _, tc := range testCases {
for _, logCount := range []int{1, 1000} {
benchmarkBeatProcessor(b, logCount, tc)
}
}
}
func benchmarkBeatProcessor(b *testing.B, logCount int, tc testCase) {
b.Run(fmt.Sprintf("%s/%d_logs", tc.name, logCount), func(b *testing.B) {
// Prepare logs.
logs := plog.NewLogs()
resourceLogs := logs.ResourceLogs().AppendEmpty()
scopeLogs := resourceLogs.ScopeLogs().AppendEmpty()
for range logCount {
logRecord := scopeLogs.LogRecords().AppendEmpty()
tc.logRecord().CopyTo(logRecord)
}
// Create Beat processor with a no-op processor inside.
beatProcessor := &beatProcessor{
logger: zap.NewNop(),
processors: []beat.Processor{
mockProcessor{
runFunc: func(event *beat.Event) (*beat.Event, error) {
return event, nil
},
},
},
}
for b.Loop() {
_, _ = beatProcessor.ConsumeLogs(context.Background(), logs)
}
})
}
type testCase struct {
name string
logRecord func() plog.LogRecord
}