Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions alloy/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ARG UPSTREAM_VERSION_ALLOY=latest
FROM grafana/alloy:${UPSTREAM_VERSION_ALLOY}

COPY config.alloy /etc/alloy/config.alloy
84 changes: 84 additions & 0 deletions alloy/config.alloy
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
logging {
level = "info"
format = "logfmt"
}

// Prometheus remote write for metrics
prometheus.remote_write "metrics_write" {
endpoint {
name = "default"
url = "http://prometheus.dms.dappnode:9090/api/v1/write"

queue_config { }
metadata_config { }
}
}

// Loki log processing pipeline
loki.process "logs_process_client" {
forward_to = [loki.write.logs_write_client.receiver]

stage.logfmt {
mapping = { "kind" = "", "service_name" = "", "app" = "" }
}

stage.labels {
values = { "kind" = "kind", "service_name" = "service_name", "app" = "app" }
}
}

// Loki write endpoint
loki.write "logs_write_client" {
endpoint {
url = "http://loki.dms.dappnode:3100/loki/api/v1/push"
}
}

// Faro receiver for frontend telemetry collection
faro.receiver "integrations_app_agent_receiver" {
server {
listen_address = "0.0.0.0"
listen_port = 12345
cors_allowed_origins = ["*"]
max_allowed_payload_size = "10MiB"

rate_limiting {
rate = 100
}
}

sourcemaps { }

output {
logs = [loki.process.logs_process_client.receiver]
traces = [otelcol.exporter.otlp.trace_write.input]
}
}

// OpenTelemetry OTLP receiver for traces
otelcol.receiver.otlp "default" {
grpc {
endpoint = "0.0.0.0:4317"
include_metadata = true
}

http {
endpoint = "0.0.0.0:4318"
}

output {
metrics = []
logs = []
traces = [otelcol.exporter.otlp.trace_write.input]
}
}

// OpenTelemetry exporter to Tempo
otelcol.exporter.otlp "trace_write" {
client {
endpoint = "tempo.dms.dappnode:4317"
tls {
insecure = true
}
}
}
27 changes: 27 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,35 @@ services:
command: "-config.file=/etc/loki/local-config.yaml"
restart: always
image: loki.dms.dnp.dappnode.eth:1.0.1
alloy:
build:
context: alloy
args:
UPSTREAM_VERSION_ALLOY: v1.12.1
image: alloy.dms.dnp.dappnode.eth:1.0.0
restart: always
command:
- run
- --server.http.listen-addr=0.0.0.0:3000
- --storage.path=/var/lib/alloy/data
- /etc/alloy/config.alloy
volumes:
- alloy_data:/var/lib/alloy/data
tempo:
build:
context: tempo
args:
UPSTREAM_VERSION_TEMPO: 2.7.1
image: tempo.dms.dnp.dappnode.eth:1.0.0
restart: always
command:
- "-config.file=/etc/tempo/config.yaml"
volumes:
- tempo_data:/var/tempo
volumes:
grafana_data: {}
prometheus_data: {}
manager_data: {}
prometheus_file_sd: {}
alloy_data: {}
tempo_data: {}
40 changes: 23 additions & 17 deletions prometheus-targets.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
[
{
"labels": {
"job": "nodeexporter"
},
"targets": ["node-exporter.dms.dappnode:9100"]
{
"labels": {
"job": "nodeexporter"
},
{
"labels": {
"job": "cadvisor"
},
"targets": ["cadvisor.dms.dappnode:8080"]
"targets": ["node-exporter.dms.dappnode:9100"]
},
{
"labels": {
"job": "cadvisor"
},
{
"labels": {
"job": "stakersmetrics"
},
"targets": ["stakers-metrics.dms.dappnode:9090"]
}
]
"targets": ["cadvisor.dms.dappnode:8080"]
},
{
"labels": {
"job": "stakersmetrics"
},
"targets": ["stakers-metrics.dms.dappnode:9090"]
},
{
"labels": {
"job": "alloy"
},
"targets": ["alloy.dms.dappnode:3000"]
}
]
3 changes: 3 additions & 0 deletions tempo/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ARG UPSTREAM_VERSION_TEMPO=2.7.1
FROM grafana/tempo:${UPSTREAM_VERSION_TEMPO}
COPY tempo.yaml /etc/tempo/config.yaml
55 changes: 55 additions & 0 deletions tempo/tempo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
stream_over_http_enabled: true
server:
http_listen_port: 3200
log_level: info

query_frontend:
search:
duration_slo: 5s
throughput_bytes_slo: 1.073741824e+09
metadata_slo:
duration_slo: 5s
throughput_bytes_slo: 1.073741824e+09
trace_by_id:
duration_slo: 5s

distributor:
receivers:
otlp:
protocols:
grpc:
endpoint: "0.0.0.0:4317"

ingester:
max_block_duration: 5m # cut the headblock when this much time passes. this is being set for demo purposes and should probably be left alone normally

compactor:
compaction:
block_retention: 1h # overall Tempo trace retention. set for demo purposes

metrics_generator:
registry:
external_labels:
source: tempo
cluster: docker-compose
storage:
path: /var/tempo/generator/wal
remote_write:
- url: http://prometheus.dms.dappnode:9090/api/v1/write
send_exemplars: true
traces_storage:
path: /var/tempo/generator/traces

storage:
trace:
backend: local # backend configuration to use
wal:
path: /var/tempo/wal # where to store the wal locally
local:
path: /var/tempo/blocks

overrides:
defaults:
metrics_generator:
processors: [service-graphs, span-metrics, local-blocks] # enables metrics generator
generate_native_histograms: both
Loading