Monitoring in Docker: Code Examples, Demos, and Results

TuanhdotnetTuanhdotnet
5 min read

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

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

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

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

Demo Result:

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

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

Filter and Analyze:

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

sysdig -c topprocs_cpu

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

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']

Start Prometheus:

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

Run the Prometheus Docker Exporter:

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

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

Run Logstash:

Create a logstash.conf file:

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

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

Run Kibana:

docker run -d -p 5601:5601 docker.elastic.co/kibana/kibana:7.10.0

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

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 more at : Monitoring in Docker: Code Examples, Demos, and Results

0
Subscribe to my newsletter

Read articles from Tuanhdotnet directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tuanhdotnet
Tuanhdotnet

I am Tuanh.net. As of 2024, I have accumulated 8 years of experience in backend programming. I am delighted to connect and share my knowledge with everyone.