Resources

Docker Metrics Collector Monitoring

October 1, 2024 by OpenObserve Team
Docker Stats Receiver

Monitoring Docker container metrics helps you with the performance and health of your containerized applications. Key reasons to monitor Docker metrics include:

  • Resource Optimization: Monitoring CPU, memory, network and disk usage helps allocate resources efficiently and scale containers as needed.
  • Performance Management: Analyzing resource utilization allows tuning application performance inside containers.
  • Troubleshooting: Docker metrics enable quick identification and resolution of issues, reducing downtime.
  • Cost Management: In cloud environments, efficient resource usage based on metrics can lead to significant cost savings.

How to Collect Docker Metrics

There are several ways to collect Docker container metrics:

  • Docker Stats Command: The docker stats command provides a live stream of a container's CPU, memory, network and block I/O metrics.
  • Prometheus Integration: Docker can be configured as a Prometheus monitoring target to collect metrics like CPU, memory, I/O and network usage.
  • OpenTelemetry Collector: The OpenTelemetry Collector can gather container-level metrics like CPU, memory, network stats and disk I/O from Docker using the Docker Stats receiver.

Analyzing Docker Metrics with OpenObserve

OpenObserve is a platform that provides a unified view of metrics, logs and traces from Docker containers and other sources. Key capabilities include:

  • Aggregating metrics from multiple containers and hosts
  • Visualizing metrics with dashboards and charts
  • Analyzing historical trends to identify performance issues
  • Setting alerts on key metrics to proactively detect problems

By collecting and analyzing Docker metrics with OpenObserve, you can troubleshoot issues, and ensure the health and performance of your containerized applications. 

Sign up now to see how OpenObserve can support you in monitoring Docker container metrics.

Understanding Docker Metrics

Here is a concise overview of key Docker metrics for monitoring container performance:

Key Docker Metrics

The most important Docker metrics to monitor are:

  • CPU Usage: Percentage of host CPU used by the container
  • Memory Usage: Memory used by the container vs its limit
  • Block I/O: Bytes read/written to block devices
  • Network I/O: Bytes sent/received over the network interface
  • PIDs: Number of processes/threads created by the container

You can collect these metrics using the docker stats command, which provides a live stream of data. OpenObserve can aggregate and analyze these metrics from multiple containers to provide a unified view of the system.

Memory Reporting on Linux

On Linux, the memory limit represents the memory limit of the host machine, unless it is configured for the specific container. The memory usage limit is reported as "MEM USAGE/LIMIT" in the docker stats output.

Monitoring Process Creation

The "PIDs" column in docker stats output shows the number of processes or threads the container has created. Monitoring this metric can help detect containers that are creating too many processes, which may indicate a problem.

By collecting and analyzing these key Docker metrics, you can optimize resource usage, troubleshoot issues, and ensure the health and performance of your containerized applications. 

OpenObserve provides a powerful platform for aggregating, visualizing and analyzing these metrics from multiple sources.

Configuring Docker for Metrics Reporting

To configure Docker for metrics reporting, follow these steps:

Steps to Configure the Docker Daemon for Metrics Exposure

  1. Edit the Docker Daemon Configuration: Open or create the /etc/docker/daemon.json file and add the following configuration to expose metrics:

json
{
  "metrics-addr": "127.0.0.1:9100",
  "experimental": true
}

This configuration sets the metrics address and enables experimental features, which are necessary for comprehensive metrics collection.

  1. Enable Remote Access: If you want to allow remote access to the metrics, ensure that the metrics-addr is set to an appropriate IP address that allows access from your monitoring tools.
  2. Use the Docker Stats Command: You can also use the docker stats command to view real-time metrics for all running containers. This command provides basic metrics such as CPU and memory usage.

Enabling Experimental Features

To enable experimental features, ensure that the "experimental": true line is included in your daemon.json file. This setting allows access to additional metrics and features that are not available in the stable release of Docker.

Restarting the Docker Daemon

After making changes to the daemon.json file, restart the Docker daemon to apply the configuration changes. Use the following command:

bash
sudo systemctl restart docker.service

This command will restart the Docker service, applying the new configuration and enabling metrics reporting.

By following these steps, you can configure Docker to expose metrics effectively, enabling better monitoring and analysis of container performance. 

For more details on configuring Docker for metrics collection, you can refer to OpenObserve Documentation.

OpenTelemetry Collector Integration with Docker

Here is an overview of integrating OpenTelemetry Collector with Docker for metrics collection:

Role and Benefits of Using OpenTelemetry Collector for Docker Metrics

