OpenTelemetry-Go is the Go implementation of OpenTelemetry



CI PkgGoDev Go Report Card Slack

OpenTelemetry-Go is the Go implementation of OpenTelemetry. It provides a set of APIs to directly measure performance and behavior of your software and send this data to observability platforms.

Project Status

Signal Status Project
Traces Stable N/A
Metrics Alpha N/A
Logs Frozen [1] N/A
  • [1]: The Logs signal development is halted for this project while we develop both Traces and Metrics. No Logs Pull Requests are currently being accepted.

Progress and status specific to this repository is tracked in our local project boards and milestones.

Project versioning information and stability guarantees can be found in the versioning documentation.


This project is tested on the following systems.

OS Go Version Architecture
Ubuntu 1.16 amd64
Ubuntu 1.15 amd64
Ubuntu 1.16 386
Ubuntu 1.15 386
MacOS 1.16 amd64
MacOS 1.15 amd64
Windows 1.16 amd64
Windows 1.15 amd64
Windows 1.16 386
Windows 1.15 386

While this project should work for other systems, no compatibility guarantees are made for those systems currently.

Getting Started

You can find a getting started guide on

OpenTelemetry's goal is to provide a single set of APIs to capture distributed traces and metrics from your application and send them to an observability platform. This project allows you to do just that for applications written in Go. There are two steps to this process: instrument your application, and configure an exporter.


To start capturing distributed traces and metric events from your application it first needs to be instrumented. The easiest way to do this is by using an instrumentation library for your code. Be sure to check out the officially supported instrumentation libraries.

If you need to extend the telemetry an instrumentation library provides or want to build your own instrumentation for your application directly you will need to use the package. The included examples are a good way to see some practical uses of this process.


Now that your application is instrumented to collect telemetry, it needs an export pipeline to send that telemetry to an observability platform.

All officially supported exporters for the OpenTelemetry project are contained in the exporters directory.

Exporter Metrics Traces

Additionally, OpenTelemetry community supported exporters can be found in the contrib repository.


