Slide 1

Slide 1 text

O en el me ry s es w y h w o ns ru en y ur C CD ip li e L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 2

Slide 2 text

P pe in L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 3

Slide 3 text

D st ib te T ac ng n 30 S co ds 4 A span m s i r a s 4 A trace c i s L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 3

Slide 4

Slide 4 text

{ "name": "build abtris/www.prskavec.net-Build_index-136-1", "context": { "trace_id": "abtris/www.prskavec.net-Build_index-136-1", "span_id": "abtris/www.prskavec.net-Build_index-136-1" }, "start_time": "2022-04-29T18:52:58.114201Z", "end_time": "2022-04-29T18:52:58.114687Z", "attributes": { "ci.host": "hostname", "github.repository": "github.com/abtris/www.prskavec.net", "github.run_id": "6285578193" }, "events": [ { "name": "Hello Cloud Native!", "timestamp": "2022-04-29T18:52:58.114561Z", "attributes": { "event_attributes": 1 } } ] } L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 4

Slide 5

Slide 5 text

A to at c s an al ns ru en at on 1. A i i e n w o d ’t v k n c u a t d n t r d . 2. M i e n, w o c t r t c g t n m e u h t n m o . 4 O e i n 4 A -i e n - s e .N , J , J , P , P , d m L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 5

Slide 6

Slide 6 text

T ol ng or ns ru en at on I 4 T 4 H m b e 4 C a G A W o O e D y P e P a t H m - g e o t a t i t 4 E -l e C 4 J O e p 4 o -d -v L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 6

Slide 7

Slide 7 text

T ol ng or D 4 K 4 M N 8 D e O B 4 I o d t A , F , G , k , e . p y : 4 A e A -A R m (O M ) 4 T s f d e (O T ) 4 T d e o i c (t a s ) 4 T s L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 7

Slide 8

Slide 8 text

T ac L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 8

Slide 9

Slide 9 text

T ac b A dy av es h ://g .c /P m/T / 4 s o G g, P l 4 r n a i s T : s r l , b b e w L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 9

Slide 10

Slide 10 text

U ag 1. s a t export TRACEPARENT="$(trace start "some-name") 2. s g : group=$(trace group start "some-name") 3. r p e i a g : trace task "${group}" -- some command here 4. n h g trace group finish "${group}" 5. n h t trace finish L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 11

Slide 11 text

C n g ra io export OTEL_EXPORTER_OTLP_ENDPOINT=api.honeycomb.io:443 export OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=your-api-key" L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 12

Slide 12 text

H ne co b - b il ev nt L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 13

Slide 13 text

... jobs: build: runs-on: ubuntu-latest steps: - uses: honeycombio/gha-buildevents@v2 with: apikey: ${{ secrets.BUILDEVENT_APIKEY }} dataset: gha-buildevents_integration status: ${{ job.status }} - name: Check out repo uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version-file: 'go.mod' - run: |- STEP_ID=setup-go STEP_START=$(date +%s) go version buildevents step $TRACE_ID $STEP_ID $STEP_START $STEP_ID ... 4 G l - b .y L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 14

Slide 14 text

L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 15

Slide 15 text

T ac in b il s ep builtevents step $TRACE_ID $STEP_ID $STEP_START $STEP_NAME 4 $TRACE_ID - e c h c a h l w o c . i v e a i e h H m g -b e A . 4 $STEP_ID - e a u i e o c s . I ’s s a s , u a o h r c a s , i ’s s s n s i e m v e. 4 $STEP_START - A t m h f e m (s s 1 -1-1 U ). e b e c t h t d n c s . o e s i e m v e i i a r c e s h o a h e c e . 4 $STEP_NAME - A h -r e m o h s . i m l e e d i h t e e q g u t d . I ’s p e s h m v STEP_ID, h I e a h -r e w . L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 16

Slide 16 text

