# Quick start

> Setup and collect telemetry in minutes!

---

<!-- markdownlint-disable ol-prefix blanks-around-fences -->

The OpenTelemetry Collector receives [traces](/docs/concepts/signals/traces/),
[metrics](/docs/concepts/signals/metrics/), and
[logs](/docs/concepts/signals/logs/), processes the telemetry, and exports it to
a wide variety of observability backends using its components. For a conceptual
overview of the Collector, see [Collector](/docs/collector).

You are going to learn to do the following in less than five minutes:

- Set up and run the OpenTelemetry Collector.
- Send telemetry and see it processed by the Collector.

## Prerequisites

Make sure that your developer environment has the following. This page assumes
that you're using `bash`. Adapt configuration and commands as necessary for your
preferred shell.

- [Docker](https://www.docker.com/) or any compatible containers' runtime.
- [Go](https://go.dev/) 1.20 or higher
- [`GOBIN` environment variable][gobin] is set; if unset, initialize it
  appropriately, for example[^1]:
  ```sh
  export GOBIN=${GOBIN:-$(go env GOPATH)/bin}
  ```

[^1]:
    For more information, see
    [Your first program](https://go.dev/doc/code#Command).

## Set up the environment

1. Pull in the OpenTelemetry Collector core Docker image:

   ```sh
   docker pull otel/opentelemetry-collector:0.149.0
   ```

2. Install the [telemetrygen][] utility:

   ```sh
   go install github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen@latest
   ```

   This utility can simulate a client generating [traces][], [metrics][], and
   [logs][].

## Generate and collect telemetry

3. Launch the Collector, listening on ports 4317 (for OTLP gRPC), 4318 (for OTLP
   HTTP) and 55679 (for ZPages):

   ```sh
   docker run \
     -p 127.0.0.1:4317:4317 \
     -p 127.0.0.1:4318:4318 \
     -p 127.0.0.1:55679:55679 \
     otel/opentelemetry-collector:0.149.0 \
     2>&1 | tee collector-output.txt # Optionally tee output for easier search later
   ```

4. In a separate terminal window, generate a few sample traces:

   ```sh
   $GOBIN/telemetrygen traces --otlp-insecure --traces 3
   ```

   Among the output generated by the utility, you should see a confirmation that
   traces were generated:

   ```text
   2024-01-16T14:33:15.692-0500  INFO  traces/worker.go:99  traces generated  {"worker": 0, "traces": 3}
   2024-01-16T14:33:15.692-0500  INFO  traces/traces.go:58  stop the batch span processor
   ```

   For an easier time seeing relevant output you can filter it:

   ```sh
   $GOBIN/telemetrygen traces --otlp-insecure \
     --traces 3 2>&1 | grep -E 'start|traces|stop'
   ```

5. In the terminal window running the Collector container, you should see trace
   ingest activity similar to what is shown in the following example:

   ```console
   $ grep -E '^Span|(ID|Name|Kind|time|Status \w+)\s+:' ./collector-output.txt
   Span #0
       Trace ID       : f30faffbde5fcf71432f89da1bf7bc14
       Parent ID      : 6f1ff7f9cf4ec1c7
       ID             : 8d1e820c1ac57337
       Name           : okey-dokey
       Kind           : Server
       Start time     : 2024-01-16 14:13:54.585877 +0000 UTC
       End time       : 2024-01-16 14:13:54.586 +0000 UTC
       Status code    : Unset
       Status message :
   Span #1
       Trace ID       : f30faffbde5fcf71432f89da1bf7bc14
       Parent ID      :
       ID             : 6f1ff7f9cf4ec1c7
       Name           : lets-go
       Kind           : Client
       Start time     : 2024-01-16 14:13:54.585877 +0000 UTC
       End time       : 2024-01-16 14:13:54.586 +0000 UTC
       Status code    : Unset
       Status message :
   ...
   ```

6. Open <http://localhost:55679/debug/tracez> and select one of the samples in
   the table to see the traces you've just generated.

7. After you are done, shutdown the Collector container, for example, using
   <kbd>Control-C</kbd>.

## Next steps

In this tutorial you've started the OpenTelemetry Collector and sent telemetry
to it. As next steps, consider doing the following:

- Explore different ways to [install the Collector](/docs/collector/install/).
- Learn about the different modes of the Collector in
  [Deployment Methods](/docs/collector/deploy/).
- Familiarize yourself with the Collector
  [configuration](/docs/collector/configuration) files and structure.
- Explore available components in the
  [registry](/ecosystem/registry/?language=collector).
- Learn how to
  [build a custom Collector with the OpenTelemetry Collector Builder (OCB)](/docs/collector/extend/ocb/).

[gobin]: https://pkg.go.dev/cmd/go#hdr-Environment_variables
[logs]: /docs/concepts/signals/logs/
[metrics]: /docs/concepts/signals/metrics/
[telemetrygen]:
  https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen
[traces]: /docs/concepts/signals/traces/
