Skip to content

Commit

Permalink
ClickHouse changes patch
Browse files Browse the repository at this point in the history
  • Loading branch information
RoryCrispin committed Jul 19, 2024
1 parent c389bb2 commit 89db5aa
Show file tree
Hide file tree
Showing 18 changed files with 1,555 additions and 70 deletions.
472 changes: 472 additions & 0 deletions .github/workflows/build-test-publish.yaml

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@ run:

.PHONY: docker-component # Not intended to be used directly
docker-component: check-component
GOOS=linux GOARCH=amd64 $(MAKE) $(COMPONENT)
cp ./bin/$(COMPONENT)_linux_amd64 ./cmd/$(COMPONENT)/$(COMPONENT)
GOOS=linux GOARCH=$(GOARCH) $(MAKE) $(COMPONENT)
cp ./bin/$(COMPONENT)_linux_$(GOARCH) ./cmd/$(COMPONENT)/$(COMPONENT)
docker build -t $(COMPONENT) ./cmd/$(COMPONENT)/
rm ./cmd/$(COMPONENT)/$(COMPONENT)

Expand Down
5 changes: 4 additions & 1 deletion cmd/otelcontribcol/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ FROM scratch
ARG USER_UID=10001
USER ${USER_UID}

ARG TARGETOS
ARG TARGETARCH

COPY --from=prep /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY otelcontribcol /
COPY ../../bin/otelcontribcol_${TARGETOS}_${TARGETARCH} /otelcontribcol
EXPOSE 4317 55680 55679
ENTRYPOINT ["/otelcontribcol"]
CMD ["--config", "/etc/otel/config.yaml"]
5 changes: 5 additions & 0 deletions cmd/otelcontribcol/builder-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ processors:
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.105.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.105.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.105.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor v0.105.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/loghouseprocessor v0.105.0


