package container

import "github.com/google/cadvisor/container"

Package container defines types for sub-container events and also defines an interface for container operation handlers.

Index

Variables

var AllMetrics = MetricSet{
	CpuUsageMetrics:                struct{}{},
	ProcessSchedulerMetrics:        struct{}{},
	PerCpuUsageMetrics:             struct{}{},
	MemoryUsageMetrics:             struct{}{},
	MemoryNumaMetrics:              struct{}{},
	CpuLoadMetrics:                 struct{}{},
	DiskIOMetrics:                  struct{}{},
	DiskUsageMetrics:               struct{}{},
	NetworkUsageMetrics:            struct{}{},
	NetworkTcpUsageMetrics:         struct{}{},
	NetworkAdvancedTcpUsageMetrics: struct{}{},
	NetworkUdpUsageMetrics:         struct{}{},
	ProcessMetrics:                 struct{}{},
	AppMetrics:                     struct{}{},
	HugetlbUsageMetrics:            struct{}{},
	PerfMetrics:                    struct{}{},
	ReferencedMemoryMetrics:        struct{}{},
	CPUTopologyMetrics:             struct{}{},
	ResctrlMetrics:                 struct{}{},
	CPUSetMetrics:                  struct{}{},
	OOMMetrics:                     struct{}{},
	PressureMetrics:                struct{}{},
}

AllMetrics represents all kinds of metrics that cAdvisor supported.

var AllNetworkMetrics = MetricSet{
	NetworkUsageMetrics:            struct{}{},
	NetworkTcpUsageMetrics:         struct{}{},
	NetworkAdvancedTcpUsageMetrics: struct{}{},
	NetworkUdpUsageMetrics:         struct{}{},
}

AllNetworkMetrics represents all network metrics that cAdvisor supports.

Functions

func ClearContainerHandlerFactories

func ClearContainerHandlerFactories()

Clear the known factories.

func DebugInfo

func DebugInfo() map[string][]string

func HasFactories

func HasFactories() bool

Returns whether there are any container handler factories registered.

func InitializeFSContext

func InitializeFSContext(context *fs.Context) error

func InitializePlugins

func InitializePlugins(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics MetricSet) []watcher.ContainerWatcher

func RegisterContainerHandlerFactory

func RegisterContainerHandlerFactory(factory ContainerHandlerFactory, watchTypes []watcher.ContainerWatchSource)

Register a ContainerHandlerFactory. These should be registered from least general to most general as they will be asked in order whether they can handle a particular container.

func RegisterPlugin

func RegisterPlugin(name string, plugin Plugin) error

Types

type ContainerHandler

type ContainerHandler interface {
	// Returns the ContainerReference
	ContainerReference() (info.ContainerReference, error)

	// Returns container's isolation spec.
	GetSpec() (info.ContainerSpec, error)

	// Returns the current stats values of the container.
	GetStats() (*info.ContainerStats, error)

	// Returns the subcontainers of this container.
	ListContainers(listType ListType) ([]info.ContainerReference, error)

	// Returns the processes inside this container.
	ListProcesses(listType ListType) ([]int, error)

	// Returns absolute cgroup path for the requested resource.
	GetCgroupPath(resource string) (string, error)

	// Returns container labels, if available.
	GetContainerLabels() map[string]string

	// Returns the container's ip address, if available
	GetContainerIPAddress() string

	// Returns whether the container still exists.
	Exists() bool

	// Cleanup frees up any resources being held like fds or go routines, etc.
	Cleanup()

	// Start starts any necessary background goroutines - must be cleaned up in Cleanup().
	// It is expected that most implementations will be a no-op.
	Start()

	// Type of handler
	Type() ContainerType
}

Interface for container operation handlers.

func NewContainerHandler

func NewContainerHandler(name string, watchType watcher.ContainerWatchSource, metadataEnvAllowList []string, inHostNamespace bool) (ContainerHandler, bool, error)

Create a new ContainerHandler for the specified container.

type ContainerHandlerFactory

type ContainerHandlerFactory interface {
	// Create a new ContainerHandler using this factory. CanHandleAndAccept() must have returned true.
	NewContainerHandler(name string, metadataEnvAllowList []string, inHostNamespace bool) (c ContainerHandler, err error)

	// Returns whether this factory can handle and accept the specified container.
	CanHandleAndAccept(name string) (handle bool, accept bool, err error)

	// Name of the factory.
	String() string

	// Returns debugging information. Map of lines per category.
	DebugInfo() map[string][]string
}