The OpenTelemetry Collector plays a crucial role in collecting, processing, and exporting metrics from Docker containers. Key benefits include:

  • Unified Metrics Collection: It can gather metrics from multiple sources, including Docker stats and Prometheus, allowing for a consolidated view of container performance.
  • Flexibility: The Collector supports various output backends, enabling users to send metrics to different observability platforms.
  • Enhanced Observability: By integrating with OpenTelemetry, users can gain deeper insights into container performance, resource utilization, and application health.

Configuring Docker Stats and Prometheus Receiver for Metric Collection

To configure the Docker stats and Prometheus receiver for metrics collection, follow these steps:

  1. Configure Docker Daemon: Modify the /etc/docker/daemon.json file to expose metrics:

json
{
  "metrics-addr": "127.0.0.1:9100",
  "experimental": true
}

This configuration enables the Docker daemon to expose metrics at the specified address.

  1. Set Up the OpenTelemetry Collector: In the Collector's YAML configuration file, add the Docker stats receiver:

receivers:
  docker_stats:
    endpoint: "http://localhost:9100"

Additionally, configure the Prometheus receiver to scrape metrics from the Docker endpoint:

receivers:
  prometheus/docker:
    config:
      scrape_configs:
        - job_name: "docker"
          static_configs:
            - targets: ["127.0.0.1:9323"]

Adding Docker Metrics Receiver to OpenTelemetry Collector Pipelines

After configuring the receivers, you need to add them to the Collector's pipelines to ensure metrics are processed and exported. This can be done by modifying the pipelines section in the Collector configuration:

service:
  pipelines:
    metrics:
      receivers: \[docker_stats, prometheus/docker]
      exporters: \[your_exporter]

Replace your_exporter with the desired metrics exporter (e.g., to send data to a cloud observability platform).

Prerequisites for Docker Post-installation and Collector Configuration

Before setting up the OpenTelemetry Collector, ensure the following prerequisites are met:

  1. Docker Installation: Docker must be installed and running on a Linux machine.
  2. Post-installation Steps: Complete Docker post-installation steps, including configuring Docker to run without root privileges if necessary.
  3. Permissions: Ensure the Docker socket has the correct permissions for the Collector to access it:

bash
sudo chmod u+x /var/run/docker.sock

  1. Collector Configuration: Ensure the OpenTelemetry Collector is properly configured to export metrics to your chosen backend.

By following these steps, you can effectively integrate OpenObserve's OpenTelemetry Collector with Docker for comprehensive metrics collection.

For more detailed instructions and troubleshooting, refer to the OpenObserve documentation on integrating OpenTelemetry Collector with Docker.

Visualization and Monitoring with Backend Systems

Here is an overview of backend systems for Docker metrics visualization and monitoring:

Metrics Backends for Docker

There are several backend systems compatible with Docker metrics collection that provide visualization and monitoring capabilities:

  • OpenObserve: An open-source observability platform that supports logs, metrics and traces. It is highly scalable and cost-effective compared to Elasticsearch.
  • Sumo Logic: Provides a unified logs and metrics app for monitoring Docker deployments. It collects metrics using the OpenTelemetry Collector's Docker receiver.
  • Uptrace: An open-source distributed tracing and metrics backend that can visualize Docker metrics collected via OpenTelemetry.

Key Features for Monitoring

These backend systems typically offer the following features for Docker metrics monitoring:

  • Query Builder: Allows constructing complex queries to filter, aggregate and analyze metrics.
  • Dashboards: Pre-built and custom dashboards to visualize key Docker metrics like CPU, memory, I/O and network usage.
  • Alerting: Set alerts on metrics to proactively detect issues like resource saturation or anomalous behavior.
  • Integrations: Integrations with monitoring tools, notification systems, and cloud platforms.

Configuring OpenObserve for Docker Monitoring

To configure OpenObserve for real-time Docker metrics monitoring:

  1. Configure the Docker daemon to expose metrics at an HTTP endpoint.
  2. Set up the OpenTelemetry Collector to scrape metrics from the Docker endpoint using the Docker stats receiver.
  3. Add the Docker metrics receiver to the Collector's pipelines to process and export the metrics to OpenObserve.
  4. Ensure the Collector is properly configured to export metrics to OpenObserve.

By integrating OpenObserve with Docker metrics collection, you can gain a unified view of container performance, set alerts, and troubleshoot issues. 

OpenObserve's scalability and cost-effectiveness make it an attractive choice compared to other platforms.

