f36feb2ed4
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
778 lines
15 KiB
Go
778 lines
15 KiB
Go
package prometheus
|
|
|
|
import (
|
|
"github.com/crosbymichael/cgroups"
|
|
metrics "github.com/docker/go-metrics"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
var memoryMetrics = []*metric{
|
|
{
|
|
name: "memory_cache",
|
|
help: "The cache amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Cache),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_rss",
|
|
help: "The rss amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.RSS),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_rss_huge",
|
|
help: "The rss_huge amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.RSSHuge),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_mapped_file",
|
|
help: "The mapped_file amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.MappedFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_dirty",
|
|
help: "The dirty amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Dirty),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_writeback",
|
|
help: "The writeback amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Writeback),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_pgpgin",
|
|
help: "The pgpgin amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.PgPgIn),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_pgpgout",
|
|
help: "The pgpgout amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.PgPgOut),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_pgfault",
|
|
help: "The pgfault amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.PgFault),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_pgmajfault",
|
|
help: "The pgmajfault amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.PgMajFault),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_inactive_anon",
|
|
help: "The inactive_anon amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.InactiveAnon),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_active_anon",
|
|
help: "The active_anon amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.ActiveAnon),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_inactive_file",
|
|
help: "The inactive_file amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.InactiveFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_active_file",
|
|
help: "The active_file amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.ActiveFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_unevictable",
|
|
help: "The unevictable amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Unevictable),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_hierarchical_memory_limit",
|
|
help: "The hierarchical_memory_limit amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.HierarchicalMemoryLimit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_hierarchical_memsw_limit",
|
|
help: "The hierarchical_memsw_limit amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.HierarchicalSwapLimit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_cache",
|
|
help: "The total_cache amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalCache),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_rss",
|
|
help: "The total_rss amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalRSS),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_rss_huge",
|
|
help: "The total_rss_huge amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalRSSHuge),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_mapped_file",
|
|
help: "The total_mapped_file amount used",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalMappedFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_dirty",
|
|
help: "The total_dirty amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalDirty),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_writeback",
|
|
help: "The total_writeback amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalWriteback),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_pgpgin",
|
|
help: "The total_pgpgin amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalPgPgIn),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_pgpgout",
|
|
help: "The total_pgpgout amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalPgPgOut),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_pgfault",
|
|
help: "The total_pgfault amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalPgFault),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_pgmajfault",
|
|
help: "The total_pgmajfault amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalPgMajFault),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_inactive_anon",
|
|
help: "The total_inactive_anon amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalInactiveAnon),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_active_anon",
|
|
help: "The total_active_anon amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalActiveAnon),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_inactive_file",
|
|
help: "The total_inactive_file amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalInactiveFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_active_file",
|
|
help: "The total_active_file amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalActiveFile),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_total_unevictable",
|
|
help: "The total_unevictable amount",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.TotalUnevictable),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_usage_failcnt",
|
|
help: "The usage failcnt",
|
|
unit: metrics.Total,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Usage.Failcnt),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_usage_limit",
|
|
help: "The memory limit",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Usage.Limit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_usage_max",
|
|
help: "The memory maximum usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Usage.Max),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_usage_usage",
|
|
help: "The memory usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Usage.Usage),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_swap_failcnt",
|
|
help: "The swap failcnt",
|
|
unit: metrics.Total,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Swap.Failcnt),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_swap_limit",
|
|
help: "The swap limit",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Swap.Limit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_swap_max",
|
|
help: "The swap maximum usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Swap.Max),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_swap_usage",
|
|
help: "The swap usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Swap.Usage),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kernel_failcnt",
|
|
help: "The kernel failcnt",
|
|
unit: metrics.Total,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Kernel.Failcnt),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kernel_limit",
|
|
help: "The kernel limit",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Kernel.Limit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kernel_max",
|
|
help: "The kernel maximum usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Kernel.Max),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kernel_usage",
|
|
help: "The kernel usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.Kernel.Usage),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kerneltcp_failcnt",
|
|
help: "The kerneltcp failcnt",
|
|
unit: metrics.Total,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.KernelTCP.Failcnt),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kerneltcp_limit",
|
|
help: "The kerneltcp limit",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.KernelTCP.Limit),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kerneltcp_max",
|
|
help: "The kerneltcp maximum usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.KernelTCP.Max),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "memory_kerneltcp_usage",
|
|
help: "The kerneltcp usage",
|
|
unit: metrics.Bytes,
|
|
vt: prometheus.GaugeValue,
|
|
getValues: func(stats *cgroups.Stats) []value {
|
|
if stats.Memory == nil {
|
|
return nil
|
|
}
|
|
return []value{
|
|
{
|
|
v: float64(stats.Memory.KernelTCP.Usage),
|
|
},
|
|
}
|
|
},
|
|
},
|
|
}
|