1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2024-12-16 10:19:23 +02:00
Commit Graph

1310 Commits

Author SHA1 Message Date
Joshua MacDonald
3008c1bf02
Pass Resources through the metrics export pipeline (#659) 2020-04-24 09:44:21 -07:00
Joshua MacDonald
cd1be0e698
Use the label.Set.Equivalent value instead of an encoding in the batcher (#658) 2020-04-24 09:32:49 -07:00
Andrew Hsu
6402598a1f
add Dockerfile and docker-compose.yml to run example code (#635)
* add optional server url arg to http client example

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add Dockerfile to build example http images

Multi-stage Dockerfile with targets for building example http server and
client.

  $ docker build --tag the-server --target example-http-server .
  $ docker build --tag the-client --target example-http-client .

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add docker-compose.yml file for running examples

This docker compose configuration file will help a new user to compile
and run the example code quickly. Uses the Dockerfile to build images
with compiled examples.

  $ docker-compose build http-server http-client
  $ docker-compose up http-server http-client

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add newline to last message of example http client

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add optional collector url arg to zipkin client example

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add Dockerfile target to build zipkin client

For building the example zipkin client:

  $ docker build --tag zipkin-client --target example-zipkin-client .

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add docker compose service to run zipkin examples

Services to run the zipkin client along with a zipkin collector:

  $ docker-compose build zipkin-client
  $ docker-compose up zipkin-collector zipkin-client

Since the zipkin collector takes a few seconds before it is ready to
receive traces, I added a simple retry loop to the client command.

The collector service exposes port 9411 so user can visit
http//localhost:9411/ to see the trace sent to the collector. Be sure to
search by the trace id logged by the client.

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* Update Dockerfile with AL2 declaration

As described in https://www.apache.org/licenses/LICENSE-2.0#apply

Co-Authored-By: Tyler Yahn <MrAlias@users.noreply.github.com>

* Update docker-compose.yml with AL2 declaration

As described in https://www.apache.org/licenses/LICENSE-2.0#apply

Co-Authored-By: Tyler Yahn <MrAlias@users.noreply.github.com>

* pass server url as flag in example http client

  $ ./client -h
  Usage of ./client:
    -server string
          server url (default "http://localhost:7777/hello")

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* pass zipkin url as flag in example zipkin client

  $ ./zipkin -h
  Usage of ./zipkin:
    -zipkin string
          zipkin url (default "http://localhost:9411/api/v2/spans")

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* move Dockerfile and docker-compose.yml into example dir

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add Dockerfile and docker-compose.yml for zipkin example

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* update zipkin example README.md

With instructions on how to use docker-compose to run the example.

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* add http example README.md

With instructions on how to use docker-compose to run the example.

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>

* Update example/http/Dockerfile WORKDIR

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

* Update example/http/Dockerfile RUN go install

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

* Update example/http/Dockerfile RUN go install

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

* Update example/zipkin/Dockerfile WORKDIR

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

* Update example/zipkin/Dockerfile RUN go install

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Krzesimir Nowak <qdlacz@gmail.com>
Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
2020-04-23 13:11:24 -07:00
Paul Reichelt
6de3dab6b6
Resolve #72 - gRPC Interceptor (#621)
* Move interceptor to plugin

* Add basic net.peer info

* Ensure that grpc status match span status

See: https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-rpc.md#status

* Set rpc.service attribute

* Add StreamClientInterceptor and StreamServerInterceptor

* Fix: golint errors

* Apply automated go.mod changes from make

* Implement suggestions to improve readability
2020-04-23 13:07:14 -07:00
Joshua MacDonald
0bb12d9b1b
New api/label package, common label set impl (#651)
* New label set API

* Checkpoint

* Remove label.Labels interface

* Fix trace

* Remove label storage

* Restore metric_test.go

* Tidy tests

* More comments

* More comments

* Same changes as 654

* Checkpoint

* Fix batch labels

* Avoid Resource.Attributes() where possible

* Update comments and restore order in resource.go

* From feedback

* From feedback

* Move iterator_test & feedback

* Strenghten the label.Set test

* Feedback on typos

* Fix the set test per @krnowak

* Nit
2020-04-23 12:10:58 -07:00
Joshua MacDonald
acb350b8f3
Support JSON marshal of Resources (#654)
* Support JSON marshal of Resources

* Add a test

* Another test

* Fix arch bug

* Fix other test
2020-04-22 14:32:58 -07:00
NiaoGe
d20fc722f2
Fix typo trace.Exporter to trace.SpanSyncer (#653)
Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
2020-04-21 20:34:53 -07:00
Milad
ddad4d45ae
trace exporter: using type names for return values (#648)
* trace exporter: using type names for return values

* Update jaeger.go

Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
2020-04-21 20:30:57 -07:00
Krzesimir Nowak
927d9155ae
Increase the visibility of the api/key package (#650)
* Point to the convenience functions in api/key package

This is to increase the visibility of the api/key package through the
api/core package, otherwise developers often tend to miss the api/key
package altogether and write `core.Key(name).TYPE(value)` and complain
at the verbosity of such a construction. The api/key package would
allow them to write `key.TYPE(name, value)`.

* Use the api/key package where applicable

This transforms all the uses of `core.Key(name).TYPE(value)` to
`key.TYPE(name, value)`. This also should help increasing the
visibility of the api/key package for developers reading the otel-go
code.

Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
2020-04-21 20:26:51 -07:00
Joshua MacDonald
395440db10
Checkpoint only after Update; Keep records in the sync.Map longer (#647)
* Add a test

* Benchmark

* Ensure records can persist across intervals

* Remove dead code

* Address feedback, refactor & eliminate race
2020-04-21 20:23:15 -07:00
Joshua MacDonald
e554562513
Do not cache reflect.ValueOf() in metrics Labels (#649)
* Benchmark label iterator

* Remove cachedValue, a minor optimization
2020-04-20 20:29:46 -07:00
Oleg Shatnyuk
cf7c4e5328
fix zipkin without local endpoint with service name (#644) 2020-04-18 23:02:29 -07:00
Shouri Piratla
669d4b3a6c
TraceID and SpanID implementations for Stringer Interface (#642)
* TraceID and SpanID implementations for Stringer Interface

* Hex encode while stringifying

* Modify format specifiers wherever SpanID is used

* comment changes

* Remove TraceIdString() and SpanIdString()

* Comments Fixes
2020-04-16 15:42:48 -07:00
Tyler Yahn
ebc245b388
Batch Metrics Exported From the OTLP Exporter (#626)
* Add check to sum transform for unknown NumberKind

* Initial batching

* Move CheckpointSet transform to internal package

* Add tests for the Exporter Export method

Check batching and general output exporter ResourceMetrics are correct.

* Check errors in tests

* Apply suggestions from code review

Co-Authored-By: Krzesimir Nowak <qdlacz@gmail.com>

* Use var instead of multiple calls for group IDs

* Fix otlp metric test reporting

Co-authored-by: Krzesimir Nowak <qdlacz@gmail.com>
2020-04-15 12:04:44 -07:00
Joshua MacDonald
a8f7b3247b
Remove WithKeys() option, defaultkeys batcher (#639) 2020-04-14 16:07:11 -07:00
Oncilla
bcb8b645ab
prometheus: add error wrapping (#631)
* prometheus: add error wrapping

This PR adds error wrapping to the prometheus exporter.
The added context should make it easier to follow the error path.

This is a follow-up to #622

* feedback
2020-04-13 09:48:20 -07:00
Steven E. Harris
8c949274ca
othttp: add RemoteAddrKey for including HTTP client address in top-level spans (#627)
* othttp: add RemoteAddrKey for HTTP client address

Include the requesting HTTP client's network address in each top-level
span emitted by othttp.NewHandler.

* Copyedit documentation for attribute keys
2020-04-09 08:28:19 -07:00
Tyler Yahn
0a9e861549
Update the OTLP exporter batching of traces (#623)
Instead of batching based on the Resource pointer which is not guaranteed
to uniquely identify common Resources, use the `String` method which is.

Renames the external test package to be identified as the integration
testing. This testing structure (the mock exporter) batches exported
resources transmitted from the resource. This is needed as there is no
guarantees that a batch will be exported in a single payload, therefore,
it is not an ideal place to add resource batch testing for the exporter
itself.

Add unit tests to ensure the Exporter is correctly batching spans by
resource.
2020-04-08 16:49:53 -07:00
Tyler Yahn
856aad92ef
Update OTLP SpanData transform (#614)
* Update OTLP SpanData transform

The ParentSpanId needs to be empty for root spans according to the OTLP
[docs](6c2a86ed2f/gen/go/trace/v1/trace.pb.go (L284-L286)).
This updates the SpanData transform function to not add the ParentSpanID
if it is not a valid span ID (which includes if it is the nil span ID
used for an unset ID).

Additionally, this adds a test to prevent regression.

* Simplify test to just check parent span ID transform

Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-07 15:14:23 -07:00
Tyler Yahn
8e97011ea8
Update Resource (#613)
* Update Resource

When looking at grouping telemetry in an exporter based on the Resource
it is ideal if a map can be make with the key being represented by a
Resource. However, given the Resource is not hashable, this is not
possible.

This add a `String` method that can be used as a map key during
grouping. Additionally, this means the Resource now implements the
`Stringer` interface providing human-readable info when prited.

The internal structure of the Resource is changed. A static slice
containing all key-values in a sorted order replaces the existing map.
Additionally a set of keys is added to accommodate lookup during
`Merge`. Also, the string representation is kept in an internal field so
as to save processing for the `String` method (all fields are assumed to
be static after creation).

The `Attributes` method now returns a sorted slice of the associated
key-values.

The `Merge` method has been updated to support the changed structure of
the Resource.

New tests are added to validate the `String` method.

* Update comment

* Change loop into returned append

* Update key-value less func

Keys are unique in this package, treat them that way.

* Remove unnecessary allocation on empty attributes

* Update `Merge` method

Remove incomplete sorting of merged slices. Instead use the `sort`
package.

Add tests to catch sorting failure identified.

* Apply suggestions from code review

Co-Authored-By: ET <evantorrie@users.noreply.github.com>

* Escape Resource string representation

To ensure uniqueness of the string representation, the key-value content
needs to be escaped.

* Switch to an eager evaluation for the `String` method

* Refactor `Merge` method

Leave optimization to the future and simplify the merge.

* Add AttributeIterator

Include a method for a user of the Resource to iterate over the related
attributes without needed to copy the attributes.

* Fix ineffectual

* Fix lint

* Add licenses

* keys -> keySet for Resource

Co-authored-by: ET <evantorrie@users.noreply.github.com>
Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-07 12:15:36 -07:00
Oncilla
6005d01854
prometheus: check return value from CheckpointSet.ForEach (#622)
This PR modifies prometheus.Collect to reflect the change introduced
by #557.

The `export{Counter,Histogram,LastValue,Summary}` methods now all return
an error instead of calling the error callback directly.
The callback is now only called on the returned error from `ForEach`.

fixes #563

Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-07 10:58:49 -07:00
Anthony Mirabella
c8ec530c84
Ensure spans created by httptrace client tracer reflect operation structure (#618)
* Ensure spans created by httptrace client tracer reflect operation structure

* Cleanup (clientTracer).start based on PR feedback

* Ensure a span is recorded even if end() is called before start()

* Ensure start attributes for spans started by (clientTracer).end() are recorded

Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-07 09:22:50 -07:00
Marwan Sulaiman
6489b07bf5
othttp: add WithSpanFormatter option (#617)
* othttp: add WithSpanFormatter option

* plugin/othttp: add span formatter test

* remove typo

* preserve operation && change option name

* nil check

* fix comment typo

Co-Authored-By: Rahul Patel <rghetia@yahoo.com>

* add default formatter test case

Co-authored-by: Rahul Patel <rghetia@yahoo.com>
2020-04-06 08:37:25 -07:00
ET
367635b740
Create a new recorder rather than reuse one for same labels (#610)
Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-02 16:51:37 -07:00
Andrew Hsu
0f771bba67
added readme section to point to contrib repo (#612)
Signed-off-by: Andrew Hsu <xuzuan@gmail.com>
2020-04-02 10:58:09 -07:00
Owais Lone
446727b90d
Updated default port for OTLP exporter (#611)
OpenCensus used `55678` as the default. OTLP used `55680`. This commit fixes the incorrect default port specified for the OTLP exporter.
2020-04-02 10:04:57 -07:00
Oncilla
8ef02a61aa
prometheus: add histogram support to exporter (#601)
This PR adds histogram support to the prometheus exporter.

- Adds a new aggregator selector that returns a histogram for `MeasureKind`.
  The selector can be constructed using `simple.NewWithHistogramMeasure`
- Adds support for histogram aggregators in prometheus collect method.

With this PR, the default selector is changed to use histograms.

In order to support the prometheus histogram, the `aggregator.Histogram`
interface is extended with the `Sum` method.

fixes #487

Co-authored-by: Rahul Patel <rahulpa@google.com>
2020-04-01 14:36:37 -07:00
Rahul Patel
857e80c270
Prepare for releasing v0.4.2 (#608) 2020-03-31 12:57:37 -07:00
Rahul Patel
c85f46389f
fix pre_release.sh to update version in sdk/opentelemetry.go (#607) 2020-03-31 12:02:56 -07:00
Bogdan Drutu
1f6ffa9ed7
Fix time conversion from internal to otlp (#606)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
2020-03-31 10:32:01 -07:00
Liz Fong-Jones
02b6be15e0
Pre release v0.4.1 (#605)
* fix release script for ubuntu

* Prepare for releasing v0.4.1
2020-03-31 13:02:15 -04:00
Rahul Patel
af0514b085
update tag.sh to create signed tags. (#604)
* update tag.sh to create signed tags.

* rm tag_latest_modulesh.sh
2020-03-30 20:53:10 -07:00
Rahul Patel
57d5f55600
Prepare for releasing v0.4.0 (#603)
* Prepare for releasing v0.4.0

* update README.

* remove target date for released features.
2020-03-30 14:33:27 -07:00
Rahul Patel
f474c349ae
Script to verify example after new release. (#579)
* verify example.

* fix review comments.

* fix tools/go.*

* remove leftover exit.
2020-03-30 13:10:18 -07:00
Andrew Hsu
5d346a4190
update godoc.org links to pkg.go.dev (#602)
Banner at the top of godoc.org pages are already asking users to
redirect to pkg.go.dev as mentioned in blog post
https://blog.golang.org/pkg.go.dev-2020

Signed-off-by: Andrew Hsu <xuzuan@gmail.com>
2020-03-30 15:40:38 -04:00
Joshua MacDonald
1e8e72b530
Process the queue until no data but respect max batch size (#599) 2020-03-27 16:21:20 -07:00
Joshua MacDonald
e8546e3bc5
Remove Labelset (#595)
* Remove LabelSet frmo api/metric

* SDK tests pass

* Restore benchmarks

* All tests pass

* Remove all mentions of LabelSet

* Test RecordBatch

* Batch test

* Improves benchmark (some)

* Move the benchmark to match HEAD

* Align labels for GOARCH=386

* Add alignment test

* Disable the stress test fo GOARCH=386

* Fix bug

* Move atomic fields into their own file

* Add a TODO

* Comments

* Remove metric.Labels(...)

* FTB

Co-authored-by: Liz Fong-Jones <lizf@honeycomb.io>
2020-03-27 14:06:48 -07:00
Tyler Yahn
e7a9ba1e2e
Remove unneeded allocation on empty labels (#597)
Co-authored-by: Liz Fong-Jones <lizf@honeycomb.io>
2020-03-25 20:17:43 -07:00
ET
e458809c41
Build both go-1.13 and go-1.14 in circleci (#569)
This PR changes the circleci build config to build the project in both go-1.13 and go-1.14 versions.

Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
Co-authored-by: Liz Fong-Jones <lizf@honeycomb.io>
2020-03-25 19:47:29 -04:00
Tyler Yahn
c97b4f726c
Update project License headers and checking (#596)
Update license header to standard format for source files missed prior.

Add license header to new source files.

Add Makefile check to test all `*.go` and `*.sh` files have a copyright
notice (or comment about them being auto-generated) within the first few
lines.
2020-03-25 14:47:17 -07:00
Tyler Yahn
c9dcc1be28
Move span transforms of the OTLP exporter to internal (#593)
* Move span transforms of the OTLP exporter to internal

Breakup and move functionality of the `transform_spans.go` file into
appropriate files in the `internal/transform` sub-package. This is in
preparation of using some of the overlapping functionality to implement
Resource support in the metric side of the exporter.

Adds more specific unit tests for some of the functionality transferred.
The tests removed used the exporter as a processing engine and the
replacement tests do not do this. The test found in the `oltp_test.go`
seem to comprehensively cover this type of test.

Include Link `Name` in the exporter span link and adds a test to check
for this.

Resolves #527

* Apply suggestions from code review

Co-Authored-By: Rahul Patel <rghetia@yahoo.com>

* Fix SpanData doc

* Consolidate span comparison

Co-authored-by: Rahul Patel <rghetia@yahoo.com>
Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
2020-03-25 09:04:31 -07:00
Joshua MacDonald
cfe74cf91f
Add a RecordBatch benchmark (#594) 2020-03-25 08:57:40 -07:00
Joshua MacDonald
4c69dd3234
Remove dogstatsd and statsd support (#591) 2020-03-24 11:00:59 -07:00
Joshua MacDonald
06f833e2ae
Unique instrument checking (#580)
* Add skeleton uniqueness checker

* Fix the build w/ new code in place

* Add sync tests

* More test

* Implement global uniqueness checking

* Set the library name

* Ensure ordered global initialization

* Use proper require statement for errors

* Comment

* Apply feedback fixes

* Comment and rename from feedback
2020-03-24 10:54:08 -07:00
Krzesimir Nowak
dff6265dc5
Pre-release script fixes (#592)
* Make pre_release.sh script work with GNU

The `-i` sed flag is for doing in-place updates of the file. On some
systems it requires a parameter, on other (GNU) the parameter is
optional, but should be "glued" to the flag (`-i.bak` for example).
That's is problematic, so just emulate the in-place updates with
copies and removals.

* Update the version string in sdk with the pre-release script

This was a missing step, which is why we still have a version string
"0.2.3" while in reality it should be "0.3.0". Hopefully it will be
something to fix in "0.3.1" or what the next release version will be.

* Ensure clean git state when doing a release

The script does `git add .` which adds everything in the tree, even
the untracked files. Make sure that there are none of those.
2020-03-24 10:43:26 -07:00
Krzesimir Nowak
d648712cf2
Kick label encoder out of sdk (#574)
* Temporarily opt-out export.Labels from label encoding stuff

* Stop passing label encoding stuff to export.Labels

* Drop label encoding stuff from SDK

* Dogstatd exporter does not need to implement label exporter anymore

* more dogstatd exporter fixes

* export labels get back to encoding stuff

in a lame way, but improvements are coming in following commits

* Get encoded labels through export.Labels

* make SDK to provide its own implementation of export.Labels

* drop dead code

* add noop label exporter

* make export simple labels immutable

* Move the default label encoder to export package

* Simplify the simple export labels a bit

* Reserve some label exporter IDs

* Document and shuffle the code a bit

* Prepare for bring the iterator benchmark test back

We can install a callback to the Batcher's process function - this is
the place where we can access the labels, and thus test the label
iterator.

* Bring back the iterator benchmarks

* Simplifications and docs

* Fix copyright to be consistent with the rest

* Fix typo

* Put reserved label encoder IDs into constants

We get fewer comments about magic numbers that way.

* Fix the label encoder as label exporter thinko
2020-03-24 09:30:12 -07:00
Rahul Patel
6f881b4400
update to proto v0.3.0 (#588) 2020-03-24 08:45:07 -07:00
Tyler Yahn
a485d0ec64
Update License header for all source files (#586)
* Update License header for all source files

- Add Apache 2.0 header to source files that did not have one.
- Update all existing headers dated to 2019 to be 2020
- Remove comma from License header to comply with the Apache 2.0
  guidelines.

* Update Copyright notice

Use the standard Copyright notices outlined by the
[CNCF](https://github.com/cncf/foundation/blob/master/copyright-notices.md#copyright-notices)
2020-03-23 22:41:10 -07:00
Krzesimir Nowak
c16f56ee61
Fix missing return in mock span (#582)
This fix avoids a nil pointer dereference.
2020-03-23 09:59:18 -07:00
Rahul Patel
a1c243965e
Prepare for releasing v0.3.0 (#578) 2020-03-21 14:06:39 -07:00