init
This commit is contained in:
9
Tracing/Dockerfile
Normal file
9
Tracing/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM nginx:1.18
|
||||
RUN apt-get update ; apt-get install unzip
|
||||
ADD https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/download/webserver%2Fv1.0.0/opentelemetry-webserver-sdk-x64-linux.tgz.zip /opt
|
||||
RUN cd /opt ; unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip; tar xvfz opentelemetry-webserver-sdk-x64-linux.tgz
|
||||
RUN cd /opt/opentelemetry-webserver-sdk; ./install.sh
|
||||
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
|
||||
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
|
||||
COPY opentelemetry_module.conf /etc/nginx/conf.d
|
||||
|
3
Tracing/README.md
Normal file
3
Tracing/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Tracing
|
||||
|
||||
Experimenting with OTel + Nginx, not prod worth yet.
|
53
Tracing/docker-compose.yml
Normal file
53
Tracing/docker-compose.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
version: "3"
|
||||
services:
|
||||
|
||||
nginx:
|
||||
image: nginx-otel
|
||||
volumes:
|
||||
- './shared/nginx_otel_module.conf:/etc/nginx/conf.d/opentelemetry_module.conf'
|
||||
ports:
|
||||
- 8080:80
|
||||
depends_on:
|
||||
- otel-collector
|
||||
|
||||
# And put them in an OTEL collector pipeline...
|
||||
otel-collector:
|
||||
image: otel/opentelemetry-collector:0.61.0
|
||||
command: [ "--config=/etc/otel-collector.yaml" ]
|
||||
volumes:
|
||||
- './shared/otel-collector.yaml:/etc/otel-collector.yaml'
|
||||
|
||||
# To eventually offload to Tempo...
|
||||
tempo:
|
||||
image: grafana/tempo:latest
|
||||
command: [ "-config.file=/etc/tempo.yaml" ]
|
||||
volumes:
|
||||
- './shared/tempo.yaml:/etc/tempo.yaml'
|
||||
- './shared/tempo-data:/tmp/tempo'
|
||||
ports:
|
||||
- "3200" # tempo
|
||||
- "4317" # otlp grpc
|
||||
- "4318" # otlp http
|
||||
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
command:
|
||||
- --config.file=/etc/prometheus.yaml
|
||||
- --web.enable-remote-write-receiver
|
||||
- --enable-feature=exemplar-storage
|
||||
volumes:
|
||||
- './shared/prometheus.yaml:/etc/prometheus.yaml'
|
||||
ports:
|
||||
- "9090:9090"
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:9.4.3
|
||||
volumes:
|
||||
- './shared/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml'
|
||||
environment:
|
||||
- GF_AUTH_ANONYMOUS_ENABLED=true
|
||||
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
|
||||
- GF_AUTH_DISABLE_LOGIN_FORM=true
|
||||
- GF_FEATURE_TOGGLES_ENABLE=traceqlEditor
|
||||
ports:
|
||||
- "3000:3000"
|
30
Tracing/shared/grafana-datasources.yaml
Normal file
30
Tracing/shared/grafana-datasources.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Prometheus
|
||||
type: prometheus
|
||||
uid: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://prometheus:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
version: 1
|
||||
editable: false
|
||||
jsonData:
|
||||
httpMethod: GET
|
||||
- name: Tempo
|
||||
type: tempo
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://tempo:3200
|
||||
basicAuth: false
|
||||
isDefault: true
|
||||
version: 1
|
||||
editable: false
|
||||
apiVersion: 1
|
||||
uid: tempo
|
||||
jsonData:
|
||||
httpMethod: GET
|
||||
serviceMap:
|
||||
datasourceUid: prometheus
|
9
Tracing/shared/nginx_otel_module.conf
Normal file
9
Tracing/shared/nginx_otel_module.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
NginxModuleEnabled ON;
|
||||
NginxModuleOtelSpanExporter otlp;
|
||||
NginxModuleOtelExporterEndpoint otel-collector:4317;
|
||||
NginxModuleServiceName DemoService;
|
||||
NginxModuleServiceNamespace DemoServiceNamespace;
|
||||
NginxModuleServiceInstanceId DemoInstanceId;
|
||||
NginxModuleResolveBackends ON;
|
||||
NginxModuleTraceAsError ON;
|
||||
|
14
Tracing/shared/otel-collector.yaml
Normal file
14
Tracing/shared/otel-collector.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
receivers:
|
||||
otlp:
|
||||
protocols:
|
||||
grpc:
|
||||
exporters:
|
||||
otlp:
|
||||
endpoint: tempo:4317
|
||||
tls:
|
||||
insecure: true
|
||||
service:
|
||||
pipelines:
|
||||
traces:
|
||||
receivers: [otlp]
|
||||
exporters: [otlp]
|
11
Tracing/shared/prometheus.yaml
Normal file
11
Tracing/shared/prometheus.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
evaluation_interval: 15s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'prometheus'
|
||||
static_configs:
|
||||
- targets: [ 'localhost:9090' ]
|
||||
- job_name: 'tempo'
|
||||
static_configs:
|
||||
- targets: [ 'tempo:3200' ]
|
55
Tracing/shared/tempo.yaml
Normal file
55
Tracing/shared/tempo.yaml
Normal file
@@ -0,0 +1,55 @@
|
||||
server:
|
||||
http_listen_port: 3200
|
||||
|
||||
query_frontend:
|
||||
search:
|
||||
duration_slo: 5s
|
||||
throughput_bytes_slo: 1.073741824e+09
|
||||
trace_by_id:
|
||||
duration_slo: 5s
|
||||
|
||||
distributor:
|
||||
receivers: # this configuration will listen on all ports and protocols that tempo is capable of.
|
||||
jaeger: # the receives all come from the OpenTelemetry collector. more configuration information can
|
||||
protocols: # be found there: https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver
|
||||
thrift_http: #
|
||||
grpc: # for a production deployment you should only enable the receivers you need!
|
||||
thrift_binary:
|
||||
thrift_compact:
|
||||
zipkin:
|
||||
otlp:
|
||||
protocols:
|
||||
http:
|
||||
grpc:
|
||||
opencensus:
|
||||
|
||||
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: /tmp/tempo/generator/wal
|
||||
remote_write:
|
||||
- url: http://prometheus:9090/api/v1/write
|
||||
send_exemplars: true
|
||||
|
||||
storage:
|
||||
trace:
|
||||
backend: local # backend configuration to use
|
||||
wal:
|
||||
path: /tmp/tempo/wal # where to store the the wal locally
|
||||
local:
|
||||
path: /tmp/tempo/blocks
|
||||
|
||||
overrides:
|
||||
defaults:
|
||||
metrics_generator:
|
||||
processors: [service-graphs, span-metrics] # enables metrics generator
|
Reference in New Issue
Block a user