func GetReorderedFactoryList

func GetReorderedFactoryList(watchType watcher.ContainerWatchSource) []ContainerHandlerFactory

GetReorderedFactoryList returns the list of ContainerHandlerFactory where the RawContainerHandler is always the last element.

type ContainerType

type ContainerType int
const (
	ContainerTypeRaw ContainerType = iota
	ContainerTypeDocker
	ContainerTypeCrio
	ContainerTypeContainerd
	ContainerTypeMesos
	ContainerTypePodman
)

type ListType

type ListType int

ListType describes whether listing should be just for a specific container or performed recursively.

const (
	ListSelf ListType = iota
	ListRecursive
)

type MetricKind

type MetricKind string

MetricKind represents the kind of metrics that cAdvisor exposes.

const (
	CpuUsageMetrics                MetricKind = "cpu"
	ProcessSchedulerMetrics        MetricKind = "sched"
	PerCpuUsageMetrics             MetricKind = "percpu"
	MemoryUsageMetrics             MetricKind = "memory"
	MemoryNumaMetrics              MetricKind = "memory_numa"
	CpuLoadMetrics                 MetricKind = "cpuLoad"
	DiskIOMetrics                  MetricKind = "diskIO"
	DiskUsageMetrics               MetricKind = "disk"
	NetworkUsageMetrics            MetricKind = "network"
	NetworkTcpUsageMetrics         MetricKind = "tcp"
	NetworkAdvancedTcpUsageMetrics MetricKind = "advtcp"
	NetworkUdpUsageMetrics         MetricKind = "udp"
	AppMetrics                     MetricKind = "app"
	ProcessMetrics                 MetricKind = "process"
	HugetlbUsageMetrics            MetricKind = "hugetlb"
	PerfMetrics                    MetricKind = "perf_event"
	ReferencedMemoryMetrics        MetricKind = "referenced_memory"
	CPUTopologyMetrics             MetricKind = "cpu_topology"
	ResctrlMetrics                 MetricKind = "resctrl"
	CPUSetMetrics                  MetricKind = "cpuset"
	OOMMetrics                     MetricKind = "oom_event"
	PressureMetrics                MetricKind = "pressure"
)

func (MetricKind) String

func (mk MetricKind) String() string

type MetricSet

type MetricSet map[MetricKind]struct{}

func (MetricSet) Append

func (ms MetricSet) Append(ms1 MetricSet) MetricSet

func (MetricSet) Difference

func (ms MetricSet) Difference(ms1 MetricSet) MetricSet

func (MetricSet) Has

func (ms MetricSet) Has(mk MetricKind) bool

func (MetricSet) HasAny

func (ms MetricSet) HasAny(ms1 MetricSet) bool

func (*MetricSet) Set

func (ms *MetricSet) Set(value string) error

Not thread-safe, exported only for https://pkg.go.dev/flag#Value

func (MetricSet) String

func (ms MetricSet) String() string

type Plugin

type Plugin interface {
	// InitializeFSContext is invoked when populating an fs.Context object for a new manager.
	// A returned error here is fatal.
	InitializeFSContext(context *fs.Context) error

	// Register is invoked when starting a manager. It can optionally return a container watcher.
	// A returned error is logged, but is not fatal.
	Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics MetricSet) (watcher.ContainerWatcher, error)
}

Source Files

container.go factory.go

Directories

PathSynopsis
container/commonUnmarshal's a Containers description json file.
container/containerdThis code has been taken from containerd repo to avoid large library import
container/containerd/containers
container/containerd/identifiersPackage identifiers provides common validation for identifiers and keys across containerd.
container/containerd/installThe install package registers containerd.NewPlugin() as the "containerd" container provider when imported
container/containerd/namespaces
container/containerd/pkg
container/containerd/pkg/dialer
container/crioHandler for CRI-O containers.
container/crio/installThe install package registers crio.NewPlugin() as the "crio" container provider when imported
container/dockerProvides global docker information.
container/docker/installThe install package registers docker.NewPlugin() as the "docker" container provider when imported
container/docker/utils
container/libcontainer
container/podman
container/podman/install
container/rawHandler for "raw" containers.
container/systemd
container/systemd/installThe install package registers systemd.NewPlugin() as the "systemd" container provider when imported
container/testing
Version
v0.52.1 (latest)
Published
Mar 5, 2025
Platform
linux/amd64
Imports
8 packages
Last checked
3 days ago

Tools for package owners.