I cr as ng ra ul ri y n ou b il s ep buildevents cmd $TRACE_ID $STEP_ID $CMD_NAME -- $CMD 4 $TRACE_ID n $STEP_ID` r u e . b t h -r e n a u i e . 4 $STEP_NAME s u $CMD_NAME. m n h m e t o 4 $CMD a a w d n c s n l c e . B d , h c l e d i /bin/bash -c. 4 f e o h m L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 17

Slide 17 text

C pt ri g ve ts ro b il s ha f il 4 b d e a i d 't o t 4 d i h b e o h o b e c w c g . 4 F , h d b r G A o h r n w o f . - id: "Honeycomb: Finalize pact-credit-score" if: always() run: buildevents step $TRACE_ID $STEP_ID $STEP_START $STEP_ID L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 18

Slide 18 text

4 I h e a f b s , i "a " s l u e n s , e t a r s u a p s f . T r , o n d n r c w c n o l n a e e t H m e h d n o a r . 4 T a t , h f n d l a u h n s , u u h e c l n h a h r t r e a u t c i - id: "Honeycomb: Finalize pact-credit-score" if: always() env: OUTCOME: ${{ steps.pact-credit-score.outcome }} run: | if echo $OUTCOME | grep -wq -e success -e failure; then buildevents step $TRACE_ID $STEP_ID $STEP_START $STEP_ID fi L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 19

Slide 19 text

D h f n c h b n c s u w o : 4 M c i i b e e t w n a s . 4 E n a t c p s b e u i : always(). 4 U h o h w e c o n a n s . 4 A v e h s b s $GITHUB_ENV. L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 1

Slide 20

Slide 20 text

- id: build-special-membership run: | echo "STEP_ID=build_special-membership" >> $GITHUB_ENV echo "STEP_START=$(date +%s)" >> $GITHUB_ENV source $GITHUB_ENV # build buildevents cmd $TRACE_ID $STEP_ID 'build' -- \ mvn clean verify -pl special-membership-service -Pcode-coverage -Pstatic-code-analysis - name: "Honeycomb: Finalize build-special-membership" if: always() env: OUTCOME: ${{ steps.build-special-membership.outcome }} run: | if echo $OUTCOME | grep -wq -e success -e failure; then buildevents step $TRACE_ID $STEP_ID $STEP_START $STEP_ID fi L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 21

Slide 21 text

O EL LI L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 22

Slide 22 text

O EL LI 4 e l d m u otel-cli server tui otel-desktop-viewer 4 s m e v (H m , L e , E ) export LIGHTSTEP_TOKEN= # Lightstep API key (otlp/1 in the yaml) export HONEYCOMB_TEAM= # Honeycomb API key (otlp/2 in the yaml) export HONEYCOMB_DATASET=playground # Honeycomb dataset export ELASTIC_TOKEN= # Elastic token for the APM server. 4 r a p i a s 4 p t c i e o a c c c s 4 f a d c o a s a a h b u , n d e i , n c l u s L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 23

Slide 23 text

S mp e xa pl otel-desktop-viewer # configure otel-cli to send to our desktop viewer endpoint export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # use otel-cli to generate spans! otel-cli exec --service my-service --name "curl blog" curl https://www.prskavec.net L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 24

Slide 24 text

L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 25

Slide 25 text

I st um nt ng y ip li e n ag er L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 26

Slide 26 text

O EL et p n ou c de import ( ... "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/exporters/otlp/otlptrace" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" ... ) L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 27

Slide 27 text

const ( instrumentationName = "github.com/abtris/dagger-tutorial" instrumentationVersion = "0.1.0" ) var ( tracer = otel.GetTracerProvider().Tracer( instrumentationName, trace.WithInstrumentationVersion(instrumentationVersion), trace.WithSchemaURL(semconv.SchemaURL), ) sc trace.SpanContext ) L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 28

Slide 28 text

ctx := context.Background() opts := otlptracehttp.WithInsecure() client := otlptracehttp.NewClient(opts) exporter, err := otlptrace.New(ctx, client) if err != nil { fmt.Errorf("creating OTLP trace exporter: %w", err) } tracerProvider := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), sdktrace.WithResource(resource.Default()), ) otel.SetTracerProvider(tracerProvider) // Handle shutdown properly so nothing leaks. defer func() { _ = tracerProvider.Shutdown(ctx) }() L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 29

Slide 29 text

M nu l ns ru en at on L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 2

Slide 30

Slide 30 text

4 I span o a d e , a t , e func build(ctx context.Context, repoUrl string) error { ctx, span = tracer.Start(ctx, "initDagger") span.AddEvent("start init dagger") span.SetAttributes(attribute.Bool("cache", true)) client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout)) if err != nil { span.SetStatus(codes.Error, err.Error()) span.RecordError(err) return err 4 d 't f c h a span.End() b defer span.End() L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 3

Slide 31

Slide 31 text

D mo 4 s l v o t export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318" export OTEL_TRACES_EXPORTER="otlp" export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf" otel-desktop-viewer 4 s c L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 3

Slide 32

Slide 32 text

Q es io s? F ll w e n @a tr s@h ch de m.i L v P c, r S (@a @h r .i ) - C N #5, 2 . e 2 3