Skip to content

Commit 55d2378

Browse files
nyannyachaZiinc
andauthored
feat: add otel support (#554)
* chore: update dependencies * chore: update `Cargo.lock` * stamp: vendors * chore: update `types/global.d.ts` * chore: update `.dockerignore` * feat: enable otel capability * stamp: polishing runtime cleanup routine * chore: update `examples/main` * stamp: align with supabase otel requirement * chore: update `Cargo.lock` * Update cli/src/flags.rs Co-authored-by: Ziinc <[email protected]> * Update cli/src/flags.rs Co-authored-by: Ziinc <[email protected]> --------- Co-authored-by: Ziinc <[email protected]>
1 parent 1a1256b commit 55d2378

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+19688
-113
lines changed

.dockerignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ target/
22
k6/
33
examples/
44
assets/
5-
.vscodes/
5+
.vscode/
66
.github/
77

88
scripts/*
9-
!scripts/install_onnx.sh
9+
!scripts/install_onnx.sh

Cargo.lock

Lines changed: 10 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ deno_package_json = { version = "0.2.1", default-features = false }
4343
deno_path_util = "=0.2.1"
4444
deno_permissions = "0.42.0"
4545
deno_semver = "=0.6.1"
46-
deno_telemetry = "0.4.0"
4746

4847
# upstream exts
4948
deno_broadcast_channel = "0.176.0"
@@ -56,6 +55,7 @@ deno_fs = { version = "0.92.0", features = ["sync_fs"] }
5655
deno_http = "0.180.0"
5756
deno_io = "0.92.0"
5857
deno_net = "0.174.0"
58+
deno_telemetry = "0.17.0"
5959
deno_tls = "0.169.0"
6060
deno_url = "0.182.0"
6161
deno_web = "0.213.0"
@@ -108,6 +108,7 @@ anyhow = "1.0.57"
108108
async-trait = "0.1.73"
109109
base32 = "=0.5.1"
110110
base64 = "0.21.7"
111+
bencher = "0.1"
111112
brotli = "6.0.0"
112113
bytes = "1.4.0"
113114
cache_control = "=0.2.0"
@@ -117,29 +118,35 @@ cbc = { version = "=0.1.2", features = ["alloc"] }
117118
chrono = { version = "0.4", default-features = false, features = ["std", "serde"] }
118119
dashmap = "5.5.3"
119120
data-encoding = "2.3.3"
121+
data-url = "=0.3.0"
120122
dotenvy = "0.15.7"
121123
ecb = "=0.1.2"
122124
elliptic-curve = { version = "0.13.4", features = ["alloc", "arithmetic", "ecdh", "std", "pem", "jwk"] }
125+
fast-socks5 = "0.9.6"
123126
faster-hex = "0.9"
124127
fastwebsockets = { version = "0.8", features = ["upgrade", "unstable-split"] }
125128
flate2 = { version = "=1.0.30", default-features = false }
126129
fs3 = "0.5.0"
127130
futures = "0.3.21"
128131
glob = "0.3.1"
129132
h2 = "0.4.4"
133+
hickory-resolver = { version = "0.25.0-alpha.4", features = ["tokio-runtime", "serde"] }
130134
http = "1.0"
131135
http-body = "1.0"
132136
http-body-util = "0.1.2"
133137
http_v02 = { package = "http", version = "0.2.9" }
134138
httparse = "1.8.0"
135139
hyper = { version = "1.4.1", features = ["full"] }
140+
hyper-rustls = { version = "0.27.2", default-features = false, features = ["http1", "http2", "tls12", "ring"] }
136141
hyper-util = { version = "=0.1.7", features = ["tokio", "server", "server-auto"] }
137142
hyper_v014 = { package = "hyper", version = "0.14.26", features = ["runtime", "http1"] }
138143
indexmap = { version = "2", features = ["serde"] }
144+
ipnet = "2.3"
139145
lazy-regex = "3"
140146
libc = "0.2.126"
141147
libz-sys = { version = "1.1.20", default-features = false }
142148
log = "0.4.20"
149+
memmem = "0.1.1"
143150
monch = "=0.5.0"
144151
notify = "=6.1.1"
145152
num-bigint = { version = "0.4", features = ["rand"] }
@@ -149,6 +156,7 @@ p256 = { version = "0.13.2", features = ["ecdh", "jwk"] }
149156
p384 = { version = "0.13.0", features = ["ecdh", "jwk"] }
150157
parking_lot = "0.12.0"
151158
percent-encoding = "2.3.0"
159+
phf = { version = "0.11", features = ["macros"] }
152160
pin-project = "1.0.11" # don't pin because they yank crates from cargo
153161
rand = "=0.8.5"
154162
regex = "^1.7.0"
@@ -158,26 +166,39 @@ ring = "^0.17.14"
158166
rustls = { version = "0.23.11", default-features = false, features = ["logging", "std", "tls12", "ring"] }
159167
rustls-pemfile = "2"
160168
rustls-tokio-stream = "=0.3.0"
169+
rustls-webpki = "0.102"
161170
scopeguard = "1.2.0"
162171
sec1 = "0.7"
163172
serde = { version = "1.0.149", features = ["derive"] }
164173
serde_json = "1.0.85"
165174
sha1 = { version = "0.10.6", features = ["oid"] }
166175
sha2 = { version = "0.10.8", features = ["oid"] }
167176
signature = "2.1"
177+
smallvec = "1.8"
168178
spki = "0.7.2"
169179
tar = "=0.4.40"
170180
tempfile = "3.4.0"
171181
thiserror = "2.0.3"
172182
tokio = { version = "1.36.0", features = ["full"] }
183+
tokio-rustls = { version = "0.26.0", default-features = false, features = ["ring", "tls12"] }
184+
tokio-socks = "0.5.1"
173185
tokio-util = "0.7.4"
186+
tower = { version = "0.4.13", default-features = false, features = ["util"] }
187+
tower-http = { version = "0.6.1", features = ["decompression-br", "decompression-gzip"] }
188+
tower-service = "0.3.2"
174189
twox-hash = "=1.6.3"
175190
url = { version = "2.5", features = ["serde", "expose_internals"] }
176191
uuid = { version = "1.3.0", features = ["v4"] }
177192
webpki-root-certs = "0.26.5"
178193
webpki-roots = "0.26"
179194
yoke = { version = "0.7.4", features = ["derive"] }
180195

196+
opentelemetry = "0.27.0"
197+
opentelemetry-http = "0.27.0"
198+
opentelemetry-otlp = { version = "0.27.0", features = ["logs", "http-proto", "http-json"] }
199+
opentelemetry-semantic-conventions = { version = "0.27.0", features = ["semconv_experimental"] }
200+
opentelemetry_sdk = "0.27.0"
201+
181202
# upstream resolvers
182203
deno_npm_cache = "0.2.0"
183204
deno_resolver = "0.14.0"
@@ -203,7 +224,11 @@ windows-sys = { version = "0.59.0", features = ["Win32_Foundation", "Win32_Media
203224
deno_core = { git = "https://github.com/supabase/deno_core", branch = "324-supabase" }
204225
eszip = { git = "https://github.com/supabase/eszip", branch = "fix-pub-vis-0-80-1" }
205226
v8 = { git = "https://github.com/supabase/rusty_v8", tag = "v130.0.7" }
227+
206228
deno_unsync = { path = "./vendor/deno_unsync" }
229+
deno_fetch = { path = "./vendor/deno_fetch" }
230+
deno_telemetry = { path = "./vendor/deno_telemetry" }
231+
deno_http = { path = "./vendor/deno_http" }
207232

208233
[profile.dind]
209234
inherits = "dev"

cli/src/flags.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use clap::ArgAction;
1111
use clap::ArgGroup;
1212
use clap::Command;
1313
use clap::ValueEnum;
14+
use deno::deno_telemetry;
1415
use deno_facade::Checksum;
1516

1617
#[derive(ValueEnum, Default, Clone, Copy)]
@@ -28,6 +29,30 @@ impl From<EszipV2ChecksumKind> for Option<Checksum> {
2829
}
2930
}
3031

32+
#[derive(ValueEnum, Clone, Copy)]
33+
pub(super) enum OtelKind {
34+
Main,
35+
Event,
36+
}
37+
38+
#[derive(ValueEnum, Default, Clone, Copy)]
39+
pub(super) enum OtelConsoleConfig {
40+
#[default]
41+
Ignore,
42+
Capture,
43+
Replace,
44+
}
45+
46+
impl From<OtelConsoleConfig> for deno_telemetry::OtelConsoleConfig {
47+
fn from(value: OtelConsoleConfig) -> Self {
48+
match value {
49+
OtelConsoleConfig::Ignore => Self::Ignore,
50+
OtelConsoleConfig::Capture => Self::Capture,
51+
OtelConsoleConfig::Replace => Self::Replace,
52+
}
53+
}
54+
}
55+
3156
pub(super) fn get_cli() -> Command {
3257
Command::new(env!("CARGO_BIN_NAME"))
3358
.about(env!("CARGO_PKG_DESCRIPTION"))
@@ -278,6 +303,21 @@ fn get_start_command() -> Command {
278303
.value_parser(value_parser!(u8).range(..=99))
279304
.default_value("90"),
280305
)
306+
.arg(
307+
arg!(--"enable-otel")
308+
.help("Enable OpenTelemetry in the main and event workers")
309+
.value_delimiter(',')
310+
.value_parser(value_parser!(OtelKind))
311+
.num_args(0..=1)
312+
.default_missing_value("main,event")
313+
.action(ArgAction::Append),
314+
)
315+
.arg(
316+
arg!(--"otel-console" <MODE>)
317+
// .env("OTEL_DENO_CONSOLE")
318+
.help("Configure console auto instrumentation for OpenTelemetry Logs")
319+
.value_parser(value_parser!(OtelConsoleConfig)),
320+
)
281321
}
282322

283323
fn get_bundle_command() -> Command {

cli/src/main.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use std::sync::Arc;
1010
use anyhow::bail;
1111
use anyhow::Context;
1212
use anyhow::Error;
13+
use base::server;
1314
use base::server::Builder;
1415
use base::server::ServerFlags;
1516
use base::server::Tls;
@@ -19,6 +20,8 @@ use base::worker::pool::WorkerPoolPolicy;
1920
use base::CacheSetting;
2021
use base::InspectorOption;
2122
use base::WorkerKind;
23+
use deno::deno_telemetry;
24+
use deno::deno_telemetry::OtelConfig;
2225
use deno::ConfigMode;
2326
use deno::DenoOptionsBuilder;
2427
use deno_facade::extract_from_file;
@@ -28,6 +31,8 @@ use deno_facade::Metadata;
2831
use env::resolve_deno_runtime_env;
2932
use flags::get_cli;
3033
use flags::EszipV2ChecksumKind;
34+
use flags::OtelConsoleConfig;
35+
use flags::OtelKind;
3136
use log::warn;
3237

3338
mod env;
@@ -79,6 +84,11 @@ fn main() -> Result<ExitCode, anyhow::Error> {
7984
#[allow(clippy::arc_with_non_send_sync)]
8085
let exit_code = match matches.subcommand() {
8186
Some(("start", sub_matches)) => {
87+
deno_telemetry::init(
88+
deno::versions::otel_runtime_config(),
89+
OtelConfig::default(),
90+
)?;
91+
8292
let ip = sub_matches.get_one::<String>("ip").cloned().unwrap();
8393
let ip = IpAddr::from_str(&ip)
8494
.context("failed to parse the IP address to bind the server")?;
@@ -121,6 +131,17 @@ fn main() -> Result<ExitCode, anyhow::Error> {
121131
.cloned()
122132
.unwrap();
123133

134+
let enable_otel = sub_matches
135+
.get_many::<OtelKind>("enable-otel")
136+
.unwrap_or_default()
137+
.cloned()
138+
.collect::<Vec<_>>();
139+
140+
let otel_console = sub_matches
141+
.get_one::<OtelConsoleConfig>("otel-console")
142+
.cloned()
143+
.map(Into::into);
144+
124145
let event_service_manager_path =
125146
sub_matches.get_one::<String>("event-worker").cloned();
126147
let maybe_main_entrypoint =
@@ -203,6 +224,21 @@ fn main() -> Result<ExitCode, anyhow::Error> {
203224
.unwrap();
204225

205226
let flags = ServerFlags {
227+
otel: if !enable_otel.is_empty() {
228+
if enable_otel.len() > 1 {
229+
Some(server::OtelKind::Both)
230+
} else {
231+
match enable_otel.first() {
232+
Some(OtelKind::Main) => Some(server::OtelKind::Main),
233+
Some(OtelKind::Event) => Some(server::OtelKind::Event),
234+
None => None,
235+
}
236+
}
237+
} else {
238+
None
239+
},
240+
otel_console,
241+
206242
no_module_cache,
207243
allow_main_inspector,
208244
tcp_nodelay,

0 commit comments

Comments
 (0)