mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-03-05 21:00:12 -08:00
Fix seconds reported by schedstat (#1426)
Upstream bugfix: https://github.com/prometheus/procfs/pull/191 Signed-off-by: Phil Frost <phil@postmates.com>
This commit is contained in:
parent
75462bf4fe
commit
26d4fbdf07
|
@ -2440,16 +2440,16 @@ node_qdisc_requeues_total{device="eth0",kind="pfifo_fast"} 2
|
||||||
node_qdisc_requeues_total{device="wlan0",kind="fq"} 1
|
node_qdisc_requeues_total{device="wlan0",kind="fq"} 1
|
||||||
# HELP node_schedstat_running_seconds_total Number of seconds CPU spent running a process.
|
# HELP node_schedstat_running_seconds_total Number of seconds CPU spent running a process.
|
||||||
# TYPE node_schedstat_running_seconds_total counter
|
# TYPE node_schedstat_running_seconds_total counter
|
||||||
node_schedstat_running_seconds_total{cpu="0"} 2.045936778163039e+13
|
node_schedstat_running_seconds_total{cpu="0"} 2.045936778163039e+06
|
||||||
node_schedstat_running_seconds_total{cpu="1"} 1.904686152592476e+13
|
node_schedstat_running_seconds_total{cpu="1"} 1.904686152592476e+06
|
||||||
# HELP node_schedstat_timeslices_total Number of timeslices executed by CPU.
|
# HELP node_schedstat_timeslices_total Number of timeslices executed by CPU.
|
||||||
# TYPE node_schedstat_timeslices_total counter
|
# TYPE node_schedstat_timeslices_total counter
|
||||||
node_schedstat_timeslices_total{cpu="0"} 4.767485306e+09
|
node_schedstat_timeslices_total{cpu="0"} 4.767485306e+09
|
||||||
node_schedstat_timeslices_total{cpu="1"} 5.145567945e+09
|
node_schedstat_timeslices_total{cpu="1"} 5.145567945e+09
|
||||||
# HELP node_schedstat_waiting_seconds_total Number of seconds spent by processing waiting for this CPU.
|
# HELP node_schedstat_waiting_seconds_total Number of seconds spent by processing waiting for this CPU.
|
||||||
# TYPE node_schedstat_waiting_seconds_total counter
|
# TYPE node_schedstat_waiting_seconds_total counter
|
||||||
node_schedstat_waiting_seconds_total{cpu="0"} 3.43796328169361e+12
|
node_schedstat_waiting_seconds_total{cpu="0"} 343796.328169361
|
||||||
node_schedstat_waiting_seconds_total{cpu="1"} 3.64107263788241e+12
|
node_schedstat_waiting_seconds_total{cpu="1"} 364107.263788241
|
||||||
# HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape.
|
# HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape.
|
||||||
# TYPE node_scrape_collector_duration_seconds gauge
|
# TYPE node_scrape_collector_duration_seconds gauge
|
||||||
# HELP node_scrape_collector_success node_exporter: Whether a collector succeeded.
|
# HELP node_scrape_collector_success node_exporter: Whether a collector succeeded.
|
||||||
|
|
|
@ -2440,16 +2440,16 @@ node_qdisc_requeues_total{device="eth0",kind="pfifo_fast"} 2
|
||||||
node_qdisc_requeues_total{device="wlan0",kind="fq"} 1
|
node_qdisc_requeues_total{device="wlan0",kind="fq"} 1
|
||||||
# HELP node_schedstat_running_seconds_total Number of seconds CPU spent running a process.
|
# HELP node_schedstat_running_seconds_total Number of seconds CPU spent running a process.
|
||||||
# TYPE node_schedstat_running_seconds_total counter
|
# TYPE node_schedstat_running_seconds_total counter
|
||||||
node_schedstat_running_seconds_total{cpu="0"} 2.045936778163039e+13
|
node_schedstat_running_seconds_total{cpu="0"} 2.045936778163039e+06
|
||||||
node_schedstat_running_seconds_total{cpu="1"} 1.904686152592476e+13
|
node_schedstat_running_seconds_total{cpu="1"} 1.904686152592476e+06
|
||||||
# HELP node_schedstat_timeslices_total Number of timeslices executed by CPU.
|
# HELP node_schedstat_timeslices_total Number of timeslices executed by CPU.
|
||||||
# TYPE node_schedstat_timeslices_total counter
|
# TYPE node_schedstat_timeslices_total counter
|
||||||
node_schedstat_timeslices_total{cpu="0"} 4.767485306e+09
|
node_schedstat_timeslices_total{cpu="0"} 4.767485306e+09
|
||||||
node_schedstat_timeslices_total{cpu="1"} 5.145567945e+09
|
node_schedstat_timeslices_total{cpu="1"} 5.145567945e+09
|
||||||
# HELP node_schedstat_waiting_seconds_total Number of seconds spent by processing waiting for this CPU.
|
# HELP node_schedstat_waiting_seconds_total Number of seconds spent by processing waiting for this CPU.
|
||||||
# TYPE node_schedstat_waiting_seconds_total counter
|
# TYPE node_schedstat_waiting_seconds_total counter
|
||||||
node_schedstat_waiting_seconds_total{cpu="0"} 3.43796328169361e+12
|
node_schedstat_waiting_seconds_total{cpu="0"} 343796.328169361
|
||||||
node_schedstat_waiting_seconds_total{cpu="1"} 3.64107263788241e+12
|
node_schedstat_waiting_seconds_total{cpu="1"} 364107.263788241
|
||||||
# HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape.
|
# HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape.
|
||||||
# TYPE node_scrape_collector_duration_seconds gauge
|
# TYPE node_scrape_collector_duration_seconds gauge
|
||||||
# HELP node_scrape_collector_success node_exporter: Whether a collector succeeded.
|
# HELP node_scrape_collector_success node_exporter: Whether a collector succeeded.
|
||||||
|
|
|
@ -20,6 +20,8 @@ import (
|
||||||
"github.com/prometheus/procfs"
|
"github.com/prometheus/procfs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const nsPerSec = 1e9
|
||||||
|
|
||||||
var (
|
var (
|
||||||
runningSecondsTotal = prometheus.NewDesc(
|
runningSecondsTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(namespace, "schedstat", "running_seconds_total"),
|
prometheus.BuildFQName(namespace, "schedstat", "running_seconds_total"),
|
||||||
|
@ -71,14 +73,14 @@ func (c *schedstatCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
runningSecondsTotal,
|
runningSecondsTotal,
|
||||||
prometheus.CounterValue,
|
prometheus.CounterValue,
|
||||||
cpu.RunningSeconds(),
|
float64(cpu.RunningNanoseconds)/nsPerSec,
|
||||||
cpu.CPUNum,
|
cpu.CPUNum,
|
||||||
)
|
)
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
waitingSecondsTotal,
|
waitingSecondsTotal,
|
||||||
prometheus.CounterValue,
|
prometheus.CounterValue,
|
||||||
cpu.WaitingSeconds(),
|
float64(cpu.WaitingNanoseconds)/nsPerSec,
|
||||||
cpu.CPUNum,
|
cpu.CPUNum,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -15,7 +15,7 @@ require (
|
||||||
github.com/prometheus/client_golang v1.0.0
|
github.com/prometheus/client_golang v1.0.0
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90
|
||||||
github.com/prometheus/common v0.4.1
|
github.com/prometheus/common v0.4.1
|
||||||
github.com/prometheus/procfs v0.0.4-0.20190702183519-8f55e607908e
|
github.com/prometheus/procfs v0.0.4-0.20190731153504-5da962fa40f1
|
||||||
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745
|
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745
|
||||||
github.com/sirupsen/logrus v1.4.2 // indirect
|
github.com/sirupsen/logrus v1.4.2 // indirect
|
||||||
github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a
|
github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -68,8 +68,8 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.0.4-0.20190702183519-8f55e607908e h1:p57e/ejwNofSHhEh+d7KoCVpHSTN3efX5Aj3z0jGWIE=
|
github.com/prometheus/procfs v0.0.4-0.20190731153504-5da962fa40f1 h1:uqK/YnaVFq1uofHlzj+IR4HhCYA/nbrvJ431l7cm7Vs=
|
||||||
github.com/prometheus/procfs v0.0.4-0.20190702183519-8f55e607908e/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
github.com/prometheus/procfs v0.0.4-0.20190731153504-5da962fa40f1/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745 h1:IuH7WumZNax0D+rEqmy2TyhKCzrtMGqbZO0b8rO00JA=
|
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745 h1:IuH7WumZNax0D+rEqmy2TyhKCzrtMGqbZO0b8rO00JA=
|
||||||
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8=
|
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
|
266
vendor/github.com/prometheus/procfs/fixtures.ttar
generated
vendored
266
vendor/github.com/prometheus/procfs/fixtures.ttar
generated
vendored
|
@ -909,6 +909,272 @@ Lines: 1
|
||||||
0
|
0
|
||||||
Mode: 644
|
Mode: 644
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Path: fixtures/proc/zoneinfo
|
||||||
|
Lines: 262
|
||||||
|
Node 0, zone DMA
|
||||||
|
per-node stats
|
||||||
|
nr_inactive_anon 230981
|
||||||
|
nr_active_anon 547580
|
||||||
|
nr_inactive_file 316904
|
||||||
|
nr_active_file 346282
|
||||||
|
nr_unevictable 115467
|
||||||
|
nr_slab_reclaimable 131220
|
||||||
|
nr_slab_unreclaimable 47320
|
||||||
|
nr_isolated_anon 0
|
||||||
|
nr_isolated_file 0
|
||||||
|
workingset_nodes 11627
|
||||||
|
workingset_refault 466886
|
||||||
|
workingset_activate 276925
|
||||||
|
workingset_restore 84055
|
||||||
|
workingset_nodereclaim 487
|
||||||
|
nr_anon_pages 795576
|
||||||
|
nr_mapped 215483
|
||||||
|
nr_file_pages 761874
|
||||||
|
nr_dirty 908
|
||||||
|
nr_writeback 0
|
||||||
|
nr_writeback_temp 0
|
||||||
|
nr_shmem 224925
|
||||||
|
nr_shmem_hugepages 0
|
||||||
|
nr_shmem_pmdmapped 0
|
||||||
|
nr_anon_transparent_hugepages 0
|
||||||
|
nr_unstable 0
|
||||||
|
nr_vmscan_write 12950
|
||||||
|
nr_vmscan_immediate_reclaim 3033
|
||||||
|
nr_dirtied 8007423
|
||||||
|
nr_written 7752121
|
||||||
|
nr_kernel_misc_reclaimable 0
|
||||||
|
pages free 3952
|
||||||
|
min 33
|
||||||
|
low 41
|
||||||
|
high 49
|
||||||
|
spanned 4095
|
||||||
|
present 3975
|
||||||
|
managed 3956
|
||||||
|
protection: (0, 2877, 7826, 7826, 7826)
|
||||||
|
nr_free_pages 3952
|
||||||
|
nr_zone_inactive_anon 0
|
||||||
|
nr_zone_active_anon 0
|
||||||
|
nr_zone_inactive_file 0
|
||||||
|
nr_zone_active_file 0
|
||||||
|
nr_zone_unevictable 0
|
||||||
|
nr_zone_write_pending 0
|
||||||
|
nr_mlock 0
|
||||||
|
nr_page_table_pages 0
|
||||||
|
nr_kernel_stack 0
|
||||||
|
nr_bounce 0
|
||||||
|
nr_zspages 0
|
||||||
|
nr_free_cma 0
|
||||||
|
numa_hit 1
|
||||||
|
numa_miss 0
|
||||||
|
numa_foreign 0
|
||||||
|
numa_interleave 0
|
||||||
|
numa_local 1
|
||||||
|
numa_other 0
|
||||||
|
pagesets
|
||||||
|
cpu: 0
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 1
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 2
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 3
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 4
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 5
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 6
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
cpu: 7
|
||||||
|
count: 0
|
||||||
|
high: 0
|
||||||
|
batch: 1
|
||||||
|
vm stats threshold: 8
|
||||||
|
node_unreclaimable: 0
|
||||||
|
start_pfn: 1
|
||||||
|
Node 0, zone DMA32
|
||||||
|
pages free 204252
|
||||||
|
min 19510
|
||||||
|
low 21059
|
||||||
|
high 22608
|
||||||
|
spanned 1044480
|
||||||
|
present 759231
|
||||||
|
managed 742806
|
||||||
|
protection: (0, 0, 4949, 4949, 4949)
|
||||||
|
nr_free_pages 204252
|
||||||
|
nr_zone_inactive_anon 118558
|
||||||
|
nr_zone_active_anon 106598
|
||||||
|
nr_zone_inactive_file 75475
|
||||||
|
nr_zone_active_file 70293
|
||||||
|
nr_zone_unevictable 66195
|
||||||
|
nr_zone_write_pending 64
|
||||||
|
nr_mlock 4
|
||||||
|
nr_page_table_pages 1756
|
||||||
|
nr_kernel_stack 2208
|
||||||
|
nr_bounce 0
|
||||||
|
nr_zspages 0
|
||||||
|
nr_free_cma 0
|
||||||
|
numa_hit 113952967
|
||||||
|
numa_miss 0
|
||||||
|
numa_foreign 0
|
||||||
|
numa_interleave 0
|
||||||
|
numa_local 113952967
|
||||||
|
numa_other 0
|
||||||
|
pagesets
|
||||||
|
cpu: 0
|
||||||
|
count: 345
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 1
|
||||||
|
count: 356
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 2
|
||||||
|
count: 325
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 3
|
||||||
|
count: 346
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 4
|
||||||
|
count: 321
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 5
|
||||||
|
count: 316
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 6
|
||||||
|
count: 373
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
cpu: 7
|
||||||
|
count: 339
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 48
|
||||||
|
node_unreclaimable: 0
|
||||||
|
start_pfn: 4096
|
||||||
|
Node 0, zone Normal
|
||||||
|
pages free 18553
|
||||||
|
min 11176
|
||||||
|
low 13842
|
||||||
|
high 16508
|
||||||
|
spanned 1308160
|
||||||
|
present 1308160
|
||||||
|
managed 1268711
|
||||||
|
protection: (0, 0, 0, 0, 0)
|
||||||
|
nr_free_pages 18553
|
||||||
|
nr_zone_inactive_anon 112423
|
||||||
|
nr_zone_active_anon 440982
|
||||||
|
nr_zone_inactive_file 241429
|
||||||
|
nr_zone_active_file 275989
|
||||||
|
nr_zone_unevictable 49272
|
||||||
|
nr_zone_write_pending 844
|
||||||
|
nr_mlock 154
|
||||||
|
nr_page_table_pages 9750
|
||||||
|
nr_kernel_stack 15136
|
||||||
|
nr_bounce 0
|
||||||
|
nr_zspages 0
|
||||||
|
nr_free_cma 0
|
||||||
|
numa_hit 162718019
|
||||||
|
numa_miss 0
|
||||||
|
numa_foreign 0
|
||||||
|
numa_interleave 26812
|
||||||
|
numa_local 162718019
|
||||||
|
numa_other 0
|
||||||
|
pagesets
|
||||||
|
cpu: 0
|
||||||
|
count: 316
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 1
|
||||||
|
count: 366
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 2
|
||||||
|
count: 60
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 3
|
||||||
|
count: 256
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 4
|
||||||
|
count: 253
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 5
|
||||||
|
count: 159
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 6
|
||||||
|
count: 311
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
cpu: 7
|
||||||
|
count: 264
|
||||||
|
high: 378
|
||||||
|
batch: 63
|
||||||
|
vm stats threshold: 56
|
||||||
|
node_unreclaimable: 0
|
||||||
|
start_pfn: 1048576
|
||||||
|
Node 0, zone Movable
|
||||||
|
pages free 0
|
||||||
|
min 0
|
||||||
|
low 0
|
||||||
|
high 0
|
||||||
|
spanned 0
|
||||||
|
present 0
|
||||||
|
managed 0
|
||||||
|
protection: (0, 0, 0, 0, 0)
|
||||||
|
Node 0, zone Device
|
||||||
|
pages free 0
|
||||||
|
min 0
|
||||||
|
low 0
|
||||||
|
high 0
|
||||||
|
spanned 0
|
||||||
|
present 0
|
||||||
|
managed 0
|
||||||
|
protection: (0, 0, 0, 0, 0)
|
||||||
|
Mode: 444
|
||||||
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Directory: fixtures/sys
|
Directory: fixtures/sys
|
||||||
Mode: 755
|
Mode: 755
|
||||||
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
15
vendor/github.com/prometheus/procfs/internal/util/parse.go
generated
vendored
15
vendor/github.com/prometheus/procfs/internal/util/parse.go
generated
vendored
|
@ -49,6 +49,21 @@ func ParseUint64s(ss []string) ([]uint64, error) {
|
||||||
return us, nil
|
return us, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParsePInt64s parses a slice of strings into a slice of int64 pointers.
|
||||||
|
func ParsePInt64s(ss []string) ([]*int64, error) {
|
||||||
|
us := make([]*int64, 0, len(ss))
|
||||||
|
for _, s := range ss {
|
||||||
|
u, err := strconv.ParseInt(s, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
us = append(us, &u)
|
||||||
|
}
|
||||||
|
|
||||||
|
return us, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ReadUintFromFile reads a file and attempts to parse a uint64 from it.
|
// ReadUintFromFile reads a file and attempts to parse a uint64 from it.
|
||||||
func ReadUintFromFile(path string) (uint64, error) {
|
func ReadUintFromFile(path string) (uint64, error) {
|
||||||
data, err := ioutil.ReadFile(path)
|
data, err := ioutil.ReadFile(path)
|
||||||
|
|
42
vendor/github.com/prometheus/procfs/schedstat.go
generated
vendored
42
vendor/github.com/prometheus/procfs/schedstat.go
generated
vendored
|
@ -31,6 +31,12 @@ var (
|
||||||
// See
|
// See
|
||||||
// https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt
|
// https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt
|
||||||
// for a detailed description of what these numbers mean.
|
// for a detailed description of what these numbers mean.
|
||||||
|
//
|
||||||
|
// Note the current kernel documentation claims some of the time units are in
|
||||||
|
// jiffies when they are actually in nanoseconds since 2.6.23 with the
|
||||||
|
// introduction of CFS. A fix to the documentation is pending. See
|
||||||
|
// https://lore.kernel.org/patchwork/project/lkml/list/?series=403473
|
||||||
|
|
||||||
type Schedstat struct {
|
type Schedstat struct {
|
||||||
CPUs []*SchedstatCPU
|
CPUs []*SchedstatCPU
|
||||||
}
|
}
|
||||||
|
@ -39,16 +45,16 @@ type Schedstat struct {
|
||||||
type SchedstatCPU struct {
|
type SchedstatCPU struct {
|
||||||
CPUNum string
|
CPUNum string
|
||||||
|
|
||||||
RunningJiffies uint64
|
RunningNanoseconds uint64
|
||||||
WaitingJiffies uint64
|
WaitingNanoseconds uint64
|
||||||
RunTimeslices uint64
|
RunTimeslices uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcSchedstat contains the values from /proc/<pid>/schedstat
|
// ProcSchedstat contains the values from /proc/<pid>/schedstat
|
||||||
type ProcSchedstat struct {
|
type ProcSchedstat struct {
|
||||||
RunningJiffies uint64
|
RunningNanoseconds uint64
|
||||||
WaitingJiffies uint64
|
WaitingNanoseconds uint64
|
||||||
RunTimeslices uint64
|
RunTimeslices uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs FS) Schedstat() (*Schedstat, error) {
|
func (fs FS) Schedstat() (*Schedstat, error) {
|
||||||
|
@ -67,12 +73,12 @@ func (fs FS) Schedstat() (*Schedstat, error) {
|
||||||
cpu := &SchedstatCPU{}
|
cpu := &SchedstatCPU{}
|
||||||
cpu.CPUNum = match[1]
|
cpu.CPUNum = match[1]
|
||||||
|
|
||||||
cpu.RunningJiffies, err = strconv.ParseUint(match[8], 10, 64)
|
cpu.RunningNanoseconds, err = strconv.ParseUint(match[8], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu.WaitingJiffies, err = strconv.ParseUint(match[9], 10, 64)
|
cpu.WaitingNanoseconds, err = strconv.ParseUint(match[9], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -93,12 +99,12 @@ func parseProcSchedstat(contents string) (stats ProcSchedstat, err error) {
|
||||||
match := procLineRE.FindStringSubmatch(contents)
|
match := procLineRE.FindStringSubmatch(contents)
|
||||||
|
|
||||||
if match != nil {
|
if match != nil {
|
||||||
stats.RunningJiffies, err = strconv.ParseUint(match[1], 10, 64)
|
stats.RunningNanoseconds, err = strconv.ParseUint(match[1], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stats.WaitingJiffies, err = strconv.ParseUint(match[2], 10, 64)
|
stats.WaitingNanoseconds, err = strconv.ParseUint(match[2], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -110,19 +116,3 @@ func parseProcSchedstat(contents string) (stats ProcSchedstat, err error) {
|
||||||
err = errors.New("could not parse schedstat")
|
err = errors.New("could not parse schedstat")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (stat *SchedstatCPU) RunningSeconds() float64 {
|
|
||||||
return float64(stat.RunningJiffies) / userHZ
|
|
||||||
}
|
|
||||||
|
|
||||||
func (stat *SchedstatCPU) WaitingSeconds() float64 {
|
|
||||||
return float64(stat.WaitingJiffies) / userHZ
|
|
||||||
}
|
|
||||||
|
|
||||||
func (stat *ProcSchedstat) RunningSeconds() float64 {
|
|
||||||
return float64(stat.RunningJiffies) / userHZ
|
|
||||||
}
|
|
||||||
|
|
||||||
func (stat *ProcSchedstat) WaitingSeconds() float64 {
|
|
||||||
return float64(stat.WaitingJiffies) / userHZ
|
|
||||||
}
|
|
||||||
|
|
196
vendor/github.com/prometheus/procfs/zoneinfo.go
generated
vendored
Normal file
196
vendor/github.com/prometheus/procfs/zoneinfo.go
generated
vendored
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/procfs/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Zoneinfo holds info parsed from /proc/zoneinfo.
|
||||||
|
type Zoneinfo struct {
|
||||||
|
Node string
|
||||||
|
Zone string
|
||||||
|
NrFreePages *int64
|
||||||
|
Min *int64
|
||||||
|
Low *int64
|
||||||
|
High *int64
|
||||||
|
Scanned *int64
|
||||||
|
Spanned *int64
|
||||||
|
Present *int64
|
||||||
|
Managed *int64
|
||||||
|
NrActiveAnon *int64
|
||||||
|
NrInactiveAnon *int64
|
||||||
|
NrIsolatedAnon *int64
|
||||||
|
NrAnonPages *int64
|
||||||
|
NrAnonTransparentHugepages *int64
|
||||||
|
NrActiveFile *int64
|
||||||
|
NrInactiveFile *int64
|
||||||
|
NrIsolatedFile *int64
|
||||||
|
NrFilePages *int64
|
||||||
|
NrSlabReclaimable *int64
|
||||||
|
NrSlabUnreclaimable *int64
|
||||||
|
NrMlockStack *int64
|
||||||
|
NrKernelStack *int64
|
||||||
|
NrMapped *int64
|
||||||
|
NrDirty *int64
|
||||||
|
NrWriteback *int64
|
||||||
|
NrUnevictable *int64
|
||||||
|
NrShmem *int64
|
||||||
|
NrDirtied *int64
|
||||||
|
NrWritten *int64
|
||||||
|
NumaHit *int64
|
||||||
|
NumaMiss *int64
|
||||||
|
NumaForeign *int64
|
||||||
|
NumaInterleave *int64
|
||||||
|
NumaLocal *int64
|
||||||
|
NumaOther *int64
|
||||||
|
Protection []*int64
|
||||||
|
}
|
||||||
|
|
||||||
|
var nodeZoneRE = regexp.MustCompile(`(\d+), zone\s+(\w+)`)
|
||||||
|
|
||||||
|
// Zoneinfo parses an zoneinfo-file (/proc/zoneinfo) and returns a slice of
|
||||||
|
// structs containing the relevant info. More information available here:
|
||||||
|
// https://www.kernel.org/doc/Documentation/sysctl/vm.txt
|
||||||
|
func (fs FS) Zoneinfo() ([]Zoneinfo, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("zoneinfo"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error reading zoneinfo %s: %s", fs.proc.Path("zoneinfo"), err)
|
||||||
|
}
|
||||||
|
zoneinfo, err := parseZoneinfo(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing zoneinfo %s: %s", fs.proc.Path("zoneinfo"), err)
|
||||||
|
}
|
||||||
|
return zoneinfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseZoneinfo(zoneinfoData []byte) ([]Zoneinfo, error) {
|
||||||
|
|
||||||
|
zoneinfo := []Zoneinfo{}
|
||||||
|
|
||||||
|
zoneinfoBlocks := bytes.Split(zoneinfoData, []byte("\nNode"))
|
||||||
|
for _, block := range zoneinfoBlocks {
|
||||||
|
var zoneinfoElement Zoneinfo
|
||||||
|
lines := strings.Split(string(block), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
|
||||||
|
if nodeZone := nodeZoneRE.FindStringSubmatch(line); nodeZone != nil {
|
||||||
|
zoneinfoElement.Node = nodeZone[1]
|
||||||
|
zoneinfoElement.Zone = nodeZone[2]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(strings.TrimSpace(line), "per-node stats") {
|
||||||
|
zoneinfoElement.Zone = ""
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
parts := strings.Fields(strings.TrimSpace(line))
|
||||||
|
if len(parts) < 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
vp := util.NewValueParser(parts[1])
|
||||||
|
switch parts[0] {
|
||||||
|
case "nr_free_pages":
|
||||||
|
zoneinfoElement.NrFreePages = vp.PInt64()
|
||||||
|
case "min":
|
||||||
|
zoneinfoElement.Min = vp.PInt64()
|
||||||
|
case "low":
|
||||||
|
zoneinfoElement.Low = vp.PInt64()
|
||||||
|
case "high":
|
||||||
|
zoneinfoElement.High = vp.PInt64()
|
||||||
|
case "scanned":
|
||||||
|
zoneinfoElement.Scanned = vp.PInt64()
|
||||||
|
case "spanned":
|
||||||
|
zoneinfoElement.Spanned = vp.PInt64()
|
||||||
|
case "present":
|
||||||
|
zoneinfoElement.Present = vp.PInt64()
|
||||||
|
case "managed":
|
||||||
|
zoneinfoElement.Managed = vp.PInt64()
|
||||||
|
case "nr_active_anon":
|
||||||
|
zoneinfoElement.NrActiveAnon = vp.PInt64()
|
||||||
|
case "nr_inactive_anon":
|
||||||
|
zoneinfoElement.NrInactiveAnon = vp.PInt64()
|
||||||
|
case "nr_isolated_anon":
|
||||||
|
zoneinfoElement.NrIsolatedAnon = vp.PInt64()
|
||||||
|
case "nr_anon_pages":
|
||||||
|
zoneinfoElement.NrAnonPages = vp.PInt64()
|
||||||
|
case "nr_anon_transparent_hugepages":
|
||||||
|
zoneinfoElement.NrAnonTransparentHugepages = vp.PInt64()
|
||||||
|
case "nr_active_file":
|
||||||
|
zoneinfoElement.NrActiveFile = vp.PInt64()
|
||||||
|
case "nr_inactive_file":
|
||||||
|
zoneinfoElement.NrInactiveFile = vp.PInt64()
|
||||||
|
case "nr_isolated_file":
|
||||||
|
zoneinfoElement.NrIsolatedFile = vp.PInt64()
|
||||||
|
case "nr_file_pages":
|
||||||
|
zoneinfoElement.NrFilePages = vp.PInt64()
|
||||||
|
case "nr_slab_reclaimable":
|
||||||
|
zoneinfoElement.NrSlabReclaimable = vp.PInt64()
|
||||||
|
case "nr_slab_unreclaimable":
|
||||||
|
zoneinfoElement.NrSlabUnreclaimable = vp.PInt64()
|
||||||
|
case "nr_mlock_stack":
|
||||||
|
zoneinfoElement.NrMlockStack = vp.PInt64()
|
||||||
|
case "nr_kernel_stack":
|
||||||
|
zoneinfoElement.NrKernelStack = vp.PInt64()
|
||||||
|
case "nr_mapped":
|
||||||
|
zoneinfoElement.NrMapped = vp.PInt64()
|
||||||
|
case "nr_dirty":
|
||||||
|
zoneinfoElement.NrDirty = vp.PInt64()
|
||||||
|
case "nr_writeback":
|
||||||
|
zoneinfoElement.NrWriteback = vp.PInt64()
|
||||||
|
case "nr_unevictable":
|
||||||
|
zoneinfoElement.NrUnevictable = vp.PInt64()
|
||||||
|
case "nr_shmem":
|
||||||
|
zoneinfoElement.NrShmem = vp.PInt64()
|
||||||
|
case "nr_dirtied":
|
||||||
|
zoneinfoElement.NrDirtied = vp.PInt64()
|
||||||
|
case "nr_written":
|
||||||
|
zoneinfoElement.NrWritten = vp.PInt64()
|
||||||
|
case "numa_hit":
|
||||||
|
zoneinfoElement.NumaHit = vp.PInt64()
|
||||||
|
case "numa_miss":
|
||||||
|
zoneinfoElement.NumaMiss = vp.PInt64()
|
||||||
|
case "numa_foreign":
|
||||||
|
zoneinfoElement.NumaForeign = vp.PInt64()
|
||||||
|
case "numa_interleave":
|
||||||
|
zoneinfoElement.NumaInterleave = vp.PInt64()
|
||||||
|
case "numa_local":
|
||||||
|
zoneinfoElement.NumaLocal = vp.PInt64()
|
||||||
|
case "numa_other":
|
||||||
|
zoneinfoElement.NumaOther = vp.PInt64()
|
||||||
|
case "protection:":
|
||||||
|
protectionParts := strings.Split(line, ":")
|
||||||
|
protectionValues := strings.Replace(protectionParts[1], "(", "", 1)
|
||||||
|
protectionValues = strings.Replace(protectionValues, ")", "", 1)
|
||||||
|
protectionValues = strings.TrimSpace(protectionValues)
|
||||||
|
protectionStringMap := strings.Split(protectionValues, ", ")
|
||||||
|
val, err := util.ParsePInt64s(protectionStringMap)
|
||||||
|
if err == nil {
|
||||||
|
zoneinfoElement.Protection = val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
zoneinfo = append(zoneinfo, zoneinfoElement)
|
||||||
|
}
|
||||||
|
return zoneinfo, nil
|
||||||
|
}
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
|
@ -45,7 +45,7 @@ github.com/prometheus/common/version
|
||||||
github.com/prometheus/common/expfmt
|
github.com/prometheus/common/expfmt
|
||||||
github.com/prometheus/common/model
|
github.com/prometheus/common/model
|
||||||
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
||||||
# github.com/prometheus/procfs v0.0.4-0.20190702183519-8f55e607908e
|
# github.com/prometheus/procfs v0.0.4-0.20190731153504-5da962fa40f1
|
||||||
github.com/prometheus/procfs
|
github.com/prometheus/procfs
|
||||||
github.com/prometheus/procfs/bcache
|
github.com/prometheus/procfs/bcache
|
||||||
github.com/prometheus/procfs/nfs
|
github.com/prometheus/procfs/nfs
|
||||||
|
|
Loading…
Reference in a new issue