See the contributing documentation.

  • Why so many interfaces?

    Why so many interfaces?

    My expectation when I started looking at the code base was that I would find mostly concrete implementations of the basic data types (Traces, Spans, SpanContexts, Logs, Measurements, Metrics, etc) with interfaces for vendors to hook into for enriching that data and exporting it either in batch or streaming forms.

    Looking through the code base I'm sort of astonished by the number of interfaces that exist over concrete data types.

    I realize that vendors want some control over various aspects of the implementation, but starting with making everything an interface seems like a poor design choice to me.

    Can anyone explain this or point me to the docs that explain the motivation behind this?

    opened by freeformz 30
  • Metrics SDK work-in-progress

    Metrics SDK work-in-progress

    This PR branches off of #100 and adds a metrics SDK.
    It's missing a lot, but I thought it would be best to post this now, by way of assisting with #100 as well as the associated spec change and directly addresses part of spec issue which is that it's difficult to fully understand the API specification without seeing a real SDK.

    This is very incomplete, for example it needs:

    1. It only supports counters
    2. It needs more testing
    3. It has no real exporter yet
    4. Needs more documentation on the lock-free algorithm (and reviewers)

    More changes will be needed to accommodate measures. Before the work in can be finished, I'd like to complete this prototype with:

    1. a statsd exporter
    2. a configuration struct allowing configurable aggregation and group-by for all instruments
    3. a dynamic config update API
    4. an example YAML file that could serve to configure metrics behavior

    There is one issue that is worth considering (@bogdandrutu). This SDK aggregates metrics by (DescriptorID, LabelSet) in the SDK itself, but does not "fold" for the group-by operation. I.e., it does not apply the group-by or support selecting a subset of aggregation keys directly. My idea is to implement group-by in the exporter. It's simpler this way, since it's not on the critical path for callers. This design could be extended with further complexity to address the group-by up-front, but I would like to be convinced it's worthwhile.

    pkg:SDK area:metrics 
    opened by jmacd 25
  • Add sdk/metric/reader package structure to new_sdk/main

    Add sdk/metric/reader package structure to new_sdk/main

    ~Blocked by #2799~

    Add in the needed interfaces and high-level types for the new SDK design from new_sdk/example. This is not expected to be a fully working implementation.


    • [ ] type Reader interface
      • [ ] type Registeree interface (might be a better idea to rename this idiomatic to Go Registerer)
      • [ ] type Producer interface
      • [ ] type Metrics struct
      • [ ] type Scope struct
      • [ ] type Instrument struct
      • [ ] type Point struct
    • [ ] type Exporter interface
    • [ ] type Option interface to be passed to the new Provider method option
      • [ ] type config struct stub
    pkg:SDK area:metrics 
    opened by MrAlias 24
  • Deviation from semconv exception spec?

    Deviation from semconv exception spec?

    Just noticed that the trace implementation doesn't seem to follow the spec for exceptions -- looks like this package uses error as the prefix instead of exception. Looking at the JS library, they seem to be using exception as well, so I'm guessing it's the golang lib that's out of compliance.

    Are there any plans or motivation to bring this into compliance? I don't know if there's a backwards compatible way of making this change, aside of perhaps recording two events, one with the error prefix, one with the exception prefix. That said, it might be best to just rip the bandaid off, rename the event and attributes and make it a (potentially) breaking change?

    Happy to contribute these changes if I can get some direction on what you think is the best path forward :)

    question pkg:SDK area:trace priority:p1 
    opened by mothershipper 23
  • OTLP exporter not exporting ValueRecorder & ValueObserver to Prometheus backend

    OTLP exporter not exporting ValueRecorder & ValueObserver to Prometheus backend

    Describe the bug I am using an OTLP exporter and metrics pusher with otel-collector with a Prometheus exporter and Logging exporter. In the Logging exporter, all collected metrics are showing but in Prometheus backend, only ValueCounter instrument values are showing.

    I am using the latest otel-collector-contrib image and running it alongside a demo service, some DBs, latest Prometheus image using docker.

    What config did you use?

    • otel-collector-config.yaml
        endpoint: ""
        namespace: versionsvc
        loglevel: debug
        project: digital-waters-276111
        metric_prefix: versionsvc
        number_of_workers: 3
        skip_create_metric_descriptor: true
        endpoint: :1888
        endpoint: :55679
      extensions: [pprof, zpages, health_check]
          receivers: [otlp]
          exporters: [logging,stackdriver]
          processors: [batch, queued_retry]
          receivers: [otlp]
          exporters: [logging,prometheus]
    • creation of the exporter and pusher:
    func initProviders() (*otlp.Exporter, *push.Controller) {
    	collectorAddr, ok := os.LookupEnv("OTEL_RECIEVER_ENDPOINT")
    	if !ok {
    		collectorAddr = otlp.DefaultCollectorHost + ":" + string(otlp.DefaultCollectorHost)
    	exporter, err := otlp.NewExporter(otlp.WithAddress(collectorAddr),
    	if err != nil {
    	tp, err := sdktrace.NewProvider(
    		sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}),
    	if err != nil {
    	pusher := push.New(
    	return exporter, pusher
    • docker-compose.yaml
    version: "3.1"
        image: redis:4
          - "6379:6379"
        image: postgres:11
          - "5432:5432"
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: roottoor
          POSTGRES_DB: backend
        build: ../.
          - GO111MODULE=on
          - OTEL_RECIEVER_ENDPOINT=otel-collector:55678
          - otel-collector
          - db 
          - redis   
          - "8088:8088"
        image: ${OTELCOL_IMG}
        command: ["--config=/etc/otel-collector-config.yaml", "${OTELCOL_ARGS}"]
          - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
          - "1888:1888"   
          - "8888:8888"   
          - "8889:8889"   
          - "13133:13133" 
          - "55678:55678"       
          - "55680:55679"
        container_name: prometheus
        image: prom/prometheus:latest
          - ./prometheus.yaml:/etc/prometheus/prometheus.yml
          - "9090:9090"
    • prometheus.yaml
        - job_name: 'otel-collector'
          scrape_interval: 1s
            - targets: ['otel-collector:8889']

    Environment OS: MacOS Catalina Compiler(if manually compiled): go 1.14

    Additional context

    • The code I wrote using OTEL format to export metrics works because I added a Prometheus receiver in the collector and a Prometheus exporter without changing any of the counter and value recorders code and it worked fine. So the issue is most likely associated with OTEL-exporter not able to export some Metric values that prometheus backend can identify.

    • I have this code with a demo service in the repo:

    bug area:metrics 
    opened by zeyadkhaled 21
  • Replace the view implementation in the metric SDK

    Replace the view implementation in the metric SDK

    There are design and usability issues with the current view implementation. This issue introduces a proposal to replace the current view implementation with one that addresses these issues.


    View package is used as a namespace for a sprawl of options

    It seems the main motivation for the view package is to encapsulate the large number of configuration options that exist, and those that could exist. This choice was to help prevent the pollution of the sdk/metric code API and its documentation. However, it only splits the issue to another package.

    Instead of having a sprawl of options, ideally, view definitions should be defined concisely.

    View package includes unrelated types.

    The included Instrument and InstrumentKind types refer to metric instrument concepts, not view concepts. They are only included in the package to avoid an import cycle.

    Ideally, these types would live in the sdk/metric package.

    Creation of a view returns an error

    The view.New function is declared as follows.

    func New(opts ...Option) (View, error) {

    Because this function is declared to return not only a View, but also an error it cannot be used in-line by users during the SDK setup. For example:

    view, err := view.New(/* user options */)
    if err != nil {
    // Error handling.
    NewMeterProvider(/* use view here */)

    Ideally, the view could be defined in-line with the MeterProvider. E.g.

    NewMeterProvider(WithView(NewView(/* user options */)))

    This would be possible if a design can be determined that would remove the two explicit errors the New function returns.

    The implicit errors, those sent to the logging system by options, are not impediments to resolving this issue.

    Multiple user options of the same kind are dropped

    The view.New function docs read:

    // New returns a new configured View. If there are any duplicate Options passed,
    // the last one passed will take precedence. The unique, de-duplicated,
    // Options are all applied to the View.

    This seems like appropriate behavior, but is also means that a user needs to read this documentation to understand how multiple options are handled. If they want to match instruments with name foo and bar so they pass both as options to the view it will cause frustration when both are not matched.

    If it were not possible for a user to pass multiple values for a match or replacement criteria by design they would understand without reading docs or frustration that they need to use multiple views.

    The current view is not extendable by a user

    If a user wants to do something unique with a View outside of the provided options they are not enabled. This may seem ideal as it restricts users to only create views defined by OTel. However, this project should not be about restricting users. It should be about providing useful packages that help them achieve what they want.

    It would be a benefit to the project if Views could be defined in a way that allows users to implement any idea they have, but also provide users with a way to create views directly based on what OTel prescribes.


    A complete example of this proposal can be found here

    Move Instrument and InstrumentKind to the sdk/metric package

    Both types can be moved to the sdk/metric package. The import cycle that prevented this is resolved in the rest of the proposal.

    The Instrument type can be extended to include all properties of a new instrument. That way users can match with complete context of the instrument being created:

    // Instrument describes properties an instrument is created with.
    type Instrument struct {
    	Name string
    	Description string
    	Kind InstrumentKind
    	Unit unit.Unit
    	Scope instrumentation.Scope

    An added benefit of this complete definition is that the function parameters of the pipeline can be unified with this type. See the example for how this is done.

    Add a Stream type to the sdk/metric package to describe the metric data stream

    // Stream describes the stream of data an instrument produces.
    type Stream struct {
    	// Instrument describes the instrument that created the stream.
    	Temporality metricdata.Temporality
    	Aggregation aggregation.Aggregation
    	AttributeFilter attribute.Filter

    This type is a representation of the data stream from the OTel specification.

    Replace the view.View with a View func in sdk/metric package

    Currently a View is defined as a struct type that only conveys the configuration output of view.New. It is not configurable outside of the view package.

    If instead we define a view as a function translating an instrument definition into a data stream definition, a user will be enabled to define view configuration as they see fit and we are still able to correctly create pipelines. For example:

    // View is an override to the default behavior of the SDK. It defines how data
    // should be collected for certain instruments. It returns true and the exact
    // Stream to use for matching Instruments. Otherwise, if the view does not
    // match, false is returned.
    type View func(Instrument) (Stream, bool)

    With this definition a user is able to add whatever matching conditions they need, even if they exist outside what OTel specifies, and create data streams in the context of the instrument that is being created.

    Alone, however, this would require users to recreate common views (i.e. renames, aggregation setting, description updates), and it doesn't provide the functional niceties specified by OTel (wildcard name matching). These issues are addressed by including a NewView function to create a View with these niceties.

    Define NewView to create a View based on OTel specification

    // NewView returns a View that applies the Stream mask for all instruments that
    // match criteria. The returned View will only apply mask if all non-zero-value
    // fields of criteria match the corresponding Instrument passed to the view. If
    // no criteria are provided, all field of criteria are their zero-values, a
    // view that matches no instruments is returned.
    // The Name field of criteria supports wildcard pattern matching. The wildcard
    // "*" is recognised as matching zero or more characters, and "?" is recognised
    // as matching exactly one character. For example, a pattern of "*" will match
    // all instrument names.
    // The Stream mask only applies updates for non-zero-value fields. By default,
    // the Instrument the View matches against will be use for the returned Stream
    // and no Aggregation or AttributeFilter are set. If mask has a non-zero-value
    // value for any of the Aggregation or AttributeFilter fields, or any of the
    // Instrument fields, that value is used instead of the default. If you need to
    // zero out an Stream field returned from a View, create a View directly.
    func NewView(criteria Instrument, mask Stream) View

    Adding this function allows for the matching of instrument properties, including wildcard name matching, and the replacement functionality defined by the OTel specification. It also facilitates common matching/replacement views similar to the existing view.New.

    Why not define this function to accept Options? Accepting options makes sense as a way to allow forward compatibility, when new options need to be added new functions returning new options can be added in a backwards compatible way. They also prevent the user from having to pass empty arguments as parameters when no options are desired.

    To the latter point, when a user is using this convenience function to create a View they should never be passing "no options". If they do not pass a match criteria or mask, the view is effectively a disablement or no-op. Neither of these is likely what the user wants to do. It is expected that the common use of this function will be by users that want to match something and set something. Given this expected use, designing for the no-option possibility here is non-ergonomic.

    As for the extensibility of future options, both the Instrument and Stream are struct that can be extended. The zero-value of fields for these structs are ignored so adding new fields will behave the same as the previous non-included-field version.

    As an added benefit of fully specifying each allowed parameter, there is no possibility for a user to provide duplicate options. It becomes clear by design that only one name, description, instrument kind, etc. is matches per created View. This is something that only was understood in documentation with the option approach.

    This added benefit of single fully specified match criteria also removes the existing error of view.New where an exact and wildcard name match is asked for.

    As for the other existing error, where a user does not provide any matching criteria, it is translated into a returning a view that never matches. As mentioned above, the inherent design of the function discourages this use.

    Having both possible explicit errors removed, the function no longer needs to return an error. It is now able to be included in-line with MeterProvider creation options.

    The existing view.New also allows for logged errors when it is passed aggregations that are misconfigured. This new function can use this approach to error handling for that error type. Additionally, it can use that approach for any additions to the parameters it receives that result in errors.

    Deprecate the view package in favor of implementation in sdk/metric

    • Deprecate sdk/metric/view.Instrument in favor of sdk/metric.Instrument
    • Deprecate sdk/metric/view.InstrumentKind in favor of sdk/metric.InstrumentKind
    • Deprecate sdk/metric/view.View in favor of sdk/metric.View
    • Deprecate sdk/metric/view.New in favor of sdk/metric.NewView
    • Update sdk/metric to stop using all deprecated types


    How to split the proposal into reviewable PRs.

    • [x] Add View, NewView, Instrument, Stream, and InstrumentKind to sdk/metric with unit tests
    • [x] Update sdk/metric to use View, NewView, Instrument, Stream, and InstrumentKind from sdk/metric
    • [x] Add example tests for NewView and View.
    • [x] Deprecate the view package
    pkg:SDK area:metrics proposal 
    opened by MrAlias 20
  • sdk/trace: use sync.Pool in randomIDGenerator instead of Mutex

    sdk/trace: use sync.Pool in randomIDGenerator instead of Mutex

    randomIDGenerator used a sync.Mutex to coordinate generation of TraceID and SpanID. When used in relatively hot code paths this would cause significant mutex contention as observed in pprof/mutex profiles.

    This uses a sync.Pool instead which allows using generating and using of *rand.Rand as needed without the need for a Lock.

    name                 old time/op    new time/op    delta
    SpanIDGeneration-10     191ns ± 5%      64ns ± 2%  -66.60%  (p=0.000 n=9+10)
    name                 old alloc/op   new alloc/op   delta
    SpanIDGeneration-10     0.00B          0.00B          ~     (all equal)
    name                 old allocs/op  new allocs/op  delta
    SpanIDGeneration-10      0.00           0.00          ~     (all equal)

    Signed-off-by: Maisem Ali [email protected]

    Skip Changelog 
    opened by maisem 19
  • propose additional CODEOWNERS

    propose additional CODEOWNERS

    opened by lizthegrey 19
  • AsyncCounter and AsyncUpDownCounter expected callback value changed in v0.32.0

    AsyncCounter and AsyncUpDownCounter expected callback value changed in v0.32.0

    Before 0.32, the value in a callback function was expected to be an absolute value, but since 0.32 it must be a delta or metrics are incorrect:

    hitsCounter, _ := meter.AsyncInt64().Counter("some.prefix.cache_hits")
    // before 0.32
    hitsCounter.Observe(ctx, hitsValue) // abs value
    // 0.32
    hitsCounter.Observe(ctx, hitsValue-prevHitsValue) // delta value

    Is that intentional? It is not documented anywhere and not mentioned in the changelog. Also, runtimemetrics still uses the old way to report observable values.

    bug pkg:SDK area:metrics 
    opened by vmihailenco 18
  • Impossible to create Instrument with the same name from the different MeterProvider

    Impossible to create Instrument with the same name from the different MeterProvider


    More that year have passed since I wrote about this in Slack and it is still here. I am trying to use Meter API, count some data and collect it with Prometheus. It is possible situation, when you need the same Instrument name with the different prefixes. I guess that Meter name is the prefix, but not. And If I will try to create two Meters and for each one create Instrument with the same name than I will get an error.


    • OS: OS X
    • Architecture: x86_64
    • Go Version: 1.19
    • opentelemetry-go version: v1.8.0

    Steps To Reproduce

    config := prometheus.Config{}
    	ctrl := controller.New(
    	exporter, err := prometheus.New(config, ctrl)
    	if err != nil {
    		return fmt.Errorf("setup monitor routes: %w", err)
    	provider := exporter.MeterProvider()
    	httpInstrumentProvider := provider.Meter("http").SyncInt64()
    	httpErrorCounter, err := httpInstrumentProvider.Counter("error_count", instrument.WithUnit(unit.Dimensionless),
    		instrument.WithDescription("count of http request errors"))
    	if err != nil {
    		return fmt.Errorf("setup monitor routes: %w", err)
    	httpErrorCounter.Add(ctx, 1)
    	sqlInstrumentProvider := provider.Meter("sql").SyncInt64()
    	sqlErrorCounter, err := sqlInstrumentProvider.Counter("error_count", instrument.WithUnit(unit.Dimensionless),
    		instrument.WithDescription("count of sql query errors"))
    	if err != nil {
    		return fmt.Errorf("setup monitor routes: %w", err)
    	sqlErrorCounter.Add(ctx, 1)
    	be.monitorRouter.HandleFunc("/metrics", exporter.ServeHTTP)

    Expected behavior

    I expect that I could create different Meters which isolate their Instruments (like namespace) and Instruments with the same name will not conflict between themselves in case if it was created with different Meters.

    bug area:metrics pkg:exporter:prometheus 
    opened by morozovcookie 18
  • Change resource.New() to use functional options; add builtin attributes for (host.*, telemetry.sdk.*)

    Change resource.New() to use functional options; add builtin attributes for (host.*, telemetry.sdk.*)

    This adds resource.NewConfig(ctx, ...) with functional options:

    • WithAttributes(...) for directly adding key:values
    • WithDetectors(...) for directly adding resource detectors
    • WithTelemetrySDK(...) to override the default telemetry.sdk.* resources
    • WithHost(...) to override the default host.* resources
    • WithFromEnv(...) to override the default environment configuration
    • WithoutBuiltin() to disable all builtin resources

    The intention is to make it easy to configure a *Resource with the standard resources. This adds standard resource detectors for the telemetry SDK and host name.

    Resolves #1076.

    area:metrics area:trace 
    opened by jmacd 18
  • Update ClientRequest HTTPS determination

    Update ClientRequest HTTPS determination

    The ClientRequest function will only report a peer port attribute if that peer port differs from the standard 80 for HTTP and 443 for HTTPS. In determining if the request is for HTTPS use the request URL scheme. This is not perfect. If a user doesn't provide a scheme this will not be correctly detected. However, the current approach of checking if the TLS field is non-nil will always be wrong, requests made by client ignore this field and it is always nil. Therefore, switching to using the URL field is the best we can do without having already made the request.

    Closes #3528

    Skip Changelog 
    opened by MrAlias 2
  • Deprecate the syncint64/syncfloat64/asyncint64/asyncfloat64 packages

    Deprecate the syncint64/syncfloat64/asyncint64/asyncfloat64 packages

    Flatten the instruments from the{syncint64,syncfloat64,asyncint64,asyncfloat64} packages into

    Follow up to

    Why Flatten?

    Our design choice to partition instrument names was made a while ago, why now flatten these packages?

    The general reason is our recent API redesign work^1 has made this partitioned package structure not fit with naming and code grouping design. It has become a relic of the prior, non-specification-compliant, design.

    Match Specification Recommended Names


    Our old design used the asynchronous and synchronous terms to identify instrument. The specification has specific naming recommendations for asynchronous instruments though. They should use the "Obervable" term instead. This was fixed in on the meter^2, but by flattening the package structure the instrument names are also brought into compliance with the specification naming recommendation.

    Unify instruments in instrument package

    Each of the{syncint64,syncfloat64,asyncint64,asyncfloat64} packages was a wrapper around 3 instrument types each. The package provided configuration and common embedded types for the other packages. This mean that the provided instrument functionality was spread across 5 different packages. By flattening into the instrument package all instrument functionality is provided by 1 unified package.

    Configuration is flattened, instruments were not

    Instrument configuration is already split in the instrument package^1 for each instrument type. Having the configuration for an instrument live in a separate package and not having those instruments split the same way in the same package creates an unneeded package boundary. Users looking at documentation about how an instrument is configured or implementing the configuration of an instrument need to look or import separate packages. This goes against the common Go idea of keeping related things close.

    Deprecate instead of remove

    To prevent adding the{syncint64,syncfloat64,asyncint64,asyncfloat64} packages to our abandoned packages pile, this deprecates the packages and expects them to be removed in the next release.

    opened by MrAlias 1
  • Implement IsSampled for OpenTelemetry bridgeSpanContext

    Implement IsSampled for OpenTelemetry bridgeSpanContext

    This is a PR in response to issue .

    IsSampled is not exposed by OpenTracing but its implementations did (at least some; sometimes called differently; Jaeger does). Cosidering that in OpenTracing this information was accessed by casting types, this implementation is no different - instances can be casted to an interface with expected methods in order to access it. Once moved to the bridge, eventually bridge can be dropped and this information would continue being exposed through the OpenTelemetry's span context.

    opened by pijusn 2
  • trace.NewTracerProvider logs configuration before storing spanProcessors

    trace.NewTracerProvider logs configuration before storing spanProcessors


    TracerProvider creation logs incomplete configuration, leaving out defined SpanProcessor structs.


    • OS: MacOS
    • Architecture: x86_64
    • Go Version: 1.19
    • opentelemetry-go version: v1.11.2

    Steps To Reproduce

    1. Configure a logr compatible logger with verbosity set higher than 5 (as per OTEL documentation, to enable debug logging).
    2. Create a TraceProvider by using, with a configured SpanProcessor
    3. The log emitted after the provider is created will be incorrect because it will display SpanProcessors as empty.

    Expected behavior

    The log message should promptly display the full configuration of the TraceProvider struct.


    I believe the offending block of code is the following:

    // NewTracerProvider returns a new and configured TracerProvider.
    // By default the returned TracerProvider is configured with:
    //   - a ParentBased(AlwaysSample) Sampler
    //   - a random number IDGenerator
    //   - the resource.Default() Resource
    //   - the default SpanLimits.
    // The passed opts are used to override these default values and configure the
    // returned TracerProvider appropriately.
    func NewTracerProvider(opts ...TracerProviderOption) *TracerProvider {
    	o := tracerProviderConfig{
    		spanLimits: NewSpanLimits(),
    	o = applyTracerProviderEnvConfigs(o)
    	for _, opt := range opts {
    		o = opt.apply(o)
    	o = ensureValidTracerProviderConfig(o)
    	tp := &TracerProvider{
    		namedTracer: make(map[instrumentation.Scope]*tracer),
    		sampler:     o.sampler,
    		idGenerator: o.idGenerator,
    		spanLimits:  o.spanLimits,
    		resource:    o.resource,
    	global.Info("TracerProvider created", "config", o)
    	spss := spanProcessorStates{}
    	for _, sp := range o.processors {
    		spss = append(spss, newSpanProcessorState(sp))
    	return tp

    As you can see, tp.spanProcessors.Store(spss) is called after the log entry has been created. For that reason, the spanProcessors attribute is empty on the log message.

    bug help wanted 
    opened by kmai 2
  • v1.11.2(Dec 5, 2022)


    • The WithView Option is added to the package. This option is used to configure the view(s) a MeterProvider will use for all Readers that are registered with it. (#3387)
    • Add Instrumentation Scope and Version as info metric and label in Prometheus exporter. This can be disabled using the WithoutScopeInfo() option added to that package.(#3273, #3357)
    • OTLP exporters now recognize: (#3363)
    • The View type and related NewView function to create a view according to the OpenTelemetry specification are added to These additions are replacements for the View type and New function from (#3459)
    • The Instrument and InstrumentKind type are added to These additions are replacements for the Instrument and InstrumentKind types from (#3459)
    • The Stream type is added to to define a metric data stream a view will produce. (#3459)
    • The AssertHasAttributes allows instrument authors to test that datapoints returned have appropriate attributes. (#3487)


    • The "".WithReader option no longer accepts views to associate with the Reader. Instead, views are now registered directly with the MeterProvider via the new WithView option. The views registered with the MeterProvider apply to all Readers. (#3387)
    • The Temporality(view.InstrumentKind) metricdata.Temporality and Aggregation(view.InstrumentKind) aggregation.Aggregation methods are added to the "".Exporter interface. (#3260)
    • The Temporality(view.InstrumentKind) metricdata.Temporality and Aggregation(view.InstrumentKind) aggregation.Aggregation methods are added to the "".Client interface. (#3260)
    • The WithTemporalitySelector and WithAggregationSelector ReaderOptions have been changed to ManualReaderOptions in the package. (#3260)
    • The periodic reader in the package now uses the temporality and aggregation selectors from its configured exporter instead of accepting them as options. (#3260)


    • The exporter fixes duplicated _total suffixes. (#3369)
    • Remove comparable requirement for Readers. (#3387)
    • Cumulative metrics from the OpenCensus bridge ( are defined as monotonic sums, instead of non-monotonic. (#3389)
    • Asynchronous counters (Counter and UpDownCounter) from the metric SDK now produce delta sums when configured with delta temporality. (#3398)
    • Exported Status codes in the exporter are now exported as all upper case values. (#3340)
    • Aggregations from with no data are not exported. (#3394, #3436)
    • Reenabled Attribute Filters in the Metric SDK. (#3396)
    • Asynchronous callbacks are only called if they are registered with at least one instrument that does not use drop aggragation. (#3408)
    • Do not report empty partial-success responses in the exporters. (#3438, #3432)
    • Handle partial success responses in exporters. (#3162, #3440)
    • Prevent duplicate Prometheus description, unit, and type. (#3469)
    • Prevents panic when using incorrect attribute.Value.As[Type]Slice(). (#3489)


    • The interface is removed. (#3486)
    • The function is removed. Use the otlpmetric[http|grpc].New directly. (#3486)


    • The package is deprecated. Use Instrument, InstrumentKind, View, and NewView in instead. (#3476)
    Source code(tar.gz)
    Source code(zip)
  • v1.11.1(Oct 19, 2022)


    • The Prometheus exporter in registers with a Prometheus registerer on creation. By default, it will register with the default Prometheus default registerer. A non-default registerer can be used by passing the WithRegisterer option. (#3239)
    • Added the WithAggregationSelector option to the package to change the default AggregationSelector used. (#3341)
    • The Prometheus exporter in converts the Resource associated with metric exports into a target_info metric. (#3285)


    • The "".New function is updated to return an error. It will return an error if the exporter fails to register with Prometheus. (#3239)


    • The URL-encoded values from the OTEL_RESOURCE_ATTRIBUTES environment variable are decoded. (#2963)
    • The baggage.NewMember function decodes the value parameter instead of directly using it. This fixes the implementation to be compliant with the W3C specification. (#3226)
    • Slice attributes of the attribute package are now comparable based on their value, not instance. (#3108 #3252)
    • The Shutdown and ForceFlush methods of the "".TraceProvider no longer return an error when no processor is registered. (#3268)
    • The Prometheus exporter in cumulatively sums histogram buckets. (#3281)
    • The sum of each histogram data point is now uniquely exported by the exporters. (#3284, #3293)
    • Recorded values for asynchronous counters (Counter and UpDownCounter) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278)
    • UpDownCounters are now correctly output as Prometheus gauges in the exporter. (#3358)
    • The Prometheus exporter in no longer describes the metrics it will send to Prometheus on startup. Instead the exporter is defined as an "unchecked" collector for Prometheus. This fixes the reader is not registered warning currently emitted on startup. (#3291 #3342)
    • The exporter now correctly adds _total suffixes to counter metrics. (#3360)
    • The exporter now adds a unit suffix to metric names. This can be disabled using the WithoutUnits() option added to that package. (#3352)
    Source code(tar.gz)
    Source code(zip)
  • v1.11.0(Oct 12, 2022)

    Retracts the v0.32.2 version of and given they include unresolvable dependencies.


    • Add default User-Agent header to OTLP exporter requests ( and (#3261)


    • span.SetStatus has been updated such that calls that lower the status are now no-ops. (#3214)
    • Upgrade from v0.0.0-20210423185535-09eb48e85fd7 to v0.0.0-20220919091848-fb04ddd9f9c8. This addresses GO-2022-0493. (#3235)
    Source code(tar.gz)
    Source code(zip)
  • sdk/metric/v0.32.2(Oct 11, 2022)


    • Added an example of using metric views to customize instruments. (#3177)
    • Add default User-Agent header to OTLP exporter requests ( and (#3261)


    • Flush pending measurements with the PeriodicReader in the when ForceFlush or Shutdown are called. (#3220)
    • Update histogram default bounds to match the requirements of the latest specification. (#3222)


    • Use default view if instrument does not match any registered view of a reader. (#3224, #3237)
    • Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251)
    • Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251)
    • Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251)
    • The OpenCensus bridge no longer sends empty batches of metrics. (#3263)
    Source code(tar.gz)
    Source code(zip)
  • metric/v0.32.1(Sep 22, 2022)


    • The Prometheus exporter sanitizes OpenTelemetry instrument names when exporting. Invalid characters are replaced with _. (#3212)


    • The metric portion of the OpenCensus bridge ( has been reintroduced. (#3192)
    • The OpenCensus bridge example ( has been reintroduced. (#3206)


    • Updated go.mods to point to valid versions of the sdk. (#3216)
    • Set the MeterProvider resource on all exported metric data. (#3218)
    Source code(tar.gz)
    Source code(zip)
  • sdk/metric/v0.32.0(Sep 19, 2022)


    • The metric SDK in is completely refactored to comply with the OpenTelemetry specification. Please see the package documentation for how the new SDK is initialized and configured. (#3175)


    • The metric portion of the OpenCensus bridge ( has been removed. A new bridge compliant with the revised metric SDK will be added back in a future release. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed. A replacement package that supports the new metric SDK will be added back in a future release. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The package is removed, see the new metric SDK. (#3175)
    • The "".ErrUninitializedInstrument variable was removed. (#3175)
    • The "".ErrBadInstrument variable was removed. (#3175)
    • The "".Accumulator type was removed, see the MeterProviderin the new metric SDK. (#3175)
    • The "".NewAccumulator function was removed, see NewMeterProviderin the new metric SDK. (#3175)
    • The deprecated "".AtomicFieldOffsets function was removed. (#3175)
    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Sep 12, 2022)


    • Support Go 1.19. (#3077) Include compatibility testing and document support. (#3077)
    • Support the OTLP ExportTracePartialSuccess response; these are passed to the registered error handler. (#3106)
    • Upgrade from v0.18.0 to v0.19.0 (#3107)


    • Fix misidentification of OpenTelemetry SpanKind in OpenTracing bridge ( (#3096)
    • Attempting to start a span with a nil context will no longer cause a panic. (#3110)
    • All exporters will be shutdown even if one reports an error (#3091)
    • Ensure valid UTF-8 when truncating over-length attribute values. (#3156)
    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Aug 2, 2022)


    • Add support for Schema Files format 1.1.x (metric "split" transform) with the new package. (#2999)
    • Add the package. The package contains semantic conventions from the v1.11.0 version of the OpenTelemetry specification. (#3009)
    • Add the package. The package contains semantic conventions from the v1.12.0 version of the OpenTelemetry specification. (#3010)
    • Add the http.method attribute to HTTP server metric from all* packages. (#3018)


    • Invalid warning for context setup being deferred in package. (#3029)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Jul 8, 2022)

    1.8.0/0.31.0 - 2022-07-08


    • Add support for opentracing.TextMap format in the Inject and Extract methods of the "".BridgeTracer type. (#2911)


    • The crosslink make target has been updated to use the package. (#2886)
    • In the package rename Library to Scope and alias Library as Scope (#2976)
    • Move metric no-op implementation form nonrecording to metric package. (#2866)


    • Support for go1.16. Support is now only for go1.17 and go1.18 (#2917)


    • The Library struct in the package is deprecated. Use the equivalent Scope struct instead. (#2977)
    • The ReadOnlySpan.InstrumentationLibrary method from the package is deprecated. Use the equivalent ReadOnlySpan.InstrumentationScope method instead. (#2977)
    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Apr 28, 2022)


    • Add the package. The package contains semantic conventions from the v1.8.0 version of the OpenTelemetry specification. (#2763)
    • Add the package. The package contains semantic conventions from the v1.9.0 version of the OpenTelemetry specification. (#2792)
    • Add the package. The package contains semantic conventions from the v1.10.0 version of the OpenTelemetry specification. (#2842)
    • Added an in-memory exporter to metrictest to aid testing with a full SDK. (#2776)


    • Globally delegated instruments are unwrapped before delegating asynchronous callbacks. (#2784)
    • Remove import of testing package in non-tests builds of the package. (#2786)


    • The WithLabelEncoder option from the package is renamed to WithAttributeEncoder. (#2790)
    • The LabelFilterSelector interface from is renamed to AttributeFilterSelector. The method included in the renamed interface also changed from LabelFilterFor to AttributeFilterFor. (#2790)
    • The Metadata.Labels method from the package is renamed to Metadata.Attributes. Consequentially, the Record type from the same package also has had the embedded method renamed. (#2790)


    • The Iterator.Label method in the package is deprecated. Use the equivalent Iterator.Attribute method instead. (#2790)
    • The Iterator.IndexedLabel method in the package is deprecated. Use the equivalent Iterator.IndexedAttribute method instead. (#2790)
    • The MergeIterator.Label method in the package is deprecated. Use the equivalent MergeIterator.Attribute method instead. (#2790)


    • Removed the Batch type from the package. (#2864)
    • Removed the Measurement type from the package. (#2864)
    Source code(tar.gz)
    Source code(zip)
  • metric/v0.29.0(Apr 11, 2022)

    0.29.0 - 2022-04-11


    • The metrics global package was added back into several test files. (#2764)
    • The Meter function is added back to the package. This function is a convenience function equivalent to calling global.MeterProvider().Meter(...). (#2750)


    • Removed module the Use the module instead. (#2720)


    • Don't panic anymore when setting a global MeterProvider to itself. (#2749)
    • Upgrade in from v0.12.1 to v0.15.0. This replaces the use of the now deprecated InstrumentationLibrary and InstrumentationLibraryMetrics types and fields in the proto library with the equivalent InstrumentationScope and ScopeMetrics. (#2748)
    Source code(tar.gz)
    Source code(zip)
  • v1.6.3(Apr 7, 2022)

  • v1.6.2(Apr 6, 2022)

    1.6.2 - 2022-04-06


    • Don't panic anymore when setting a global TracerProvider or TextMapPropagator to itself. (#2749)
    • Upgrade in from v0.12.1 to v0.15.0. This replaces the use of the now deprecated InstrumentationLibrary and InstrumentationLibrarySpans types and fields in the proto library with the equivalent InstrumentationScope and ScopeSpans. (#2748)
    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Mar 28, 2022)


    • The* packages now use the correct schema URL for their SchemaURL constant. Instead of using "<version>" they now use the correct URL without a v prefix, "<version>". (#2743, #2744)


    • Upgrade from v0.12.0 to v0.12.1. This includes an indirect upgrade of which resolves a vulnerability from in version v2.2.3. (#2724, #2728)
    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Mar 23, 2022)

    ⚠️ Notice ⚠️

    This update is a breaking change of the unstable Metrics API. Code instrumented with the will need to be modified.


    • Add metrics exponential histogram support. New mapping functions have been made available in sdk/metric/aggregator/exponential/mapping for other OpenTelemetry projects to take dependencies on. (#2502)
    • Add Go 1.18 to our compatibility tests. (#2679)
    • Allow configuring the Sampler with the OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG environment variables. (#2305, #2517)
    • Add the metric/global for obtaining and setting the global MeterProvider. (#2660)


    • The metrics API has been significantly changed to match the revised OpenTelemetry specification. High-level changes include:

      • Synchronous and asynchronous instruments are now handled by independent InstrumentProviders. These InstrumentProviders are managed with a Meter.
      • Synchronous and asynchronous instruments are grouped into their own packages based on value types.
      • Asynchronous callbacks can now be registered with a Meter.

      Be sure to check out the metric module documentation for more information on how to use the revised API. (#2587, #2660)


    • Fallback to general attribute limits when span specific ones are not set in the environment. (#2675, #2677)
    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Mar 16, 2022)


    • Log the Exporters configuration in the TracerProviders message. (#2578)

    • Added support to configure the span limits with environment variables. The following environment variables are supported. (#2606, #2637)


      If the provided environment variables are invalid (negative), the default values would be used.

    • Rename the gc runtime name to go (#2560)

    • Add resource container ID detection. (#2418)

    • Add span attribute value length limit. The new AttributeValueLengthLimit field is added to the "".SpanLimits type to configure this limit for a TracerProvider. The default limit for this resource is "unlimited". (#2637)

    • Add the WithRawSpanLimits option to This option replaces the WithSpanLimits option. Zero or negative values will not be changed to the default value like WithSpanLimits does. Setting a limit to zero will effectively disable the related resource it limits and setting to a negative value will mean that resource is unlimited. Consequentially, limits should be constructed using NewSpanLimits and updated accordingly. (#2637)


    • Drop oldest tracestate Member when capacity is reached. (#2592)
    • Add event and link drop counts to the exported data from the oltptrace exporter. (#2601)
    • Unify path cleaning functionally in the otlpmetric and otlptrace configuration. (#2639)
    • Change the debug message from the sdk/trace.BatchSpanProcessor to reflect the count is cumulative. (#2640)
    • Introduce new internal envconfig package for OTLP exporters. (#2608)
    • If http.Request.Host is empty, fall back to use URL.Host when populating in the semconv packages. (#2661)


    • Remove the OTLP trace exporter limit of SpanEvents when exporting. (#2616)
    • Default to port 4318 instead of 4317 for the otlpmetrichttp and otlptracehttp client. (#2614, #2625)
    • Unlimited span limits are now supported (negative values). (#2636, #2637)


    • Deprecated "".WithSpanLimits. Use WithRawSpanLimits instead. That option allows setting unlimited and zero limits, this option does not. This option will be kept until the next major version incremented release. (#2637)
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Feb 16, 2022)

  • v1.4.0(Feb 11, 2022)


    • Use OTEL_EXPORTER_ZIPKIN_ENDPOINT environment variable to specify zipkin collector endpoint. (#2490)
    • Log the configuration of TracerProviders, and Tracers for debugging. To enable use a logger with Verbosity (V level) >=1. (#2500)
    • Added support to configure the batch span-processor with environment variables. The following environment variables are used. (#2515)


    • Zipkin exporter exports Resource attributes in the Tags field. (#2589)


    • Deprecate module the Use the module instead. (#2382)
    • Deprecate "".AtomicFieldOffsets. (#2445)


    • Fixed the instrument kind for noop async instruments to correctly report an implementation. (#2461)
    • Fix UDP packets overflowing with Jaeger payloads. (#2489, #2512)
    • Change the otlpmetric.Client interface's UploadMetrics method to accept a single ResourceMetrics instead of a slice of them. (#2491)
    • Specify explicit buckets in Prometheus example, fixing issue where example only has +inf bucket. (#2419, #2493)
    • W3C baggage will now decode urlescaped values. (#2529)
    • Baggage members are now only validated once, when calling NewMember and not also when adding it to the baggage itself. (#2522)
    • The order attributes are dropped from spans in the package when capacity is reached is fixed to be in compliance with the OpenTelemetry specification. Instead of dropping the least-recently-used attribute, the last added attribute is dropped. This drop order still only applies to attributes with unique keys not already contained in the span. If an attribute is added with a key already contained in the span, that attribute is updated to the new value being added. (#2576)


    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Dec 10, 2021)

    ⚠️ Notice ⚠️

    We have updated the project minimum supported Go version to 1.16


    • Added an internal Logger. This can be used by the SDK and API to provide users with feedback of the internal state. To enable verbose logs configure the logger which will print V(1) logs. For debugging information configure to print V(5) logs. (#2343)
    • Add the WithRetry Option and the RetryConfig type to the package to specify retry behavior consistently. (#2425)
    • Add SpanStatusFromHTTPStatusCodeAndSpanKind to all semconv packages to return a span status code similar to SpanStatusFromHTTPStatusCode, but exclude 4XX HTTP errors as span errors if the span is of server kind. (#2296)


    • The "".Client now uses the underlying gRPC ClientConn to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2329)
    • The "".Client now uses the underlying gRPC ClientConn to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2425)
    • The "".RetrySettings type is renamed to RetryConfig. (#2425)
    • The* gRPC exporters now default to using the host's root CA set if none are provided by the user and WithInsecure is not specified. (#2432)
    • Change resource.Default to be evaluated the first time it is called, rather than on import. This allows the caller the option to update OTEL_RESOURCE_ATTRIBUTES first, such as with os.Setenv. (#2371)


    • The* exporters are updated to handle per-signal and universal endpoints according to the OpenTelemetry specification. Any per-signal endpoint set via an OTEL_EXPORTER_OTLP_<signal>_ENDPOINT environment variable is now used without modification of the path. When OTEL_EXPORTER_OTLP_ENDPOINT is set, if it contains a path, that path is used as a base path which per-signal paths are appended to. (#2433)
    • Basic metric controller updated to use sync.Map to avoid blocking calls (#2381)
    • The correctly sets the otel.status_code value to be a string of ERROR or OK instead of an integer code. (#2439, #2440)


    • Deprecated the "".WithMaxAttempts Option, use the new WithRetry Option instead. (#2425)
    • Deprecated the "".WithBackoff Option, use the new WithRetry Option instead. (#2425)


    • Remove the metric Processor's ability to convert cumulative to delta aggregation temporality. (#2350)
    • Remove the metric Bound Instruments interface and implementations. (#2399)
    • Remove the metric MinMaxSumCount kind aggregation and the corresponding OTLP export path. (#2423)
    • Metric SDK removes the "exact" aggregator for histogram instruments, as it performed a non-standard aggregation for OTLP export (creating repeated Gauge points) and worked its way into a number of confusing examples. (#2348)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Nov 12, 2021)


    • Metric SDK export.ExportKind, export.ExportKindSelector types have been renamed to aggregation.Temporality and aggregation.TemporalitySelector respectively to keep in line with current specification and protocol along with built-in selectors (e.g., aggregation.CumulativeTemporalitySelector, ...). (#2274)
    • The Metric Exporter interface now requires a TemporalitySelector method instead of an ExportKindSelector. (#2274)
    • Metrics API cleanup. The metric/sdkapi package has been created to relocate the API-to-SDK interface:
      • The following interface types simply moved from metric to metric/sdkapi: Descriptor, MeterImpl, InstrumentImpl, SyncImpl, BoundSyncImpl, AsyncImpl, AsyncRunner, AsyncSingleRunner, and AsyncBatchRunner
      • The following struct types moved and are replaced with type aliases, since they are exposed to the user: Observation, Measurement.
      • The No-op implementations of sync and async instruments are no longer exported, new functions sdkapi.NewNoopAsyncInstrument() and sdkapi.NewNoopSyncInstrument() are provided instead. (#2271)
    • Update the SDK BatchSpanProcessor to export all queued spans when ForceFlush is called. (#2080, #2335)


    • Add the "".WithGRPCConn option so the exporter can reuse an existing gRPC connection. (#2002)
    • Added a new schema module to help parse Schema Files in OTEP 0152 format. (#2267)
    • Added a new MapCarrier to the package to hold propagated coss-cutting concerns as a map[string]string held in memory. (#2334)
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Oct 27, 2021)


    • Add the "".WithGRPCConn option so the exporter can reuse an existing gRPC connection. (#2002)
    • Add the package. The package contains semantic conventions from the v1.7.0 version of the OpenTelemetry specification. (#2320)
    • Add the package. The package contains semantic conventions from the v1.6.1 version of the OpenTelemetry specification. (#2321)
    • Add the package. The package contains semantic conventions from the v1.5.0 version of the OpenTelemetry specification. (#2322)
      • When upgrading from the semconv/v1.4.0 package note the following name changes:
        • K8SReplicasetUIDKey -> K8SReplicaSetUIDKey
        • K8SReplicasetNameKey -> K8SReplicaSetNameKey
        • K8SStatefulsetUIDKey -> K8SStatefulSetUIDKey
        • k8SStatefulsetNameKey -> K8SStatefulSetNameKey
        • K8SDaemonsetUIDKey -> K8SDaemonSetUIDKey
        • K8SDaemonsetNameKey -> K8SDaemonSetNameKey


    • Links added to a span will be dropped by the SDK if they contain an invalid span context (#2275).


    • The "".HTTPServerAttributesFromHTTPRequest now correctly only sets the HTTP client IP attribute even if the connection was routed with proxies and there are multiple addresses in the X-Forwarded-For header. (#2282, #2284)
    • The "".NetAttributesFromHTTPRequest function correctly handles IPv6 addresses as IP addresses and sets the correct net peer IP instead of the net peer hostname attribute. (#2283, #2285)
    • The simple span processor shutdown method deterministically returns the exporter error status if it simultaneously finishes when the deadline is reached. (#2290, #2289)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Oct 1, 2021)

    1.0.1 - 2021-10-01


    • json stdout exporter no longer crashes due to concurrency bug. (#2265)

    Metrics 0.24.0 - 2021-10-01


    • NoopMeterProvider is now private and NewNoopMeterProvider must be used to obtain a noopMeterProvider. (#2237)
    • The Metric SDK Export() function takes a new two-level reader interface for iterating over results one instrumentation library at a time. (#2197)
      • The former "".CheckpointSet is renamed Reader.
      • The new interface is named "".InstrumentationLibraryReader.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Sep 20, 2021)

    This is the first stable release for the project. This release includes an API and SDK for the tracing signal that will comply with the stability guarantees defined by the projects versioning policy.


    • OTLP trace exporter now sets the SchemaURL field in the exported telemetry if the Tracer has WithSchemaURL option. (#2242)


    • Slice-valued attributes can correctly be used as map keys. (#2223)


    • Removed the "".WithSDKOptions function. (#2248)
    • Removed the deprecated package (#2234)
    • Removed the deprecated package (#2233)
    • Removed deprecated functions, types, and methods from package. Use the typed functions and methods added to the package instead. (#2235)
      • The Key.Array method is removed.
      • The Array function is removed.
      • The Any function is removed.
      • The ArrayValue function is removed.
      • The AsArray function is removed.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-RC3(Sep 3, 2021)

    1.0.0-RC3 - 2021-09-03


    • Added ErrorHandlerFunc to use a function as an "".ErrorHandler. (#2149)
    • Added "".WithStackTrace option to add a stack trace when using span.RecordError or when panic is handled in span.End. (#2163)
    • Added typed slice attribute types and functionality to the package to replace the existing array type and functions. (#2162)
      • BoolSlice, IntSlice, Int64Slice, Float64Slice, and StringSlice replace the use of the Array function in the package.
    • Added the example package. Included is an example application that computes Fibonacci numbers. (#2203)


    • Metric instruments have been renamed to match the (feature-frozen) metric API specification:
      • ValueRecorder becomes Histogram
      • ValueObserver becomes Gauge
      • SumObserver becomes CounterObserver
      • UpDownSumObserver becomes UpDownCounterObserver The API exported from this project is still considered experimental. (#2202)
    • Metric SDK/API implementation type InstrumentKind moves into sdkapi sub-package. (#2091)
    • The Metrics SDK export record no longer contains a Resource pointer, the SDK "".Exporter.Export() function for push-based exporters now takes a single Resource argument, pull-based exporters use "".Controller.Resource(). (#2120)
    • The JSON output of the is harmonized now such that the output is "plain" JSON objects after each other of the form { ... } { ... } { ... }. Earlier the JSON objects describing a span were wrapped in a slice for each Exporter.ExportSpans call, like [ { ... } ][ { ... } { ... } ]. Outputting JSON object directly after each other is consistent with JSON loggers, and a bit easier to parse and read. (#2196)
    • Update the NewTracerConfig, NewSpanStartConfig, NewSpanEndConfig, and NewEventConfig function in the package to return their respective configurations as structs instead of pointers to the struct. (#2212)


    • The package is deprecated. All functionality from this package now exists in the package. The functions from that package should be used instead. (#2166)
    • The "".Array function and the related ARRAY value type is deprecated. Use the typed *Slice functions and types added to the package instead. (#2162)
    • The "".Any function is deprecated. Use the typed functions instead. (#2181)
    • The package is deprecated. The "".SpanRecorder can be registered with the default SDK ( as a SpanProcessor and used as a replacement for this deprecated package. (#2188)


    • Removed metrics test package (#2105)


    • The fromEnv detector no longer throws an error when OTEL_RESOURCE_ATTRIBUTES environment variable is not set or empty. (#2138)
    • Setting the global ErrorHandler with "".SetErrorHandler multiple times is now supported. (#2160, #2140)
    • The "".Any function now supports int32 values. (#2169)
    • Multiple calls to "".WithResource() are handled correctly, and when no resources are provided "".Default() is used. (#2120)
    • The WithoutTimestamps option for the exporter causes the exporter to correctly ommit timestamps. (#2195)
    • Fixed typos in resources.go. (#2201)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-RC2(Jul 26, 2021)


    • Added WithOSDescription resource configuration option to set OS (Operating System) description resource attribute (os.description). (#1840)
    • Added WithOS resource configuration option to set all OS (Operating System) resource attributes at once. (#1840)
    • Added the WithRetry option to the package. This option is a replacement for the removed WithMaxAttempts and WithBackoff options. (#2095)
    • Added API LinkFromContext to return Link which encapsulates SpanContext from provided context and also encapsulates attributes. (#2115)
    • Added a new Link type under the SDK otel/sdk/trace package that counts the number of attributes that were dropped for surpassing the AttributePerLinkCountLimit configured in the Span's SpanLimits. This new type replaces the equal-named API Link type found in the otel/trace package for most usages within the SDK. For example, instances of this type are now returned by the Links() function of ReadOnlySpans provided in places like the OnEnd function of SpanProcessor implementations. (#2118)


    • The SpanModels function is now exported from the package to convert OpenTelemetry spans into Zipkin model spans. (#2027)
    • Rename the "".RetrySettings to RetryConfig. (#2095)
    • Rename the "".RetrySettings to RetryConfig. (#2095)


    • The TextMapCarrier and TextMapPropagator from the package and their associated creation functions (TextMapCarrier, NewTextMapPropagator) are deprecated. (#2114)
    • The Harness type from the package and its associated creation function, NewHarness are deprecated and will be removed in the next release. (#2123)
    • The TraceStateFromKeyValues function from the package is deprecated. Use the trace.ParseTraceState function instead. (#2122)


    • Removed the deprecated package (#2020)
    • Removed the deprecated package (#2020)
    • Removed the "".WithBuiltinDetectors function. The explicit With* options for every built-in detector should be used instead. (#2026 #2097)
    • Removed the WithMaxAttempts and WithBackoff options from the package. The retry logic of the package has been updated to match the otlptracegrpc package and accordingly a WithRetry option is added that should be used instead. (#2095)
    • Removed DroppedAttributeCount field from otel/trace.Link struct. (#2118)


    • When using WithNewRoot, don't use the parent context for making sampling decisions. (#2032)
    • oteltest.Tracer now creates a valid SpanContext when using WithNewRoot. (#2073)
    • OS type detector now sets the correct dragonflybsd value for DragonFly BSD. (#2092)
    • The OTel span status is correctly transformed into the OTLP status in the package. This fix will by default set the status to Unset if it is not explicitly set to Ok or Error. (#2099 #2102)
    • The Inject method for the "".TraceContext type no longer injects empty tracestate values. (#2108)
    Source code(tar.gz)
    Source code(zip)
  • metric/v0.22.0(Jul 19, 2021)

    [Experimental Metrics v0.22.0] - 2021-07-19


    • Adds HTTP support for OTLP metrics exporter. (#2022)


    • Removed the deprecated package (#2020)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-RC1(Jun 18, 2021)

    1.0.0-RC1 / 0.21.0 - 2021-06-18

    With this release we are introducing a split in module versions. The tracing API and SDK are entering the v1.0.0 Release Candidate phase with v1.0.0-RC1 while the experimental metrics API and SDK continue with v0.x releases at v0.21.0. Modules at major version 1 or greater will not depend on modules with major version 0.


    • Adds otlpgrpc.WithRetryoption for configuring the retry policy for transient errors on the otlp/gRPC exporter. (#1832)
      • The following status codes are defined as transient errors: | gRPC Status Code | Description | | ---------------- | ----------- | | 1 | Cancelled | | 4 | Deadline Exceeded | | 8 | Resource Exhausted | | 10 | Aborted | | 10 | Out of Range | | 14 | Unavailable | | 15 | Data Loss |
    • Added Status type to the package to represent the status of a span. (#1874)
    • Added SpanStub type and its associated functions to the package. This type can be used as a testing replacement for the SpanSnapshot that was removed from the package. (#1873)
    • Adds support for scheme in OTEL_EXPORTER_OTLP_ENDPOINT according to the spec. (#1886)
    • Adds trace.WithSchemaURL option for configuring the tracer with a Schema URL. (#1889)
    • Added an example of using OpenTelemetry Go as a trace context forwarder. (#1912)
    • ParseTraceState is added to the package. It can be used to decode a TraceState from a tracestate header string value. (#1937)
    • Added Len method to the TraceState type in the package. This method returns the number of list-members the TraceState holds. (#1937)
    • Creates package that defines a trace exporter that uses a otlptrace.Client to send data. Creates package implementing a gRPC otlptrace.Client and offers convenience functions, NewExportPipeline and InstallNewPipeline, to setup and install a otlptrace.Exporter in tracing .(#1922)
    • Added Baggage, Member, and Property types to the package along with their related functions. (#1967)
    • Added ContextWithBaggage, ContextWithoutBaggage, and FromContext functions to the package. These functions replace the Set, Value, ContextWithValue, ContextWithoutValue, and ContextWithEmpty functions from that package and directly work with the new Baggage type. (#1967)
    • The OTEL_SERVICE_NAME environment variable is the preferred source for, used by the environment resource detector if a service name is present both there and in OTEL_RESOURCE_ATTRIBUTES. (#1969)
    • Creates package implementing an HTTP otlptrace.Client and offers convenience functions, NewExportPipeline and InstallNewPipeline, to setup and install a otlptrace.Exporter in tracing. (#1963)
    • Changes to require a schema URL. The old function is still available as resource.NewSchemaless. This is a breaking change. (#1938)
    • Several builtin resource detectors now correctly populate the schema URL. (#1938)
    • Creates package that defines a metrics exporter that uses a otlpmetric.Client to send data.
    • Creates package implementing a gRPC otlpmetric.Client and offers convenience functions, New and NewUnstarted, to create an otlpmetric.Exporter.(#1991)
    • Added exporter. (#2005)
    • Added exporter. (#2005)
    • Added a TracerProvider() method to the "".Span interface. This can be used to obtain a TracerProvider from a given span that utilizes the same trace processing pipeline. (#2009)


    • Make NewSplitDriver from take variadic arguments instead of a SplitConfig item. NewSplitDriver now automatically implements an internal noopDriver for SplitConfig fields that are not initialized. (#1798)
    • resource.New() now creates a Resource without builtin detectors. Previous behavior is now achieved by using WithBuiltinDetectors Option. (#1810)
    • Move the Event type from the package to the package. (#1846)
    • CI builds validate against last two versions of Go, dropping 1.14 and adding 1.16. (#1865)
    • BatchSpanProcessor now report export failures when calling ForceFlush() method. (#1860)
    • Set.Encoded(Encoder) no longer caches the result of an encoding. (#1855)
    • Renamed CloudZoneKey to CloudAvailabilityZoneKey in Resource semantic conventions according to spec. (#1871)
    • The StatusCode and StatusMessage methods of the ReadOnlySpan interface and the Span produced by the package have been replaced with a single Status method. This method returns the status of a span using the new Status type. (#1874)
    • Updated ExportSpans method of theSpanExporter interface type to accept ReadOnlySpans instead of the removed SpanSnapshot. This brings the export interface into compliance with the specification in that it now accepts an explicitly immutable type instead of just an implied one. (#1873)
    • Unembed SpanContext in Link. (#1877)
    • Generate Semantic conventions from the specification YAML. (#1891)
    • Spans created by the global Tracer obtained from, prior to a functioning TracerProvider being set, now propagate the span context from their parent if one exists. (#1901)
    • The "".Tracer function now accepts tracer options. (#1902)
    • Move the package to (#1903)
    • Changed to conform to the Contributing guidelines (#1921)
    • Changed to conform to the Contributing guidelines. (#1921)
    • Changed span.End() now only accepts Options that are allowed at End(). (#1921)
    • Changed to conform to the Contributing guidelines. (#1921)
    • Changed to conform to the Contributing guidelines. (#1921)
    • Refactored option types according to the contribution style guide. (#1882)
    • Move the function to the package. This function is preserved for testing purposes where it may be useful to create a TraceState from attribute.KeyValues, but it is not intended for production use. The new ParseTraceState function should be used to create a TraceState. (#1931)
    • Updated MarshalJSON method of the type to marshal the type into the string representation of the TraceState. (#1931)
    • The TraceState.Delete method from the package no longer returns an error in addition to a TraceState. (#1931)
    • Updated Get method of the TraceState type from the package to accept a string instead of an attribute.Key type. (#1931)
    • Updated Insert method of the TraceState type from the package to accept a pair of strings instead of an attribute.KeyValue type. (#1931)
    • Updated Delete method of the TraceState type from the package to accept a string instead of an attribute.Key type. (#1931)
    • Renamed NewExporter to New in the package. (#1985)
    • Renamed NewExporter to New in the package. (#1985)
    • Renamed NewExporter to New in the package. (#1985)
    • Renamed NewExporter to New in the package. (#1985)
    • Renamed NewExporter to New in the package. (#1985)
    • Renamed NewUnstartedExporter to NewUnstarted in the package. (#1985)
    • The package has been moved to to allow for multiple telemetry schema versions to be used concurrently. (#1987)
    • Metrics test helpers in have been moved to (#1988)


    • The is deprecated, use instead. (#1993)
    • The is deprecated, use instead. (#1993)
    • The is deprecated, use instead. (#1993)


    • Removed resource.WithoutBuiltin(). Use resource.New(). (#1810)
    • Unexported types resource.FromEnv, resource.Host, and resource.TelemetrySDK, Use the corresponding With*() to use individually. (#1810)
    • Removed the Tracer and IsRecording method from the ReadOnlySpan in the The Tracer method is not a required to be included in this interface and given the mutable nature of the tracer that is associated with a span, this method is not appropriate. The IsRecording method returns if the span is recording or not. A read-only span value does not need to know if updates to it will be recorded or not. By definition, it cannot be updated so there is no point in communicating if an update is recorded. (#1873)
    • Removed the SpanSnapshot type from the package. The use of this type has been replaced with the use of the explicitly immutable ReadOnlySpan type. When a concrete representation of a read-only span is needed for testing, the newly added SpanStub in the package should be used. (#1873)
    • Removed the Tracer method from the Span interface in the package. Using the same tracer that created a span introduces the error where an instrumentation library's Tracer is used by other code instead of their own. The "".Tracer function or a TracerProvider should be used to acquire a library specific Tracer instead. (#1900)
      • The TracerProvider() method on the Span interface may also be used to obtain a TracerProvider using the same trace processing pipeline. (#2009)
    • The http.url attribute generated by HTTPClientAttributesFromHTTPRequest will no longer include username or password information. (#1919)
    • Removed IsEmpty method of the TraceState type in the package in favor of using the added TraceState.Len method. (#1931)
    • Removed Set, Value, ContextWithValue, ContextWithoutValue, and ContextWithEmpty functions in the package. Handling of baggage is now done using the added Baggage type and related context functions (ContextWithBaggage, ContextWithoutBaggage, and FromContext) in that package. (#1967)
    • The InstallNewPipeline and NewExportPipeline creation functions in all the exporters (prometheus, otlp, stdout, jaeger, and zipkin) have been removed. These functions were deemed premature attempts to provide convenience that did not achieve this aim. (#1985)
    • The exporter has been removed. Use instead. (#1990)
    • The exporter has been removed. Use or instead. (#2005)


    • Only report errors from the "".Environment function when they are not nil. (#1850, #1851)
    • The Shutdown method of the simple SpanProcessor in the package now honors the context deadline or cancellation. (#1616, #1856)
    • BatchSpanProcessor now drops span batches that failed to be exported. (#1860)
    • Use http://localhost:14268/api/traces as default Jaeger collector endpoint instead of http://localhost:14250. (#1898)
    • Allow trailing and leading whitespace in the parsing of a tracestate header. (#1931)
    • Add logic to determine if the channel is closed to fix Jaeger exporter test panic with close closed channel. (#1870, #1973)
    • Avoid transport security when OTLP endpoint is a Unix socket. (#2001)
    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Apr 23, 2021)


    • The OTLP exporter now has two new convenience functions, NewExportPipeline and InstallNewPipeline, setup and install the exporter in tracing and metrics pipelines. (#1373)
    • Adds semantic conventions for exceptions. (#1492)
    • Added Jaeger Environment variables: OTEL_EXPORTER_JAEGER_AGENT_HOST, OTEL_EXPORTER_JAEGER_AGENT_PORT These environment variables can be used to override Jaeger agent hostname and port (#1752)
    • Option ExportTimeout was added to batch span processor. (#1755)
    • trace.TraceFlags is now a defined type over byte and WithSampled(bool) TraceFlags and IsSampled() bool methods have been added to it. (#1770)
    • The Event and Link struct types from the package now include a DroppedAttributeCount field to record the number of attributes that were not recorded due to configured limits being reached. (#1771)
    • The Jaeger exporter now reports dropped attributes for a Span event in the exported log. (#1771)
    • Adds test to check BatchSpanProcessor ignores OnEnd and ForceFlush post Shutdown. (#1772)
    • Extract resource attributes from the OTEL_RESOURCE_ATTRIBUTES environment variable and merge them with the resource.Default resource as well as resources provided to the TracerProvider and metric Controller. (#1785)
    • Added WithOSType resource configuration option to set OS (Operating System) type resource attribute (os.type). (#1788)
    • Added WithProcess* resource configuration options to set Process resource attributes. (#1788)
      • process.executable.path
      • process.command_args
      • process.owner
      • process.runtime.version
      • process.runtime.description
    • Adds and k8s.node.uid attribute keys to the semconv package. (#1789)
    • Added support for configuring OTLP/HTTP and OTLP/gRPC Endpoints, TLS Certificates, Headers, Compression and Timeout via Environment Variables. (#1758, #1769 and #1811)
    • Adds otlpgrpc.WithTimeout option for configuring timeout to the otlp/gRPC exporter. (#1821)


    • The Span.IsRecording implementation from always returns false when not being sampled. (#1750)
    • The Jaeger exporter now correctly sets tags for the Span status code and message. This means it uses the correct tag keys ("otel.status_code", "otel.status_description") and does not set the status message as a tag unless it is set on the span. (#1761)
    • The Jaeger exporter now correctly records Span event's names using the "event" key for a tag. Additionally, this tag is overridden, as specified in the OTel specification, if the event contains an attribute with that key. (#1768)
    • Zipkin Exporter: Ensure mapping between OTel and Zipkin span data complies with the specification. (#1688)
    • Fixed typo for default service name in Jaeger Exporter. (#1797)
    • Fix flaky OTLP for the reconnnection of the client connection. (#1527, #1814)


    • Span RecordError now records an exception event to comply with the semantic convention specification. (#1492)
    • Jaeger exporter was updated to use thrift v0.14.1. (#1712)
    • Migrate from using internally built and maintained version of the OTLP to the one hosted at (#1713)
    • Migrate from using to to match (#1713)
    • The storage of a local or remote Span in a context.Context using its SpanContext is unified to store just the current Span. The Span's SpanContext can now self-identify as being remote or not. This means that "".ContextWithRemoteSpanContext will now overwrite any existing current Span, not just existing remote Spans, and make it the current Span in a context.Context. (#1731)
    • Improve OTLP/gRPC exporter connection errors. (#1737)
    • Information about a parent span context in a "".SpanSnapshot is unified in a new Parent field. The existing ParentSpanID and HasRemoteParent fields are removed in favor of this. (#1748)
    • The ParentContext field of the "".SamplingParameters is updated to hold a context.Context containing the parent span. This changes it to make SamplingParameters conform with the OpenTelemetry specification. (#1749)
    • Modify BatchSpanProcessor.ForceFlush to abort after timeout/cancellation. (#1757)
    • The DroppedAttributeCount field of the Span in the package now only represents the number of attributes dropped for the span itself. It no longer is a conglomerate of itself, events, and link attributes that have been dropped. (#1771)
    • Make ExportSpans in Jaeger Exporter honor context deadline. (#1773)
    • Modify Zipkin Exporter default service name, use default resouce's serviceName instead of empty. (#1777)
    • The package is merged into the package. (#1778)
    • The prometheus.InstallNewPipeline example is moved from comment to example test (#1796)
    • The convenience functions for the stdout exporter have been updated to return the TracerProvider implementation and enable the shutdown of the exporter. (#1800)
    • Replace the flush function returned from the Jaeger exporter's convenience creation functions (InstallNewPipeline and NewExportPipeline) with the TracerProvider implementation they create. This enables the caller to shutdown and flush using the related TracerProvider methods. (#1822)
    • Updated the Jaeger exporter to have a default enpoint, http://localhost:14250, for the collector. (#1824)
    • Changed the function WithCollectorEndpoint in the Jaeger exporter to no longer accept an endpoint as an argument. The endpoint can be passed with the CollectorEndpointOption using the WithEndpoint function or by setting the OTEL_EXPORTER_JAEGER_ENDPOINT environment variable value appropriately. (#1824)
    • The Jaeger exporter no longer batches exported spans itself, instead it relies on the SDK's BatchSpanProcessor for this functionality. (#1830)
    • The Jaeger exporter creation functions (NewRawExporter, NewExportPipeline, and InstallNewPipeline) no longer accept the removed Option type as a variadic argument. (#1830)


    • Removed Jaeger Environment variables: JAEGER_SERVICE_NAME, JAEGER_DISABLED, JAEGER_TAGS These environment variables will no longer be used to override values of the Jaeger exporter (#1752)
    • No longer set the links for a Span in that is configured to be a new root. This is unspecified behavior that the OpenTelemetry community plans to standardize in the future. To prevent backwards incompatible changes when it is specified, these links are removed. (#1726)
    • Setting error status while recording error with Span from oteltest package. (#1729)
    • The concept of a remote and local Span stored in a context is unified to just the current Span. Because of this "".RemoteSpanContextFromContext is removed as it is no longer needed. Instead, "".SpanContextFromContex can be used to return the current Span. If needed, that Span's SpanContext.IsRemote() can then be used to determine if it is remote or not. (#1731)
    • The HasRemoteParent field of the "".SamplingParameters is removed. This field is redundant to the information returned from the Remote method of the SpanContext held in the ParentContext field. (#1749)
    • The trace.FlagsDebug and trace.FlagsDeferred constants have been removed and will be localized to the B3 propagator. (#1770)
    • Remove Process configuration, WithProcessFromEnv and ProcessFromEnv, and type from the Jaeger exporter package. The information that could be configured in the Process struct should be configured in a Resource instead. (#1776, #1804)
    • Remove the WithDisabled option from the Jaeger exporter. To disable the exporter unregister it from the TracerProvider or use a no-operation TracerProvider. (#1806)
    • Removed the functions CollectorEndpointFromEnv and WithCollectorEndpointOptionFromEnv from the Jaeger exporter. These functions for retrieving specific environment variable values are redundant of other internal functions and are not intended for end user use. (#1824)
    • Removed the Jaeger exporter WithSDKOptions Option. This option was used to set SDK options for the exporter creation convenience functions. These functions are provided as a way to easily setup or install the exporter with what are deemed reasonable SDK settings for common use cases. If the SDK needs to be configured differently, the NewRawExporter function and direct setup of the SDK with the desired settings should be used. (#1825)
    • The WithBufferMaxCount and WithBatchMaxCount Options from the Jaeger exporter are removed. The exporter no longer batches exports, instead relying on the SDK's BatchSpanProcessor for this functionality. (#1830)
    • The Jaeger exporter Option type is removed. The type is no longer used by the exporter to configure anything. All of the previous configuration these options provided were duplicates of SDK configuration. They have all been removed in favor of using the SDK configuration and focuses the exporter configuration to be only about the endpoints it will send telemetry to. (#1830)

    Raw changes made between v0.19.0 and v0.20.0

    02d8bdd5d9163f32c48f4db23bf2e589f89f16c0 (HEAD -> main, tag: v0.20.0, tag: trace/v0.20.0, tag: sdk/v0.20.0, tag: sdk/metric/v0.20.0, tag: sdk/export/metric/v0.20.0, tag: oteltest/v0.20.0, tag: metric/v0.20.0, tag: exporters/trace/zipkin/v0.20.0, tag: exporters/trace/jaeger/v0.20.0, tag: exporters/stdout/v0.20.0, tag: exporters/otlp/v0.20.0, tag: exporters/metric/prometheus/v0.20.0, tag: example/zipkin/v0.20.0, tag: example/prometheus/v0.20.0, tag: example/prom-collector/v0.20.0, tag: example/otel-collector/v0.20.0, tag: example/opencensus/v0.20.0, tag: example/namedtracer/v0.20.0, tag: example/jaeger/v0.20.0, tag: bridge/opentracing/v0.20.0, tag: bridge/opencensus/v0.20.0, upstream/main, origin/main) Release v0.20.0 (#1837) aa66fe75e481c573676e4031bd4f31970e2ce450 OS and Process resource detectors (#1788) 7374d67961bc71103a3d60390d8eb6822cf03c1f Fix Links documents (#1835) 856f5b84014d4ae5e74e772e8f396fd1cbd31167 Add feature request issue template (#1831) 0fdc3d78a2cb9e125da7eae31afac7e8ca524e38 Remove bundler from Jaeger exporter (#1830) 738ef11e3108955b1a2619fd32b39869f2625919 Fix flaky global ErrorHandler delegation test (#1829) e43d9c00bcdf4fcd11d66bb1b16afac60dc0240b Update Default Value for Jaeger Exporter Endpoint (#1824) 0032bd6499c650801eb69fcb020e4177c80116b9 Fix default merging of resource attributes from environment variable (#1785) 96c5e4baacd0fe49020c557e597bfdda6db03d98 Add SpanProcessor example for Span annotation on start (#1733) 543c8144b9c7d4b5bc0dc57328a3bfe383f6d995 Remove the WithSDKOptions from the Jaeger exporter (#1825) 66389ad617a91a16a099e47fcaa74057f30f363d Update function docs in sdk.go (#1826) 70bc9eb391965ba22e4d9f938dc300f7e9fbc128 Adds support for timeout on the otlp/gRPC exporter (#1821) 081cc61d989e2201b0bfd9de314176839976ccad Update Jaeger exporter convenience functions (#1822) 1b9f16d3afdc5fc477f57c47b7578dea578c6e4b Remove the WithDisabled option from Jaeger exporter (#1806) 6867faa0969634c8cee953fa87a3248c6f932f1d Bump actions/cache from v2.1.4 to v2.1.5 (#1818) a2bf04dc367dbd2828423e629975935377ea7a65 Build context pipeline in Jaeger upload process (#1809) 2de86f23c3f93ac3b6eb9e448edd3a30842d331c Remove locking from Jaeger exporter shutdown/export (#1807) 4f9fec29da01e3d9963922ed0c0368efd0ca0d31 Add ExportSpans benchmark to Jaeger exporter (#1805) d9566abea935609972a44f0075cdc51f7c270b9b Fix OTLP testing flake: signal connection from mock collector (#1816) a2cecb6e80f6a0712187b080a97f8efb5a61082a add support for env var configuration to otlp/gRPC (#1811) d616df61f5d163589228c5ff3be4aa5415f5a884 (fix-1527) Fix flaky OTLP exporter reconnect test (#1814) b09df84a24b35cb5f287a501e31d9dec324be5a9 Changes stdout to expose the *sdktrace.TracerProvider (#1800) 04890608968c599b8b9626c5490374a05f64df35 Remove options field from Jaeger exporter (#1808) 6db20e008dc272efaa29bb87d5d8341ad7c06da0 Remove the abandoned Process struct in Jaeger exporter (#1804) 086abf342d8bb60c6fa2dfb68c4bf49a03c31cd2 docs: use test example to document prometheus.InstallNewPipeline (#1796) d0cea04b352a8e0ff0df3acd505c14ceae22d219 Bump from 0.43.0 to 0.44.0 in /exporters/trace/jaeger (#1792) 99c477feb834abb5121c978eb798e7dd3d36538e Fixed typo for default service name in Jaeger Exporter (#1797) 95fd8f50925ffa8992f0fc8a9f31d7b14705ef8f Bump from 1.36.1 to 1.37.0 in /exporters/otlp (#1791) 9b25164481857e6bf7c39eb41be4ef124d69606d Zipkin Exporter: Use default resouce's serviceName as default serivce name (#1777) (#1786) 4d141e475297f177340019314e345e8b5276e2a8 Add and k8s.node.uid to semconv (#1789) 5c99a34cd837d289dea7a230e8ab3d418a76cda7 Fix golint issue caused by incorrect comment (#1795) c5d006c07ab78e6b21690e86c859e5f6752d0086 Update Jaeger environment variables (#1752) 584328080a31963debf9e41e003937d6494934d3 add NewExportPipeline and InstallNewPipeline for otlp (#1373) 7d8e6bd781123cb6df6b035947df3c4558fe3fc3 Zipkin Exporter: Adjust span transformation to comply with the spec (#1688) 2817c09174dcc4772572bfa02daf0c52dd50a8d4 (ro-span) Merge sdk/export/trace into sdk/trace (#1778) c61e654cd492385ed602a4f5b9b37e1b890c74a7 Refactor prometheus exporter tests to match file headers as well (#1470) 23422c56df5578ae4f70f8bd5c0225dbad6be388 Remove process config for Jaeger exporter (#1776) 0d49b592ecafda5ba38b53c2d035d7072cb26e92 Add test to check bsp ignores OnEnd and ForceFlush post Shutdown (#1772) e9aaa04b8f88b0f8158bd27f72e57d33878f5bdd Record links/events attribute drops independently (#1771) 5bbfc22cbc5bdcb65eb5c354c264b33f9faa9d76 Make ExportSpans for Jaeger Exporter honor deadline (#1773) 0786fe3250ab13745ae3d7bb0a448ba0b8de0a2c (default-res) Add Bug report issue templates (#1775) 3c7facee73444f8deef39ba20afb99e13e2e2e75 Add ExportTimeout option to batch span processor (#1755) c6b92d5b20a1f4d6d2ed15f6f9d1d12b0b145fed Make TraceFlags spec-compliant (#1770) ee687ca5c850ca66ff30f2e30f8c401b17c5ddc9 Bump from 0.12.2 to 0.12.3 in /internal/tools (#1774) 52a24774daf69ca391bec9bf16f10d34d5e47bde add support for configuring tls certs via env var to otlp/HTTP (#1769) 35cfbc7e872bbaddadcd51bd0462d8ebf682a6e0 Update precedence of event name in Jaeger exporter (#1768) 33699d242d3b0823345488d8cfd5188781dfda5e Adds semantic conventions for exceptions (#1492) 928e3c38e6795e5fb40d1175ff18b8c7ad61f202 Modify ForceFlush to abort after timeout/cancellation (#1757) 3947cab4be663dbd14c7d78cadad0672262b715f Fix testCollectorEndpoint typo and add tag assertions in jaeger_test (#1753) ecc635dc1d76a53978d3655987e47fcb6096f4b3 add website docs (#1747) 07a8d195e21336a1f6e691d2c322c5c87e88567c Fix Jaeger span status reporting and unify tag keys (#1761) 4fa35c90921c2733a67ac58b9866f6de54f74caa add partial support for env var config to otlp/HTTP (#1758) bf180d0fd21fe95662781ecd9a0e835a08de8f0f improve OTLP/gRPC connection errors (#1737) d575865b1e1f5917c2d90360d94d81cec77ab0fc Fix span IsRecording when not sampling (#1750) 20c93b01ebe6ab0cb68c43eb1d2f10233db96f8b Update SamplingParameters (#1749) 97501a3fee7647a3a14b6d4429d814ffb17c2a67 Update SpanSnapshot to use parent SpanContext (#1748) 604b05cbcf5796c85794272456448c1d0d081547 Store current Span instead of local and remote SpanContext in context.Context (#1731) c61f4b6dfc0387726ab8f6192d62f5d1faa63026 Set @lizthegrey to emeritus status (#1745) b1342fec1ff5139191b568a32478ef45a06cf387 Bump in /internal/tools (#1743) 54e1bd19a0e2b817213fa89cddf5ca2cbe29758c Bump from 0.41.0 to 0.43.0 in /exporters/trace/jaeger (#1741) 4d25b6a27054c8f44ae02df55cea5f7834d720d0 Bump from 1.9.0 to 1.10.0 in /exporters/metric/prometheus (#1740) 0a47b66f95bc50316b7ca7b8009c5f38aaf853df Bump from 1.36.0 to 1.36.1 in /exporters/otlp (#1739) 26f006b806158548c01347f93f044f3e6d715a02 Reinstate @paivagustavo as an Approver (#1734) 382c7ced31a4a07b40f8f115834cab19935759ea Remove hasRemoteParent field from SDK span (#1728) 862a5a68a8a0186b12abc6c2ca42941ee15441b7 Remove setting error status while recording error with Span from oteltest package (#1729) 6defcfdf457ac642bc01c77e91aa8079de3b6682 Remove links on NewRoot spans (#1726) a9b2f85134dc918ff44969ff0b05fe3c5ac1a1f2 upgrade thrift to v0.14.1 in jaeger exporter (#1712) 5a6a854d50840470dbfa5d9e400eed27be7d957f Bump from 1.25.0 to 1.26.0 in /exporters/otlp (#1724) 234862136de0b172d86eb001ca195163e61b141b Migrate to using (#1713) 5d559b4007efd6214cdce1c5503837828be8e36a Remove makeSamplingDecision func (#1711) e24702daad7022ef7606f301859c2dfe3d71e1fa Update the TraceContext.Extract docs (#1720) 9d4eb1f6d39cf644ad2ff92064c4ff1793fac296 Update dates in for 2021 releases (#1723)

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Mar 19, 2021)


    • Added Marshaler config option to otlphttp to enable otlp over json or protobufs. (#1586)
    • A ForceFlush method to the "".TracerProvider to flush all registered SpanProcessors. (#1608)
    • Added WithSampler and WithSpanLimits to tracer provider. (#1633, #1702)
    • "".SpanContext now has a remote property, and IsRemote() predicate, that is true when the SpanContext has been extracted from remote context data. (#1701)
    • A Valid method to the "".KeyValue type. (#1703)


    • trace.SpanContext is now immutable and has no exported fields. (#1573)
      • trace.NewSpanContext() can be used in conjunction with the trace.SpanContextConfig struct to initialize a new SpanContext where all values are known.
    • Update the ForceFlush method signature to the "".SpanProcessor to accept a context.Context and return an error. (#1608)
    • Update the Shutdown method to the "".TracerProvider return an error on shutdown failure. (#1608)
    • The SimpleSpanProcessor will now shut down the enclosed SpanExporter and gracefully ignore subsequent calls to OnEnd after Shutdown is called. (#1612)
    • "".WithPusher is replaced with WithExporter to provide consistent naming across project. (#1656)
    • Added non-empty string check for trace Attribute keys. (#1659)
    • Add description to SpanStatus only when StatusCode is set to error. (#1662)
    • Jaeger exporter falls back to resource.Default's if the exported Span does not have one. (#1673)
    • Jaeger exporter populates Jaeger's Span Process from Resource. (#1673)
    • Renamed the LabelSet method of "".Resource to Set. (#1692)
    • Changed WithSDK to WithSDKOptions to accept variadic arguments of TracerProviderOption type in package. (#1693)
    • Changed WithSDK to WithSDKOptions to accept variadic arguments of TracerProviderOption type in package. (#1693)
    • "".NewWithAttributes will now drop any invalid attributes passed. (#1703)
    • "".StringDetector will now error if the produced attribute is invalid. (#1703)


    • Removed serviceName parameter from Zipkin exporter and uses resource instead. (#1549)
    • Removed WithConfig from tracer provider to avoid overriding configuration. (#1633)
    • Removed the exported SimpleSpanProcessor and BatchSpanProcessor structs. These are now returned as a SpanProcessor interface from their respective constructors. (#1638)
    • Removed WithRecord() from trace.SpanOption when creating a span. (#1660)
    • Removed setting status to Error while recording an error as a span event in RecordError. (#1663)
    • Removed jaeger.WithProcess configuration option. (#1673)
    • Removed ApplyConfig method from "".TracerProvider and the now unneeded Config struct. (#1693)


    • Jaeger Exporter: Ensure mapping between OTEL and Jaeger span data complies with the specification. (#1626)
    • SamplingResult.TraceState is correctly propagated to a newly created span's SpanContext. (#1655)
    • The otel-collector example now correctly flushes metric events prior to shutting down the exporter. (#1678)
    • Do not set span status message in SpanStatusFromHTTPStatusCode if it can be inferred from http.status_code. (#1681)
    • Synchronization issues in global trace delegate implementation. (#1686)
    • Reduced excess memory usage by global TracerProvider. (#1687)

    Raw changes made between v0.18.0 and v0.19.0

    2b4fa9681bd0c69574aaa879039382002b220204 (HEAD -> main, tag: v0.19.0, tag: trace/v0.19.0, tag: sdk/v0.19.0, tag: sdk/metric/v0.19.0, tag: sdk/export/metric/v0.19.0, tag: oteltest/v0.19.0, tag: metric/v0.19.0, tag: exporters/trace/zipkin/v0.19.0, tag: exporters/trace/jaeger/v0.19.0, tag: exporters/stdout/v0.19.0, tag: exporters/otlp/v0.19.0, tag: exporters/metric/prometheus/v0.19.0, tag: example/zipkin/v0.19.0, tag: example/prometheus/v0.19.0, tag: example/prom-collector/v0.19.0, tag: example/otel-collector/v0.19.0, tag: example/opencensus/v0.19.0, tag: example/namedtracer/v0.19.0, tag: example/jaeger/v0.19.0, tag: bridge/opentracing/v0.19.0, tag: bridge/opencensus/v0.19.0, upstream/main, origin/main) Release v0.19.0 (#1710) 4beb70416e1272c578edfe1d5f88a3a2236da178 sdk/trace: removing ApplyConfig and Config (#1693) 1d42be1601e2d9bbd1101780759520e3f3960a29 Rename WithDefaultSampler TracerProvider option to WithSampler and update docs (#1702) 860d5d86e7ace12bf2b2ca8e437d2d4fc68a6913 Add flag to determine whether SpanContext is remote (#1701) 0fe65e6bd2b3fad00289427e0bac1974086d4326 Comply with OpenTelemetry attributes specification (#1703) 888843519dae308f165d1d20c095bb6352baeb52 Bump from 0.40.0 to 0.41.0 in /exporters/trace/jaeger (#1700) 345f264a137ed7162c30d14dd4739b5b72f76537 (global-docs) breaking(zipkin): removes servicName from zipkin exporter. (#1697) 62cbf0f240112813105d7056506496b59740e0c2 Populate Jaeger's Span.Process from Resource (#1673) 28eaaa9a919d03227856d83e2149b85f78d57775 Add a test to prove the Tracer is safe for concurrent calls (#1665) 8b1be11a549eefb6efeda2f940cbda70b3c3d08d Rename resource pkg label vars and methods (#1692) a1539d44857a29ea43c9da9bc95e0229f79c2663 OpenCensus metric exporter bridge (#1444) 77aa218d4d8fa2ebda14a7a0b58db22fd20398b7 Fix issue #1490, apply same logic as in the SDK (#1687) 9d3416cc915ba4bfe0e7328da24bb6a3000549f9 Fix synchronization issues in global trace delegate implementation (#1686) 58f69f091e61db2ca7a8ca31d518c5de02411184 Span status from HTTP code: Do not set status message if it can be inferred (#1681) 9c305bde9c27bc2252f13ca21fc869918601b124 Flush metric events prior to shutdown in OTLP example (#1678) 66b1135af4afdd1740d1c0738b9e2c5e6fe4e937 Fix CHANGELOG (#1680) 90bd4ab50c6e85743f2b8f3a1768a5afceeb1fc0 Update employer information for maintainers (#1683) 368419133859dcd7a97a881ce57082d1c0a3fbfe Remove WithRecord() option from trace.SpanOption when starting a span (#1660) 65c7de206921411cc4220c107bcad893a12033c5 Remove trace prefix from NoOp src files. (#1679) e88a091a72e4cf4c3f3a6d6e4b440d757bd3ecac Make SpanContext Immutable (#1573) d75e268053a7a3fc19394cb48a98d22fd15eb36a Avoid overriding configuration of tracer provider (#1633) 2b4d5ac3293eee30536754a5d5efec5124433ded Bump in /internal/tools (#1671) 150b868d02c8b9844f3db446d91267ad4e75beb9 Bump from 0.5.4 to 0.5.5 (#1667) 76aa924e75b22f95bb189337fb9d46b64bc66c53 Fix the examples target info messaging (#1676) a3aa9fdab061197aae67ac4a2c57712cfe5ef38e Bump from 0.12.1 to 0.12.2 in /internal/tools (#1672) a5edd79e312675f0cccf75aa324495205c95fe73 Removed setting error status while recording err as span event (#1663) e9814758278b57ef5bd939aa6fcb6a1a10772db0 chore(zipkin): improves zipkin example to not to depend on timeouts. (#1566) 3dc91f2d76146ac6a08012b8c451cc00e59ef481 Add ForceFlush method to TracerProvider (#1608) bd0bba43b5a1edb1da059760462fa15d81ff7cd9 exporter: swap pusher for exporter (#1656) 569048591c2661808ebddbd953c41c6808289454 Update the SimpleSpanProcessor (#1612) a7f7abac654d0c3fc93732c7f47c2bef05976eb4 SpanStatus description set only when status code is set to Error (#1662) 05252f40d807999388813afb2802918a38cc0e8a Jaeger Exporter: Fix minor mapping discrepancies (#1626) 238e7c61ba9e5b2ca3f66f20a5db5711e062f36e Add non-empty string check for attribute keys (#1659) e9b9aca8a6dc8cd0b13ffea4f7a26186f4b316fd Add tests for propagation of Sampler Tracestate changes (#1655) 875a25835fcfcddd61e94d87b1a0b14db4d5a0e5 Add docs on when reviews should be cleared (#1556) 7153ef2dc294fbfebaafd355ab98050b4181ff1f Add HTTP/JSON to the otlp exporter (#1586) 62e2a0f766d001e48867866ba7293565b9caa0c0 Unexport the simple and batch SpanProcessors (#1638) 992837f195eacbd84f0596bfaa79470dba7408e5 Add TracerProvider tests to oteltest harness (#1607)

    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Mar 3, 2021)


    • Added resource.Default() for use with meter and tracer providers. (#1507)
    • AttributePerEventCountLimit and AttributePerLinkCountLimit for SpanLimits. (#1535)
    • Added Keys() method to propagation.TextMapCarrier and propagation.HeaderCarrier to adapt http.Header to this interface. (#1544)
    • Added code attributes to package. (#1558)
    • Compatibility testing suite in the CI system for the following systems. (#1567) | OS | Go Version | Architecture | | ------- | ---------- | ------------ | | Ubuntu | 1.15 | amd64 | | Ubuntu | 1.14 | amd64 | | Ubuntu | 1.15 | 386 | | Ubuntu | 1.14 | 386 | | MacOS | 1.15 | amd64 | | MacOS | 1.14 | amd64 | | Windows | 1.15 | amd64 | | Windows | 1.14 | amd64 | | Windows | 1.15 | 386 | | Windows | 1.14 | 386 |


    • Replaced interface oteltest.SpanRecorder with its existing implementation StandardSpanRecorder (#1542).
    • Default span limit values to 128. (#1535)
    • Rename MaxEventsPerSpan, MaxAttributesPerSpan and MaxLinksPerSpan to EventCountLimit, AttributeCountLimit and LinkCountLimit, and move these fields into SpanLimits. (#1535)
    • Renamed the otel/label package to otel/attribute. (#1541)
    • Vendor the Jaeger exporter's dependency on Apache Thrift. (#1551)
    • Parallelize the CI linting and testing. (#1567)
    • Stagger timestamps in exact aggregator tests. (#1569)
    • Changed all examples to use WithBatchTimeout(5 * time.Second) rather than WithBatchTimeout(5). (#1621)
    • Prevent end-users from implementing some interfaces (#1575)


    • Removed attempt to resample spans upon changing the span name with span.SetName(). (#1545)
    • The test-benchmark is no longer a dependency of the precommit make target. (#1567)
    • Removed the test-386 make target. This was replaced with a full compatibility testing suite (i.e. multi OS/arch) in the CI system. (#1567)


    • The sequential timing check of timestamps in the stdout exporter are now setup explicitly to be sequential (#1571). (#1572)
    • Windows build of Jaeger tests now compiles with OS specific functions (#1576). (#1577)
    • The sequential timing check of timestamps of are now setup explicitly to be sequential (#1578). (#1579)
    • Validate tracestate header keys with vedors according to the W3C TraceContext specification (#1475). (#1581)
    • The OTLP exporter includes related labels for translations of a GaugeArray (#1563). (#1570)

    Raw changes made between v0.17.0 and v0.18.0

    bb4c297eb36f6af082bfa1d3216d33bd90da05f0 Pre release v0.18.0 (#1635) 712c3dccf805f2397a4b15ce467e234c7b515c18 Fix makefile ci target and coverage test packages (#1634) 841d2a5885b37fc25fe77e72dca3b0f6bac945b2 Rename local var new to not collide with builtin (#1610) 13938ab5a867b7840c6c829b74a9ab39b828730e Update SpanProcessor docs (#1611) e25503a00edef6baf2b3deb1a5884d4501e08dcf Add compatibility tests to CI (#1567) 1519d959829b2fd7a7a1b9b904b57235eb54e114 Use reasonable interval in sdktrace.WithBatchTimeout (#1621) 7d4496e0fefc99cfa70b86a09e3f8af8eae537f6 Pass metric labels when transforming to gaugeArray (#1570) 6d4a5e0df334546987f7d0583e0e86cdf01f2e66 Bump from 1.35.0 to 1.36.0 in /exporters/otlp (#1619) a93393a0d754d3b16227fbfa9df4f37b07351028 Bump in /example/prom-collector (#1620) e499ca86b7ef54b42f6dd684ccbf73f226af10bd Fix validation for tracestate with vendor and add tests (#1581) 43886e52f38de640d5f7abf6d9622fc1483ce649 Make timestamps sequential in lastvalue agg check (#1579) 37688ef67616aa5a99e27fb03320fd0dc87e590e revent end-users from implementing some interfaces (#1575) 85e696d20b9a6fee781fd42f68fe1b447559dc5c Updating documentation with an working example for creating NewExporter (#1513) 562eb28b7169cd83959fdb7fe1dddec74ee44ea1 Unify the Added sections of the unreleased changes (#1580) c4cf1aff6bba39f4e0384f5223d33647f9973a77 Fix Windows build of Jaeger tests (#1577) 4a163beaa103fd57b4cf6e07dc19781ab2fda4a9 Fix stdout TestStdoutTimestamp failure with sleep (#1572) bd4701eb935b94b0cfa21f925410fcb13cc1e389 Stagger timestamps in exact aggregator tests (#1569) b94cd4b24917d0099eb0ddee6f9d6be0bddee469 add code attributes to semconv package (#1558) 78c06cef3537999b4692c9f88dfb91a6451337a0 Update docs from gitter to slack for communication (#1554) 1307c9116265619812781cf5b02898acabc1ef83 Remove vendor exclude from license-check (#1552) 5d2636e5bfa8538c8f36b8f11145d96351dbcd6b Bump in /internal/tools (#1565) d7aff47338ec7f6957a15262721da7fdfe5524ca Vendor Thrift dependency (#1551) 298c5a142f4e4eb9eb9f249ff4d2fdff63bbd702 Update span limits to conform with OpenTelemetry specification (#1535) ecf65d7968225482a4d50e4955d6bc826119b49c Rename otel/label -> otel/attribute (#1541) 1b5b66213656691e3528909fe39fa030eae15423 Remove resampling on span.SetName (#1545) 8da5299621bd6b2de185a1e06c93289a96b1af25 fix: grpc reconnection (#1521) 3bce9c97f800c12a791e78a1611991818f9b4db6 Add Keys() method to propagation.TextMapCarrier (#1544) 0b1a1c7237f3172586bb6332397997bf71e27de0 Make oteltest.SpanRecorder into a concrete type (#1542) 7d0e3e52b69b2ba62ef617719fba5c3ca2aea86b SDK span no modification after ended (#1543) 7de3b58ce9e893f0f1f8214d63329ac82d759327 Remove extra labels types (#1314) 73194e44dbe9ecb2ba68f80b9a687edc66ce4d2d Bump from 0.39.0 to 0.40.0 in /exporters/trace/jaeger (#1536) 8fae0a644ad30b2f45f0e30cdea2efd7c8654ccf Create resource.Default() with required attributes/default values (#1507)

    Source code(tar.gz)
    Source code(zip)
OpenTelemetry - CNCF
OpenTelemetry makes robust, portable telemetry a built-in feature of cloud-native software.
OpenTelemetry - CNCF
Terraform provider implementation for interacting with the Tailscale API.

Terraform Provider Tailscale This repository contains a Terraform provider implementation for interacting with the Tailscale API.

David Bond 0 Oct 3, 2022
A simple implementation to upload file to AWS S3

A simple implementation to upload file to AWS S3.

Leonardo Comelli 0 Nov 19, 2021
School POC of an AES implementation in an API/Client system

poc_aes_implement School POC of an AES implementation in an API/Client system How to use : Start the api with : poc-aes -api start Client commands : p

Thryn 0 Nov 29, 2021
A work-in-progress implementation of MobileMe.

mobileme A work-in-progress implementation of MobileMe. At the moment, authentication is assumed to be with the username someuser and password testing

Spotlight 2 May 28, 2022
An implementation of a simple RESTful API in Golang on AWS infrastructure.

go-api An implementation of a simple RESTful API in Golang on AWS infrastructure. Tech Stack Serverless framework Go language AWS API Gateway AWS Lamb

Amirmohsen 0 Dec 25, 2021
Unofficial golang implementation for the search API

go-pipl The unofficial golang wrapper for the API. Table of Contents Installation Documentation Examples & Tests Benchmarks Code Standards Us

Mr. Z 6 Nov 6, 2022
Unofficial golang implementation for the Preev API

go-preev The unofficial golang implementation for the API Table of Contents Installation Documentation Examples & Tests Benchmarks Code Stan

Mr. Z 7 Sep 13, 2022
Arweave-api - Arweave API implementation in golang

Arweave API Go implementation of the Arweave API Todo A list of endpoints that a

Joshua Lawson 1 Jan 16, 2022
ABAG - The implementation for the alternating trees problem specified in the task

ABAG - GO task This repo contains the implementation for the alternating trees p

Kene 0 Jan 6, 2022
Implementation of Technical Test - Article API

Technical Test on Article API Abstract For the technical test on an set of article API, this document outlines its requirements, and the design, devel

Spenser Kao 0 Feb 8, 2022
🔗 Unofficial golang implementation for the NOWNodes API

go-nownodes The unofficial golang implementation for the API Table of Contents Installation Documentation Examples & Tests Benchmarks Code

Mr. Z 2 Jan 30, 2022
Qfy - Self-hosted implementation of Synthetics - Monitoring checks to validate your service availability

qfy Self-hosted implementation of Synthetics - Monitoring checks to validate you

Milan Pavlik 1 Feb 23, 2022
OpenTelemetry log collection library

opentelemetry-log-collection Status This project was originally developed by observIQ under the name Stanza. It has been contributed to the OpenTeleme

OpenTelemetry - CNCF 90 Sep 15, 2022
A CLI tool that generates OpenTelemetry Collector binaries based on a manifest.

OpenTelemetry Collector builder This program generates a custom OpenTelemetry Collector binary based on a given configuration. TL;DR $ go get github.c

OpenTelemetry - CNCF 52 Sep 14, 2022
OpenTelemetry instrumentation for database/sql

otelsql It is an OpenTelemetry instrumentation for Golang database/sql, a port from

Sam Xie 127 Dec 28, 2022
Example instrumentation of Golang Application with OpenTelemetry with supported configurations to export to Sentry.

Sentry + Opentelemetry Go Example Requirements To run this example, you will need a kubernetes cluster. This example has been tried and tested on Mini

Uddeshya Singh 11 Oct 27, 2022
OpenTelemetry integration for Watermill

Watermill OpenTelemetry integration Bringing distributed tracing support to Watermill with OpenTelemetry.

Voi Technology AB 13 Sep 18, 2022
Tool for generating OpenTelemetry tracing decorators.

tracegen Tool for generating OpenTelemetry tracing decorators. Installation go get -u Usage tracegen generate

Marketplace Technologies 5 Apr 7, 2022
OpenTelemetry instrumentations for Go

OpenTelemetry instrumentations for Go Instrumentation Package Metrics Traces database/sql ✔️ ✔️ GORM ✔️ ✔️ sqlx ✔️ ✔️ logrus ✔️ Zap ✔️ Contributing To

Uptrace 139 Dec 26, 2022
Instrumentations of third-party libraries using opentelemetry-go library

OpenTelemetry Go Contributions About This reopsitory hosts instrumentations of the following OpenTelemetry libraries: confluentinc/confluent-kafka-go

eTF1 2 Nov 14, 2022