Check Data Visualization with OpenObserve here.

Collector Configuration for Docker Metrics

Here's a detailed overview of configuring the OpenTelemetry Collector for Docker metrics collection:

Collector Setup Options

When setting up the OpenTelemetry Collector for Docker metrics, you have two primary options:

  1. Using an Existing Collector:
    • If you already have an OpenTelemetry Collector running, you can extend its configuration to include Docker metrics collection. This approach saves time and resources, as you can leverage existing integrations and pipelines.
  2. Setting Up a New Collector:
    • If you prefer a clean slate or need specific configurations that differ from your existing setup, you can deploy a new OpenTelemetry Collector instance. This option allows for tailored configurations that meet the unique requirements of your Docker environment.

YAML Configuration for Docker Collection

To configure the OpenTelemetry Collector for Docker metrics collection, you need to create or modify the YAML configuration file. Below is an example configuration that includes metric collection, log collection, and integration steps:

Example YAML Configuration

receivers:
  docker_stats:
    endpoint: "http://localhost:9100"  # Docker metrics endpoint
  otlp:
    protocols:
      grpc:
      http:

exporters:
  logging:
    loglevel: debug
  prometheus:
    endpoint: "0.0.0.0:9090"  # Expose Prometheus metrics
  openobserve:
    endpoint: "http://your-openobserve-instance/api/v1/metrics"  # Replace with your OpenObserve endpoint

service:
  pipelines:
    metrics:
      receivers: \[docker_stats, otlp]
      exporters: \[openobserve, logging]
    logs:
      receivers: \[otlp]
      exporters: \[logging]

Key Points 

  • Receivers: The docker_stats receiver collects metrics from the Docker API, while the otlp receiver allows for other telemetry data.
  • Exporters: Metrics are exported to OpenObserve and logged for debugging. You can replace the OpenObserve endpoint with your specific instance URL.
  • Pipelines: Define how data flows from receivers to exporters. In this case, metrics are processed and sent to OpenObserve.

Supported Docker API Versions and Platforms

The OpenTelemetry Collector supports various Docker API versions and platforms for metrics collection:

  1. Docker API Versions: The Collector is compatible with Docker API version 1.24 and later. It is advisable to use the latest stable version of Docker to ensure compatibility and access to the latest features.
  2. Supported Platforms: The Collector can run on various operating systems, including:
    • Linux: Most commonly used platform for Docker deployments.
    • Windows: Supported for Docker Desktop and Windows Server.
    • macOS: Suitable for local development environments using Docker Desktop.

Whether you choose to extend an existing collector or set up a new one, the YAML configuration allows for flexibility and customization to meet your specific needs. 

Make sure to use supported Docker API versions to ensure seamless integration and functionality.

Analyzing Docker Metrics

Here’s a detailed analysis of Docker metrics, focusing on the docker container stats command and its integration with cloud observability platforms like OpenObserve, along with comparisons to other platforms.

Live Streaming of Container Resource Usage Statistics with docker container stats

The docker stats command provides a live stream of resource usage statistics for running Docker containers. It displays key metrics such as:

  • CPU Usage: Percentage of the total CPU being utilized by the container.
  • Memory Usage: Current memory usage compared to the memory limit set for the container.
  • Network I/O: Amount of data sent and received by the container.
  • Block I/O: Data read from and written to the container's filesystem.

Example Output

bash
$ docker stats redis1 redis2

CONTAINER     CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O
redis1        0.07%     796 KB / 64 MB        1.21%     788 B / 648 B    3.568 MB / 512 KB
redis2        0.07%     2.746 MB / 64 MB      4.29%     1.266 KB / 648 B 12.4 MB / 0 B

This command is particularly useful for monitoring resource usage in real-time, allowing for quick assessments of container performance under various loads.

Configuring Output Formats and Understanding Default Metrics Presented

The docker stats command outputs metrics in a tabular format by default. However, users can customize the output format using the --format flag to generate JSON or other formats suitable for further processing. For instance:

bash
docker stats --format "{{.Name}}: {{.CPUPerc}}"

Default Metrics 

  • CPU %: Indicates the percentage of CPU used by the container.
  • MEM USAGE / LIMIT: Shows the current memory consumption against the limit.
  • MEM %: Percentage of memory used relative to the limit.
  • NET I/O: Displays the total bytes sent and received.
  • BLOCK I/O: Indicates the total bytes read and written to disk.

These metrics provide a snapshot of container performance, which can be crucial for troubleshooting and optimizing resource allocation.

