otel-collector全家桶

docker-compose.yml

yaml 复制代码
version: "3.9"

services:
  tempo:
    image: grafana/tempo:latest
    container_name: tempo
    command: ["-config.file=/etc/tempo/tempo.yaml"]
    volumes:
      - ./tempo.yaml:/etc/tempo/tempo.yaml:ro
    ports:
      - "3200:3200"    # Grafana 访问 Tempo HTTP
      - "4317:4317"    # OTLP gRPC(给外部用可选,但留着也没坏处)

  otel-collector:
    image: otel/opentelemetry-collector:0.140.1
    container_name: otel-collector
    command: ["--config=/etc/otelcol/config.yaml"]
    volumes:
      - ./otel-collector.yaml:/etc/otelcol/config.yaml:ro
    ports:
      - "4318:4318"    # Spring Boot OTLP HTTP
      - "9464:9464"    # Prometheus scrape
      - "13133:13133"  # 健康检查(可选)
    depends_on:
      - tempo
      - loki

  loki:
    image: grafana/loki:2.9.0
    container_name: loki
    user: "0"   # 👈 关键:以 root 用户运行,避免权限问题
    command: ["-config.file=/etc/loki/loki-config.yaml"]
    volumes:
      - ./loki-config.yaml:/etc/loki/loki-config.yaml:ro
      - loki-data:/loki          # 👈 新增:宿主机目录挂到 /loki
    ports:
      - "3100:3100"

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    depends_on:
      - otel-collector

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
      - tempo
      - loki

volumes:
  loki-data: {}

tempo.yaml

yaml 复制代码
server:
  http_listen_port: 3200
  grpc_listen_port: 9095        # Tempo 内部 gRPC,用默认端口

distributor:
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: 0.0.0.0:4317   # ⭐ OTLP gRPC 在容器内监听 4317

storage:
  trace:
    backend: local
    wal:
      path: /tmp/tempo/wal
    local:
      path: /tmp/tempo/blocks

compactor:
  compaction:
    compaction_window: 1h
    block_retention: 24h
    compacted_block_retention: 24h

loki-config.yaml

yaml 复制代码
auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

ingester:
  wal:
    enabled: true
    dir: /loki/wal          # 👈 WAL 放在 /loki 下面,挂了 volume 就不会权限问题
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 3m
  max_chunk_age: 1h
  chunk_target_size: 1048576
  max_transfer_retries: 0

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /loki/index
    cache_location: /loki/cache
    shared_store: filesystem
  filesystem:
    directory: /loki/chunks     # 👈 数据块目录,同样在 /loki 下面

compactor:
  working_directory: /loki/compactor
  shared_store: filesystem
  compaction_interval: 10m

limits_config:
  allow_structured_metadata: true
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  max_streams_per_user: 0
  max_global_streams_per_user: 0

query_range:
  parallelise_shardable_queries: true
  align_queries_with_step: true
  cache_results: true
  max_retries: 5

querier:
  engine:
    max_look_back_period: 0s
  query_timeout: 1m

otel-collector.yaml

yaml 复制代码
receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4318   # HTTP OTLP,给 Spring Boot 用
      grpc:
        endpoint: 0.0.0.0:4317   # gRPC OTLP(可选)

exporters:
  prometheus:
    endpoint: "0.0.0.0:9464"
    namespace: "myapp"

  otlp/tempo:
    endpoint: "tempo:4317"      # ⭐ 发 gRPC 到 Tempo
    tls:
      insecure: true

  otlphttp/logs:
    endpoint: "http://loki:3100/otlp"
    tls:
      insecure: true

processors:
  batch:
    timeout: 5s
    send_batch_size: 1000

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheus]

    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp/tempo]

    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlphttp/logs]

prometheus.yml

yaml 复制代码
global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'otel-collector'
    static_configs:
      - targets: ['otel-collector:9464']
相关推荐
还是鼠鼠6 分钟前
AI掘金头条新闻系统 (Toutiao News)-用户注册-创建用户
后端·python·mysql·fastapi·web
李广坤22 分钟前
别再把 Filter、Interceptor 和 AOP 混为一谈了!从接口加解密谈 Spring 纵深架构设计
后端
我是一颗柠檬28 分钟前
【MySQL全面教学】MySQL条件查询与排序Day4(2026年)
数据库·后端·mysql
她的男孩38 分钟前
后台权限不只是菜单隐藏:Forge Admin 的 RBAC 权限链路拆解
java·后端·架构
苏三说技术1 小时前
IntelliJ IDEA 从卡顿到起飞,只用改这些。。。
后端
李小狼lee2 小时前
《spring如此简单》第六节--事件发布机制
后端
你好潘先生2 小时前
让 AI 任务不丢进度:YeeroAI 后台续跑与全局快捷操作实践
前端·人工智能·后端
Circ.2 小时前
SpringBoot 实现文件上传与下载(完整源码 + 详细教程)
java·spring boot·后端
Java技术小馆2 小时前
Claude Code CLI 命令大全:60 个原生命令一次讲清
前端·后端
zzqssliu2 小时前
Spring Boot + XXL-JOB 搭建淘宝代购系统任务调度中心
java·spring boot·后端