Skip to content

Commit 9ffa884

Browse files
committed
feat: support opentelemetry
1 parent e8f8f17 commit 9ffa884

20 files changed

Lines changed: 608 additions & 161 deletions

File tree

.env.example

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,22 @@ LOG_OUTPUT_FORMAT=text
157157
# pprof enabled, for debugging
158158
PPROF_ENABLED=false
159159

160+
# OpenTelemetry
161+
ENABLE_OTEL=false
162+
OTLP_TRACE_ENDPOINT=
163+
OTLP_METRIC_ENDPOINT=
164+
OTLP_BASE_ENDPOINT=http://localhost:4318
165+
OTEL_API_KEY=
166+
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
167+
OTEL_EXPORTER_TYPE=otlp
168+
OTEL_SAMPLING_RATE=1.0
169+
OTEL_BATCH_EXPORT_SCHEDULE_DELAY=5000
170+
OTEL_MAX_QUEUE_SIZE=2048
171+
OTEL_MAX_EXPORT_BATCH_SIZE=512
172+
OTEL_METRIC_EXPORT_INTERVAL=60000
173+
OTEL_BATCH_EXPORT_TIMEOUT=10000
174+
OTEL_METRIC_EXPORT_TIMEOUT=30000
175+
160176
# FORCE_VERIFYING_SIGNATURE, for security, you should set this to true, pls be sure you know what you are doing
161177
# if want to install plugin without verifying signature, set this to false
162178
FORCE_VERIFYING_SIGNATURE=true