Validating Metrics Reporting to Cloud Observability Platforms

To ensure that Docker metrics are accurately reported to cloud observability platforms like OpenObserve, follow these steps:

  1. Integration Setup: Configure the OpenTelemetry Collector to collect Docker metrics using the Docker stats receiver and export them to OpenObserve.
  2. Testing the Integration: After configuring the collector, run the docker stats command and verify that the metrics are reflected in OpenObserve. This can be done by checking the dashboards for real-time updates.
  3. Alerting and Monitoring: Set up alerts in OpenObserve based on specific thresholds for CPU, memory, or I/O metrics to proactively manage container health.

Comparison with Other Platforms

  • Sumo Logic: Offers advanced analytics and alerting capabilities, but may require more complex setup and is typically more expensive than OpenObserve.
  • Uptrace: Focuses on distributed tracing and performance monitoring, providing a more holistic view of application performance, but might lack some specific Docker metrics compared to OpenObserve.
  • Datadog: Provides comprehensive monitoring solutions, including Docker metrics, but often at a higher cost and with a steeper learning curve compared to OpenObserve.

OpenObserve stands out due to its open-source nature, cost-effectiveness, and ease of integration with Docker metrics, making it an attractive option if you are looking to implement observability without significant overhead.

By leveraging the docker stats command alongside a robust observability platform like OpenObserve, you can gain valuable insights into container performance, enabling optimization of their Docker environments.

Advanced Docker Monitoring and Custom Metrics

Let;s discuss advanced Docker monitoring and custom metrics. Here we focus on customizing metrics collection, creating queries, and configuring dashboards, particularly using OpenObserve and comparing it with other platforms.

Customizing Metrics Collection

1. Customizing Metrics Collection Intervals, Labels, and Excluded Images

To customize metrics collection in Docker, you can adjust the configuration of the OpenTelemetry Collector or other monitoring tools. Key aspects include:

  • Collection Intervals: You can set specific intervals for how often metrics are collected. For example, in the OpenTelemetry Collector configuration, you can specify the collection_interval parameter to control the frequency of data collection.
  • Labels: Adding custom labels to your metrics can provide more context. For instance, you can label metrics by application name, environment (production, staging), or specific container roles. This helps in filtering and querying metrics effectively.
  • Excluded Images: To optimize performance, you may want to exclude certain images from metrics collection. This can be done by configuring the collector to ignore specific container names or image IDs in the configuration file.

Example Configuration Snippet

