Skip to content

Commit 370bece

Browse files
committed
Observability stack: update Tempo version to latest, enable traces-to-profiles, run Pyroscope with bigger and higher resolution profiles
1 parent fbd6b3b commit 370bece

6 files changed

Lines changed: 110 additions & 5 deletions

File tree

framework/.changeset/v0.14.1.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Observability stack: update Tempo version to latest, enable traces-to-profiles, run Pyroscope with bigger and higher resolution profiles

framework/components/blockchain/anvil.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func defaultAnvil(in *Input) {
3636
in.Port = "8545"
3737
}
3838
if in.ContainerName == "" {
39-
in.ContainerName = "anvil"
39+
in.ContainerName = "anvil-" + in.ChainID
4040
}
4141
}
4242

framework/observability/compose/conf/provisioning/datasources/loki.yaml

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,46 @@ apiVersion: 1
33
datasources:
44
- name: Tempo
55
type: tempo
6+
uid: tempo
67
access: proxy
78
url: http://tempo:3200
89
isDefault: false
10+
jsonData:
11+
tracesToLogsV2:
12+
datasourceUid: P8E80F9AEF21F6940
13+
spanStartTimeShift: '-1h'
14+
spanEndTimeShift: '1h'
15+
filterByTraceID: true
16+
filterBySpanID: true
17+
tracesToProfiles:
18+
datasourceUid: pyroscope
19+
profileTypeId: 'process_cpu:cpu:nanoseconds:cpu:nanoseconds'
20+
customQuery: true
21+
query: '{service_name="chainlink-node"}'
22+
serviceMap:
23+
datasourceUid: PBFA97CFB590B2093
24+
nodeGraph:
25+
enabled: true
926
- name: Loki
1027
type: loki
28+
uid: P8E80F9AEF21F6940
1129
isDefault: true
1230
access: proxy
1331
url: http://loki:3100
1432
jsonData:
1533
maxLines: 5000
34+
derivedFields:
35+
- datasourceUid: tempo
36+
matcherRegex: '"traceID":"([a-f0-9]+)"'
37+
name: TraceID
38+
url: '$${__value.raw}'
1639
- name: Prometheus
1740
type: prometheus
41+
uid: PBFA97CFB590B2093
1842
access: proxy
19-
url: http://prometheus:9090 # Replace with your Prometheus URL
43+
url: http://prometheus:9090
2044
jsonData:
21-
timeInterval: 5s # Adjust this interval as needed
45+
timeInterval: 5s
2246

2347
- name: PostgreSQL 0
2448
type: postgres
@@ -82,8 +106,11 @@ datasources:
82106

83107
- name: Pyroscope
84108
type: grafana-pyroscope-datasource
109+
uid: pyroscope
85110
access: proxy
86111
url: http://pyroscope:4040
87112
isDefault: false
88113
version: 1
89114
editable: true
115+
jsonData:
116+
maxNodes: 100000

framework/observability/compose/docker-compose.yaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
services:
22
tempo:
3-
image: grafana/tempo:2.3.1
3+
image: grafana/tempo:2.7.1
4+
user: '0:0'
45
command: [ "-config.file=/etc/tempo.yaml" ]
56
volumes:
67
- ./tempo.yaml:/etc/tempo.yaml
@@ -11,6 +12,11 @@ services:
1112
- "14268:14268" # jaeger ingest
1213
- "14250:14250" # jaeger grpc
1314
- "14400:55680" # otlp http legacy
15+
deploy:
16+
resources:
17+
limits:
18+
memory: 2G
19+
restart: unless-stopped
1420
otel-collector:
1521
image: otel/opentelemetry-collector-contrib:0.123.0
1622
volumes:
@@ -40,6 +46,10 @@ services:
4046
prometheus:
4147
image: prom/prometheus:v3.4.1
4248
user: '0:0'
49+
command:
50+
- '--config.file=/etc/prometheus/prometheus.yml'
51+
- '--web.enable-remote-write-receiver'
52+
- '--enable-feature=exemplar-storage'
4353
volumes:
4454
- /var/run/docker.sock:/var/run/docker.sock
4555
- ./conf/prometheus.yml:/etc/prometheus/prometheus.yml
@@ -88,8 +98,9 @@ services:
8898
ports:
8999
- '4040:4040'
90100
command:
91-
- 'server'
101+
- '-config.file=/etc/pyroscope/config.yaml'
92102
volumes:
103+
- ./pyroscope-config.yaml:/etc/pyroscope/config.yaml
93104
- pyroscope-storage:/var/lib/pyroscope
94105

95106
postgres_exporter_0:
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Pyroscope server configuration
2+
# Increased limits to preserve more profile data for comparison analysis
3+
4+
limits:
5+
# Ingestion rate limits (default: 4 MiB/s rate, 2 MiB burst)
6+
ingestion_rate_mb: 100
7+
ingestion_burst_size_mb: 50
8+
9+
# Disable sample limit to prevent profile rejection (default: 16000)
10+
max_profile_stacktrace_samples: 0
11+
12+
# Increase max stacktrace depth (default: 1000)
13+
max_profile_stacktrace_depth: 2000
14+
15+
# Increase default flame graph nodes shown (default: 8192)
16+
max_flamegraph_nodes_default: 100000
17+
18+
# Disable max flame graph nodes limit (default: 1048576)
19+
max_flamegraph_nodes_max: 0
20+
21+
# Increase max profile size (default: 4MB)
22+
max_profile_size_bytes: 16777216

framework/observability/compose/tempo.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,54 @@ distributor:
66
otlp:
77
protocols:
88
grpc:
9+
endpoint: 0.0.0.0:4317
910
http:
11+
endpoint: 0.0.0.0:4318
12+
13+
# Query frontend for TraceQL metrics
14+
query_frontend:
15+
search:
16+
duration_slo: 5s
17+
throughput_bytes_slo: 1.073741824e+09
18+
metrics:
19+
max_duration: 0s
20+
21+
# Querier configuration
22+
querier:
23+
search:
24+
prefer_self: 10
25+
26+
# Metrics generator for Grafana Drilldown (RED metrics from traces)
27+
metrics_generator:
28+
registry:
29+
external_labels:
30+
source: tempo
31+
storage:
32+
path: /tmp/tempo/generator/wal
33+
remote_write:
34+
- url: http://prometheus:9090/api/v1/write
35+
send_exemplars: true
36+
processor:
37+
service_graphs:
38+
dimensions:
39+
- service.name
40+
- service.namespace
41+
span_metrics:
42+
dimensions:
43+
- service.name
44+
- span.name
45+
- span.kind
46+
- status.code
47+
local_blocks:
48+
flush_to_storage: false
49+
max_block_bytes: 100000000 # 100MB max block size for metrics generator
1050

1151
overrides:
1252
max_traces_per_user: 50000
53+
metrics_generator_processors:
54+
- service-graphs
55+
- span-metrics
56+
- local-blocks
1357

1458
storage:
1559
trace:

0 commit comments

Comments
 (0)