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

Commit d295f44

Browse files
authored
Merge pull request #1542 from andyxning/add_filesystemd_inodes
add filesystem inode metrics
2 parents 3298d93 + 1400240 commit d295f44

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
@@ -354,7 +354,9 @@ func runMetricExportTest(fm kubeFramework, svc *kube_v1.Service) error {
354354
explicitRequirement := map[string][]string{
355355
core.MetricFilesystemUsage.MetricDescriptor.Name: {core.LabelResourceID.Key},
356356
core.MetricFilesystemLimit.MetricDescriptor.Name: {core.LabelResourceID.Key},
357-
core.MetricFilesystemAvailable.Name: {core.LabelResourceID.Key}}
357+
core.MetricFilesystemAvailable.Name: {core.LabelResourceID.Key},
358+
core.MetricFilesystemInodes.Name: {core.LabelResourceID.Key},
359+
core.MetricFilesystemInodesFree.Name: {core.LabelResourceID.Key}}
358360

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

metrics/core/metrics.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ var LabeledMetrics = []Metric{
6969
MetricFilesystemUsage,
7070
MetricFilesystemLimit,
7171
MetricFilesystemAvailable,
72+
MetricFilesystemInodes,
73+
MetricFilesystemInodesFree,
7274
}
7375

7476
var NodeAutoscalingMetrics = []Metric{
@@ -96,6 +98,8 @@ var FilesystemMetrics = []Metric{
9698
MetricFilesystemAvailable,
9799
MetricFilesystemLimit,
98100
MetricFilesystemUsage,
101+
MetricFilesystemInodes,
102+
MetricFilesystemInodesFree,
99103
}
100104
var MemoryMetrics = []Metric{
101105
MetricMemoryLimit,
@@ -651,6 +655,72 @@ var MetricFilesystemAvailable = Metric{
651655
},
652656
}
653657

658+
var MetricFilesystemInodes = Metric{
659+
MetricDescriptor: MetricDescriptor{
660+
Name: "filesystem/inodes",
661+
Description: "Total number of inodes on a filesystem",
662+
Type: MetricGauge,
663+
ValueType: ValueInt64,
664+
Units: UnitsBytes,
665+
Labels: metricLabels,
666+
},
667+
HasLabeledMetric: func(spec *cadvisor.ContainerSpec) bool {
668+
return spec.HasFilesystem
669+
},
670+
GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric {
671+
result := []LabeledMetric{}
672+
for _, fs := range stat.Filesystem {
673+
if fs.HasInodes {
674+
result = append(result, LabeledMetric{
675+
Name: "filesystem/inodes",
676+
Labels: map[string]string{
677+
LabelResourceID.Key: fs.Device,
678+
},
679+
MetricValue: MetricValue{
680+
ValueType: ValueInt64,
681+
MetricType: MetricGauge,
682+
IntValue: int64(fs.Inodes),
683+
},
684+
})
685+
}
686+
}
687+
return result
688+
},
689+
}
690+
691+
var MetricFilesystemInodesFree = Metric{
692+
MetricDescriptor: MetricDescriptor{
693+
Name: "filesystem/inodes_free",
694+
Description: "Free number of inodes on a filesystem",
695+
Type: MetricGauge,
696+
ValueType: ValueInt64,
697+
Units: UnitsBytes,
698+
Labels: metricLabels,
699+
},
700+
HasLabeledMetric: func(spec *cadvisor.ContainerSpec) bool {
701+
return spec.HasFilesystem
702+
},
703+
GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric {
704+
result := []LabeledMetric{}
705+
for _, fs := range stat.Filesystem {
706+
if fs.HasInodes {
707+
result = append(result, LabeledMetric{
708+
Name: "filesystem/inodes_free",
709+
Labels: map[string]string{
710+
LabelResourceID.Key: fs.Device,
711+
},
712+
MetricValue: MetricValue{
713+
ValueType: ValueInt64,
714+
MetricType: MetricGauge,
715+
IntValue: int64(fs.InodesFree),
716+
},
717+
})
718+
}
719+
}
720+
return result
721+
},
722+
}
723+
654724
func IsNodeAutoscalingMetric(name string) bool {
655725
for _, autoscalingMetric := range NodeAutoscalingMetrics {
656726
if autoscalingMetric.MetricDescriptor.Name == name {

0 commit comments

Comments
 (0)