receivers:
  docker_stats:
    collection_interval: 10# Collect metrics every 10 seconds
    excluded_images: ["nginx:latest"# Exclude specific images

2. Creating Custom Queries

Custom queries allow you to analyze Docker logs and metrics effectively. Depending on the backend system you are using (like OpenObserve, Sumo Logic, or Uptrace), the query language may vary.

  • OpenObserve: You can use its query builder to create custom queries that filter logs and metrics based on specific criteria, such as CPU usage over a threshold or memory usage patterns.
  • Example Query: To find containers using more than 80% of their allocated memory:

sql
SELECT * FROM docker_metrics WHERE memory_usage > 0.8 * memory_limit

3. Sample Log and Metric Queries for Dashboard Configuration

Creating dashboards with relevant queries is essential for effective monitoring. Below are sample queries for configuring dashboards in OpenObserve and other platforms:

  • CPU Usage Query:

sql
SELECT container_name, cpu_usage FROM docker_metrics WHERE cpu_usage > 75

  • Memory Usage Query:

sql
SELECT container_name, memory_usage FROM docker_metrics WHERE memory_usage > memory_limit * 0.8

  • Log Query for Errors:

sql
SELECT * FROM docker_logs WHERE level = 'error' AND timestamp > NOW() - INTERVAL '1 hour'

These queries can be directly used in dashboard widgets to visualize real-time data and trends.

Comparing Backend Systems

Features Comparison

  • OpenObserve:
    • Query Builder: Intuitive and flexible for creating custom queries.
    • Dashboards: Supports real-time visualization with customizable widgets.
    • Alert Monitoring: Set alerts based on custom thresholds for metrics.
    • Integrations: Easily integrates with OpenTelemetry and other observability tools.
  • Sumo Logic:
    • Query Builder: Advanced querying capabilities but may require a steeper learning curve.
    • Dashboards: Offers robust dashboarding features with extensive customization.
    • Alert Monitoring: Strong alerting features with machine learning capabilities.
    • Integrations: Integrates well with various cloud services but can be costly.
  • Uptrace:
    • Query Builder: Focuses on distributed tracing, which may limit log and metric queries.
    • Dashboards: Provides tracing and metrics visualization but is less comprehensive for logs.
    • Alert Monitoring: Basic alerting capabilities compared to Sumo Logic and OpenObserve.
    • Integrations: Good integration with OpenTelemetry but less extensive than others.

The ability to configure dashboards with custom queries further empowers teams to maintain optimal performance and quickly address issues in their containerized environments.

OpenObserve stands out as a flexible and cost-effective solution for visualizing and analyzing Docker metrics, especially when compared to other platforms like Sumo Logic and Uptrace. 

Maintenance and Troubleshooting

The following steps will help you with maintenance and troubleshooting.

Regular Updates to Docker Version for Support and New Features

Keeping your Docker installation up to date is crucial for several reasons:

  • Security: New releases often include security patches that protect against vulnerabilities.
  • Performance Improvements: Updates may enhance the performance of Docker and the underlying container runtime.
  • New Features: Each new version of Docker may introduce new features that can improve metrics collection, monitoring capabilities, and overall functionality.
  • Compatibility: Ensuring compatibility with other tools and platforms, such as OpenTelemetry and OpenObserve, often requires running the latest versions.

To update Docker, use the following commands based on your operating system:

  • For Ubuntu:

bash
sudo apt-get update
sudo apt-get install docker-ce

  • For CentOS:

bash
sudo yum update
sudo yum install docker-ce

  • For Windows and macOS: Use the Docker Desktop application to check for updates.

Troubleshooting Common Issues in Docker Metrics Collection and Reporting

When collecting and reporting Docker metrics, you may encounter several common issues. Here are some troubleshooting steps:

  • Metrics Not Appearing: Check Configuration
  • Inaccurate Metrics: Resource Limits
  • Performance Issues: High CPU/Memory Usage

OpenObserve Support:

  • GitHub Repository: OpenObserve's source code is available on GitHub, where you can find documentation, report issues, and contribute to the project. The repository is a valuable resource for troubleshooting and understanding the platform's inner workings.
  • Community Support: Engaging with the OpenObserve community via GitHub discussions or forums can provide quick insights and solutions to common problems.
  • Faster Team Support: For enterprise users or those needing immediate assistance, OpenObserve offers dedicated support options. 

Regularly updating Docker is essential for maintaining security and performance. Utilizing resources like the OpenObserve GitHub repository and engaging with the community can significantly enhance your ability to maintain and troubleshoot Docker metrics effectively. 

Key Performance Dashboards

Overview and CPU Usage Dashboards

The Overview and CPU Usage dashboards provide a high-level summary of your Docker environment and detailed metrics on CPU utilization. These dashboards typically include:

  • Total CPU Consumed: Aggregated CPU usage across all containers.
  • CPU Usage by Container: Individual container CPU usage over time.
  • Docker Events: Timeline of significant events like container starts, stops, and failures.

Memory and Network Usage Dashboards

The Memory and Network Usage dashboards dive deeper into resource consumption, focusing on memory utilization and network traffic. Key metrics include:

  • Memory Usage: Total memory used by containers vs available memory.
  • Memory Usage by Container: Per-container memory usage over time.
  • Network Rx/Tx Bytes: Aggregated network traffic in and out of containers.
  • Network Usage by Container: Individual container network usage.

Preconfigured Dashboards for Insights

Many observability platforms, such as OpenObserve, provide preconfigured dashboards tailored for Docker monitoring. These dashboards offer immediate insights into container state and resource usage, allowing you to quickly identify issues and optimize performance.

Summary

Effective Docker metrics collection and monitoring are essential for ensuring the optimal performance and health of containerized applications. 

  • By closely observing key metrics like CPU usage, memory consumption, network I/O, and block I/O, you can identify performance bottlenecks, troubleshoot issues proactively, and optimize resource allocation. 
  • Tools like OpenObserve provide invaluable support in aggregating, visualizing, and analyzing these metrics, enabling data-driven decision-making. 

By implementing robust monitoring practices and leveraging advanced analytics, businesses can significantly enhance the reliability and efficiency of their Docker environments.

To gain deeper insights into your Docker environment and harness the power of effective monitoring, Sign up for OpenObserve today.

Resources

Author:

authorImage

The OpenObserve Team comprises dedicated professionals committed to revolutionizing system observability through their innovative platform, OpenObserve. Dedicated to streamlining data observation and system monitoring, offering high performance and cost-effective solutions for diverse use cases.

OpenObserve Inc. © 2024