Skip to main content

Containers

Sentinel automatically discovers and monitors Docker containers running on your hosts.

Container Discovery

When the Sentinel agent runs on a host with Docker:
  1. Discovers all running containers
  2. Collects metrics every 10 seconds
  3. Reports container state changes
  4. Tracks resource usage per container

Container Status

containers = BrainzLab::Sentinel.containers

containers.each do |container|
  puts "#{container.name}: #{container.status}"
  puts "  Image: #{container.image}"
  puts "  CPU: #{container.cpu_percent}%"
  puts "  Memory: #{container.memory_mb}MB / #{container.memory_limit_mb}MB"
  puts "  Network In: #{container.net_in_mb}MB"
  puts "  Network Out: #{container.net_out_mb}MB"
end

Container Metrics

MetricDescription
cpu_percentCPU usage relative to host
memory_mbMemory used
memory_limit_mbMemory limit (if set)
memory_percentMemory used vs limit
net_in_bytesNetwork bytes received
net_out_bytesNetwork bytes sent
block_read_bytesDisk read bytes
block_write_bytesDisk write bytes
pidsNumber of processes

Container Details

container = BrainzLab::Sentinel.container("nginx-web")

puts container.id            # Container ID
puts container.name          # Container name
puts container.image         # Image name:tag
puts container.status        # running, stopped, etc.
puts container.created_at    # When created
puts container.started_at    # When started
puts container.host          # Host it's running on
puts container.ports         # Exposed ports
puts container.labels        # Docker labels

Filter Containers

# By host
containers = BrainzLab::Sentinel.containers(host: "web-1")

# By image
containers = BrainzLab::Sentinel.containers(image: "nginx")

# By label
containers = BrainzLab::Sentinel.containers(label: "app=api")

# By status
running = BrainzLab::Sentinel.containers(status: :running)

Container History

View container metrics over time:
history = BrainzLab::Sentinel.container("nginx-web").metrics_history(
  period: :day,
  resolution: :hour
)

history.each do |point|
  puts "#{point.timestamp}: CPU=#{point.cpu}%, MEM=#{point.memory_mb}MB"
end

Container Events

Track container lifecycle events:
events = BrainzLab::Sentinel.container_events(since: 1.hour.ago)

events.each do |event|
  puts "#{event.timestamp}: #{event.container_name} #{event.action}"
  # => "2024-01-15 10:30:00: nginx-web started"
end

Alerts

Set up container-specific alerts:
# Alert when container stops
BrainzLab::Sentinel.alert_on_container(
  name: "nginx-web",
  event: :stopped,
  channel: :slack
)

# Alert on high memory usage
BrainzLab::Sentinel.alert_on_container(
  name: "api-server",
  metric: :memory_percent,
  threshold: 90,
  channel: :pagerduty
)

Docker Compose Support

Sentinel understands Docker Compose projects:
# List by compose project
containers = BrainzLab::Sentinel.containers(
  compose_project: "myapp"
)

# Get compose service stats
service = BrainzLab::Sentinel.compose_service("myapp", "web")
puts service.replica_count
puts service.total_memory_mb