cadvisor
Analyzes resource usage and performance characteristics of running containers.
Top Related Projects
Exporter for machine metrics
Architected for speed. Automated for easy. Monitoring and troubleshooting, transformed!
Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.
Vendor-neutral programmable observability pipelines.
Main repository for Datadog Agent
Quick Overview
cAdvisor (Container Advisor) is an open-source container monitoring tool developed by Google. It provides detailed information about the running containers on a host, including resource usage, performance metrics, and container health. cAdvisor is designed to be lightweight, efficient, and easy to deploy, making it a popular choice for monitoring containerized environments.
Pros
- Comprehensive Monitoring: cAdvisor collects a wide range of metrics, including CPU, memory, network, and filesystem usage, as well as container-specific information like the number of running processes and open files.
- Lightweight and Efficient: cAdvisor is designed to have a minimal impact on the host system, making it suitable for deployment on production environments.
- Easy Integration: cAdvisor can be easily integrated with various monitoring and visualization tools, such as Prometheus, Grafana, and InfluxDB.
- Cross-Platform Support: cAdvisor supports multiple container runtimes, including Docker, rkt, and LXC, and can run on various operating systems, including Linux, Windows, and macOS.
Cons
- Limited Alerting Capabilities: cAdvisor does not provide built-in alerting functionality, which means users need to integrate it with a separate alerting system.
- Lack of Advanced Features: Compared to some commercial monitoring solutions, cAdvisor may lack more advanced features, such as custom dashboards, complex queries, and advanced analytics.
- Dependency on Underlying Container Runtime: cAdvisor's performance and functionality are dependent on the underlying container runtime, which can be a potential limitation in some environments.
- Limited Support for Kubernetes Deployments: While cAdvisor can be used to monitor Kubernetes clusters, it may not provide the same level of integration and functionality as some Kubernetes-specific monitoring tools.
Getting Started
To get started with cAdvisor, follow these steps:
- Install cAdvisor on your host system:
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
-
Access the cAdvisor web interface by opening a web browser and navigating to
http://localhost:8080
. -
Explore the various metrics and information provided by cAdvisor, such as container resource usage, performance data, and health status.
-
(Optional) Integrate cAdvisor with a monitoring and visualization tool, such as Prometheus and Grafana, to create custom dashboards and set up alerts.
Competitor Comparisons
Exporter for machine metrics
Pros of node_exporter
- Broader system metrics coverage, including CPU, memory, disk, and network statistics
- More extensible with custom collectors and textfile inputs
- Better integration with Prometheus ecosystem and PromQL
Cons of node_exporter
- Lacks container-specific metrics and Docker integration
- Higher resource usage compared to cAdvisor
- Steeper learning curve for configuration and customization
Code Comparison
node_exporter:
func (c *cpuCollector) Update(ch chan<- prometheus.Metric) error {
stats, err := c.cpu.Stats()
if err != nil {
return err
}
// Process and send CPU metrics
}
cAdvisor:
func (self *cadvisorClient) GetContainerInfo(name string, req *info.ContainerInfoRequest) (*info.ContainerInfo, error) {
container, err := self.getContainer(name)
if err != nil {
return nil, err
}
return container.GetInfo()
}
Both projects use Go and follow similar patterns for metric collection, but cAdvisor focuses on container-specific information while node_exporter provides a broader range of system metrics.
Architected for speed. Automated for easy. Monitoring and troubleshooting, transformed!
Pros of netdata
- More comprehensive monitoring with support for a wider range of systems and applications
- Real-time, high-resolution metrics with per-second granularity
- User-friendly web interface with customizable dashboards and alerting
Cons of netdata
- Higher resource consumption due to its extensive feature set
- Steeper learning curve for configuration and customization
- May be overkill for simple container monitoring use cases
Code comparison
netdata configuration example:
[global]
update every = 1s
memory mode = ram
history = 3600
cAdvisor configuration example:
--storage_driver=influxdb
--storage_driver_db=cadvisor
--storage_driver_host=localhost:8086
Key differences
- netdata offers a more feature-rich and versatile monitoring solution, while cAdvisor focuses primarily on container monitoring
- cAdvisor is lighter-weight and easier to set up for basic container metrics
- netdata provides a built-in web interface, whereas cAdvisor typically requires integration with other visualization tools
- Both projects are open-source, but netdata has a larger community and more frequent updates
Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.
Pros of Telegraf
- Broader scope: Collects metrics from a wide range of systems and services, not limited to containers
- Extensible plugin system: Supports numerous input, output, and processing plugins
- Native integration with InfluxDB and other time-series databases
Cons of Telegraf
- Higher resource usage due to its broader scope and plugin system
- More complex configuration compared to cAdvisor's simplicity
- Steeper learning curve for users new to monitoring systems
Code Comparison
cAdvisor (Go):
container, err := client.ContainerInfo(containerId)
if err != nil {
return err
}
Telegraf (Go):
acc.AddFields("cpu", fields, tags)
acc.AddGauge("memory", fields, tags)
acc.AddCounter("network", fields, tags)
Summary
cAdvisor focuses specifically on container monitoring, offering a lightweight and easy-to-use solution for Docker environments. It excels in providing detailed container metrics with minimal setup.
Telegraf, on the other hand, is a more versatile monitoring agent capable of collecting metrics from various sources beyond containers. Its plugin-based architecture allows for extensive customization and integration with different systems and databases.
While cAdvisor is ideal for simple container monitoring scenarios, Telegraf is better suited for complex, multi-system monitoring requirements where flexibility and extensibility are crucial.
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.
Pros of Glances
- Cross-platform support (Linux, macOS, Windows)
- More comprehensive system monitoring (CPU, memory, network, processes, sensors)
- Web-based interface and REST API for easy integration
Cons of Glances
- Higher resource usage compared to cAdvisor
- Less focused on container-specific metrics
- May require more setup for container monitoring
Code Comparison
Glances (Python):
from glances_api import GlancesApi
glances = GlancesApi(host='localhost', port=61208)
cpu_percent = glances.getCpu()['total']
cAdvisor (Go):
import "github.com/google/cadvisor/client"
client, _ := client.NewClient("http://localhost:8080")
info, _ := client.MachineInfo()
cpuUsage := info.NumCores
Summary
Glances is a versatile system monitoring tool with broad platform support and comprehensive metrics. It offers a user-friendly web interface and API but may consume more resources. cAdvisor, on the other hand, is more focused on container monitoring and is generally lighter on resource usage. The choice between the two depends on specific monitoring needs and the target environment.
Vendor-neutral programmable observability pipelines.
Pros of Agent
- More comprehensive monitoring solution, covering logs, metrics, and traces
- Supports multiple data sources and integrations beyond just container metrics
- Actively maintained with frequent updates and community support
Cons of Agent
- Higher resource usage due to broader feature set
- Steeper learning curve for configuration and setup
- May be overkill for simple container monitoring use cases
Code Comparison
cAdvisor:
container, err := client.NewClient("unix:///var/run/docker.sock")
if err != nil {
log.Fatal(err)
}
Agent:
metrics:
wal_directory: /tmp/agent/wal
global:
scrape_interval: 15s
configs:
- name: default
scrape_configs:
- job_name: agent
static_configs:
- targets: ['localhost:12345']
Summary
While cAdvisor focuses specifically on container resource usage monitoring, Agent offers a more comprehensive observability solution. cAdvisor is simpler to set up and use for basic container metrics, but Agent provides greater flexibility and integration options for complex monitoring scenarios. The choice between the two depends on the specific monitoring requirements and infrastructure complexity of the project.
Main repository for Datadog Agent
Pros of datadog-agent
- Comprehensive monitoring solution with support for various platforms and integrations
- Advanced features like APM, log management, and network performance monitoring
- Extensive customization options and a rich ecosystem of plugins
Cons of datadog-agent
- Proprietary software with associated costs
- Steeper learning curve due to its extensive feature set
- Requires more system resources compared to lightweight alternatives
Code Comparison
datadog-agent:
from datadog_checks.base import AgentCheck
class MyCheck(AgentCheck):
def check(self, instance):
self.gauge('my_metric', 1000)
cAdvisor:
import "github.com/google/cadvisor/info/v1"
func getContainerInfo(name string) (*v1.ContainerInfo, error) {
return client.ContainerInfo(name)
}
Summary
datadog-agent offers a more comprehensive monitoring solution with advanced features and extensive customization options, but comes with associated costs and a steeper learning curve. cAdvisor, on the other hand, is a lightweight, open-source container monitoring tool focused specifically on resource usage and performance statistics for containers. While cAdvisor is simpler to set up and use, it lacks the breadth of features and integrations provided by datadog-agent.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
cAdvisor (Container Advisor) provides container users an understanding of the resource usage and performance characteristics of their running containers. It is a running daemon that collects, aggregates, processes, and exports information about running containers. Specifically, for each container it keeps resource isolation parameters, historical resource usage, histograms of complete historical resource usage and network statistics. This data is exported by container and machine-wide.
cAdvisor has native support for Docker containers and should support just about any other container type out of the box. We strive for support across the board so feel free to open an issue if that is not the case. cAdvisor's container abstraction is based on lmctfy's so containers are inherently nested hierarchically.
Quick Start: Running cAdvisor in a Docker Container
To quickly tryout cAdvisor on your machine with Docker, we have a Docker image that includes everything you need to get started. You can run a single cAdvisor to monitor the whole machine. Simply run:
VERSION=v0.49.1 # use the latest release version from https://github.com/google/cadvisor/releases
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:$VERSION
cAdvisor is now running (in the background) on http://localhost:8080
. The setup includes directories with Docker state cAdvisor needs to observe.
Note: If you're running on CentOS, Fedora, or RHEL (or are using LXC), take a look at our running instructions.
We have detailed instructions on running cAdvisor standalone outside of Docker. cAdvisor running options may also be interesting for advanced usecases. If you want to build your own cAdvisor Docker image, see our deployment page.
For Kubernetes users, cAdvisor can be run as a daemonset. See the instructions for how to get started, and for how to kustomize it to fit your needs.
Building and Testing
See the more detailed instructions in the build page. This includes instructions for building and deploying the cAdvisor Docker image.
Exporting stats
cAdvisor supports exporting stats to various storage plugins. See the documentation for more details and examples.
Web UI
cAdvisor exposes a web UI at its port:
http://<hostname>:<port>/
See the documentation for more details.
Remote REST API & Clients
cAdvisor exposes its raw and processed stats via a versioned remote REST API. See the API's documentation for more information.
There is also an official Go client implementation in the client directory. See the documentation for more information.
Roadmap
cAdvisor aims to improve the resource usage and performance characteristics of running containers. Today, we gather and expose this information to users. In our roadmap:
- Advise on the performance of a container (e.g.: when it is being negatively affected by another, when it is not receiving the resources it requires, etc).
- Auto-tune the performance of the container based on previous advise.
- Provide usage prediction to cluster schedulers and orchestration layers.
Community
Contributions, questions, and comments are all welcomed and encouraged! cAdvisor developers hang out on Slack in the #sig-node channel (get an invitation here). We also have discuss.kubernetes.io.
Please reach out and get involved in the project, we're actively looking for more contributors to bring on board!
Core Team
Frequent Collaborators
Emeritus
Top Related Projects
Exporter for machine metrics
Architected for speed. Automated for easy. Monitoring and troubleshooting, transformed!
Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.
Vendor-neutral programmable observability pipelines.
Main repository for Datadog Agent
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot