DEV Community

Anh Trần Tuấn
Anh Trần Tuấn

Posted on • Originally published at tuanh.net on

Monitoring in Docker: Code Examples, Demos, and Results

1. Introduction to Docker Monitoring

Monitoring Docker containers involves tracking various metrics and logs to ensure that your applications are running smoothly and to troubleshoot any issues that arise. Effective monitoring helps in identifying performance bottlenecks, understanding resource usage, and ensuring the overall health of your containers.

2. Setting Up Monitoring with Docker

To get started with monitoring, you need to choose the right tools and configure them to collect and visualize data from your Docker containers. Here’s a step-by-step guide to setting up a comprehensive monitoring solution.

2.1 Using Docker Stats

Docker provides built-in commands for monitoring the resource usage of containers. The docker stats command is a straightforward way to get real-time statistics.

Example Code:

docker stats
Enter fullscreen mode Exit fullscreen mode

Demo Result:

Image

This output shows real-time CPU usage, memory usage, and network I/O for each container. It’s a useful command for quick checks.

2.2 Using docker ps

The docker ps command lists all running containers along with their essential details.

Example Code:

docker ps
Enter fullscreen mode Exit fullscreen mode

Demo Result:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcd1234efgh my-image "python app.py" 2 hours ago Up 2 hours 0.0.0.0:8080->8080/tcp my-container
Enter fullscreen mode Exit fullscreen mode

The output shows each container's ID, image, command, creation time, status, exposed ports, and name. This information is useful for understanding which containers are running and their basic configuration.

2.3 Using docker top

The docker top command displays the running processes inside a container, similar to the top command in Linux.

Example Code:

docker top my-container
Enter fullscreen mode Exit fullscreen mode

Demo Result:

UID PID PPID C STIME TTY TIME CMD
root 12345 1 0 16:00 ? 00:00:01 python app.py
Enter fullscreen mode Exit fullscreen mode

This command provides details about the processes running within the specified container, including their process IDs (PIDs), CPU usage, and command. It’s useful for diagnosing issues related to containerized applications.

2.4 Using Sysdig

Sysdig is a powerful tool for container monitoring and troubleshooting, offering a detailed view of system calls and container activity.

Example Setup:

Install Sysdig:

Run Sysdig:

sysdig
Enter fullscreen mode Exit fullscreen mode

Filter and Analyze:

Use Sysdig to capture and analyze system calls related to Docker containers:

sysdig -c topprocs_cpu
Enter fullscreen mode Exit fullscreen mode

Demo Result:

Time (s) Proc Name PID CPU% Memory%
0.0 my-container 12345 0.5 12.3
0.5 another-container 67890 1.2 8.7
Enter fullscreen mode Exit fullscreen mode

Sysdig’s output provides insights into CPU and memory usage of processes within containers. You can also use Sysdig to troubleshoot specific issues by capturing and analyzing system calls.

2.5 Integrating Docker Monitoring with Prometheus

For a more sophisticated monitoring setup, integrating Docker with Prometheus allows for detailed metric collection and visualization.

Run Prometheus:

Create a prometheus.yml configuration file to scrape metrics from Docker:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9090']
Enter fullscreen mode Exit fullscreen mode

Start Prometheus:

docker run -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Enter fullscreen mode Exit fullscreen mode

Run the Prometheus Docker Exporter:

docker run -d -p 9273:9273 --name=prometheus-docker-exporter --link my-container:my-container prom/dockerd-exporter
Enter fullscreen mode Exit fullscreen mode

Visualize Metrics with Grafana

Add Prometheus as a data source in Grafana and create dashboards to visualize the collected metrics.

2.6 Using ELK Stack for Log Management

The ELK Stack (Elasticsearch, Logstash, and Kibana) is a popular solution for log management. It helps in aggregating and visualizing logs from Docker containers.

Example Setup:

Run Elasticsearch:

docker run -d -p 9200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.0
Enter fullscreen mode Exit fullscreen mode

Run Logstash:

Create a logstash.conf file:

input {
  docker {
    codec => json
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
  }
}
Enter fullscreen mode Exit fullscreen mode

Start Logstash:

docker run -d -p 5044:5044 -v $(pwd)/logstash.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:7.10.0
Enter fullscreen mode Exit fullscreen mode

Run Kibana:

docker run -d -p 5601:5601 docker.elastic.co/kibana/kibana:7.10.0
Enter fullscreen mode Exit fullscreen mode

Access Kibana:

Navigate to http://localhost:5601 to view and analyze logs.

Image

2.7 Using cAdvisor for Container Metrics

cAdvisor provides detailed statistics about container resource usage and performance.

Example Code:

docker run -d -p 8080:8080 --name=cadvisor google/cadvisor:latest
Enter fullscreen mode Exit fullscreen mode

Access cAdvisor at http://localhost:8080 to view detailed metrics such as CPU usage, memory usage, and network statistics for each container.

3. Conclusion

Monitoring Docker containers effectively involves using a combination of built-in tools, third-party monitoring solutions, and log management systems. By setting up Docker Stats, Prometheus with Grafana, ELK Stack, and cAdvisor, you can gain valuable insights into your containerized applications and ensure their optimal performance.

If you have any questions or need further clarification, feel free to comment below!

Read posts more at : Monitoring in Docker: Code Examples, Demos, and Results

Top comments (0)