├── .codecov.yml ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── config.yml │ └── feature-request.md ├── PULL_REQUEST_TEMPLATE.md ├── SECURITY.md ├── SUPPORT.md ├── dependabot.yml ├── dependency-review-config.yml └── workflows │ ├── bench.yml │ ├── codeql.yml │ ├── commitlint.yml │ ├── compliance.yml │ ├── dep-review.yml │ ├── dep.yml │ ├── deploy.yml │ ├── e2e.yml │ ├── release.yml │ └── x.yml ├── .gitignore ├── .gitmodules ├── .golangci.yml ├── .goreleaser.yaml ├── .k8s ├── .crd │ ├── README.md │ ├── cnp.cilium.io.yml │ └── monitoring.coreos.com_servicemonitors.yaml ├── deployment.yml ├── kubeconfig.sh ├── otel.yml ├── service.yaml └── values.yml ├── CITATION.cff ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MAINTAINERS.md ├── Makefile ├── README.md ├── ROADMAP.md ├── Taskfile.yml ├── _oas ├── loki.yml ├── otelbot.yml ├── prometheus.yml ├── pyroscope.yml ├── sentry.yml └── tempo.yml ├── chotel.Dockerfile ├── cmd ├── chotel │ └── main.go ├── docker-logql │ ├── Makefile │ ├── README.md │ ├── color.go │ ├── main.go │ ├── params.go │ └── query.go ├── logql-compliance-tester │ ├── config.go │ ├── main.go │ ├── output.go │ └── setup.go ├── otelbench │ ├── README.md │ ├── benchstat.go │ ├── chdump │ │ ├── attrs.go │ │ ├── attrs_json.go │ │ ├── chdump.go │ │ ├── logs.go │ │ ├── metrics.go │ │ └── traces.go │ ├── chtracker │ │ ├── chtracker.go │ │ └── clickhouse.go │ ├── clickhouse.go │ ├── dump.go │ ├── fmt.go │ ├── logql.go │ ├── logql_analyze.go │ ├── logql_bench.go │ ├── logqlbench │ │ ├── logqlbench.go │ │ ├── queries.go │ │ ├── result.go │ │ └── send.go │ ├── main.go │ ├── otel.go │ ├── otel_log_bench.go │ ├── promql.go │ ├── promql_analyze.go │ ├── promql_bench.go │ ├── promql_convert.go │ ├── promrw.go │ ├── promrw_bench.go │ ├── promrw_bench_config.go │ ├── promrw_record.go │ └── promrw_replay.go ├── oteldb │ ├── app.go │ ├── config.go │ ├── default.pgo │ ├── main.go │ └── storage.go ├── oteldemo │ ├── client.go │ ├── main.go │ └── server.go ├── otelproxy │ ├── main.go │ └── round_trippers.go └── promql-compliance-tester │ └── main.go ├── cosign.pub ├── deploy.Dockerfile ├── deploy.chotel.Dockerfile ├── deploy.otelbot.Dockerfile ├── deploy.oteldemo.Dockerfile ├── deploy.proxy.Dockerfile ├── dev ├── local │ ├── ch-bench-read │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── README.md │ │ ├── clickhouse.xml │ │ ├── docker-compose.ci.yml │ │ ├── docker-compose.yml │ │ ├── grafana │ │ │ ├── dashboards.yml │ │ │ ├── dashboards │ │ │ │ ├── clickhouse-cluster.json │ │ │ │ ├── clickhouse-data.json │ │ │ │ ├── node-exporter.json │ │ │ │ ├── oteldb-runtime.json │ │ │ │ └── oteldb.json │ │ │ └── datasources.yml │ │ ├── otelcol.yml │ │ ├── oteldb.yml │ │ ├── prometheus.yml │ │ ├── run.sh │ │ ├── tempo.yml │ │ └── testdata │ │ │ ├── bench-series.yml │ │ │ ├── node-exporter-cpu.promql.yml │ │ │ ├── node-exporter-cpu.report.yml │ │ │ ├── node-exporter-selected.promql.yml │ │ │ ├── node-exporter-selected.report.yml │ │ │ ├── node-exporter.promql.yml │ │ │ └── topk.promql.yml │ ├── ch-bench │ │ ├── README.md │ │ ├── clickhouse.xml │ │ ├── docker-compose.yml │ │ ├── grafana │ │ │ ├── dashboards.yml │ │ │ ├── dashboards │ │ │ │ ├── clickhouse-cluster.json │ │ │ │ ├── clickhouse-data.json │ │ │ │ ├── node-exporter.json │ │ │ │ └── oteldb.json │ │ │ └── datasources.yml │ │ └── prof.sh │ ├── ch-compliance │ │ ├── .gitignore │ │ ├── README.md │ │ ├── clickhouse.xml │ │ ├── cmd │ │ │ ├── compliance-verify │ │ │ │ └── main.go │ │ │ └── compliance-wait │ │ │ │ └── main.go │ │ ├── docker-compose.ci.yml │ │ ├── docker-compose.yml │ │ ├── prometheus.yml │ │ ├── promql-test-queries.yml │ │ ├── run.sh │ │ └── test-oteldb.yml │ ├── ch-demo │ │ ├── docker-compose.yml │ │ ├── grafana │ │ │ ├── dashboards.yml │ │ │ ├── dashboards │ │ │ │ ├── clickhouse-cluster.json │ │ │ │ ├── clickhouse-data.json │ │ │ │ ├── demo.json │ │ │ │ ├── node-exporter.json │ │ │ │ └── oteldb.json │ │ │ ├── datasources.yml │ │ │ └── grafana.ini │ │ └── otelcol.yml │ ├── ch-full │ │ ├── docker-compose.yml │ │ ├── grafana │ │ │ └── datasources.yml │ │ ├── otelcol.yml │ │ └── tempo.yml │ ├── ch-lite │ │ └── docker-compose.yml │ ├── ch-log-bench-read │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── benchmark.sh │ │ ├── clickhouse.xml │ │ ├── docker-compose.yml │ │ ├── otelcol.yml │ │ ├── oteldb.yml │ │ ├── setup.sh │ │ ├── tempo.yml │ │ └── testdata │ │ │ └── logql.yml │ ├── ch-log-bench │ │ ├── clickhouse.xml │ │ └── docker-compose.yml │ ├── ch-logql-compliance │ │ ├── .gitignore │ │ ├── clickhouse.xml │ │ ├── docker-compose.ci.yml │ │ ├── docker-compose.yml │ │ ├── logql-test-queries.yml │ │ ├── loki.yml │ │ ├── otelcol.yml │ │ ├── promtail.yml │ │ ├── run.sh │ │ └── test-oteldb.yml │ ├── ch-remote-write │ │ ├── docker-compose.yml │ │ ├── otelcol.yml │ │ └── prometheus.yml │ ├── ch │ │ ├── docker-compose.yml │ │ ├── otelcol.yml │ │ └── prometheus.yml │ ├── clickhouse.xml │ ├── grafana │ │ ├── dashboards.yml │ │ ├── dashboards │ │ │ ├── clickhouse-cluster.json │ │ │ ├── clickhouse-data.json │ │ │ ├── demo.json │ │ │ ├── node-exporter.json │ │ │ ├── otelcol.json │ │ │ └── oteldb.json │ │ ├── datasources.yml │ │ └── grafana.ini │ └── prometheus │ │ └── prometheus.yml └── otelproxy │ ├── datasources.yml │ ├── docker-compose.yml │ ├── grafana.ini │ ├── loki.yml │ ├── prometheus.yml │ ├── promtail.yml │ └── tempo.yml ├── docs ├── architecture.md ├── benchmarking │ └── readme.md ├── logs.md ├── metrics.md └── readme.md ├── go.coverage.sh ├── go.mod ├── go.sum ├── go.test.sh ├── helm └── oteldb │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── configmap.yaml │ ├── deployment.yaml │ ├── hpa.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml │ └── values.yaml ├── integration ├── README.md ├── chotele2e │ └── e2e_test.go ├── logger.go ├── lokie2e │ ├── _golden │ │ └── logs.yml │ ├── bench_inserter_test.go │ ├── ch_test.go │ ├── common_test.go │ ├── generate_test.go │ └── loki_e2e.go ├── prome2e │ ├── _testdata │ │ └── metrics.json │ ├── ch_test.go │ ├── common_test.go │ ├── oas_test.go │ ├── prom_e2e.go │ └── prometheus.yml ├── requirex │ └── requirex.go ├── skip.go ├── tempoe2e │ ├── _testdata │ │ └── traces.json │ ├── bench_engine_test.go │ ├── bench_inserter_test.go │ ├── ch_test.go │ ├── common_test.go │ └── tempo_e2e.go └── trace.go ├── internal ├── .ogen.yml ├── autozpages │ └── autozpages.go ├── chstorage │ ├── _golden │ │ ├── col_attr_json.hex │ │ ├── col_attr_json.raw │ │ ├── col_json_lc_attr.hex │ │ ├── col_json_lc_attr.raw │ │ ├── log_columns_ddl.sql │ │ ├── schema.logs.sql │ │ ├── schema.logs_attrs.sql │ │ ├── schema.metrics_exemplars.sql │ │ ├── schema.metrics_exp_histograms.sql │ │ ├── schema.metrics_labels.sql │ │ ├── schema.metrics_points.sql │ │ ├── schema.migration.sql │ │ ├── schema.traces_spans.sql │ │ └── schema.traces_tags.sql │ ├── attributes.go │ ├── attributes_json.go │ ├── attributes_test.go │ ├── chsql │ │ ├── _golden │ │ │ ├── Test1.sql │ │ │ ├── Test2.sql │ │ │ ├── Test3.sql │ │ │ ├── Test4.sql │ │ │ ├── Test5.sql │ │ │ ├── Test6.sql │ │ │ ├── Test7.sql │ │ │ └── Test8.sql │ │ ├── chsql.go │ │ ├── escape.go │ │ ├── escape_test.go │ │ ├── expr.go │ │ ├── function.go │ │ ├── op.go │ │ ├── select.go │ │ ├── select_test.go │ │ ├── sugar.go │ │ ├── sugar_test.go │ │ ├── token.go │ │ └── token_test.go │ ├── chstorage.go │ ├── clickhouse.go │ ├── columns.go │ ├── columns_logs.go │ ├── columns_logs_test.go │ ├── columns_metrics.go │ ├── columns_migration.go │ ├── columns_traces.go │ ├── dial.go │ ├── gold_test.go │ ├── inserter.go │ ├── inserter_logs.go │ ├── inserter_metrics.go │ ├── inserter_metrics_test.go │ ├── inserter_traces.go │ ├── querier.go │ ├── querier_logs.go │ ├── querier_logs_node.go │ ├── querier_logs_optimizer.go │ ├── querier_logs_optimizer_test.go │ ├── querier_logs_query.go │ ├── querier_metrics.go │ ├── querier_metrics_exemplars.go │ ├── querier_metrics_hist.go │ ├── querier_metrics_point.go │ ├── querier_metrics_series.go │ ├── querier_traces.go │ ├── schema.go │ ├── schema_metrics.go │ ├── schema_test.go │ ├── schema_traces.go │ └── testdata │ │ └── reqs-1k-zstd.rwq ├── chtrace │ └── chtrace.go ├── cliversion │ └── cliversion.go ├── ddl │ ├── README.md │ ├── _golden │ │ ├── ddl.logs.sql │ │ └── ddl.sql │ ├── ddl.go │ ├── ddl_test.go │ └── gold_test.go ├── dockerlog │ ├── _testdata │ │ └── dockerlog.bin │ ├── daemonlog.go │ ├── daemonlog_test.go │ ├── dockerlog.go │ ├── merge_iter.go │ └── merge_iter_test.go ├── faker │ ├── README.md │ ├── faker.go │ ├── ip.go │ ├── ip_test.go │ ├── model.go │ ├── model_api.go │ ├── model_backend.go │ ├── model_cache.go │ ├── model_cluster.go │ ├── model_db.go │ ├── model_frontend.go │ ├── model_router.go │ ├── model_server.go │ ├── model_test.go │ └── set_test.go ├── generate.go ├── httpmiddleware │ ├── httpmiddleware.go │ ├── httpmiddleware_test.go │ └── ogen.go ├── iterators │ ├── iterators.go │ └── iterators_test.go ├── lexerql │ ├── bytes.go │ ├── comment.go │ ├── duration.go │ ├── lexerql.go │ ├── numeric.go │ └── numeric_test.go ├── logparser │ ├── _golden │ │ ├── genericjson_log4j_01.json │ │ ├── genericjson_logrus_01.json │ │ ├── genericjson_python_01.json │ │ ├── genericjson_slog_01.json │ │ ├── genericjson_slog_02.json │ │ ├── genericjson_zap_01.json │ │ ├── genericjson_zap_02.json │ │ ├── genericjson_zap_03.json │ │ ├── genericjson_zerolog_01.json │ │ ├── genericjson_zerolog_02.json │ │ ├── logfmt_grafana_01.json │ │ ├── logfmt_grafana_02.json │ │ ├── logfmt_logrus_01.json │ │ ├── logfmt_logrus_02.json │ │ ├── logfmt_logrus_03.json │ │ ├── logfmt_logrus_04.json │ │ ├── logfmt_test_01.json │ │ ├── zapdevelopment_zapdev_01.json │ │ ├── zapdevelopment_zapdev_02.json │ │ ├── zapdevelopment_zapdev_03.json │ │ └── zapdevelopment_zapdev_04.json │ ├── _testdata │ │ ├── genericjson │ │ │ ├── log4j.jsonl │ │ │ ├── logrus.jsonl │ │ │ ├── python.jsonl │ │ │ ├── slog.jsonl │ │ │ ├── zap.jsonl │ │ │ └── zerolog.jsonl │ │ ├── logfmt │ │ │ ├── grafana.txt │ │ │ ├── logrus.txt │ │ │ └── test.txt │ │ └── zapdevelopment │ │ │ └── zapdev.txt │ ├── deduct.go │ ├── deduct_test.go │ ├── gold_test.go │ ├── json.go │ ├── json_test.go │ ├── line.go │ ├── logfmt.go │ ├── logfmt_test.go │ ├── logparser.go │ ├── zap_development.go │ └── zap_development_test.go ├── logql │ ├── error.go │ ├── expr.go │ ├── label.go │ ├── label_test.go │ ├── lexer │ │ ├── error.go │ │ ├── lexer.go │ │ ├── lexer_test.go │ │ ├── token.go │ │ └── tokentype_string.go │ ├── log_expr.go │ ├── log_expr_test.go │ ├── logql.go │ ├── logqlengine │ │ ├── comparator.go │ │ ├── decolorize.go │ │ ├── decolorize_test.go │ │ ├── distinct.go │ │ ├── drop.go │ │ ├── drop_test.go │ │ ├── engine.go │ │ ├── engine_explain_query.go │ │ ├── engine_literal_query.go │ │ ├── engine_log_query.go │ │ ├── engine_log_query_test.go │ │ ├── engine_metric_nodes.go │ │ ├── engine_metric_query.go │ │ ├── engine_optimizer.go │ │ ├── engine_plan.go │ │ ├── engine_stats.go │ │ ├── engine_test.go │ │ ├── ip_matcher.go │ │ ├── json.go │ │ ├── json_safe.go │ │ ├── json_test.go │ │ ├── json_unsafe.go │ │ ├── jsonexpr │ │ │ ├── eval.go │ │ │ ├── eval_test.go │ │ │ ├── jsonexpr.go │ │ │ ├── jsonexpr_test.go │ │ │ ├── selector_tree.go │ │ │ └── selector_tree_test.go │ │ ├── keep.go │ │ ├── keep_test.go │ │ ├── label_filter.go │ │ ├── label_filter_test.go │ │ ├── label_format.go │ │ ├── label_format_test.go │ │ ├── line_filter.go │ │ ├── line_filter_test.go │ │ ├── line_format.go │ │ ├── line_format_test.go │ │ ├── logfmt.go │ │ ├── logfmt_test.go │ │ ├── logqlabels │ │ │ ├── aggregated_labels.go │ │ │ ├── aggregated_labels_test.go │ │ │ ├── empty_aggregated_labels.go │ │ │ ├── empty_aggregated_labels_test.go │ │ │ ├── label_set.go │ │ │ └── logqlabels.go │ │ ├── logqlengine_test.go │ │ ├── logqlerrors │ │ │ └── logqlerrors.go │ │ ├── logqlmetric │ │ │ ├── aggregator.go │ │ │ ├── bin_op.go │ │ │ ├── bin_op_test.go │ │ │ ├── build.go │ │ │ ├── label_replace.go │ │ │ ├── label_replace_test.go │ │ │ ├── logqlmetric.go │ │ │ ├── logqlmetric_test.go │ │ │ ├── metric.go │ │ │ ├── prom_math.go │ │ │ ├── query_test.go │ │ │ ├── range_agg.go │ │ │ ├── sample_op.go │ │ │ ├── step.go │ │ │ ├── stream_aggregator.go │ │ │ ├── vector.go │ │ │ ├── vector_agg.go │ │ │ └── vector_agg_test.go │ │ ├── logqlpattern │ │ │ ├── logqlpattern.go │ │ │ ├── logqlpattern_test.go │ │ │ ├── match.go │ │ │ └── match_test.go │ │ ├── matcher.go │ │ ├── otel_adapter.go │ │ ├── pattern.go │ │ ├── pattern_test.go │ │ ├── precondition.go │ │ ├── precondition_test.go │ │ ├── processor.go │ │ ├── regexp.go │ │ ├── regexp_test.go │ │ ├── sampler.go │ │ ├── sampler_test.go │ │ ├── storage.go │ │ ├── string_matcher.go │ │ ├── template.go │ │ ├── template_test.go │ │ ├── unpack.go │ │ └── unpack_test.go │ ├── metric_expr.go │ ├── metric_expr_test.go │ ├── op.go │ ├── parser.go │ ├── parser_expr.go │ ├── parser_log_expr.go │ ├── parser_metric_expr.go │ ├── parser_pipeline.go │ ├── parser_range_expr.go │ ├── parser_test.go │ ├── pipeline.go │ ├── pipeline_test.go │ └── range_expr.go ├── logstorage │ ├── consumer.go │ ├── logstorage.go │ ├── schema.go │ └── schema_otel.go ├── lokiapi │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_defaults_gen.go │ ├── oas_handlers_gen.go │ ├── oas_interfaces_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_parameters_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_server_gen.go │ ├── oas_unimplemented_gen.go │ └── oas_validators_gen.go ├── lokicompliance │ ├── compare.go │ ├── config.go │ ├── expand.go │ ├── expand_test.go │ ├── generator.go │ ├── lokicompliance.go │ └── sort.go ├── lokihandler │ ├── error.go │ ├── lokihandler.go │ ├── timestamp.go │ └── timestamp_test.go ├── lokiproxy │ ├── _testdata │ │ ├── matrix │ │ │ └── 1.json │ │ ├── scalar │ │ │ └── 1.json │ │ ├── streams │ │ │ └── 1.json │ │ └── vector │ │ │ └── 1.json │ ├── lokiproxy.go │ └── lokiproxy_test.go ├── metricstorage │ └── metricstorage.go ├── otelbench │ ├── protocol.go │ └── protocol_test.go ├── otelbotapi │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_handlers_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_security_gen.go │ ├── oas_server_gen.go │ ├── oas_unimplemented_gen.go │ └── oas_validators_gen.go ├── otelreceiver │ ├── config_provider.go │ ├── oteldbexporter │ │ ├── _testdata │ │ │ └── config.yaml │ │ ├── config.go │ │ ├── config_test.go │ │ └── oteldbexporter.go │ ├── prometheusremotewrite │ │ ├── _golden │ │ │ └── series.json │ │ ├── gold_test.go │ │ ├── helper.go │ │ ├── prw_to_metrics.go │ │ ├── prw_to_metrics_bench_test.go │ │ ├── prw_to_metrics_native.go │ │ ├── prw_to_metrics_native_test.go │ │ ├── prw_to_metrics_test.go │ │ ├── remotewrite.go │ │ ├── suffix.go │ │ ├── suffix_test.go │ │ ├── testdata │ │ │ └── reqs-1k-zstd.rwq │ │ └── testutils_test.go │ ├── prometheusremotewritereceiver │ │ ├── README.md │ │ ├── config.go │ │ ├── config_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── pool.go │ │ ├── receiver.go │ │ ├── receiver_test.go │ │ └── testdata │ │ │ └── config.yaml │ └── receiver.go ├── otelstorage │ ├── attrs.go │ ├── attrs_test.go │ ├── hash.go │ ├── hash_test.go │ ├── id.go │ ├── id_test.go │ ├── otelstorage.go │ └── timestamp.go ├── promapi │ ├── errors.go │ ├── errors_test.go │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_defaults_gen.go │ ├── oas_handlers_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_parameters_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_server_gen.go │ ├── oas_unimplemented_gen.go │ ├── oas_validators_gen.go │ └── promapi.go ├── promcompliance │ ├── .gitignore │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── comparer │ │ └── comparer.go │ ├── config │ │ └── config.go │ ├── output │ │ ├── example-output.html │ │ ├── html.go │ │ ├── json.go │ │ ├── outputter.go │ │ ├── text.go │ │ └── tsv.go │ ├── prometheus-test-data.yml │ ├── promql-test-queries.yml │ ├── test-amp.yml │ ├── test-chronosphere.yml │ ├── test-cortex.yml │ ├── test-gmp.yml │ ├── test-grafana-cloud.yml │ ├── test-m3.yml │ ├── test-new-relic.yml │ ├── test-promscale.yml │ ├── test-sysdig.yml │ ├── test-thanos.yml │ ├── test-victoriametrics.yml │ ├── test-wavefront.yml │ └── testcases │ │ └── expand.go ├── promhandler │ ├── error.go │ ├── options.go │ ├── params.go │ ├── params_test.go │ ├── promhandler.go │ └── promql.go ├── prompb │ ├── alloc_test.go │ ├── conformance_test.go │ ├── getter.go │ ├── pool.go │ ├── remote.pb.go │ ├── remote.proto │ ├── types.pb.go │ └── types.proto ├── promproxy │ ├── generate.go │ ├── promproxy.go │ ├── record.go │ ├── record_gen.go │ ├── record_test.go │ ├── schema.yml │ └── testdata │ │ └── node-exporter.jsonl ├── pyroproxy │ ├── pyroproxy.go │ └── pyroproxy_test.go ├── pyroscopeapi │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_handlers_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_parameters_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_server_gen.go │ ├── oas_unimplemented_gen.go │ └── oas_validators_gen.go ├── sentryapi │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_handlers_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_server_gen.go │ ├── oas_servers_gen.go │ ├── oas_unimplemented_gen.go │ └── oas_validators_gen.go ├── tempoapi │ ├── oas_cfg_gen.go │ ├── oas_client_gen.go │ ├── oas_handlers_gen.go │ ├── oas_interfaces_gen.go │ ├── oas_json_gen.go │ ├── oas_labeler_gen.go │ ├── oas_middleware_gen.go │ ├── oas_operations_gen.go │ ├── oas_parameters_gen.go │ ├── oas_request_decoders_gen.go │ ├── oas_request_encoders_gen.go │ ├── oas_response_decoders_gen.go │ ├── oas_response_encoders_gen.go │ ├── oas_router_gen.go │ ├── oas_schemas_gen.go │ ├── oas_server_gen.go │ ├── oas_unimplemented_gen.go │ └── oas_validators_gen.go ├── tempohandler │ ├── collector.go │ ├── options.go │ └── tempohandler.go ├── tempoproxy │ └── tempoproxy.go ├── traceql │ ├── attribute.go │ ├── attribute_test.go │ ├── autocomplete.go │ ├── autocomplete_test.go │ ├── errors.go │ ├── expr.go │ ├── field_expr.go │ ├── field_expr_test.go │ ├── lexer │ │ ├── error.go │ │ ├── lexer.go │ │ ├── lexer_test.go │ │ ├── token.go │ │ └── tokentype_string.go │ ├── op.go │ ├── parser.go │ ├── parser_expr.go │ ├── parser_field_expr.go │ ├── parser_pipeline.go │ ├── parser_scalar_expr.go │ ├── parser_test.go │ ├── pipeline.go │ ├── preds.go │ ├── preds_test.go │ ├── scalar_expr.go │ ├── span_matcher.go │ ├── span_matcher_test.go │ ├── static.go │ ├── static_test.go │ ├── testdata │ │ └── fuzz │ │ │ └── FuzzParse │ │ │ ├── 08f4c0a3abb80dd8 │ │ │ └── db6bd8bfa214579d │ ├── traceql.go │ ├── traceqlengine │ │ ├── aggregator.go │ │ ├── aggregator_test.go │ │ ├── engine.go │ │ ├── engine_test.go │ │ ├── errors.go │ │ ├── evaluater.go │ │ ├── evaluater_test.go │ │ ├── expr.go │ │ ├── pipeline.go │ │ ├── querier.go │ │ ├── reduce.go │ │ ├── scalar_filter.go │ │ ├── spanset_filter.go │ │ ├── spanset_op.go │ │ └── spanset_op_test.go │ ├── type.go │ └── type_test.go ├── tracestorage │ ├── consumer.go │ ├── schema.go │ ├── schema_otel.go │ ├── schema_tempo.go │ └── tracestorage.go ├── xattribute │ ├── pool.go │ ├── xattribute.go │ └── xattribute_test.go └── xsync │ ├── key_once.go │ ├── pool.go │ └── xsync.go ├── logo.svg ├── otelbench.Dockerfile ├── oteldb.go ├── oteldb.mp4 ├── oteldemo.Dockerfile ├── otelproxy.Dockerfile ├── release.Dockerfile └── tools.go /.codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | - "**/main.go" 3 | - "**/*_enum.go" 4 | - "*_enum.go" 5 | - "**/*_gen.go" 6 | # Skip non-production code. 7 | - "internal/lokiproxy/" 8 | - "internal/pyroproxy/" 9 | - "internal/promproxy/" 10 | - "internal/otelbench/" 11 | - "cmd/oteldemo/" 12 | - "cmd/otelproxy/" 13 | # Skip vendored-forked 14 | - "internal/promcompliance/" 15 | # Skip benchmarks 16 | - "cmd/otelbench/" 17 | # Skip complience tests 18 | - "cmd/promql-compliance-tester/" 19 | coverage: 20 | status: 21 | project: false 22 | patch: false 23 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | **/.git 2 | /.k8s 3 | /.github 4 | /docs 5 | /dev 6 | *.md 7 | *.Dockerfile 8 | 9 | # remore write queries 10 | *.rwq 11 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org/ 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | end_of_line = lf 10 | 11 | [{*.go, go.mod, *.tpl}] 12 | indent_style = tab 13 | indent_size = 4 14 | 15 | [{*.yml,*.yaml}] 16 | indent_style = space 17 | indent_size = 2 18 | 19 | [*.py] 20 | indent_style = space 21 | indent_size = 4 22 | 23 | # Makefiles always use tabs for indentation 24 | [Makefile] 25 | indent_style = tab 26 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.raw linguist-generated 2 | *.go.tpl linguist-language=Go 3 | *.raw binary 4 | *.rwq binary 5 | *.hex text 6 | *.mp4 filter=lfs diff=lfs merge=lfs -text 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: "Use this template for reporting bugs, like `client: crashes on startup`" 4 | labels: bug 5 | --- 6 | 7 | 8 | 9 | ### What version of go-faster/oteldb are you using? 10 | 11 | ```bash 12 | $ go list -m github.com/go-faster/oteldb 13 | ``` 14 | 15 | ### Can this issue be reproduced with the latest version? 16 | 17 | 18 | 19 | ### What did you do? 20 | 21 | 26 | 27 | ### What did you expect to see? 28 | 29 | 30 | 31 | ### What did you see instead? 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | #contact_links: 2 | # - name: Ask on Telegram 3 | # url: https://t.me/ogen_dev 4 | # about: Telegram group for ogen 5 | # - name: Ask on GitHub 6 | # url: https://github.com/ogen-go/ogen/discussions/new?category=q-a 7 | # about: Q&A on GitHub 8 | # - name: FAQ 9 | # url: https://ogen.dev/docs/faq 10 | # about: Troubleshooting 11 | blank_issues_enabled: true 12 | #1 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: "Use this template for proposing features, like `server: support backpressure`" 4 | labels: enhancement 5 | --- 6 | 7 | 8 | 9 | ### Description 10 | 11 | 14 | 15 | ### References 16 | 17 | 20 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | Use [GitHub Security Reporting][reporting] to report security vulnerabilities under the "Security" section. 4 | 5 | [reporting]: https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability 6 | -------------------------------------------------------------------------------- /.github/SUPPORT.md: -------------------------------------------------------------------------------- 1 | This project is fully open-source and support is done voluntarily 2 | by the community, so no SLA is provided. 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: gomod 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | groups: 8 | opentelemetry: 9 | patterns: 10 | - "go.opentelemetry.io/otel" 11 | - "go.opentelemetry.io/otel/*" 12 | - "go.opentelemetry.io/contrib/*" 13 | opentelemetry-collector: 14 | patterns: 15 | - "go.opentelemetry.io/collector/*" 16 | - "github.com/open-telemetry/opentelemetry-collector-contrib/*" 17 | golang: 18 | patterns: 19 | - "golang.org/x/*" 20 | - package-ecosystem: github-actions 21 | directory: "/" 22 | schedule: 23 | interval: daily 24 | -------------------------------------------------------------------------------- /.github/dependency-review-config.yml: -------------------------------------------------------------------------------- 1 | fail_on_severity: "low" 2 | allow_licenses: 3 | - "MIT" 4 | - "ISC" 5 | - "MPL-2.0" 6 | - "BSD-2-Clause" 7 | - "BSD-3-Clause" 8 | - "Apache-2.0" 9 | allow-dependencies-licenses: 10 | - "pkg:golang/github.com/grafana/loki/pkg/push" 11 | -------------------------------------------------------------------------------- /.github/workflows/commitlint.yml: -------------------------------------------------------------------------------- 1 | name: Commit linter 2 | 3 | on: 4 | pull_request: 5 | workflow_dispatch: 6 | 7 | # Common Go workflows from go faster 8 | # See https://github.com/go-faster/x 9 | jobs: 10 | check: 11 | uses: go-faster/x/.github/workflows/commit.yml@main 12 | -------------------------------------------------------------------------------- /.github/workflows/dep-review.yml: -------------------------------------------------------------------------------- 1 | name: 'Dependency Review' 2 | on: [pull_request] 3 | 4 | permissions: 5 | contents: read 6 | 7 | jobs: 8 | dependency-review: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: 'Checkout Repository' 12 | uses: actions/checkout@v4 13 | - name: 'Dependency Review' 14 | uses: actions/dependency-review-action@v4 15 | with: 16 | config-file: './.github/dependency-review-config.yml' 17 | -------------------------------------------------------------------------------- /.github/workflows/dep.yml: -------------------------------------------------------------------------------- 1 | name: 'Dependency Review' 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | dependency-review: 13 | runs-on: ubuntu-latest 14 | env: 15 | FIRST_COMMIT_SHA: bca36d71977c623525a48c631309fcedb26605a9 16 | steps: 17 | - name: 'Checkout Repository' 18 | uses: actions/checkout@v4 19 | - name: 'Dependency Review' 20 | uses: actions/dependency-review-action@v4 21 | with: 22 | head-ref: HEAD 23 | base-ref: "${{ env.FIRST_COMMIT_SHA }}" 24 | config-file: './.github/dependency-review-config.yml' 25 | -------------------------------------------------------------------------------- /.github/workflows/x.yml: -------------------------------------------------------------------------------- 1 | name: x 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | workflow_dispatch: 8 | 9 | # Common Go workflows from go faster 10 | # See https://github.com/go-faster/x 11 | jobs: 12 | test: 13 | uses: go-faster/x/.github/workflows/test.yml@main 14 | with: 15 | enable-386: false 16 | submodules: true 17 | lint: 18 | uses: go-faster/x/.github/workflows/lint.yml@main 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | 17 | secret.yml 18 | secret.yaml 19 | 20 | /oteldb 21 | /otelproxy 22 | /otelfaker 23 | /chotel 24 | 25 | vmagent-remotewrite-data 26 | 27 | # goreleaser 28 | dist 29 | coverage.txt 30 | .task 31 | 32 | /requests.rwq 33 | /report.yml 34 | /otelbench 35 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "internal/otelschema/_testdata/semantic-conventions"] 2 | path = internal/otelschema/_testdata/semantic-conventions 3 | url = https://github.com/open-telemetry/semantic-conventions.git 4 | [submodule "dev/local/ch-full/opentelemetry-collector-contrib"] 5 | path = dev/local/ch-full/opentelemetry-collector-contrib 6 | url = https://github.com/open-telemetry/opentelemetry-collector-contrib.git 7 | -------------------------------------------------------------------------------- /.k8s/.crd/README.md: -------------------------------------------------------------------------------- 1 | # crd 2 | 3 | Imported CRDs for autocompletion in IDE. 4 | 5 | ``` 6 | kubectl get CustomResourceDefinition ciliumnetworkpolicies.cilium.io -o yaml > cnp.cilium.io.yml 7 | ``` -------------------------------------------------------------------------------- /.k8s/kubeconfig.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "${KUBE}" | base64 -d > /tmp/kubeconfig 4 | -------------------------------------------------------------------------------- /.k8s/values.yml: -------------------------------------------------------------------------------- 1 | env: 2 | - name: GOMEMLIMIT 3 | value: "4GiB" 4 | - name: GOMAXPROCS 5 | value: "6" 6 | - name: OTEL_METRICS_EXPORTER 7 | value: "otlp" 8 | - name: OTEL_RESOURCE_ATTRIBUTES 9 | value: "service.name=go-faster.oteldb" 10 | - name: OTEL_LOG_LEVEL 11 | value: "DEBUG" 12 | - name: OTEL_EXPORTER_OTLP_PROTOCOL 13 | value: "grpc" 14 | - name: OTEL_EXPORTER_OTLP_ENDPOINT 15 | value: "http://otel-collector.monitoring.svc.cluster.local:4317" 16 | - name: OTEL_TRACES_EXPORTER 17 | value: "otlp" 18 | - name: OTEL_LOGS_EXPORTER 19 | value: "otlp" 20 | - name: OTELDB_STORAGE 21 | value: ch 22 | - name: CH_DSN 23 | valueFrom: 24 | secretKeyRef: 25 | name: oteldb 26 | key: CH_DSN 27 | - name: PYROSCOPE_ENABLE 28 | value: "true" 29 | - name: PYROSCOPE_URL 30 | value: http://pyroscope.pyroscope.svc.cluster.local:4040 31 | - name: PYROSCOPE_APP_NAME 32 | value: oteldb 33 | - name: PPROF_ADDR 34 | value: :9010 35 | 36 | resources: 37 | requests: 38 | cpu: "500m" 39 | memory: 256Mi 40 | limits: 41 | cpu: "2" 42 | memory: 2Gi 43 | 44 | config: 45 | ttl: 2h 46 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | --- 2 | cff-version: 1.2.0 3 | version: 0.6.1 4 | title: "oteldb: OpenTelemetry-first signal aggregation system" 5 | license: Apache 2.0 6 | abstract: > 7 | The next generation, OpenTelemetry-first aggregation system for metrics, traces and logs. 8 | Compatible with PromQL, TraceQL and LogQL. 9 | Based on ClickHouse, fastest open-source (Apache 2.0) column-oriented database. 10 | authors: 11 | - family-names: Aleksandr 12 | given-names: Razumov 13 | affiliation: go-faster.org 14 | orcid: "https://orcid.org/0009-0009-8907-3954" 15 | date-released: "2024-01-08" 16 | keywords: 17 | - observability 18 | - opentelemetry 19 | - golang 20 | repository-code: "https://github.com/go-faster/oteldb" 21 | type: software 22 | message: "Available at https://github.com/go-faster/oteldb" 23 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Conventional commits 4 | 5 | Each commit message consists of a **header**, a **body** and a **footer**. The header has a special 6 | format that includes a **type**, a **scope** and a **subject**: 7 | 8 | ``` 9 | (): 10 | 11 | 12 | 13 |