Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pkg/translator/azure/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
go 1.24.0

require (
github.com/json-iterator/go v1.1.12
github.com/goccy/go-json v0.10.5
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.139.0
github.com/relvacode/iso8601 v1.7.0
github.com/stretchr/testify v1.11.1
Expand All @@ -19,6 +19,7 @@ require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.139.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions pkg/translator/azure/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 30 additions & 21 deletions pkg/translator/azure/resourcelogs_to_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ package azure // import "github.com/open-telemetry/opentelemetry-collector-contr

import (
"bytes"
"encoding/json"
"errors"
"strconv"
"time"

jsoniter "github.com/json-iterator/go"
"github.com/goccy/go-json"
"github.com/relvacode/iso8601"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
Expand Down Expand Up @@ -64,7 +63,7 @@ type azureLogRecord struct {
CallerIPAddress *string `json:"callerIpAddress"`
CorrelationID *string `json:"correlationId"`
Identity *any `json:"identity"`
Level *json.Number `json:"Level"`
Level any `json:"Level"`
Location *string `json:"location"`
Properties *any `json:"properties"`
}
Expand All @@ -81,7 +80,7 @@ func (r ResourceLogsUnmarshaler) UnmarshalLogs(buf []byte) (plog.Logs, error) {
l := plog.NewLogs()

var azureLogs azureRecords
decoder := jsoniter.NewDecoder(bytes.NewReader(buf))
decoder := json.NewDecoder(bytes.NewReader(buf))
if err := decoder.Decode(&azureLogs); err != nil {
return l, err
}
Expand Down Expand Up @@ -118,9 +117,14 @@ func (r ResourceLogsUnmarshaler) UnmarshalLogs(buf []byte) (plog.Logs, error) {
lr.SetTimestamp(nanos)

if log.Level != nil {
severity := asSeverity(*log.Level)
severity := asSeverity(log.Level)
lr.SetSeverityNumber(severity)
lr.SetSeverityText(log.Level.String())
switch s := log.Level.(type) {
case string:
lr.SetSeverityText(s)
case float64:
lr.SetSeverityText(strconv.FormatFloat(s, 'f', -1, 64))
}
}

if err := lr.Attributes().FromRaw(extractRawAttributes(log)); err != nil {
Expand Down Expand Up @@ -165,22 +169,27 @@ func asTimestamp(s string, formats ...string) (pcommon.Timestamp, error) {
// asSeverity converts the Azure log level to equivalent
// OpenTelemetry severity numbers. If the log level is not
// valid, then the 'Unspecified' value is returned.
func asSeverity(number json.Number) plog.SeverityNumber {
switch number.String() {
case "Informational":
return plog.SeverityNumberInfo
case "Warning":
return plog.SeverityNumberWarn
case "Error":
return plog.SeverityNumberError
case "Critical":
return plog.SeverityNumberFatal
default:
levelNumber, _ := number.Int64()
if levelNumber > 0 {
return plog.SeverityNumber(levelNumber)
func asSeverity(number any) plog.SeverityNumber {
switch l := number.(type) {
case string:
switch l {
case "Informational":
return plog.SeverityNumberInfo
case "Warning":
return plog.SeverityNumberWarn
case "Error":
return plog.SeverityNumberError
case "Critical":
return plog.SeverityNumberFatal
default:
return plog.SeverityNumberUnspecified
}

case float64:
if l > 0 {
return plog.SeverityNumber(l)
}
return plog.SeverityNumberUnspecified
default:
return plog.SeverityNumberUnspecified
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/translator/azure/resourcelogs_to_logs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ func TestAsSeverity(t *testing.T) {

for input, expected := range tests {
t.Run(input, func(t *testing.T) {
assert.Equal(t, expected, asSeverity(json.Number(input)))
assert.Equal(t, expected, asSeverity(input))
})
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/translator/azure/resources_to_traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"encoding/hex"
"net/url"

jsoniter "github.com/json-iterator/go"
json "github.com/goccy/go-json"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
conventions "go.opentelemetry.io/otel/semconv/v1.13.0"
Expand Down Expand Up @@ -71,7 +71,7 @@ func (r TracesUnmarshaler) UnmarshalTraces(buf []byte) (ptrace.Traces, error) {
t := ptrace.NewTraces()

var azureTraces azureTracesRecords
decoder := jsoniter.NewDecoder(bytes.NewReader(buf))
decoder := json.NewDecoder(bytes.NewReader(buf))
err := decoder.Decode(&azureTraces)
if err != nil {
return t, err
Expand Down