Documentation
¶
Index ¶
- Constants
- Variables
- func PopulateSystemStats(data *share.CLUSStats, stats *share.ContainerStats)
- func UpdateStats(cs *share.ContainerStats, memory, cpu, cpuSystem uint64)
- type CgroupMemoryStats
- type CpuStats
- type CpuUsage
- type MemoryData
- type MemoryPressureCallback
- type MemoryPressureReport
- type NSCallback
- type SystemTools
- func (s *SystemTools) AddToolProcess(pgid, pid int, exec, cmds string)
- func (s *SystemTools) CGroupMemoryStatReset(threshold uint64) bool
- func (s *SystemTools) CallNamespaceFunc(nsid int, nstypes []string, cb NSCallback, params interface{}) error
- func (s *SystemTools) CallNetNamespaceFunc(pid int, cb NSCallback, params interface{}) error
- func (s *SystemTools) CallNetNamespaceFuncWithoutLock(pid int, cb NSCallback, params interface{}) error
- func (s *SystemTools) CheckHostProgram(prog string, pid int) ([]byte, error)
- func (s *SystemTools) CheckProcExist(pid int) bool
- func (s *SystemTools) ContainerFilePath(pid int, path string) string
- func (s *SystemTools) ContainerProcFilePath(pid int, path string) string
- func (s *SystemTools) GetAdvertiseAddr(addr net.IP) net.IP
- func (s *SystemTools) GetBindAddr(addr net.IP) (string, *net.IPNet)
- func (s *SystemTools) GetCgroupNamespacePath(pid int) string
- func (s *SystemTools) GetCgroupVersion() int
- func (s *SystemTools) GetContainerCPUUsage(cgroupPath string) (uint64, error)
- func (s *SystemTools) GetContainerCgroupPath(pid int, subsystem string) (string, error)
- func (s *SystemTools) GetContainerIDByPID(pid int) (string, bool, error, bool)
- func (s *SystemTools) GetContainerMemoryLimitUsage(cgroupPath string) (uint64, error)
- func (s *SystemTools) GetContainerMemoryStats() (*CgroupMemoryStats, error)
- func (s *SystemTools) GetContainerMemoryUsage(cgroupPath string) (uint64, error)
- func (s *SystemTools) GetExitStatus(err *exec.ExitError) int
- func (s *SystemTools) GetFileHash(pid int, path string) ([]byte, error)
- func (s *SystemTools) GetFilePath(pid int) (string, error)
- func (s *SystemTools) GetGlobalAddrs(device_only bool) map[string][]net.IPNet
- func (s *SystemTools) GetHostCPUUsage() (uint64, error)
- func (s *SystemTools) GetHostRouteIfaceAddr(addr net.IP) (net.IP, error)
- func (s *SystemTools) GetHostname(pid int) string
- func (s *SystemTools) GetIpcNamespacePath(pid int) string
- func (s *SystemTools) GetLocalProcessStatus(pid int) string
- func (s *SystemTools) GetMntNamespaceId(pid int) uint64
- func (s *SystemTools) GetMountNamespacePath(pid int) string
- func (s *SystemTools) GetNetNamespacePath(pid int) string
- func (s *SystemTools) GetPidNamespacePath(pid int) string
- func (s *SystemTools) GetProcRootDir() string
- func (s *SystemTools) GetProcessName(pid int) (string, int, error)
- func (s *SystemTools) GetSelfContainerID() (string, bool, error)
- func (s *SystemTools) GetSystemInfo() *sysinfo.SysInfo
- func (s *SystemTools) GetUserNamespacePath(pid int) string
- func (s *SystemTools) GetUtsNamespacePath(pid int) string
- func (s *SystemTools) IsOpenshift() (bool, error)
- func (s *SystemTools) IsRunningInContainer() bool
- func (s *SystemTools) KillCommandSubtree(pgid int, info string)
- func (s *SystemTools) LookupAufsContainerLayerPath(pid int, id string) (string, string, error)
- func (s *SystemTools) MonitorMemoryPressureEvents(threshold uint64, callback MemoryPressureCallback) error
- func (s *SystemTools) NsGetFile(filePath string, pid int, binary bool, start, len int) ([]byte, error)
- func (s *SystemTools) NsRunBinary(pid int, path string) ([]byte, error)
- func (s *SystemTools) NsRunScript(pid int, scripts string) ([]byte, error)
- func (s *SystemTools) NsRunScriptFile(pid int, path string) ([]byte, error)
- func (s *SystemTools) ParseContainerFilePath(path string) (int, string)
- func (s *SystemTools) ParseNetNamespacePath(path string) int
- func (s *SystemTools) ReCalculateMemoryMetrics(threshold uint64)
- func (s *SystemTools) ReadAufsContainerLayerPath(rootPid int, id string) (string, string, error)
- func (s *SystemTools) ReadCmdLine(pid int) ([]string, error)
- func (s *SystemTools) ReadContainerFile(filePath string, pid, start, length int) ([]byte, error)
- func (s *SystemTools) ReadMountedBtrfsWorkingPath(rootPid int, id string) (string, string, error)
- func (s *SystemTools) ReadMountedUppperLayerPath(rootPid int, id string) (string, string, error)
- func (s *SystemTools) RemoveContainerLayerPath(id string)
- func (s *SystemTools) RemoveToolProcess(pgid int, bKill bool)
- func (s *SystemTools) ShowToolProcesses()
- func (s *SystemTools) StopToolProcesses()
- type ThrottlingData
Constants ¶
Variables ¶
var ErrFileTooBig = errors.New("File Size over limit")
Functions ¶
func PopulateSystemStats ¶
func PopulateSystemStats(data *share.CLUSStats, stats *share.ContainerStats)
func UpdateStats ¶
func UpdateStats(cs *share.ContainerStats, memory, cpu, cpuSystem uint64)
Types ¶
type CgroupMemoryStats ¶
type CgroupMemoryStats struct {
// memory used reference by "kubectl top"
WorkingSet uint64 `json:"working_set,omitempty"`
// memory used for cache
Cache uint64 `json:"cache,omitempty"`
// usage of memory
Usage MemoryData `json:"usage,omitempty"`
// usage of memory + swap
SwapUsage MemoryData `json:"swap_usage,omitempty"`
// usage of kernel memory
KernelUsage MemoryData `json:"kernel_usage,omitempty"`
// usage of kernel TCP memory
KernelTCPUsage MemoryData `json:"kernel_tcp_usage,omitempty"`
// if true, memory usage is accounted for throughout a hierarchy of cgroups.
UseHierarchy bool `json:"use_hierarchy"`
Stats map[string]uint64 `json:"stats,omitempty"`
}
type CpuStats ¶
type CpuStats struct {
CpuUsage CpuUsage `json:"cpu_usage,omitempty"`
ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
}
type CpuUsage ¶
type CpuUsage struct {
// Total CPU time consumed.
// Units: nanoseconds.
TotalUsage uint64 `json:"total_usage,omitempty"`
// Total CPU time consumed per core.
// Units: nanoseconds.
PercpuUsage []uint64 `json:"percpu_usage,omitempty"`
// CPU time consumed per core in kernel mode
// Units: nanoseconds.
PercpuUsageInKernelmode []uint64 `json:"percpu_usage_in_kernelmode"`
// CPU time consumed per core in user mode
// Units: nanoseconds.
PercpuUsageInUsermode []uint64 `json:"percpu_usage_in_usermode"`
// Time spent by tasks of the cgroup in kernel mode.
// Units: nanoseconds.
UsageInKernelmode uint64 `json:"usage_in_kernelmode"`
// Time spent by tasks of the cgroup in user mode.
// Units: nanoseconds.
UsageInUsermode uint64 `json:"usage_in_usermode"`
}
type MemoryData ¶
type MemoryData struct {
Usage uint64 `json:"usage,omitempty"`
MaxUsage uint64 `json:"max_usage,omitempty"`
Failcnt uint64 `json:"failcnt"`
Limit uint64 `json:"limit"`
}
from github.com\opencontainers\runc\libcontainer\cgroups\stats.go
type MemoryPressureCallback ¶
type MemoryPressureCallback func(report *MemoryPressureReport)
type MemoryPressureReport ¶
type MemoryPressureReport struct {
// pressure level
Level uint64 `json:"level"`
// memory stats
Stats CgroupMemoryStats `json:"stats"`
}
type NSCallback ¶
type NSCallback func(params interface{})
type SystemTools ¶
type SystemTools struct {
// contains filtered or unexported fields
}
func NewSystemTools ¶
func NewSystemTools() *SystemTools
func (*SystemTools) AddToolProcess ¶
func (s *SystemTools) AddToolProcess(pgid, pid int, exec, cmds string)
func (*SystemTools) CGroupMemoryStatReset ¶
func (s *SystemTools) CGroupMemoryStatReset(threshold uint64) bool
func (*SystemTools) CallNamespaceFunc ¶
func (s *SystemTools) CallNamespaceFunc(nsid int, nstypes []string, cb NSCallback, params interface{}) error
func (*SystemTools) CallNetNamespaceFunc ¶
func (s *SystemTools) CallNetNamespaceFunc(pid int, cb NSCallback, params interface{}) error
func (*SystemTools) CallNetNamespaceFuncWithoutLock ¶
func (s *SystemTools) CallNetNamespaceFuncWithoutLock(pid int, cb NSCallback, params interface{}) error
func (*SystemTools) CheckHostProgram ¶
func (s *SystemTools) CheckHostProgram(prog string, pid int) ([]byte, error)
func (*SystemTools) CheckProcExist ¶
func (s *SystemTools) CheckProcExist(pid int) bool
func (*SystemTools) ContainerFilePath ¶
func (s *SystemTools) ContainerFilePath(pid int, path string) string
func (*SystemTools) ContainerProcFilePath ¶
func (s *SystemTools) ContainerProcFilePath(pid int, path string) string
func (*SystemTools) GetAdvertiseAddr ¶
func (s *SystemTools) GetAdvertiseAddr(addr net.IP) net.IP
func (*SystemTools) GetBindAddr ¶
func (*SystemTools) GetCgroupNamespacePath ¶
func (s *SystemTools) GetCgroupNamespacePath(pid int) string
func (*SystemTools) GetCgroupVersion ¶
func (s *SystemTools) GetCgroupVersion() int
verify the cgroup's memory controller cgroup v2 is a unified file system, it does not have the memory folder
func (*SystemTools) GetContainerCPUUsage ¶
func (s *SystemTools) GetContainerCPUUsage(cgroupPath string) (uint64, error)
func (*SystemTools) GetContainerCgroupPath ¶
func (s *SystemTools) GetContainerCgroupPath(pid int, subsystem string) (string, error)
func (*SystemTools) GetContainerIDByPID ¶
Return container ID and if cgroup file exist
func (*SystemTools) GetContainerMemoryLimitUsage ¶
func (s *SystemTools) GetContainerMemoryLimitUsage(cgroupPath string) (uint64, error)
func (*SystemTools) GetContainerMemoryStats ¶
func (s *SystemTools) GetContainerMemoryStats() (*CgroupMemoryStats, error)
func (*SystemTools) GetContainerMemoryUsage ¶
func (s *SystemTools) GetContainerMemoryUsage(cgroupPath string) (uint64, error)
func (*SystemTools) GetExitStatus ¶
func (s *SystemTools) GetExitStatus(err *exec.ExitError) int
func (*SystemTools) GetFileHash ¶
func (s *SystemTools) GetFileHash(pid int, path string) ([]byte, error)
func (*SystemTools) GetFilePath ¶
func (s *SystemTools) GetFilePath(pid int) (string, error)
func (*SystemTools) GetGlobalAddrs ¶
func (s *SystemTools) GetGlobalAddrs(device_only bool) map[string][]net.IPNet
func (*SystemTools) GetHostCPUUsage ¶
func (s *SystemTools) GetHostCPUUsage() (uint64, error)
func (*SystemTools) GetHostRouteIfaceAddr ¶
func (*SystemTools) GetHostname ¶
func (s *SystemTools) GetHostname(pid int) string
func (*SystemTools) GetIpcNamespacePath ¶
func (s *SystemTools) GetIpcNamespacePath(pid int) string
func (*SystemTools) GetLocalProcessStatus ¶
func (s *SystemTools) GetLocalProcessStatus(pid int) string
func (*SystemTools) GetMntNamespaceId ¶
func (s *SystemTools) GetMntNamespaceId(pid int) uint64
func (*SystemTools) GetMountNamespacePath ¶
func (s *SystemTools) GetMountNamespacePath(pid int) string
func (*SystemTools) GetNetNamespacePath ¶
func (s *SystemTools) GetNetNamespacePath(pid int) string
func (*SystemTools) GetPidNamespacePath ¶
func (s *SystemTools) GetPidNamespacePath(pid int) string
func (*SystemTools) GetProcRootDir ¶
func (s *SystemTools) GetProcRootDir() string
func (*SystemTools) GetProcessName ¶
func (s *SystemTools) GetProcessName(pid int) (string, int, error)
func (*SystemTools) GetSelfContainerID ¶
func (s *SystemTools) GetSelfContainerID() (string, bool, error)
Reture container ID, if it's container in container and error message
func (*SystemTools) GetSystemInfo ¶
func (s *SystemTools) GetSystemInfo() *sysinfo.SysInfo
func (*SystemTools) GetUserNamespacePath ¶
func (s *SystemTools) GetUserNamespacePath(pid int) string
func (*SystemTools) GetUtsNamespacePath ¶
func (s *SystemTools) GetUtsNamespacePath(pid int) string
func (*SystemTools) IsOpenshift ¶
func (s *SystemTools) IsOpenshift() (bool, error)
func (*SystemTools) IsRunningInContainer ¶
func (s *SystemTools) IsRunningInContainer() bool
func (*SystemTools) KillCommandSubtree ¶
func (s *SystemTools) KillCommandSubtree(pgid int, info string)
func (*SystemTools) LookupAufsContainerLayerPath ¶
/ Obsolated: the directory names do not correspond to the layer IDs (this has been true since Docker 1.10). / TODO: discover rootFs
func (*SystemTools) MonitorMemoryPressureEvents ¶
func (s *SystemTools) MonitorMemoryPressureEvents(threshold uint64, callback MemoryPressureCallback) error
Linux kernel: mm/vmpressure.c
VMPRESSURE_LOW = 0, VMPRESSURE_MEDIUM, <== 1, 60% VMPRESSURE_CRITICAL, <== 2, 95%
These thresholds are used when we account memory pressure through scanned/reclaimed ratio. The current values were chosen empirically. In essence, they are percents: the higher the value, the more number unsuccessful reclaims there were.
func (*SystemTools) NsGetFile ¶
func (s *SystemTools) NsGetFile(filePath string, pid int, binary bool, start, len int) ([]byte, error)
return true if file size over limit
func (*SystemTools) NsRunBinary ¶
func (s *SystemTools) NsRunBinary(pid int, path string) ([]byte, error)
Only can change network namespace
func (*SystemTools) NsRunScript ¶
func (s *SystemTools) NsRunScript(pid int, scripts string) ([]byte, error)
func (*SystemTools) NsRunScriptFile ¶
func (s *SystemTools) NsRunScriptFile(pid int, path string) ([]byte, error)
func (*SystemTools) ParseContainerFilePath ¶
func (s *SystemTools) ParseContainerFilePath(path string) (int, string)
func (*SystemTools) ParseNetNamespacePath ¶
func (s *SystemTools) ParseNetNamespacePath(path string) int
func (*SystemTools) ReCalculateMemoryMetrics ¶
func (s *SystemTools) ReCalculateMemoryMetrics(threshold uint64)
Limit the re-calculate function apart in 5 minutes
func (*SystemTools) ReadAufsContainerLayerPath ¶
func (*SystemTools) ReadCmdLine ¶
func (s *SystemTools) ReadCmdLine(pid int) ([]string, error)
func (*SystemTools) ReadContainerFile ¶
func (s *SystemTools) ReadContainerFile(filePath string, pid, start, length int) ([]byte, error)
func (*SystemTools) ReadMountedBtrfsWorkingPath ¶
func (*SystemTools) ReadMountedUppperLayerPath ¶
func (*SystemTools) RemoveContainerLayerPath ¶
func (s *SystemTools) RemoveContainerLayerPath(id string)
/
func (*SystemTools) RemoveToolProcess ¶
func (s *SystemTools) RemoveToolProcess(pgid int, bKill bool)
func (*SystemTools) ShowToolProcesses ¶
func (s *SystemTools) ShowToolProcesses()
func (*SystemTools) StopToolProcesses ¶
func (s *SystemTools) StopToolProcesses()
type ThrottlingData ¶
type ThrottlingData struct {
// Number of periods with throttling active
Periods uint64 `json:"periods,omitempty"`
// Number of periods when the container hit its throttling limit.
ThrottledPeriods uint64 `json:"throttled_periods,omitempty"`
// Aggregate time the container was throttled for in nanoseconds.
ThrottledTime uint64 `json:"throttled_time,omitempty"`
}
CPU