You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-09-16 09:26:25 +02:00
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>
This commit is contained in:
24
example/http/Dockerfile
Normal file
24
example/http/Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Copyright The OpenTelemetry Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
FROM golang:alpine AS base
|
||||||
|
COPY . /go/src/github.com/open-telemetry/opentelemetry-go/
|
||||||
|
WORKDIR /go/src/github.com/open-telemetry/opentelemetry-go/example/http/
|
||||||
|
|
||||||
|
FROM base AS example-http-server
|
||||||
|
RUN go install ./server/server.go
|
||||||
|
CMD ["/go/bin/server"]
|
||||||
|
|
||||||
|
FROM base AS example-http-client
|
||||||
|
RUN go install ./client/client.go
|
||||||
|
CMD ["/go/bin/client"]
|
24
example/http/README.md
Normal file
24
example/http/README.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# HTTP Client-Server Example
|
||||||
|
|
||||||
|
An HTTP client connects to an HTTP server. They both generate span information to `stdout`.
|
||||||
|
These instructions expect you have [docker-compose](https://docs.docker.com/compose/) installed.
|
||||||
|
|
||||||
|
Bring up the `http-server` and `http-client` services to run the example:
|
||||||
|
```sh
|
||||||
|
docker-compose up --detach http-server http-client
|
||||||
|
```
|
||||||
|
|
||||||
|
The `http-client` service sends just one HTTP request to `http-server` and then exits. View the span generated to `stdout` in the logs:
|
||||||
|
```sh
|
||||||
|
docker-compose logs http-client
|
||||||
|
```
|
||||||
|
|
||||||
|
View the span generated by `http-server` in the logs:
|
||||||
|
```sh
|
||||||
|
docker-compose logs http-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Shut down the services when you are finished with the example:
|
||||||
|
```sh
|
||||||
|
docker-compose down
|
||||||
|
```
|
@@ -16,6 +16,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@@ -51,6 +52,8 @@ func initTracer() {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
initTracer()
|
initTracer()
|
||||||
|
url := flag.String("server", "http://localhost:7777/hello", "server url")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
client := http.DefaultClient
|
client := http.DefaultClient
|
||||||
ctx := correlation.NewContext(context.Background(),
|
ctx := correlation.NewContext(context.Background(),
|
||||||
@@ -62,7 +65,7 @@ func main() {
|
|||||||
tr := global.Tracer("example/client")
|
tr := global.Tracer("example/client")
|
||||||
err := tr.WithSpan(ctx, "say hello",
|
err := tr.WithSpan(ctx, "say hello",
|
||||||
func(ctx context.Context) error {
|
func(ctx context.Context) error {
|
||||||
req, _ := http.NewRequest("GET", "http://localhost:7777/hello", nil)
|
req, _ := http.NewRequest("GET", *url, nil)
|
||||||
|
|
||||||
ctx, req = httptrace.W3C(ctx, req)
|
ctx, req = httptrace.W3C(ctx, req)
|
||||||
httptrace.Inject(ctx, req)
|
httptrace.Inject(ctx, req)
|
||||||
@@ -85,5 +88,5 @@ func main() {
|
|||||||
fmt.Printf("Response Received: %s\n\n\n", body)
|
fmt.Printf("Response Received: %s\n\n\n", body)
|
||||||
fmt.Printf("Waiting for few seconds to export spans ...\n\n")
|
fmt.Printf("Waiting for few seconds to export spans ...\n\n")
|
||||||
time.Sleep(10 * time.Second)
|
time.Sleep(10 * time.Second)
|
||||||
fmt.Printf("Inspect traces on stdout")
|
fmt.Printf("Inspect traces on stdout\n")
|
||||||
}
|
}
|
||||||
|
34
example/http/docker-compose.yml
Normal file
34
example/http/docker-compose.yml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Copyright The OpenTelemetry Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
http-server:
|
||||||
|
build:
|
||||||
|
dockerfile: $PWD/Dockerfile
|
||||||
|
context: ../..
|
||||||
|
target: example-http-server
|
||||||
|
networks:
|
||||||
|
- example
|
||||||
|
http-client:
|
||||||
|
build:
|
||||||
|
dockerfile: $PWD/Dockerfile
|
||||||
|
context: ../..
|
||||||
|
target: example-http-client
|
||||||
|
command: ["/go/bin/client", "-server", "http://http-server:7777/hello"]
|
||||||
|
networks:
|
||||||
|
- example
|
||||||
|
depends_on:
|
||||||
|
- http-server
|
||||||
|
networks:
|
||||||
|
example:
|
18
example/zipkin/Dockerfile
Normal file
18
example/zipkin/Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Copyright The OpenTelemetry Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
FROM golang:alpine
|
||||||
|
COPY . /go/src/github.com/open-telemetry/opentelemetry-go/
|
||||||
|
WORKDIR /go/src/github.com/open-telemetry/opentelemetry-go/example/zipkin/
|
||||||
|
RUN go install ./main.go
|
||||||
|
CMD ["/go/bin/main"]
|
@@ -1,16 +1,22 @@
|
|||||||
# Zipkin Exporter Example
|
# Zipkin Exporter Example
|
||||||
|
|
||||||
Sends spans to zipkin collector.
|
Send an example span to a [Zipkin](https://zipkin.io/) service.
|
||||||
|
These instructions expect you have [docker-compose](https://docs.docker.com/compose/) installed.
|
||||||
### Run collector
|
|
||||||
|
|
||||||
|
Bring up the `zipkin-collector` service and example `zipkin-client` service to send an example trace:
|
||||||
```sh
|
```sh
|
||||||
docker run -d -p 9411:9411 openzipkin/zipkin
|
docker-compose up --detach zipkin-collector zipkin-client
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run client
|
The `zipkin-client` service sends just one trace and exits. Retrieve the `traceId` generated by the `zipkin-client` service; should be the last line in the logs:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
go build .
|
docker-compose logs --tail=1 zipkin-client
|
||||||
./zipkin
|
```
|
||||||
|
|
||||||
|
With the `traceId` you can view the trace from the `zipkin-collector` service UI hosted on port `9411`, e.g. with `traceId` of `f5695ba3b2ed00ea583fa4fa0badbeef`:
|
||||||
|
http://localhost:9411/zipkin/traces/f5695ba3b2ed00ea583fa4fa0badbeef
|
||||||
|
|
||||||
|
Shut down the services when you are finished with the example:
|
||||||
|
```sh
|
||||||
|
docker-compose down
|
||||||
```
|
```
|
||||||
|
35
example/zipkin/docker-compose.yml
Normal file
35
example/zipkin/docker-compose.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Copyright The OpenTelemetry Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
zipkin-collector:
|
||||||
|
image: openzipkin/zipkin-slim:latest
|
||||||
|
ports:
|
||||||
|
- "9411:9411"
|
||||||
|
networks:
|
||||||
|
- example
|
||||||
|
zipkin-client:
|
||||||
|
build:
|
||||||
|
dockerfile: $PWD/Dockerfile
|
||||||
|
context: ../..
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
- "while ! nc -w 1 -z zipkin-collector 9411; do echo sleep for 1s waiting for zipkin-collector to become available; sleep 1; done && /go/bin/main -zipkin http://zipkin-collector:9411/api/v2/spans"
|
||||||
|
networks:
|
||||||
|
- example
|
||||||
|
depends_on:
|
||||||
|
- zipkin-collector
|
||||||
|
networks:
|
||||||
|
example:
|
@@ -18,6 +18,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
@@ -31,10 +32,10 @@ import (
|
|||||||
var logger = log.New(os.Stderr, "zipkin-example", log.Ldate|log.Ltime|log.Llongfile)
|
var logger = log.New(os.Stderr, "zipkin-example", log.Ldate|log.Ltime|log.Llongfile)
|
||||||
|
|
||||||
// initTracer creates a new trace provider instance and registers it as global trace provider.
|
// initTracer creates a new trace provider instance and registers it as global trace provider.
|
||||||
func initTracer() {
|
func initTracer(url string) {
|
||||||
// Create Zipkin Exporter
|
// Create Zipkin Exporter
|
||||||
exporter, err := zipkin.NewExporter(
|
exporter, err := zipkin.NewExporter(
|
||||||
"http://localhost:9411/api/v2/spans",
|
url,
|
||||||
"zipkin-example",
|
"zipkin-example",
|
||||||
zipkin.WithLogger(logger),
|
zipkin.WithLogger(logger),
|
||||||
)
|
)
|
||||||
@@ -59,7 +60,10 @@ func initTracer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
initTracer()
|
url := flag.String("zipkin", "http://localhost:9411/api/v2/spans", "zipkin url")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
initTracer(*url)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user