otelcol-contribでClickHouseにOpenTelemetryのデータ投入を試してみた

はじめに

ISUCON 14: ClickHouse と OpenTelemetry で ISUCON の計測環境を作ったら快適だった - Unyablog.の記事を見て、私もClickHouseにOpenTelemetryのデータを投入するのは気になっていたので試してみた、というメモです。

メトリクス、ログ、トレースの3種類のデータ投入を試しました。

otelcol-contrib について

ClickHouse exporterの設定オプションとテーブル名

Configuration optionsに設定オプションについての説明があります。

ClickHouseのメトリクスをClickHouseにデータ投入するのを試した

nginxのログとトレースをClickHouseにデータ投入するのを試した

# https://clickhouse.com/docs/en/observability/integrating-opentelemetry
# config-traces.yaml
# clickhouse-config.yaml
#
# https://github.com/open-telemetry/opentelemetry-collector/issues/11337
receivers:
  filelog:
    include:
      - /var/log/nginx/access.json.log
    start_at: beginning
    operators:
      - type: json_parser
        timestamp:
          parse_from: attributes.time_local
          layout_type: 'gotime'
          layout: '02/Jan/2006:15:04:05 -0700'
  prometheus/nginx:
    config:
      scrape_configs:
      - job_name: 'otel-collector'
        scrape_interval: 10s
        static_configs:
        - targets: ['127.0.0.1:9113']
  otlp:
    protocols:
      grpc:
        endpoint: 127.0.0.1:4317

processors:
  attributes/host:
    actions:
    - key: host.name
      value: 'ggear3'
      action: insert
  attributes/nginx:
    actions:
    - key: middleware.id
      value: 'nginx'
      action: insert
  resource:
    attributes:
    - key: otel.host.name
      value: 'ggear2'
      action: insert
  batch:
    timeout: 5s
    send_batch_size: 5000
exporters:
  clickhouse:
    endpoint: tcp://【ClickHouseのIPアドレス】:9000?dial_timeout=10s&compress=lz4&async_insert=1&username=【ClickHouseのユーザー名】&password=【ClickHouseのパスワード】
    # ttl: 72h
    traces_table_name: otel_traces
    logs_table_name: otel_logs
    create_schema: true
    timeout: 5s
    cluster_name: cluster01
    table_engine:
      name: ReplicatedMergeTree
    database: otel
    sending_queue:
      queue_size: 1000
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
      max_elapsed_time: 300s

service:
  pipelines:
    metrics:
      receivers: [prometheus/nginx]
      processors: [attributes/nginx, attributes/host, batch]
      exporters: [clickhouse]
    logs:
      receivers: [filelog]
      processors: [resource, attributes/host, batch]
      exporters: [clickhouse]
    traces:
      receivers: [otlp]
      processors: [resource, attributes/host, batch]
      exporters: [clickhouse]