Skip to content

Commit ef3259e

Browse files
committed
Add ditributed tracing to walshadow
1 parent bdd36a9 commit ef3259e

29 files changed

Lines changed: 3046 additions & 1452 deletions

Cargo.lock

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

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ toml = { version = "1", default-features = false, features = ["parse", "serde"]
6161
tracing = "0.1"
6262
tracing-subscriber = { version = "0.3", default-features = false, features = ["env-filter", "fmt", "ansi"] }
6363
zstd = "0.13"
64+
opentelemetry = "0.32"
65+
opentelemetry_sdk = { version = "0.32", features = ["rt-tokio"] }
66+
opentelemetry-otlp = { version = "0.32", default-features = false, features = ["grpc-tonic", "trace"] }
67+
tracing-opentelemetry = { version = "0.33", default-features = false }
6468

6569
[dev-dependencies]
6670
tempfile = "3"

bench/ec2/ec2-clickhouse/cloud-init.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ write_files:
1414
email String,
1515
_lsn UInt64,
1616
_xid UInt32,
17-
_op Enum8('insert' = 1, 'update' = 2, 'delete' = 3),
18-
_commit_ts DateTime64(6, 'UTC')
17+
_commit_ts DateTime64(6, 'UTC'),
18+
_is_deleted Bool
1919
)
20-
ENGINE = ReplacingMergeTree(_lsn)
20+
ENGINE = ReplacingMergeTree(_lsn, _is_deleted)
2121
ORDER BY id;
2222
runcmd:
2323
- export DEBIAN_FRONTEND=noninteractive

bench/ec2/ec2-walshadow/deploy.sh

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ source ./state.env # PUBLIC_IP, KEY_NAME, ...
2121
source ../lib.sh
2222

2323
IMAGE="${IMAGE:-walshadow:local}"
24-
FLUSH_TIMEOUT_MS="${FLUSH_TIMEOUT_MS:-50}"
24+
FLUSH_TIMEOUT_MS="${FLUSH_TIMEOUT_MS:-1000}"
25+
JAEGER_IMAGE="${JAEGER_IMAGE:-jaegertracing/all-in-one:1.57}"
26+
JAEGER_MAX_TRACES="${JAEGER_MAX_TRACES:-50000}"
27+
JAEGER_MEMORY="${JAEGER_MEMORY:-1g}"
28+
TRACE_SAMPLE_RATIO="${TRACE_SAMPLE_RATIO:-0.01}"
2529
node_ssh_setup
2630

2731
SRC_PRIV="${SOURCE_PRIVATE_IP:-$(read_state_var ../ec2-source-pg/state.env SOURCE_PRIVATE_IP)}"
@@ -65,16 +69,61 @@ columns = [
6569
]
6670
EOF
6771

72+
# Memory-bound Jaeger (in-memory storage capped at JAEGER_MAX_TRACES, RAM at
73+
# JAEGER_MEMORY) on walshadow-net so the daemon ships spans to it by name.
74+
"${SSH[@]}" "sudo docker network inspect walshadow-net >/dev/null 2>&1 || sudo docker network create walshadow-net"
75+
"${SSH[@]}" "sudo docker rm -f jaeger >/dev/null 2>&1 || true; sudo docker run -d --name jaeger --restart unless-stopped \
76+
--network walshadow-net \
77+
--memory '$JAEGER_MEMORY' \
78+
-e COLLECTOR_OTLP_ENABLED=true \
79+
-e SPAN_STORAGE_TYPE=memory \
80+
-e MEMORY_MAX_TRACES='$JAEGER_MAX_TRACES' \
81+
-p 16686:16686 -p 4317:4317 \
82+
$JAEGER_IMAGE >/dev/null && echo 'jaeger started'"
83+
6884
"${SSH[@]}" "sudo docker rm -f walshadow >/dev/null 2>&1 || true; sudo docker run -d --name walshadow --restart unless-stopped \
85+
--network walshadow-net \
6986
-e RUST_LOG='warn,walshadow=info' \
7087
-e WALSHADOW_SOURCE_HOST='$SRC_PRIV' \
7188
-e WALSHADOW_SOURCE_PORT=5432 \
89+
-e OTEL_EXPORTER_OTLP_ENDPOINT='http://jaeger:4317' \
7290
-v /opt/walshadow/ch-config.toml:/etc/walshadow/ch-config.toml:ro \
7391
-v walshadow-data:/var/lib/walshadow \
7492
-p 9484:9484 \
75-
$IMAGE >/dev/null && echo started"
93+
$IMAGE --trace-sample-ratio '$TRACE_SAMPLE_RATIO' >/dev/null && echo started"
94+
95+
# Grafana + Prometheus: only uploaded/recreated when FORCE_METRICS=1.
96+
if [ "${FORCE_METRICS:-0}" = "1" ]; then
97+
GRAFANA_IMAGE="${GRAFANA_IMAGE:-grafana/grafana:13.0.2}"
98+
PROM_IMAGE="${PROM_IMAGE:-prom/prometheus:v3.12.0}"
99+
REPO_ROOT="$(cd ../../.. && pwd)"
100+
101+
"${SSH[@]}" "sudo docker network inspect walshadow-net >/dev/null 2>&1 || sudo docker network create walshadow-net"
102+
"${SSH[@]}" "sudo docker network connect walshadow-net walshadow 2>/dev/null || true"
103+
104+
tar -C "$REPO_ROOT/docker" -czf - grafana prometheus \
105+
| "${SSH[@]}" "sudo install -d /opt/walshadow/obs && sudo tar -C /opt/walshadow/obs -xzf -"
106+
# compose hostname 'clickhouse' -> private IP
107+
"${SSH[@]}" "sudo grep -rl clickhouse /opt/walshadow/obs 2>/dev/null | sudo xargs -r sed -i 's/clickhouse:/$CH_PRIV:/g; s#//clickhouse#//$CH_PRIV#g'"
108+
109+
"${SSH[@]}" "sudo docker rm -f prometheus >/dev/null 2>&1 || true; sudo docker run -d --name prometheus --restart unless-stopped \
110+
--network walshadow-net \
111+
-v /opt/walshadow/obs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro \
112+
-p 9090:9090 \
113+
$PROM_IMAGE >/dev/null && echo 'prometheus started'"
114+
115+
"${SSH[@]}" "sudo docker rm -f grafana >/dev/null 2>&1 || true; sudo docker run -d --name grafana --restart unless-stopped \
116+
--network walshadow-net \
117+
-e GF_AUTH_ANONYMOUS_ENABLED=true -e GF_AUTH_ANONYMOUS_ORG_ROLE=Admin \
118+
-e GF_INSTALL_PLUGINS=grafana-clickhouse-datasource \
119+
-v /opt/walshadow/obs/grafana/provisioning:/etc/grafana/provisioning:ro \
120+
-v /opt/walshadow/obs/grafana/dashboards:/var/lib/grafana/dashboards:ro \
121+
-p 3000:3000 \
122+
$GRAFANA_IMAGE >/dev/null && echo 'grafana started'"
123+
fi
76124

77125
echo
78126
echo "=== deployed ==="
79127
echo "metrics: curl http://$PUBLIC_IP:9484/metrics"
128+
echo "traces: http://$PUBLIC_IP:16686 (jaeger)"
80129
echo "logs: ssh -i $PEM ubuntu@$PUBLIC_IP 'sudo docker logs -f walshadow'"

0 commit comments

Comments
 (0)