Skip to content
This repository was archived by the owner on Dec 1, 2018. It is now read-only.

Commit 1400240

Browse files
committed
add filesystem inode metrics
1 parent 0ae7708 commit 1400240

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

docs/storage-schema.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Heapster exports the following metrics to its backends.
1515
| filesystem/usage | Total number of bytes consumed on a filesystem. |
1616
| filesystem/limit | The total size of filesystem in bytes. |
1717
| filesystem/available | The number of available bytes remaining in a the filesystem |
18+
| filesystem/inodes | The number of available inodes in a the filesystem |
19+
| filesystem/inodes_free | The number of free inodes remaining in a the filesystem |
1820
| memory/limit | Memory hard limit in bytes. |
1921
| memory/major_page_faults | Number of major page faults. |
2022
| memory/major_page_faults_rate | Number of major page faults per second. |

integration/heapster_api_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,9 @@ func runMetricExportTest(fm kubeFramework, svc *kube_api.Service) error {
350350
explicitRequirement := map[string][]string{
351351
core.MetricFilesystemUsage.MetricDescriptor.Name: {core.LabelResourceID.Key},
352352
core.MetricFilesystemLimit.MetricDescriptor.Name: {core.LabelResourceID.Key},
353-
core.MetricFilesystemAvailable.Name: {core.LabelResourceID.Key}}
353+
core.MetricFilesystemAvailable.Name: {core.LabelResourceID.Key},
354+
core.MetricFilesystemInodes.Name: {core.LabelResourceID.Key},
355+
core.MetricFilesystemInodesFree.Name: {core.LabelResourceID.Key}}
354356

355357
for metricName, points := range ts.Metrics {
356358
md, exists := mdMap[metricName]

metrics/core/metrics.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ var LabeledMetrics = []Metric{
6767
MetricFilesystemUsage,
6868
MetricFilesystemLimit,
6969
MetricFilesystemAvailable,
70+
MetricFilesystemInodes,
71+
MetricFilesystemInodesFree,
7072
}
7173

7274
var NodeAutoscalingMetrics = []Metric{
@@ -94,6 +96,8 @@ var FilesystemMetrics = []Metric{
9496
MetricFilesystemAvailable,
9597
MetricFilesystemLimit,
9698
MetricFilesystemUsage,
99+
MetricFilesystemInodes,
100+
MetricFilesystemInodesFree,
97101
}
98102
var MemoryMetrics = []Metric{
99103
MetricMemoryLimit,
@@ -609,6 +613,72 @@ var MetricFilesystemAvailable = Metric{
609613
},
610614
}
611615

616+
var MetricFilesystemInodes = Metric{
617+
MetricDescriptor: MetricDescriptor{
618+
Name: "filesystem/inodes",
619+
Description: "Total number of inodes on a filesystem",
620+
Type: MetricGauge,
621+
ValueType: ValueInt64,
622+
Units: UnitsBytes,
623+
Labels: metricLabels,
624+
},
625+
HasLabeledMetric: func(spec *cadvisor.ContainerSpec) bool {
626+
return spec.HasFilesystem
627+
},
628+
GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric {
629+
result := []LabeledMetric{}
630+
for _, fs := range stat.Filesystem {
631+
if fs.HasInodes {
632+
result = append(result, LabeledMetric{
633+
Name: "filesystem/inodes",
634+
Labels: map[string]string{
635+
LabelResourceID.Key: fs.Device,
636+
},
637+
MetricValue: MetricValue{
638+
ValueType: ValueInt64,
639+
MetricType: MetricGauge,
640+
IntValue: int64(fs.Inodes),
641+
},
642+
})
643+
}
644+
}
645+
return result
646+
},
647+
}
648+
649+
var MetricFilesystemInodesFree = Metric{
650+
MetricDescriptor: MetricDescriptor{
651+
Name: "filesystem/inodes_free",
652+
Description: "Free number of inodes on a filesystem",
653+
Type: MetricGauge,
654+
ValueType: ValueInt64,
655+
Units: UnitsBytes,
656+
Labels: metricLabels,
657+
},
658+
HasLabeledMetric: func(spec *cadvisor.ContainerSpec) bool {
659+
return spec.HasFilesystem
660+
},
661+
GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric {
662+
result := []LabeledMetric{}
663+
for _, fs := range stat.Filesystem {
664+
if fs.HasInodes {
665+
result = append(result, LabeledMetric{
666+
Name: "filesystem/inodes_free",
667+
Labels: map[string]string{
668+
LabelResourceID.Key: fs.Device,
669+
},
670+
MetricValue: MetricValue{
671+
ValueType: ValueInt64,
672+
MetricType: MetricGauge,
673+
IntValue: int64(fs.InodesFree),
674+
},
675+
})
676+
}
677+
}
678+
return result
679+
},
680+
}
681+
612682
func IsNodeAutoscalingMetric(name string) bool {
613683
for _, autoscalingMetric := range NodeAutoscalingMetrics {
614684
if autoscalingMetric.MetricDescriptor.Name == name {

0 commit comments

Comments
 (0)