Sep 13th, ‘24/5 min read

Developer's Guide to Installing OpenTelemetry Collector

Learn how to install and configure the OpenTelemetry Collector for enhanced observability. This guide covers Docker, Kubernetes, and Linux installations with step-by-step instructions and configuration examples.

Developer's Guide to Installing OpenTelemetry Collector

In my time working with cloud-native observability, I’ve come to appreciate the importance of having a solid system for collecting telemetry data. The OpenTelemetry Collector has been a key part of this.

In this tutorial, I'll walk you through the steps to install and configure it, based on my own experience, to help you improve your observability setup.

Why the OpenTelemetry Collector?

Before we dive into the installation process, let's quickly touch on why you might want to use the OpenTelemetry Collector as part of your observability strategy.

In my projects, I've found it to be an invaluable tool for centralizing telemetry data collection, processing, and export, including metrics, traces, and logs.

It's vendor-agnostic, which means you're not locked into any particular backends or analysis tools, making it a flexible choice for your observability pipeline.

📖
Check out our PromQL Cheat Sheet for essential PromQL queries!

Installation Methods for OpenTelemetry Collector

Depending on your environment and operating system, there are several ways to install the OpenTelemetry Collector.

I'll cover the most common methods I've used in cloud-native environments: Docker, Kubernetes, binary installation, and package installation for Linux systems (including AWS EC2 instances).

1. Docker Installation

Docker is my preferred local development and testing method in cloud-native environments.

Here's how you can get started:

docker pull otel/opentelemetry-collector:latest
docker run -p 4317:4317 -p 4318:4318 otel/opentelemetry-collector:latest

This pulls the latest image and runs the collector, exposing the OTLP gRPC (4317) and HTTP (4318) ports.

2. Kubernetes Installation

For production cloud-native environments, I often use Kubernetes. Here's a basic YAML file to deploy the collector:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: otel-collector
spec:
  replicas: 1
  selector:
    matchLabels:
      app: otel-collector
  template:
    metadata:
      labels:
        app: otel-collector
    spec:
      containers:
      - name: otel-collector
        image: otel/opentelemetry-collector-contrib:latest
        ports:
        - containerPort: 4317
        - containerPort: 4318

Apply this with the following command:

kubectl apply -f otel-collector.yaml

For more advanced setups, you might want to explore using Helm charts to deploy the OpenTelemetry Collector in your Kubernetes cluster.

📝
Explore our detailed guide on the OpenTelemetry Protocol (OTLP) and its impact on observability.

3. Binary Installation for Linux

Binary installation is the way to go for standalone servers or when you need more control in your observability setup.

Here's how to do it on Linux:

curl --proto '=https' --tlsv1.2 -fOL https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.108.0/otelcol_0.108.0_linux_amd64.tar.gz
tar -xvf otelcol_0.108.0_linux_amd64.tar.gz
sudo mv otelcol /usr/local/bin/

This command downloads the latest release (as of this writing, v0.108.0), extracts it, and moves the binary to a directory in your PATH.

Remember to check for the latest version on the OpenTelemetry Collector releases page and update the version number accordingly.

4. Package Installation for Linux Systems (including EC2)

For Linux systems, including AWS EC2 instances in cloud-native architectures, you can use package managers for a more streamlined installation process. Here's how to do it using DEB and RPM packages:

DEB packages (Debian, Ubuntu):

wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.108.0/otelcol_0.108.0_linux_amd64.deb
sudo dpkg -i otelcol_0.108.0_linux_amd64.deb

RPM packages (Red Hat, CentOS, Fedora, Amazon Linux):

wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.108.0/otelcol_0.108.0_linux_amd64.rpm
sudo rpm -ivh otelcol_0.108.0_linux_amd64.rpm

After installation, you can start the collector as a service using systemd:

sudo systemctl start otelcol

To ensure it starts on boot:

sudo systemctl enable otelcol

When using package installation, the default configuration file is typically located at /etc/otelcol/config.yaml. You'll want to modify this file to suit your cloud-native observability needs.

📝
Check out our comprehensive guide on instrumenting fasthttp with OpenTelemetry to enhance your observability.

Basic Configuration for OpenTelemetry Collector

Once installed, you must configure the collector to enhance your observability stack.

Here's a simple configuration I use as a starting point, which includes receivers, processors, exporters, and pipelines:

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:

exporters:
  otlp:
    endpoint: "otlp.last9.io"
    headers:
      "Authorization": "${LAST9_OTLP_AUTH_HEADER}"

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp, logging]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp, logging]

This configuration sets up OTLP receivers for tracesto receive and logs, processes them in batches, and exports them to various backends.

Collector Components

The OpenTelemetry Collector consists of several key components:

  1. Receivers: These ingest data into the collector. The OTLP receiver is commonly used to receive data from instrumented applications.
  2. Processors: These process the data before exporting. The batch processor is often used to improve performance.
  3. Exporters: These send data to various backends. We've included exporters for OTLP in our example.
  4. Extensions: These provide additional functionality like health checking. There are extensions such as health_check and auth permissions.

Integrations and Instrumentation

The OpenTelemetry Collector works seamlessly with various programming languages and frameworks.

Whether using Python, Java, or other languages, you can instrument your applications to send telemetry data to the collector. You can export this data to backends like Last9 Levitate, Prometheus, Jaeger, and Clickhouse.

For example, to instrument a Python application:

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

# Set up the OTLP exporter
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317")

# Set up the trace provider
resource = Resource(attributes={
    SERVICE_NAME: "your-service-name"
})
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

# Get a tracer
tracer = trace.get_tracer(__name__)

# Use the tracer in your application
with tracer.start_as_current_span("example-operation"):
    # Your code here
    pass
📄
Also read about Instrumenting fasthttp with OpenTelemetry: A Comprehensive Guide for more on enhancing your telemetry setup.

Troubleshooting and Debugging

When setting up the OpenTelemetry Collector, you might encounter issues. Here are some troubleshooting tips:

  1. Check the collector logs for any error messages.
  2. Ensure all required ports are open and accessible.
  3. Verify that your collector configuration file (otelcol-config.yaml) is correctly formatted.

Advanced Topics

As you become more comfortable with the OpenTelemetry Collector, you might want to explore advanced topics such as:

  1. Setting up multiple collector instances for high availability.
  2. Using the collector as a sidecar or daemonset in Kubernetes.
  3. Implementing custom processors for data manipulation.
  4. Integrating with cloud-specific services (AWS, Azure, etc.).

Conclusion

Installing and configuring the OpenTelemetry Collector is crucial in building a robust observability pipeline. Whether you're using Docker for local development, Kubernetes for production, binary installation for custom environments, or package managers for Linux systems, the process is straightforward but powerful.

Remember, the configuration is where the real magic happens. Start simple, test thoroughly, and gradually expand your setup as you become more comfortable with the tool. With the OpenTelemetry Collector, you'll have a flexible and robust foundation for your observability stack.

For more detailed information and advanced usage, check out the official OpenTelemetry documentation.

Happy collecting and analyzing!

Share your SRE experiences and insights on reliability, observability, or monitoring. Connect with like-minded developers on the SRE Discord community!

Newsletter

Stay updated on the latest from Last9.

Authors

Prathamesh Sonpatki

Prathamesh works as an evangelist at Last9, runs SRE stories - where SRE and DevOps folks share their stories, and maintains o11y.wiki - a glossary of all terms related to observability.

Handcrafted Related Posts