cmd/server/main.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/joho/godotenv"
57
"github.com/kelseyhightower/envconfig"
68
"github.com/langgenius/dify-plugin-daemon/internal/server"
@@ -12,9 +14,12 @@ func main() {
1214
var config app.Config
1315

1416
// load env
15-
godotenv.Load()
17+
err := godotenv.Load()
18+
if err != nil {
19+
log.Panic("failed to load .env file", "error", err)
20+
}
1621

17-
err := envconfig.Process("", &config)
22+
err = envconfig.Process("", &config)
1823
if err != nil {
1924
log.Panic("error processing environment variables", "error", err)
2025
}
@@ -24,9 +29,19 @@ func main() {
2429
log.Init(config.LogOutputFormat == "json")
2530
defer log.RecoverAndExit()
2631

27-
if err := config.Validate(); err != nil {
32+
if err = config.Validate(); err != nil {
2833
log.Panic("invalid configuration", "error", err)
2934
}
3035

36+
// Initialize OpenTelemetry if enabled
37+
if config.EnableOtel {
38+
shutdown, err := server.InitTelemetry(&config)
39+
if err != nil {
40+
log.Panic("failed to init OpenTelemetry", "error", err)
41+
} else {
42+
defer shutdown(context.Background())
43+
}
44+
}
45+
3146
(&server.App{}).Run(&config)
3247
}

go.mod

Lines changed: 63 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,44 @@ require (
1212
github.com/hashicorp/go-version v1.7.0
1313
github.com/langgenius/dify-cloud-kit v0.1.1
1414
github.com/panjf2000/ants/v2 v2.10.0
15-
github.com/redis/go-redis/v9 v9.6.3
15+
github.com/redis/go-redis/extra/redisotel/v9 v9.17.3
16+
github.com/redis/go-redis/v9 v9.17.3
1617
github.com/spf13/cobra v1.8.1
1718
github.com/spf13/viper v1.19.0
18-
github.com/stretchr/testify v1.10.0
19+
github.com/stretchr/testify v1.11.1
1920
github.com/xeipuuv/gojsonschema v1.2.0
21+
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.64.0
22+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0
23+
go.opentelemetry.io/otel v1.39.0
24+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.39.0
25+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0
26+
go.opentelemetry.io/otel/sdk v1.39.0
27+
go.opentelemetry.io/otel/sdk/metric v1.39.0
2028
golang.org/x/tools v0.38.0
2129
gorm.io/driver/mysql v1.5.7
22-
gorm.io/gorm v1.25.11
30+
gorm.io/gorm v1.30.0
31+
gorm.io/plugin/opentelemetry v0.1.16
2332
)
2433

2534
require (
26-
cel.dev/expr v0.20.0 // indirect
35+
cel.dev/expr v0.24.0 // indirect
2736
cloud.google.com/go v0.121.0 // indirect
2837
cloud.google.com/go/auth v0.16.1 // indirect
2938
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
30-
cloud.google.com/go/compute/metadata v0.6.0 // indirect
39+
cloud.google.com/go/compute/metadata v0.9.0 // indirect
3140
cloud.google.com/go/iam v1.5.2 // indirect
3241
cloud.google.com/go/monitoring v1.24.0 // indirect
3342
cloud.google.com/go/storage v1.54.0 // indirect
3443
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 // indirect
3544
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect
3645
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 // indirect
37-
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect
46+
github.com/ClickHouse/ch-go v0.61.5 // indirect
47+
github.com/ClickHouse/clickhouse-go/v2 v2.30.0 // indirect
48+
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect
3849
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect
3950
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect
40-
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect
41-
github.com/alicebob/miniredis/v2 v2.30.5 // indirect
4251
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible // indirect
52+
github.com/andybalholm/brotli v1.1.1 // indirect
4353
github.com/atotto/clipboard v0.1.4 // indirect
4454
github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect
4555
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect
@@ -60,29 +70,35 @@ require (
6070
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
6171
github.com/aws/smithy-go v1.22.2 // indirect
6272
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
73+
github.com/bytedance/gopkg v0.1.3 // indirect
74+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
6375
github.com/cespare/xxhash/v2 v2.3.0 // indirect
6476
github.com/charmbracelet/lipgloss v0.13.0 // indirect
6577
github.com/charmbracelet/x/ansi v0.2.3 // indirect
6678
github.com/charmbracelet/x/term v0.2.0 // indirect
6779
github.com/clbanning/mxj v1.8.4 // indirect
68-
github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect
80+
github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f // indirect
6981
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
7082
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
71-
github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect
83+
github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect
7284
github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
7385
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
7486
github.com/felixge/httpsnoop v1.0.4 // indirect
7587
github.com/fsnotify/fsnotify v1.7.0 // indirect
88+
github.com/go-faster/city v1.0.1 // indirect
89+
github.com/go-faster/errors v0.7.1 // indirect
7690
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
7791
github.com/go-git/go-billy/v5 v5.6.2 // indirect
78-
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
79-
github.com/go-logr/logr v1.4.2 // indirect
92+
github.com/go-jose/go-jose/v4 v4.1.3 // indirect
93+
github.com/go-logr/logr v1.4.3 // indirect
8094
github.com/go-logr/stdr v1.2.2 // indirect
8195
github.com/go-sql-driver/mysql v1.7.0 // indirect
96+
github.com/goccy/go-yaml v1.19.0 // indirect
8297
github.com/google/go-querystring v1.1.0 // indirect
8398
github.com/google/s2a-go v0.1.9 // indirect
8499
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
85100
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
101+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
86102
github.com/hashicorp/hcl v1.0.0 // indirect
87103
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.25.4+incompatible // indirect
88104
github.com/inconshreveable/mousetrap v1.1.0 // indirect
@@ -93,6 +109,7 @@ require (
93109
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
94110
github.com/jinzhu/inflection v1.0.0 // indirect
95111
github.com/jinzhu/now v1.1.5 // indirect
112+
github.com/klauspost/compress v1.17.8 // indirect
96113
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
97114
github.com/magiconair/properties v1.8.7 // indirect
98115
github.com/mattn/go-localereader v0.0.1 // indirect
@@ -101,85 +118,88 @@ require (
101118
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
102119
github.com/muesli/cancelreader v0.2.2 // indirect
103120
github.com/muesli/termenv v0.15.2 // indirect
121+
github.com/paulmach/orb v0.11.1 // indirect
122+
github.com/pierrec/lz4/v4 v4.1.21 // indirect
123+
github.com/pkg/errors v0.9.1 // indirect
104124
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
105125
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
126+
github.com/quic-go/qpack v0.6.0 // indirect
127+
github.com/quic-go/quic-go v0.57.1 // indirect
128+
github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect
106129
github.com/rivo/uniseg v0.4.7 // indirect
107130
github.com/sagikazarmark/locafero v0.4.0 // indirect
108131
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
132+
github.com/segmentio/asm v1.2.0 // indirect
109133
github.com/sourcegraph/conc v0.3.0 // indirect
110134
github.com/spf13/afero v1.11.0 // indirect
111135
github.com/spf13/cast v1.6.0 // indirect
112136
github.com/spf13/pflag v1.0.5 // indirect
113-
github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect
137+
github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect
114138
github.com/subosito/gotenv v1.6.0 // indirect
115139
github.com/tencentyun/cos-go-sdk-v5 v0.7.65 // indirect
116140
github.com/volcengine/ve-tos-golang-sdk/v2 v2.7.12 // indirect
117141
github.com/x448/float16 v0.8.4 // indirect
118142
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
119143
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
120-
github.com/yuin/gopher-lua v1.1.0 // indirect
121-
github.com/zeebo/errs v1.4.0 // indirect
122-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
123-
go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect
144+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
145+
go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect
124146
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
125-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
126-
go.opentelemetry.io/otel v1.35.0 // indirect
127-
go.opentelemetry.io/otel/metric v1.35.0 // indirect
128-
go.opentelemetry.io/otel/sdk v1.35.0 // indirect
129-
go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect
130-
go.opentelemetry.io/otel/trace v1.35.0 // indirect
147+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect
148+
go.opentelemetry.io/otel/metric v1.39.0 // indirect
149+
go.opentelemetry.io/otel/trace v1.39.0 // indirect
150+
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
131151
golang.org/x/mod v0.29.0 // indirect
132-
golang.org/x/oauth2 v0.30.0 // indirect
133-
golang.org/x/time v0.11.0 // indirect
152+
golang.org/x/oauth2 v0.32.0 // indirect
153+
golang.org/x/time v0.12.0 // indirect
134154
google.golang.org/api v0.232.0 // indirect
135155
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect
136-
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect
137-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect
138-
google.golang.org/grpc v1.72.0 // indirect
156+
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
157+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
158+
google.golang.org/grpc v1.77.0 // indirect
139159
gopkg.in/ini.v1 v1.67.0 // indirect
140160
gopkg.in/warnings.v0 v0.1.2 // indirect
161+
gorm.io/driver/clickhouse v0.7.0 // indirect
141162
)
142163

143164
require (
144-
github.com/bytedance/sonic v1.11.9 // indirect
145-
github.com/bytedance/sonic/loader v0.1.1 // indirect
146-
github.com/cloudwego/base64x v0.1.4 // indirect
147-
github.com/cloudwego/iasm v0.2.0 // indirect
148-
github.com/gabriel-vasile/mimetype v1.4.4 // indirect
165+
github.com/bytedance/sonic v1.14.2 // indirect
166+
github.com/bytedance/sonic/loader v0.4.0 // indirect
167+
github.com/cloudwego/base64x v0.1.6 // indirect
168+
github.com/gabriel-vasile/mimetype v1.4.11 // indirect
149169
github.com/gammazero/deque v0.2.1
150-
github.com/gin-contrib/sse v0.1.0 // indirect
151-
github.com/gin-gonic/gin v1.10.0
170+
github.com/gin-contrib/sse v1.1.0 // indirect
171+
github.com/gin-gonic/gin v1.11.0
152172
github.com/go-playground/locales v0.14.1
153173
github.com/go-playground/universal-translator v0.18.1
154-
github.com/go-playground/validator/v10 v10.22.0
174+
github.com/go-playground/validator/v10 v10.28.0
155175
github.com/goccy/go-json v0.10.5 // indirect
156176
github.com/hashicorp/golang-lru/v2 v2.0.7
157177
github.com/joho/godotenv v1.5.1
158178
github.com/json-iterator/go v1.1.12 // indirect
159179
github.com/kelseyhightower/envconfig v1.4.0
160-
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
180+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
161181
github.com/leodido/go-urn v1.4.0 // indirect
162182
github.com/mattn/go-isatty v0.0.20 // indirect
163183
github.com/mitchellh/mapstructure v1.5.0
164184
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
165185
github.com/modern-go/reflect2 v1.0.2 // indirect
166186
github.com/panjf2000/gnet/v2 v2.5.5
167-
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
187+
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
168188
github.com/shopspring/decimal v1.4.0
169189
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
170-
github.com/ugorji/go/codec v1.2.12 // indirect
190+
github.com/ugorji/go/codec v1.3.1 // indirect
171191
github.com/valyala/bytebufferpool v1.0.0 // indirect
172192
go.uber.org/multierr v1.11.0 // indirect
173193
go.uber.org/zap v1.27.0 // indirect
174-
golang.org/x/arch v0.8.0 // indirect
194+
golang.org/x/arch v0.23.0 // indirect
175195
golang.org/x/crypto v0.45.0 // indirect
176196
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792
177197
golang.org/x/net v0.47.0 // indirect
178198
golang.org/x/sync v0.18.0 // indirect
179-
golang.org/x/sys v0.38.0 // indirect
199+
golang.org/x/sys v0.39.0 // indirect
180200
golang.org/x/text v0.31.0 // indirect
181-
google.golang.org/protobuf v1.36.6 // indirect
201+
google.golang.org/protobuf v1.36.10 // indirect
182202
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
183203
gopkg.in/yaml.v3 v3.0.1
184-
gorm.io/driver/postgres v1.5.9
204+
gorm.io/driver/postgres v1.5.11
185205
)

0 commit comments

Comments
 (0)