Skip to content

Commit 6421f04

Browse files
committed
Add Docker Compose config for microservice setup
1 parent 25f48ff commit 6421f04

File tree

2 files changed

+219
-0
lines changed

2 files changed

+219
-0
lines changed

alloy/cloud-microservices.alloy

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
2+
import.git "grafana_cloud" {
3+
repository = "https://github.com/grafana/alloy-modules.git"
4+
revision = "main"
5+
path = "modules/cloud/grafana/cloud/module.alloy"
6+
pull_frequency = "0s"
7+
}
8+
9+
grafana_cloud.stack "receivers" {
10+
stack_name = env("GRAFANA_CLOUD_STACK")
11+
token = env("GRAFANA_CLOUD_TOKEN")
12+
}
13+
14+
discovery.docker "application_containers" {
15+
host = "unix:///var/run/docker.sock"
16+
filter {
17+
name = "label"
18+
values = ["service.type=application"]
19+
}
20+
}
21+
22+
discovery.relabel "application_containers" {
23+
rule {
24+
target_label = "job"
25+
source_labels = [
26+
"__meta_docker_container_name",
27+
]
28+
regex = "/(.*)"
29+
replacement = "quickpizza/${1}"
30+
}
31+
rule {
32+
target_label = "instance"
33+
source_labels = [
34+
"__meta_docker_container_name",
35+
]
36+
regex = "/(.*)"
37+
replacement = "${1}"
38+
}
39+
rule {
40+
target_label = "service_namespace"
41+
replacement = "quickpizza"
42+
}
43+
rule {
44+
target_label = "service_name"
45+
source_labels = [
46+
"__meta_docker_container_name",
47+
]
48+
regex = "/(.*)"
49+
replacement = "${1}"
50+
}
51+
targets = discovery.docker.application_containers.targets
52+
}
53+
// Metrics
54+
prometheus.scrape "application_containers" {
55+
scrape_interval = "10s"
56+
forward_to = [grafana_cloud.stack.receivers.metrics]
57+
targets = discovery.relabel.application_containers.output
58+
}
59+
// Logs
60+
loki.source.docker "application_containers" {
61+
host = "unix:///var/run/docker.sock"
62+
targets = discovery.relabel.application_containers.output
63+
forward_to = [grafana_cloud.stack.receivers.logs]
64+
}
65+
66+
// Profiling
67+
pyroscope.receive_http "default" {
68+
http {
69+
listen_address = "0.0.0.0"
70+
listen_port = 9999
71+
}
72+
forward_to = [grafana_cloud.stack.receivers.profiles]
73+
}
74+
75+
// Traces
76+
otelcol.receiver.otlp "default" {
77+
grpc {
78+
endpoint = "0.0.0.0:4317"
79+
}
80+
81+
http {
82+
endpoint = "0.0.0.0:4318"
83+
}
84+
85+
output {
86+
traces = [
87+
otelcol.processor.batch.default.input,
88+
otelcol.connector.host_info.default.input,
89+
]
90+
}
91+
}
92+
93+
otelcol.connector.host_info "default" {
94+
host_identifiers = ["container.name", "container.id", "service.name"]
95+
metrics_flush_interval = "10s"
96+
97+
output {
98+
metrics = [otelcol.exporter.prometheus.otlp_metrics.input]
99+
}
100+
}
101+
otelcol.exporter.prometheus "otlp_metrics" {
102+
forward_to = [
103+
grafana_cloud.stack.receivers.metrics,
104+
]
105+
}
106+
otelcol.processor.batch "default" {
107+
output {
108+
traces = [grafana_cloud.stack.receivers.traces]
109+
}
110+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
x-quickpizza-env-common: &quickpizza-env-common
2+
QUICKPIZZA_OTLP_ENDPOINT: http://alloy:4318
3+
QUICKPIZZA_PYROSCOPE_ENDPOINT: http://alloy:9999
4+
QUICKPIZZA_TRUST_CLIENT_TRACEID: true
5+
QUICKPIZZA_ALL_SERVICES: 0
6+
QUICKPIZZA_CATALOG_ENDPOINT: http://catalog:3333
7+
QUICKPIZZA_COPY_ENDPOINT: http://copy:3333
8+
QUICKPIZZA_WS_ENDPOINT: http://ws:3333
9+
QUICKPIZZA_RECOMMENDATIONS_ENDPOINT: http://recommendations:3333
10+
QUICKPIZZA_CONFIG_ENDPOINT: http://config:3333
11+
12+
name: quickpizza
13+
services:
14+
alloy:
15+
image: grafana/alloy:v1.9.1
16+
container_name: alloy
17+
labels:
18+
- "service.type=instrumentation"
19+
volumes:
20+
- "./alloy/${ALLOY_FILE_NAME:-cloud-microservices.alloy}:/config.alloy:Z"
21+
- "${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock"
22+
command:
23+
- run
24+
- /config.alloy
25+
- --server.http.listen-addr=0.0.0.0:12345
26+
- --stability.level=public-preview
27+
ports:
28+
- "12345:12345"
29+
environment:
30+
QUICKPIZZA_HOST: public-api:3333
31+
# must be set with an .env file
32+
GRAFANA_CLOUD_TOKEN: "${GRAFANA_CLOUD_TOKEN}"
33+
# must be set with an .env file
34+
GRAFANA_CLOUD_STACK: "${GRAFANA_CLOUD_STACK}"
35+
depends_on:
36+
- catalog
37+
- config
38+
- copy
39+
- public-api
40+
- recommendations
41+
- ws
42+
43+
catalog:
44+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
45+
container_name: catalog
46+
labels:
47+
- "service.type=application"
48+
environment:
49+
<<: *quickpizza-env-common
50+
QUICKPIZZA_CATALOG: "1"
51+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "catalog"
52+
QUICKPIZZA_OTEL_SERVICE_NAME: "catalog"
53+
54+
config:
55+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
56+
container_name: config
57+
labels:
58+
- "service.type=application"
59+
environment:
60+
<<: *quickpizza-env-common
61+
QUICKPIZZA_CONFIG: "1"
62+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "config"
63+
QUICKPIZZA_OTEL_SERVICE_NAME: "config"
64+
copy:
65+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
66+
container_name: copy
67+
labels:
68+
- "service.type=application"
69+
environment:
70+
<<: *quickpizza-env-common
71+
QUICKPIZZA_COPY: "1"
72+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "copy"
73+
QUICKPIZZA_OTEL_SERVICE_NAME: "copy"
74+
75+
public-api:
76+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
77+
container_name: public-api
78+
labels:
79+
- "service.type=application"
80+
ports:
81+
- "3333:3333"
82+
environment:
83+
<<: *quickpizza-env-common
84+
QUICKPIZZA_FRONTEND: "1"
85+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "public-api"
86+
QUICKPIZZA_OTEL_SERVICE_NAME: "public-api"
87+
88+
recommendations:
89+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
90+
container_name: recommendations
91+
labels:
92+
- "service.type=application"
93+
environment:
94+
<<: *quickpizza-env-common
95+
QUICKPIZZA_RECOMMENDATIONS: "1"
96+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "recommendations"
97+
QUICKPIZZA_OTEL_SERVICE_NAME: "recommendations"
98+
99+
ws:
100+
image: ${QUICKPIZZA_IMAGE:-ghcr.io/grafana/quickpizza-local:latest}
101+
container_name: ws
102+
labels:
103+
- "service.type=application"
104+
environment:
105+
<<: *quickpizza-env-common
106+
QUICKPIZZA_WS: "1"
107+
QUICKPIZZA_OTEL_SERVICE_INSTANCE_ID: "ws"
108+
QUICKPIZZA_OTEL_SERVICE_NAME: "ws"
109+

0 commit comments

Comments
 (0)