forked from TrueCloudLab/frostfs-node
[#1488] tracing: KV attributes for spans from config
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
c00f4bab18
commit
e2658c7519
5 changed files with 89 additions and 3 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/misc"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/misc"
|
||||||
|
@ -24,6 +25,7 @@ func ToTracingConfig(c *config.Config) (*tracing.Config, error) {
|
||||||
Service: "frostfs-node",
|
Service: "frostfs-node",
|
||||||
InstanceID: getInstanceIDOrDefault(c),
|
InstanceID: getInstanceIDOrDefault(c),
|
||||||
Version: misc.Version,
|
Version: misc.Version,
|
||||||
|
Attributes: make(map[string]string),
|
||||||
}
|
}
|
||||||
|
|
||||||
if trustedCa := config.StringSafe(c.Sub(subsection), "trusted_ca"); trustedCa != "" {
|
if trustedCa := config.StringSafe(c.Sub(subsection), "trusted_ca"); trustedCa != "" {
|
||||||
|
@ -38,11 +40,30 @@ func ToTracingConfig(c *config.Config) (*tracing.Config, error) {
|
||||||
}
|
}
|
||||||
conf.ServerCaCertPool = certPool
|
conf.ServerCaCertPool = certPool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i := uint64(0)
|
||||||
|
for ; ; i++ {
|
||||||
|
si := strconv.FormatUint(i, 10)
|
||||||
|
ac := c.Sub(subsection).Sub("attributes").Sub(si)
|
||||||
|
k := config.StringSafe(ac, "key")
|
||||||
|
if k == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v := config.StringSafe(ac, "value")
|
||||||
|
if v == "" {
|
||||||
|
return nil, fmt.Errorf("empty tracing attribute value for key %s", k)
|
||||||
|
}
|
||||||
|
if _, ok := conf.Attributes[k]; ok {
|
||||||
|
return nil, fmt.Errorf("tracing attribute key %s defined more than once", k)
|
||||||
|
}
|
||||||
|
conf.Attributes[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getInstanceIDOrDefault(c *config.Config) string {
|
func getInstanceIDOrDefault(c *config.Config) string {
|
||||||
s := config.StringSlice(c.Sub("node"), "addresses")
|
s := config.StringSliceSafe(c.Sub("node"), "addresses")
|
||||||
if len(s) > 0 {
|
if len(s) > 0 {
|
||||||
return s[0]
|
return s[0]
|
||||||
}
|
}
|
||||||
|
|
46
cmd/frostfs-node/config/tracing/config_test.go
Normal file
46
cmd/frostfs-node/config/tracing/config_test.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package tracing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
|
||||||
|
configtest "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/test"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestTracingSection(t *testing.T) {
|
||||||
|
t.Run("defaults", func(t *testing.T) {
|
||||||
|
tc, err := ToTracingConfig(configtest.EmptyConfig())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, false, tc.Enabled)
|
||||||
|
require.Equal(t, tracing.Exporter(""), tc.Exporter)
|
||||||
|
require.Equal(t, "", tc.Endpoint)
|
||||||
|
require.Equal(t, "frostfs-node", tc.Service)
|
||||||
|
require.Equal(t, "", tc.InstanceID)
|
||||||
|
require.Nil(t, tc.ServerCaCertPool)
|
||||||
|
require.Empty(t, tc.Attributes)
|
||||||
|
})
|
||||||
|
|
||||||
|
const path = "../../../../config/example/node"
|
||||||
|
|
||||||
|
fileConfigTest := func(c *config.Config) {
|
||||||
|
tc, err := ToTracingConfig(c)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, true, tc.Enabled)
|
||||||
|
require.Equal(t, tracing.OTLPgRPCExporter, tc.Exporter)
|
||||||
|
require.Equal(t, "localhost", tc.Endpoint)
|
||||||
|
require.Equal(t, "frostfs-node", tc.Service)
|
||||||
|
require.Nil(t, tc.ServerCaCertPool)
|
||||||
|
require.EqualValues(t, map[string]string{
|
||||||
|
"key0": "value",
|
||||||
|
"key1": "value",
|
||||||
|
}, tc.Attributes)
|
||||||
|
}
|
||||||
|
|
||||||
|
configtest.ForEachFileType(path, fileConfigTest)
|
||||||
|
|
||||||
|
t.Run("ENV", func(t *testing.T) {
|
||||||
|
configtest.ForEnvFileType(t, path, fileConfigTest)
|
||||||
|
})
|
||||||
|
}
|
|
@ -203,6 +203,10 @@ FROSTFS_TRACING_ENABLED=true
|
||||||
FROSTFS_TRACING_ENDPOINT="localhost"
|
FROSTFS_TRACING_ENDPOINT="localhost"
|
||||||
FROSTFS_TRACING_EXPORTER="otlp_grpc"
|
FROSTFS_TRACING_EXPORTER="otlp_grpc"
|
||||||
FROSTFS_TRACING_TRUSTED_CA=""
|
FROSTFS_TRACING_TRUSTED_CA=""
|
||||||
|
FROSTFS_TRACING_ATTRIBUTES_0_KEY=key0
|
||||||
|
FROSTFS_TRACING_ATTRIBUTES_0_VALUE=value
|
||||||
|
FROSTFS_TRACING_ATTRIBUTES_1_KEY=key1
|
||||||
|
FROSTFS_TRACING_ATTRIBUTES_1_VALUE=value
|
||||||
|
|
||||||
FROSTFS_RUNTIME_SOFT_MEMORY_LIMIT=1073741824
|
FROSTFS_RUNTIME_SOFT_MEMORY_LIMIT=1073741824
|
||||||
|
|
||||||
|
|
|
@ -259,9 +259,19 @@
|
||||||
},
|
},
|
||||||
"tracing": {
|
"tracing": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"endpoint": "localhost:9090",
|
"endpoint": "localhost",
|
||||||
"exporter": "otlp_grpc",
|
"exporter": "otlp_grpc",
|
||||||
"trusted_ca": "/etc/ssl/tracing.pem"
|
"trusted_ca": "",
|
||||||
|
"attributes":[
|
||||||
|
{
|
||||||
|
"key": "key0",
|
||||||
|
"value": "value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "key1",
|
||||||
|
"value": "value"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"soft_memory_limit": 1073741824
|
"soft_memory_limit": 1073741824
|
||||||
|
|
|
@ -239,6 +239,11 @@ tracing:
|
||||||
exporter: "otlp_grpc"
|
exporter: "otlp_grpc"
|
||||||
endpoint: "localhost"
|
endpoint: "localhost"
|
||||||
trusted_ca: ""
|
trusted_ca: ""
|
||||||
|
attributes:
|
||||||
|
- key: key0
|
||||||
|
value: value
|
||||||
|
- key: key1
|
||||||
|
value: value
|
||||||
|
|
||||||
runtime:
|
runtime:
|
||||||
soft_memory_limit: 1gb
|
soft_memory_limit: 1gb
|
||||||
|
|
Loading…
Reference in a new issue