receivers:
- gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.105.1-0.20240717163034-43ed6184f9fe
Expand Down Expand Up @@ -328,6 +331,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver => ../../receiver/k8sclusterreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor => ../../processor/transformprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor => ../../processor/filterprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/loghouseprocessor => ../../processor/loghouseprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver => ../../extension/observer/hostobserver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver => ../../receiver/kafkareceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension => ../../extension/bearertokenauthextension
Expand Down Expand Up @@ -361,6 +365,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver => ../../receiver/influxdbreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver => ../../receiver/awscontainerinsightreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor => ../../processor/metricstransformprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor => ../../processor/logstransformprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension => ../../extension/sigv4authextension
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus => ../../pkg/translator/opencensus
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter => ../../exporter/pulsarexporter
Expand Down
4 changes: 4 additions & 0 deletions cmd/otelcontribcol/components.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions cmd/otelcontribcol/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ require (
github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/loghouseprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.105.0
github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.105.0
Expand Down Expand Up @@ -1014,6 +1016,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/tran

replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor => ../../processor/filterprocessor

replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/loghouseprocessor => ../../processor/loghouseprocessor

replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver => ../../extension/observer/hostobserver

replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver => ../../receiver/kafkareceiver
Expand Down Expand Up @@ -1080,6 +1084,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsco

replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor => ../../processor/metricstransformprocessor

replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor => ../../processor/logstransformprocessor

replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension => ../../extension/sigv4authextension

replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus => ../../pkg/translator/opencensus
Expand Down
80 changes: 45 additions & 35 deletions exporter/clickhouseexporter/example/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,28 @@ networks:
otel-clickhouse:

services:
# clickhouse-logger:
# image: alpine:latest
# container_name: alpine
# entrypoint: ["head", "-n", "1000", "/tmp/clickhouse-server.log"]
# volumes:
# - "./clickhouse-server.log:/tmp/clickhouse-server.log"

otelcollector:
build:
context: ../../../local
dockerfile: ../exporter/clickhouseexporter/example/Dockerfile
dockerfile: Dockerfile
# Uncomment the next line to use a preexisting image
# image: otelcontribcol:latest
image: otelcontribcol:latest
container_name: otel
command:
- "--config=/etc/otel-collector-config.yml"
- "--set=service.telemetry.logs.level=INFO"
- "--set=service.telemetry.logs.level=DEBUG"
volumes:
- ./otel-collector-config.yml:/etc/otel-collector-config.yml
- ./clickhouse-server.log:/tmp/clickhouse-server.log
- ./clickhouse-server.log.short:/tmp/clickhouse-server.log.short
- ./otel-storage:/var/lib/otelcol
ports:
- "4317:4317" # otlp receiver
- "1888:1888" # pprof extension
Expand Down Expand Up @@ -49,36 +59,36 @@ services:
networks:
- otel-clickhouse

# Log generator
flog:
image: mingrammer/flog:0.4.3
# Output fake log in JSON format
command: [ "--format=json", "--loop", "--delay=100ms"]
networks:
- otel-clickhouse
depends_on:
- otelcollector
logging:
driver: fluentd
options:
mode: non-blocking
# Allow time for otel-collector to spin up, then forward fluentd logs to the fluentforwarder receiver.
fluentd-async-connect: "true"
# Use nanosecond precision
fluentd-sub-second-precision: "true"
stop_signal: SIGKILL
# # Log generator
# flog:
# image: mingrammer/flog:0.4.3
# # Output fake log in JSON format
# command: [ "--format=json", "--loop", "--delay=100ms"]
# networks:
# - otel-clickhouse
# depends_on:
# - otelcollector
# logging:
# driver: fluentd
# options:
# mode: non-blocking
# # Allow time for otel-collector to spin up, then forward fluentd logs to the fluentforwarder receiver.
# fluentd-async-connect: "true"
# # Use nanosecond precision
# fluentd-sub-second-precision: "true"
# stop_signal: SIGKILL

# Traces generator
telemetrygen:
build:
context: ../../../cmd/telemetrygen/
command:
- traces
- --otlp-endpoint=otelcollector:4317
- --otlp-insecure
- --rate=100
- --duration=10000h
networks:
- otel-clickhouse
depends_on:
- otelcollector

# # Traces generator
# tracegen:
# build:
# context: ../../../cmd/tracegen/
# command:
# - --otlp-endpoint=otelcollector:4317
# - --otlp-insecure
# - --rate=100
# - --duration=10000h
# networks:
# - otel-clickhouse
# depends_on:
# - otelcollector
132 changes: 132 additions & 0 deletions exporter/clickhouseexporter/example/otel-collector-config-local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
receivers:
filelog:
start_at: beginning
include:
- /tmp/clickhouse-server.log.short
# - /Users/rory/var/log/pods/*/*/*.log
processors:
transform:
log_statements:

- context: log
statements:
# clickhouse server/keeper:

# extract clickhouse/keeper log level
# - set(severity_text, "TRACE") where IsMatch(body, "[<]Trace[>]") == true
# - set(severity_text, "DEBUG") where IsMatch(body, "[<]Debug[>]") == true
# - set(severity_text, "INFO") where IsMatch(body, "[<]Info(rmation(al)?)?[>]") == true
# - set(severity_xt, "WARN") where IsMatch(body, "[<]Warn(ing)?[>]") == true
# - set(severity_text, "ERROR") where IsMatch(body, "[<]Error[>]") == true
# - set(severity_text, "FATAL") where IsMatch(body, "[<]Fatal[>]") == true


# clickpipes/other apps:

# parse json logs
- merge_maps(attributes, ParseJSON(body), "insert") where IsMatch(body, "^\\s*[{].+?[}]\\s*$") == true
- set(body, attributes["msg"]) where attributes["msg"] != nil
- set(body, attributes["message"]) where attributes["message"] != nil
- delete_key(attributes, "msg") where body == attributes["msg"]
- delete_key(attributes, "message") where body == attributes["message"]

# parse severity text
- set(severity_text, ConvertCase(attributes["level"], "upper")) where IsMatch(attributes["level"], "(?i)^(trace|debug|info|warn|error|fatal)$") == true

# Extract error code
- merge_maps(attributes, ExtractPatterns(body, "(?P<exception>[A-Z][A-Z0-9]+_[A-Z0-9_]+)"), "insert")
- delete_key(attributes, "level") where attributes["level"] != nil and severity_text == ConvertCase(attributes["level"], "upper")

# Parse ClickHouse JSON log levels
- set(severity_text, "FATAL") where attributes["level"] == "0"
- set(severity_text, "FATAL") where attributes["level"] == "1"
- set(severity_text, "FATAL") where attributes["level"] == "2"
- set(severity_text, "ERROR") where attributes["level"] == "3"
- set(severity_text, "WARN") where attributes["level"] == "4"
- set(severity_text, "INFO") where attributes["level"] == "5"
- set(severity_text, "INFO") where attributes["level"] == "6"
- set(severity_text, "DEBUG") where attributes["level"] == "7"
- set(severity_text, "TRACE") where attributes["level"] == "8"
logstransform:
operators:
- type: add
field: resource.app
value: ""
if: resource.app == nil

# - type: add
# field: resource.app
# value: clickhouse-server
# if: resource["k8s.container.name"] matches "^c-.+-server$"
#
# - type: add
# field: resource.app
# value: clickhouse-keeper
# if: resource["k8s.container.name"] matches "^c-.+-keeper$"
#
# # recombine stack trace logs to single log entry
# - type: recombine
# is_first_entry: body matches "^\\s*\\d{4}[.]\\d{2}[.]\\d{2}"
# combine_field: body
# combine_with: "\n"
# source_identifier: attributes["log.file.path"]
# if: resource.app matches "^clickhouse-"
#
# # parse timestamp from log
# - type: regex_parser
# regex: ^\\s*(?P<ts>\\d{4}[.]\\d{2}[.]\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}\\.\\d+)
# timestamp:
# parse_from: attributes.ts
# layout_type: strptime
# layout: "%Y.%m.%d %H:%M:%S.%L"
# if: resource.app matches "^clickhouse-"

# remove tmp fields
- type: remove
field: resource.app

# Parse timestamp from ClickHouse structured logs
- type: time_parser
parse_from: attributes.date_time
layout_type: epoch
layout: 's.us'

exporters:
clickhouse:
create_db_and_tables: true
endpoint: http://localhost:8123
database: otel
logs_table_name: otel_logs_2
traces_table_name: otel_traces
connection_params:
async_insert: 1
wait_for_async_insert: 0
ttl_days: 1
timeout: 10s
sending_queue:
queue_size: 100
retry_on_failure:
enabled: true
initial_interval: 5s
max_interval: 30s
max_elapsed_time: 300s
extensions:
# file_storage:
# directory: /var/lib/otelcol
health_check:
pprof:
zpages:
memory_ballast:
size_mib: 1000

service:
extensions:
- pprof
- zpages
- health_check
# - file_storage
pipelines:
logs:
receivers: [ filelog ]
processors: [ transform, logstransform ]
exporters: [ clickhouse ]
Loading

0 comments on commit 89db5aa

Please sign in to comment.