chore(workspace): wire obs/webhook deps, add opentelemetry stack, refresh default.yaml and lockfile
zhenyi committed
Modified config/default.yaml config/default.yaml +30 −1 View config/default.yaml
@@ -425,4 +425,33 @@
425425 max_commits_per_sync: 10000
426426 max_lock_retries: 5
427427 language_timeout_secs: 30
428 max_languages: 50
No newline at end of file
428 max_languages: 50
429# -----------------------------------------------------------------------------
430# Observability (OpenObserve via OTLP/HTTP).
431#
432# When `enabled`, the `obs` crate exports all three signals to OpenObserve:
433# traces -> {endpoint}/traces
434# logs -> {endpoint}/logs
435# metrics -> {endpoint}/metrics
436# For OpenObserve the OTLP base is `http://host:5080/api/{organization}/v1`.
437# Auth: use either `token` (Bearer) or `user` + `password` (Basic), not both.
438# Set APP__OBS__ENDPOINT / APP__OBS__TOKEN to override at runtime.
439# -----------------------------------------------------------------------------
440obs:
441 enabled: false
442 service_name: "" # when empty each app falls back to its own name
443 service_version: ""
444 stream_name: "" # OpenObserve `stream-name` for logs/traces; empty -> service_name
445 endpoint: "http://127.0.0.1:5080/api/default/v1"
446 token: null
447 user: null
448 password: null
449 enable_logs: true
450 enable_metrics: true
451 enable_traces: true
452 traces_sample_ratio: 1.0 # 0.0..=1.0, parent-based
453 batch_size: 512
454 batch_interval: 5 # seconds
455 timeout: 10 # seconds
456 console_log: true # keep local console output while exporting
457 log_level: "" # empty -> "info"; apps fall back to their own richer default
Modified Cargo.lock Cargo.lock +231 −7 View Cargo.lock
@@ -126,14 +126,20 @@
126126]
127127
128128[[package]]
129name = "anyhow"
130version = "1.0.104"
131source = "registry+https://github.com/rust-lang/crates.io-index"
132checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
133
134[[package]]
129135name = "apihost"
130136version = "1.94.0"
131137dependencies = [
132138 "axum",
133139 "config 1.94.0",
140 "obs",
134141 "tokio",
135142 "tracing",
136 "tracing-subscriber",
137143 "webapi",
138144]
139145
@@ -1164,6 +1170,15 @@
11641170]
11651171
11661172[[package]]
1173name = "convert_case"
1174version = "0.10.0"
1175source = "registry+https://github.com/rust-lang/crates.io-index"
1176checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
1177dependencies = [
1178 "unicode-segmentation",
1179]
1180
1181[[package]]
11671182name = "cookie"
11681183version = "0.18.1"
11691184source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1640,6 +1655,7 @@
16401655source = "registry+https://github.com/rust-lang/crates.io-index"
16411656checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
16421657dependencies = [
1658 "convert_case 0.10.0",
16431659 "proc-macro2",
16441660 "quote",
16451661 "rustc_version",
@@ -2334,11 +2350,12 @@
23342350 "config 1.94.0",
23352351 "db",
23362352 "gitsync",
2353 "obs",
23372354 "queue",
23382355 "storage",
23392356 "tokio",
23402357 "tracing",
2341 "tracing-subscriber",
2358 "webhook",
23422359]
23432360
23442361[[package]]
@@ -2369,11 +2386,11 @@
23692386 "gitsmart",
23702387 "gitssh",
23712388 "jwt",
2389 "obs",
23722390 "queue",
23732391 "storage",
23742392 "tokio",
23752393 "tracing",
2376 "tracing-subscriber",
23772394]
23782395
23792396[[package]]
@@ -4395,13 +4412,13 @@
43954412 "glayer",
43964413 "jwt",
43974414 "live",
4415 "obs",
43984416 "queue",
43994417 "serde",
44004418 "storage",
44014419 "storagelayer",
44024420 "tokio",
44034421 "tracing",
4404 "tracing-subscriber",
44054422]
44064423
44074424[[package]]
@@ -4453,9 +4470,9 @@
44534470dependencies = [
44544471 "config 1.94.0",
44554472 "email",
4473 "obs",
44564474 "tokio",
44574475 "tracing",
4458 "tracing-subscriber",
44594476]
44604477
44614478[[package]]
@@ -4495,7 +4512,7 @@
44954512source = "registry+https://github.com/rust-lang/crates.io-index"
44964513checksum = "93b5b21df781c820a9cc387b808d4128cbc164dd28d67ac6ed666a00996f8f15"
44974514dependencies = [
4498 "convert_case",
4515 "convert_case 0.8.0",
44994516 "proc-macro2",
45004517 "quote",
45014518 "structmeta",
@@ -4567,6 +4584,18 @@
45674584]
45684585
45694586[[package]]
4587name = "metrics-exporter-opentelemetry"
4588version = "0.2.1"
4589source = "registry+https://github.com/rust-lang/crates.io-index"
4590checksum = "500e1fa58894a8c140ee0a9282e1d9e765fc7c7853bd310d1357d2808ad8f0b0"
4591dependencies = [
4592 "derive_more",
4593 "metrics",
4594 "opentelemetry",
4595 "opentelemetry_sdk",
4596]
4597
4598[[package]]
45704599name = "mime"
45714600version = "0.3.17"
45724601source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4857,9 +4886,20 @@
48574886name = "obs"
48584887version = "1.94.0"
48594888dependencies = [
4860 "cache",
4889 "base64 0.23.1",
4890 "config 1.94.0",
48614891 "metrics",
4892 "metrics-exporter-opentelemetry",
4893 "opentelemetry",
4894 "opentelemetry-appender-tracing",
4895 "opentelemetry-otlp",
4896 "opentelemetry_sdk",
4897 "reqwest 0.12.28",
4898 "thiserror 2.0.19",
48624899 "tokio",
4900 "tracing",
4901 "tracing-opentelemetry",
4902 "tracing-subscriber",
48634903]
48644904
48654905[[package]]
@@ -4912,6 +4952,91 @@
49124952]
49134953
49144954[[package]]
4955name = "opentelemetry"
4956version = "0.31.0"
4957source = "registry+https://github.com/rust-lang/crates.io-index"
4958checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0"
4959dependencies = [
4960 "futures-core",
4961 "futures-sink",
4962 "js-sys",
4963 "pin-project-lite",
4964 "thiserror 2.0.19",
4965 "tracing",
4966]
4967
4968[[package]]
4969name = "opentelemetry-appender-tracing"
4970version = "0.31.0"
4971source = "registry+https://github.com/rust-lang/crates.io-index"
4972checksum = "bc11dcdfd423bb85c4724d4a4b61baec0e16093f565d3fbded30891358e95277"
4973dependencies = [
4974 "opentelemetry",
4975 "tracing",
4976 "tracing-core",
4977 "tracing-subscriber",
4978]
4979
4980[[package]]
4981name = "opentelemetry-http"
4982version = "0.31.0"
4983source = "registry+https://github.com/rust-lang/crates.io-index"
4984checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d"
4985dependencies = [
4986 "async-trait",
4987 "bytes",
4988 "http",
4989 "opentelemetry",
4990 "reqwest 0.12.28",
4991]
4992
4993[[package]]
4994name = "opentelemetry-otlp"
4995version = "0.31.0"
4996source = "registry+https://github.com/rust-lang/crates.io-index"
4997checksum = "7a2366db2dca4d2ad033cad11e6ee42844fd727007af5ad04a1730f4cb8163bf"
4998dependencies = [
4999 "http",
5000 "opentelemetry",
5001 "opentelemetry-http",
5002 "opentelemetry-proto",
5003 "opentelemetry_sdk",
5004 "prost",
5005 "reqwest 0.12.28",
5006 "thiserror 2.0.19",
5007]
5008
5009[[package]]
5010name = "opentelemetry-proto"
5011version = "0.31.0"
5012source = "registry+https://github.com/rust-lang/crates.io-index"
5013checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f"
5014dependencies = [
5015 "opentelemetry",
5016 "opentelemetry_sdk",
5017 "prost",
5018 "tonic",
5019 "tonic-prost",
5020]
5021
5022[[package]]
5023name = "opentelemetry_sdk"
5024version = "0.31.0"
5025source = "registry+https://github.com/rust-lang/crates.io-index"
5026checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd"
5027dependencies = [
5028 "futures-channel",
5029 "futures-executor",
5030 "futures-util",
5031 "opentelemetry",
5032 "percent-encoding",
5033 "rand 0.9.5",
5034 "thiserror 2.0.19",
5035 "tokio",
5036 "tokio-stream",
5037]
5038
5039[[package]]
49155040name = "ordered-float"
49165041version = "4.6.0"
49175042source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5237,6 +5362,26 @@
52375362]
52385363
52395364[[package]]
5365name = "pin-project"
5366version = "1.1.13"
5367source = "registry+https://github.com/rust-lang/crates.io-index"
5368checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
5369dependencies = [
5370 "pin-project-internal",
5371]
5372
5373[[package]]
5374name = "pin-project-internal"
5375version = "1.1.13"
5376source = "registry+https://github.com/rust-lang/crates.io-index"
5377checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
5378dependencies = [
5379 "proc-macro2",
5380 "quote",
5381 "syn 2.0.119",
5382]
5383
5384[[package]]
52405385name = "pin-project-lite"
52415386version = "0.2.17"
52425387source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5524,6 +5669,29 @@
55245669]
55255670
55265671[[package]]
5672name = "prost"
5673version = "0.14.4"
5674source = "registry+https://github.com/rust-lang/crates.io-index"
5675checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1"
5676dependencies = [
5677 "bytes",
5678 "prost-derive",
5679]
5680
5681[[package]]
5682name = "prost-derive"
5683version = "0.14.4"
5684source = "registry+https://github.com/rust-lang/crates.io-index"
5685checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
5686dependencies = [
5687 "anyhow",
5688 "itertools 0.14.0",
5689 "proc-macro2",
5690 "quote",
5691 "syn 2.0.119",
5692]
5693
5694[[package]]
55275695name = "ptr_meta"
55285696version = "0.1.4"
55295697source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5924,6 +6092,7 @@
59246092dependencies = [
59256093 "base64 0.22.1",
59266094 "bytes",
6095 "futures-channel",
59276096 "futures-core",
59286097 "futures-util",
59296098 "h2",
@@ -7665,6 +7834,38 @@
76657834]
76667835
76677836[[package]]
7837name = "tonic"
7838version = "0.14.6"
7839source = "registry+https://github.com/rust-lang/crates.io-index"
7840checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef"
7841dependencies = [
7842 "async-trait",
7843 "base64 0.22.1",
7844 "bytes",
7845 "http",
7846 "http-body",
7847 "http-body-util",
7848 "percent-encoding",
7849 "pin-project",
7850 "sync_wrapper",
7851 "tokio-stream",
7852 "tower-layer",
7853 "tower-service",
7854 "tracing",
7855]
7856
7857[[package]]
7858name = "tonic-prost"
7859version = "0.14.6"
7860source = "registry+https://github.com/rust-lang/crates.io-index"
7861checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0"
7862dependencies = [
7863 "bytes",
7864 "prost",
7865 "tonic",
7866]
7867
7868[[package]]
76687869name = "tower"
76697870version = "0.5.3"
76707871source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7755,6 +7956,25 @@
77557956]
77567957
77577958[[package]]
7959name = "tracing-opentelemetry"
7960version = "0.32.0"
7961source = "registry+https://github.com/rust-lang/crates.io-index"
7962checksum = "1e6e5658463dd88089aba75c7791e1d3120633b1bfde22478b28f625a9bb1b8e"
7963dependencies = [
7964 "js-sys",
7965 "opentelemetry",
7966 "opentelemetry_sdk",
7967 "rustversion",
7968 "smallvec",
7969 "thiserror 2.0.19",
7970 "tracing",
7971 "tracing-core",
7972 "tracing-log",
7973 "tracing-subscriber",
7974 "web-time",
7975]
7976
7977[[package]]
77587978name = "tracing-subscriber"
77597979version = "0.3.23"
77607980source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8201,16 +8421,20 @@
82018421version = "1.94.0"
82028422dependencies = [
82038423 "async-trait",
8424 "config 1.94.0",
82048425 "db",
82058426 "gitsync",
82068427 "hex",
82078428 "hmac 0.12.1",
8429 "metrics",
8430 "rand 0.10.2",
82088431 "reqwest 0.13.4",
82098432 "sea-orm",
82108433 "serde",
82118434 "serde_json",
82128435 "sha2 0.10.9",
82138436 "time",
8437 "tokio",
82148438 "tracing",
82158439 "uuid",
82168440]
Modified Cargo.toml Cargo.toml +13 −1 View Cargo.toml
@@ -68,6 +68,8 @@
6868payment = { path = "lib/payment" }
6969search = { path = "lib/search" }
7070webapi = { path = "lib/webapi" }
71webhook = { path = "lib/webhook" }
72obs = { path = "lib/obs" }
7173storagelayer = { path = "chat/storagelayer" }
7274chatlayer = { path = "chat/chatlayer" }
7375glayer = { path = "chat/glayer" }
@@ -81,7 +83,7 @@
8183lombok = "0.4.0"
8284log = "0.4"
8385tracing = "0.1.44"
84tracing-subscriber = { version = "0.3", features = ["env-filter"] }
86tracing-subscriber = { version = "0.3", features = ["env-filter", "registry"] }
8587thiserror = "2.0.19"
8688async-trait = "0.1"
8789bytes = "1"
@@ -117,3 +119,13 @@
117119async-graphql = "7.2.1"
118120utoipa-scalar = { version = "0.3.0", features = ["axum"] }
119121metrics = { version = "0.24.6", features = [] }
122opentelemetry = { version = "=0.31.0", features = ["trace", "metrics", "logs"] }
123opentelemetry_sdk = { version = "=0.31.0", features = ["trace", "metrics", "logs", "rt-tokio"] }
124# http-proto + reqwest-blocking-client: OTLP over HTTP/protobuf driven from the
125# SDK's dedicated batch-processor threads. The async hyper client cannot be used
126# there (no tokio reactor on those threads), which is why the OTLP default is
127# the blocking client. Pulls reqwest 0.12 alongside the workspace's 0.13.4.
128opentelemetry-otlp = { version = "=0.31.0", default-features = false, features = ["http-proto", "reqwest-blocking-client", "trace", "metrics", "logs"] }
129opentelemetry-appender-tracing = { version = "=0.31.0" }
130tracing-opentelemetry = { version = "=0.32.0" }
131metrics-exporter-opentelemetry = { version = "=0.2.1" }