Skip to content

Commit 517e2b9

Browse files
authored
support key_dimensions (#38)
Signed-off-by: Jared Tan <[email protected]>
1 parent 4e6a050 commit 517e2b9

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

connector/slowsqlconnector/config.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ type Config struct {
3333
// The dimensions will be fetched from the span's attributes. Examples of some conventionally used attributes:
3434
// https://github.com/open-telemetry/opentelemetry-collector/blob/main/model/semconv/opentelemetry.go.
3535
Dimensions []Dimension `mapstructure:"dimensions"`
36+
37+
// KeyDimensions defines the list of additional dimensions to build key.
38+
KeyDimensions []Dimension `mapstructure:"key_dimensions"`
3639
// Exemplars defines the configuration for exemplars.
3740
Exemplars Exemplars `mapstructure:"exemplars"`
3841
}
@@ -45,6 +48,11 @@ func (c Config) Validate() error {
4548
if err != nil {
4649
return err
4750
}
51+
52+
err = validateDimensions(c.KeyDimensions)
53+
if err != nil {
54+
return err
55+
}
4856
return nil
4957
}
5058

connector/slowsqlconnector/connector_logs.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ package slowsqlconnector // import "github.com/open-telemetry/opentelemetry-coll
55

66
import (
77
"context"
8+
"encoding/base64"
9+
"strings"
810
"time"
911

1012
"go.opentelemetry.io/collector/component"
@@ -22,7 +24,8 @@ type logsConnector struct {
2224
config Config
2325

2426
// Additional dimensions to add to logs.
25-
dimensions []dimension
27+
dimensions []dimension
28+
keyDimensions []dimension
2629

2730
logsConsumer consumer.Logs
2831
component.StartFunc
@@ -35,9 +38,10 @@ func newLogsConnector(logger *zap.Logger, config component.Config) *logsConnecto
3538
cfg := config.(*Config)
3639

3740
return &logsConnector{
38-
logger: logger,
39-
config: *cfg,
40-
dimensions: newDimensions(cfg.Dimensions),
41+
logger: logger,
42+
config: *cfg,
43+
dimensions: newDimensions(cfg.Dimensions),
44+
keyDimensions: newDimensions(cfg.KeyDimensions),
4145
}
4246
}
4347

@@ -131,6 +135,15 @@ func (c *logsConnector) attrToLogRecord(sl plog.ScopeLogs, serviceName string, s
131135
}
132136
}
133137

138+
var keys []string
139+
encode := base64.StdEncoding
140+
for _, kd := range c.keyDimensions {
141+
if v, ok := getDimensionValue(kd, spanAttrs, resourceAttrs); ok {
142+
keys = append(keys, encode.EncodeToString([]byte(v.Str())))
143+
}
144+
}
145+
logRecord.Attributes().PutStr("slow_sql_agg_key", strings.Join(keys, "@"))
146+
134147
return logRecord
135148
}
136149

connector/slowsqlconnector/testdata/config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,12 @@ slowsql/full:
1212
dimensions:
1313
- name: k8s.uuid
1414
- name: k8s.namespace.name
15+
16+
key_dimensions:
17+
- name: k8s.uuid
18+
- name: k8s.namespace.name
19+
- name: server.address
20+
- name: db.connection_string # rollback to get value for server.address
21+
- name: db.system
22+
- name: service.name
23+
- name: db.statement

0 commit comments

Comments
 (0)