0. START HERE
This issue lists areas that are good entry points to start contributing to opentelemetry-cpp.
If an item is listed here, it is by definition open to everyone, so no need to ask "Can I work on this ?": yes, you can.
Caution
To avoid duplicate work, make sure to check existing PR, maybe this is in progress already.
When considering to work on a PR, make sure to check is the issue is linked to existing PRs first, to see if someone else is working on this area.
Consider to comment, on the issue, that you intend to work on it, as a courtesy to others. This will not make the issue exclusively reserved to you (famous last words: "I am working on this"), but serves as a heads up to prevent overlap.
When posting a new PR, make sure to add Fixes #ISSUE_NUMBER in the description, so the PR will automatically linked with the issue by github.
In all cases, this is not about competition, but cooperation: consider to make comments on existing PRs if you see something you would have done differently (and say why).
We do not assign issues, so no need to ask, you can file a PR directly.
For each issue, see the issue comments for details.
1. Functional
Typically, features touching a functional area requires to dive into the code, but do not need changes in the infrastructure, like CI, workflows, compilers, platforms, makefiles ...
This is a good opportunity to learn the C++ code itself. The size of the code affected varies by feature.
1.1 All signals
Typically, changes affecting all signals at once are using the same pattern, applied everywhere.
The change is limited in scope, but touches multiple parts.
This is a good opportunity to learn how to apply design or coding pattern to an existing code base.
TODO: find more easy issues
1.2 Entities
1.3 Trace signal
1.4 Metrics signal
Typically, changes affecting the metrics signal are more involved on the functional part (time series, aggregation).
This is a good opportunity to understand in depth a component, with clear boundaries.
1.5 Logs signal
TODO: find more easy issues
1.6 Prometheus exporter
Please check open-telemetry/opentelemetry-specification#4805 , see the following comment , and fix gaps to the specifications:
1.7 Specific areas
Typically, features touching a specific area do not require to understand the whole code base, but only a well defined subset.
This is a good opportunity to learn the development process (git, PR, review, merge) as well as the affected code.
2. Code health
This area requires to change CI/CD scripts to improve the build process.
This is a very good opportunity to learn the github CI workflow, to implement new tooling.
2.1 Clang-tidy
Iterative changes, to expand coverage to the entire code base.
2.2 Doxygen
3. Test coverage
This area is a very good opportunity to learn docker to execute tests in a container environment.
4. Documentation
This is internal documentation, for maintainers.
We need to document internal processes (like, how to do a release, an upgrade, a deprecation, ...),
as well as feature design (explain how xyz works) at high level, to understand the code base.
5. Major work
Some areas in opentelemetry-cpp need major work, and contributions are welcome here as well.
A couple of things to keep in mind:
These are definitively not "good first issue" items, you should have contributed already to opentelemetry-cpp (to be familiar with the process and tooling) and have some experience to be effective.
Not every technical aspects are defined yet, a good part of the work will be to propose what needs to be done first.
Maintainers are here to help and facilitate this, and will provide guidance.
Consider to join the community meetings to discuss specific areas.
5.1 Binary packages
To be able to ship binary packages for opentelemetry-cpp, a lot of preliminary work needs to happen
5.2 Full Windows support
To instrument an application using only opentelemetry-cpp api, the following issue needs to be resolved for Windows:
6. Complete specification coverage
6.1. spec-compliance-matrix
The opentelemetry-specification keeps a compliance matrix listing the status for the cpp implementation.
See https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix/cpp.yaml
Below are the remaining items, not marked as implemented:
# Implementation status for C++
#
# Legend:
# '+' Implemented
# '-' Not implemented
# '?' Unknown
# 'N/A' Not applicable to this language
#
sections :
- name : Traces
features :
- heading : ' [TracerProvider](specification/trace/api.md#tracerprovider-operations)'
features :
- name : Associate Tracer with InstrumentationScope
status : ' ?'
- heading : ' [Tracer](specification/trace/api.md#tracer-operations)'
features :
- name : Documentation defines adding attributes at span creation as preferred
status : ' ?'
- heading : ' [SpanContext](specification/trace/api.md#spancontext)'
features :
- name : ' [Support W3C Trace Context Level 2 randomness](specification/trace/sdk.md#traceid-randomness)'
status : ' ?'
- heading : ' [Span](specification/trace/api.md#span)'
features :
- name : SpanProcessor.OnStart receives parent Context
status : ' -'
- name : events collection size limit
status : ' -'
- name : attribute collection size limit
status : ' -'
- name : links collection size limit
status : ' -'
- name : ' [SpanProcessor.OnEnding](specification/trace/sdk.md#onending)'
status : ' -'
- heading : ' [Span exceptions](specification/trace/api.md#record-exception)'
features :
- name : RecordException
status : ' -'
- name : RecordException with extra parameters
status : ' -'
- heading : ' [Sampling](specification/trace/sdk.md#sampling)'
features :
- name : ' Sampler: JaegerRemoteSampler'
status : ' ?'
- name : ' [SpanLimits](specification/trace/sdk.md#span-limits)'
status : ' -'
- name : ' [Attribute Limits](specification/common/README.md#attribute-limits)'
status : ' ?'
- name : Fetch InstrumentationScope from ReadableSpan
status : ' ?'
- name : ' [TraceIdRatioBased sampler implements OpenTelemetry tracestate `th` field](specification/trace/sdk.md#traceidratiobased)'
status : ' ?'
- name : ' [CompositeSampler and built-in ComposableSamplers](specification/trace/sdk.md#compositesampler)'
status : ' ?'
- name : ' [Sampler: AlwaysRecord](specification/trace/sdk.md#alwaysrecord)'
status : ' ?'
- name : Metrics
features :
- name : The fallback `Meter` `name` property keeps its original invalid value.
status : ' -'
- name : ' `Gauge` instrument is supported.'
status : ' -'
- name :
A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under
the same `Meter` using the same `name`.
status : ' ?'
- name : Duplicate instrument registration name conflicts are resolved by using the first-seen for the stream name.
status : ' ?'
- name : Instrument descriptions conform to the specified syntax.
status : ' -'
- name : Instrument supports the advisory ExplicitBucketBoundaries parameter.
status : ' ?'
- name : Instrument supports the advisory Attributes parameter.
status : ' ?'
- name : The `MeterProvider` provides methods to update the configuration
status : ' -'
- name : The updated configuration applies to all already returned `Meter`s.
status : ' -'
- name : The `View` allows configuring excluded attribute keys of resulting metric stream.
status : ' ?'
- name : The `View` allows configuring the exemplar reservoir of resulting metric stream.
status : ' ?'
- name : The `ExponentialBucketHistogram` aggregation is available.
status : ' ?'
- name : The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind.
status : ' -'
- name : The metrics SDK samples `Exemplar`s from measurements.
status : ' ?'
- name : Exemplar sampling can be disabled.
status : ' ?'
- name : The metrics SDK supports SDK-wide exemplar filter configuration
status : ' ?'
- name : The metrics SDK supports `TraceBased` exemplar filter
status : ' ?'
- name : The metrics SDK supports `AlwaysOn` exemplar filter
status : ' ?'
- name : The metrics SDK supports `AlwaysOff` exemplar filter
status : ' ?'
- name : Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration.
status : ' ?'
- name :
Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was
taken.
status : ' ?'
- name : Exemplars contain the timestamp when the measurement was taken.
status : ' ?'
- name : The metrics SDK provides an `ExemplarReservoir` interface or extension point.
status : ' ?'
- name : An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp.
status : ' ?'
- name :
The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except
` ExplicitBucketHistogram` .
status : ' ?'
- name :
The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram`
aggregation.
status : ' ?'
- name : A metric Producer accepts an optional metric Filter
status : ' ?'
- name : The metric Reader implementation supports registering metric Filter and passing them its registered metric Producers
status : ' ?'
- name : The metric SDK's metric Producer implementations uses the metric Filter
status : ' ?'
- name : Metric SDK supports configuring cardinality limit at MeterReader level
status : ' -'
- name : Metric SDK supports configuring cardinality limit per metric (using Views)
status : ' -'
- name : Metric SDK supports per-timeseries cumulative start timestamps
status : ' ?'
- name : Logs
features :
- name : Logger.Emit(LogRecord) with Exception parameter
status : ' ?'
- name : LogRecordProcessor.Enabled
status : ' ?'
- name : Resource
features :
- name : ' [Resource detectors populate Schema URL](specification/resource/sdk.md#detecting-resource-information-from-the-environment)'
status : ' ?'
- name : Context Propagation
features :
- name : OT Propagator
status : ' ?'
- name : OpenCensus Binary Propagator
status : ' ?'
- name : Environment Variables
features :
- name : OTEL_LOG_LEVEL
status : ' -'
- name : OTEL_PROPAGATORS
status : ' -'
- name : OTEL_EXPORTER_ZIPKIN_*
status : ' -'
- name : OTEL_TRACES_EXPORTER
status : ' -'
- name : OTEL_METRICS_EXPORTER
status : ' -'
- name : OTEL_LOGS_EXPORTER
status : ' -'
- name : OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT
status : ' -'
- name : OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT
status : ' -'
- name : OTEL_SPAN_EVENT_COUNT_LIMIT
status : ' -'
- name : OTEL_SPAN_LINK_COUNT_LIMIT
status : ' -'
- name : OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT
status : ' -'
- name : OTEL_LINK_ATTRIBUTE_COUNT_LIMIT
status : ' -'
- name : OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT
status : ' -'
- name : OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT
status : ' -'
- name : OTEL_TRACES_SAMPLER
status : ' -'
- name : OTEL_TRACES_SAMPLER_ARG
status : ' -'
- name : OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT
status : ' -'
- name : OTEL_ATTRIBUTE_COUNT_LIMIT
status : ' -'
- name : OTEL_METRICS_EXEMPLAR_FILTER
status : ' -'
- name : OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
status : ' -'
- name : OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION
status : ' -'
- name : Exporters
features :
- name : ' [Exporter interface has `ForceFlush`](specification/trace/sdk.md#forceflush-2)'
status : ' ?'
- heading : ' **[OTLP](specification/protocol/otlp.md)**'
features :
- name : OTLP/HTTP gzip Content-Encoding support
status : ' -'
- name : Concurrent sending
status : ' -'
- name : Honors retryable responses with backoff
status : ' -'
- name : Honors non-retryable responses
status : ' -'
- name : Honors throttling response
status : ' -'
- name : Multi-destination spec compliance
status : ' -'
- name : SchemaURL in ResourceSpans and ScopeSpans
status : ' ?'
- name : SchemaURL in ResourceMetrics and ScopeMetrics
status : ' ?'
- name : SchemaURL in ResourceLogs and ScopeLogs
status : ' ?'
- name : Honors the [user agent spec](specification/protocol/exporter.md#user-agent)
status : ' ?'
- name :
' [Partial Success](https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#partial-success)
messages are handled and logged for OTLP/gRPC'
status : ' ?'
- name :
' [Partial Success](https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#partial-success-1)
messages are handled and logged for OTLP/HTTP'
status : ' ?'
- name : Metric Exporter configurable temporality preference
status : ' ?'
- name : Metric Exporter configurable default aggregation
status : ' ?'
- heading : ' **[Zipkin](specification/trace/sdk_exporters/zipkin.md)**'
features :
- name : Zipkin V1 JSON
status : ' -'
- name : Zipkin V1 Thrift
status : ' -'
- name : Zipkin V2 Protobuf
status : ' -'
- name : InstrumentationScope mapping
status : ' ?'
- heading : ' **Prometheus**'
features :
- name : ' [Metadata Deduplication](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
status : ' -'
- name : ' [UNIT Metadata](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
status : ' -'
- name : ' [Unit Full Words](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
status : ' -'
- name : ' [otel_scope_name and otel_scope_version labels on all Metrics](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
status : ' -'
- name : ' [otel_scope_[attribute] labels on all Metrics](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
status : ' -'
- name : ' [otel_scope labels can be disabled](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
status : ' -'
- name : ' [Prometheus Counters have _total suffix by default](specification/compatibility/prometheus_and_openmetrics.md#sums)'
status : ' -'
- name : ' [Prometheus Counters _total suffixing can be disabled](specification/compatibility/prometheus_and_openmetrics.md#sums)'
status : ' -'
- name : ' [Delta Non-Monotonic Sums become Cumulative Prometheus Counters](specification/compatibility/prometheus_and_openmetrics.md#sums)'
status : ' -'
- name : ' [Delta Histograms become Cumulative Prometheus Histograms](specification/compatibility/prometheus_and_openmetrics.md#histograms-1)'
status : ' -'
- name : ' [Colliding sanitized attribute keys are merged](specification/compatibility/prometheus_and_openmetrics.md#metric-attributes)'
status : ' -'
- name : ' [Exemplars for Histograms and Monotonic sums](specification/compatibility/prometheus_and_openmetrics.md#exemplars-1)'
status : ' -'
- name : ' [`target_info` metric from Resource](specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1)'
status : ' -'
- name : OpenCensus Compatibility
features :
- name : ' [Trace Bridge](specification/compatibility/opencensus.md#trace-bridge)'
status : ' -'
- name : ' [Metric Bridge](specification/compatibility/opencensus.md#metrics--stats)'
status : ' -'
- name : OpenTracing Compatibility
features :
- name : ' [Create OpenTracing Shim](specification/compatibility/opentracing.md#create-an-opentracing-tracer-shim)'
status : ' ?'
- name : ' [Tracer](specification/compatibility/opentracing.md#tracer-shim)'
status : ' ?'
- name : ' [Span](specification/compatibility/opentracing.md#span-shim)'
status : ' ?'
- name : ' [SpanContext](specification/compatibility/opentracing.md#spancontext-shim)'
status : ' ?'
- name : ' [ScopeManager](specification/compatibility/opentracing.md#scopemanager-shim)'
status : ' ?'
- name : Error mapping for attributes/events
status : ' ?'
- name : Migration to OpenTelemetry guide
status : ' ?'
For each item marked '?' in this list:
A ? indicates the implementation status is not known.
Investigate if a feature is / is not implemented already, and update the spec.
For each item marked '-' in this list:
A - indicates the implementation is missing.
Confirm if the item is really not implemented, the matrix could be out of date.
Confirm if it is desirable to implement the item (some area are deprecated, not worth changing)
Create an issue for remaining items.
6.2. declarative configuration matrix
The declarative configuration repository keeps a compliance matrix listing the status for the cpp implementation.
See https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/meta_schema_language_cpp.yaml
How to find remaining items:
[malff@malff-desktop schema]$ pwd
/home/malff/CODE/MY_GITHUB/opentelemetry-configuration/schema
[malff@malff-desktop schema]$ yq ' .typeSupportStatuses[] | select(.status == "not_implemented") | .type' meta_schema_language_cpp.yaml
SpanKind
ExperimentalContainerResourceDetector
ExperimentalEventToSpanEventBridgeLogRecordProcessor
ExperimentalHostResourceDetector
ExperimentalJaegerRemoteSampler
ExperimentalLoggerConfig
ExperimentalProcessResourceDetector
ExperimentalResourceDetection
ExperimentalResourceDetector
ExperimentalServiceResourceDetector
ExperimentalSpanParent
Remaining work:
7. Too late
Fixed already:
0. START HERE
This issue lists areas that are good entry points to start contributing to opentelemetry-cpp.
If an item is listed here, it is by definition open to everyone, so no need to ask "Can I work on this ?": yes, you can.
Caution
To avoid duplicate work, make sure to check existing PR, maybe this is in progress already.
When considering to work on a PR, make sure to check is the issue is linked to existing PRs first, to see if someone else is working on this area.
Consider to comment, on the issue, that you intend to work on it, as a courtesy to others. This will not make the issue exclusively reserved to you (famous last words: "I am working on this"), but serves as a heads up to prevent overlap.
When posting a new PR, make sure to add
Fixes #ISSUE_NUMBERin the description, so the PR will automatically linked with the issue by github.In all cases, this is not about competition, but cooperation: consider to make comments on existing PRs if you see something you would have done differently (and say why).
We do not assign issues, so no need to ask, you can file a PR directly.
For each issue, see the issue comments for details.
1. Functional
Typically, features touching a functional area requires to dive into the code, but do not need changes in the infrastructure, like CI, workflows, compilers, platforms, makefiles ...
This is a good opportunity to learn the C++ code itself. The size of the code affected varies by feature.
1.1 All signals
Typically, changes affecting all signals at once are using the same pattern, applied everywhere.
The change is limited in scope, but touches multiple parts.
This is a good opportunity to learn how to apply design or coding pattern to an existing code base.
1.2 Entities
1.3 Trace signal
1.4 Metrics signal
Typically, changes affecting the metrics signal are more involved on the functional part (time series, aggregation).
This is a good opportunity to understand in depth a component, with clear boundaries.
1.5 Logs signal
1.6 Prometheus exporter
Please check open-telemetry/opentelemetry-specification#4805, see the following comment, and fix gaps to the specifications:
1.7 Specific areas
Typically, features touching a specific area do not require to understand the whole code base, but only a well defined subset.
This is a good opportunity to learn the development process (git, PR, review, merge) as well as the affected code.
2. Code health
This area requires to change
CI/CDscripts to improve the build process.This is a very good opportunity to learn the github
CIworkflow, to implement new tooling.2.1 Clang-tidy
Iterative changes, to expand coverage to the entire code base.
2.2 Doxygen
3. Test coverage
This area is a very good opportunity to learn
dockerto execute tests in a container environment.4. Documentation
This is internal documentation, for maintainers.
We need to document internal processes (like, how to do a release, an upgrade, a deprecation, ...),
as well as feature design (explain how xyz works) at high level, to understand the code base.
5. Major work
Some areas in opentelemetry-cpp need major work, and contributions are welcome here as well.
A couple of things to keep in mind:
5.1 Binary packages
To be able to ship binary packages for opentelemetry-cpp, a lot of preliminary work needs to happen
5.2 Full Windows support
To instrument an application using only opentelemetry-cpp api, the following issue needs to be resolved for Windows:
6. Complete specification coverage
6.1. spec-compliance-matrix
The opentelemetry-specification keeps a compliance matrix listing the status for the cpp implementation.
See https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix/cpp.yaml
Below are the remaining items, not marked as implemented:
For each item marked
'?'in this list:?indicates the implementation status is not known.For each item marked
'-'in this list:-indicates the implementation is missing.6.2. declarative configuration matrix
The declarative configuration repository keeps a compliance matrix listing the status for the cpp implementation.
See https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/meta_schema_language_cpp.yaml
How to find remaining items:
Remaining work:
7. Too late
Fixed already: