From 86b1cf0fb180c0a5b7193a0581b15f345067506b Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Tue, 19 Aug 2025 16:35:09 +0800 Subject: [PATCH] feat(service/telegram-bot): added all resources to deploy otel for observability (o11y) --- .../deploy/grafana/dashboards/.gitkeep | 0 .../deploy/grafana/datasources/.gitkeep | 0 .../datasources/datasource-prometheus.yaml | 15 ++++ .../grafana/datasources/datasource-tempo.yaml | 20 +++++ .../otel-collector/collector-config.yaml | 45 ++++++++++++ .../deploy/prometheus/prometheus.yml | 11 +++ services/telegram-bot/deploy/tempo/tempo.yaml | 57 +++++++++++++++ services/telegram-bot/docker-compose.yaml | 73 +++++++++++++++++++ 8 files changed, 221 insertions(+) create mode 100644 services/telegram-bot/deploy/grafana/dashboards/.gitkeep create mode 100644 services/telegram-bot/deploy/grafana/datasources/.gitkeep create mode 100644 services/telegram-bot/deploy/grafana/datasources/datasource-prometheus.yaml create mode 100644 services/telegram-bot/deploy/grafana/datasources/datasource-tempo.yaml create mode 100644 services/telegram-bot/deploy/otel-collector/collector-config.yaml create mode 100644 services/telegram-bot/deploy/prometheus/prometheus.yml create mode 100644 services/telegram-bot/deploy/tempo/tempo.yaml diff --git a/services/telegram-bot/deploy/grafana/dashboards/.gitkeep b/services/telegram-bot/deploy/grafana/dashboards/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/services/telegram-bot/deploy/grafana/datasources/.gitkeep b/services/telegram-bot/deploy/grafana/datasources/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/services/telegram-bot/deploy/grafana/datasources/datasource-prometheus.yaml b/services/telegram-bot/deploy/grafana/datasources/datasource-prometheus.yaml new file mode 100644 index 000000000..22b668e8d --- /dev/null +++ b/services/telegram-bot/deploy/grafana/datasources/datasource-prometheus.yaml @@ -0,0 +1,15 @@ +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 diff --git a/services/telegram-bot/deploy/grafana/datasources/datasource-tempo.yaml b/services/telegram-bot/deploy/grafana/datasources/datasource-tempo.yaml new file mode 100644 index 000000000..725444dbb --- /dev/null +++ b/services/telegram-bot/deploy/grafana/datasources/datasource-tempo.yaml @@ -0,0 +1,20 @@ +apiVersion: 1 + +datasources: + - 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 + streamingEnabled: + search: true diff --git a/services/telegram-bot/deploy/otel-collector/collector-config.yaml b/services/telegram-bot/deploy/otel-collector/collector-config.yaml new file mode 100644 index 000000000..96fd72038 --- /dev/null +++ b/services/telegram-bot/deploy/otel-collector/collector-config.yaml @@ -0,0 +1,45 @@ +extensions: + health_check: + endpoint: 127.0.0.1:13133 + +receivers: + prometheus: + config: + scrape_configs: + - job_name: otel-collector-metrics + scrape_interval: 10s + static_configs: + - targets: ['127.0.0.1:8888'] + + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + +exporters: + prometheusremotewrite: + endpoint: http://prometheus:9090/api/v1/write + tls: + insecure: true + + otlp: + endpoint: tempo:4317 + tls: + insecure: true + + debug: + verbosity: detailed + +service: + pipelines: + metrics: + receivers: [prometheus] + exporters: [prometheusremotewrite] + traces: + receivers: [otlp] + exporters: [otlp] + logs: + receivers: [otlp] + exporters: [debug] diff --git a/services/telegram-bot/deploy/prometheus/prometheus.yml b/services/telegram-bot/deploy/prometheus/prometheus.yml new file mode 100644 index 000000000..4db18779e --- /dev/null +++ b/services/telegram-bot/deploy/prometheus/prometheus.yml @@ -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'] diff --git a/services/telegram-bot/deploy/tempo/tempo.yaml b/services/telegram-bot/deploy/tempo/tempo.yaml new file mode 100644 index 000000000..ad6aed7f3 --- /dev/null +++ b/services/telegram-bot/deploy/tempo/tempo.yaml @@ -0,0 +1,57 @@ +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 + http: + endpoint: 0.0.0.0:4318 + +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: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 diff --git a/services/telegram-bot/docker-compose.yaml b/services/telegram-bot/docker-compose.yaml index a8414eb35..ab1feaef0 100644 --- a/services/telegram-bot/docker-compose.yaml +++ b/services/telegram-bot/docker-compose.yaml @@ -14,3 +14,76 @@ services: interval: 10s timeout: 5s retries: 5 + + grafana: + image: grafana/grafana + 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' + volumes: + - grafana-data:/var/lib/grafana + - ./deploy/grafana/dashboards:/etc/grafana/provisioning/dashboards + - ./deploy/grafana/datasources:/etc/grafana/provisioning/datasources + depends_on: + - tempo + - prometheus + + tempo: + image: grafana/tempo:latest + ports: + # - "14268:14268" # jaeger ingest + # - "9411:9411" # zipkin + - '3200:3200' # tempo + - '9095:9095' # tempo grpc + volumes: + - ./deploy/tempo/tempo.yaml:/etc/tempo.yaml + - tempo-data:/var/tempo + command: ['-config.file=/etc/tempo.yaml'] + + prometheus: + image: prom/prometheus + restart: always + ports: + - 9090:9090 + volumes: + - ./deploy/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + - prometheus-data:/prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--web.enable-otlp-receiver' + - '--enable-feature=exemplar-storage' + + otel-collector: + image: otel/opentelemetry-collector + restart: always + ports: + - 4317:4317 + - 4318:4318 + volumes: + - ./deploy/otel-collector/collector-config.yaml:/etc/otelcol/config.yaml + command: ['--config', '/etc/otelcol/config.yaml'] + depends_on: + - tempo + - prometheus + + otel-tracing-test: + profiles: + - test + image: ghcr.io/grafana/xk6-client-tracing:v0.0.7 + environment: + - ENDPOINT=otel-collector:4317 + restart: always + depends_on: + - otel-collector + +volumes: + grafana-data: + driver: local + tempo-data: + driver: local + prometheus-data: + driver: local