mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-03-05 21:00:12 -08:00
Release v0.15.1 (#733)
* netstat: return nothing when /proc/net/snmp6 not found * Fix off by one in Linux interrupts collector (#721) * Fix off by one in Linux interrupts collector * Fix off by one in CPU column handler. * Add test. * Enable interrupts in end-to-end test. * Add and use sysReadFile in hwmon collector (#728) * xfs: expose correct fields, fix metric names * Correct buffer_bytes > INT_MAX on BSD/amd64. (#712) * Correct buffer_bytes > INT_MAX on BSD/amd64. The sysctl vfs.bufspace returns either an int or a long, depending on the value. Large values of vfs.bufspace will result in error messages like: couldn't get meminfo: cannot allocate memory This will detect the returned data type, and cast appropriately. * Added explicit length checks per feedback. * Flatten Value() to make it easier to read. * Simplify per feedback. * Fix style. * Doc updates. * Release v0.15.1 * [BUGFIX] netstat: return nothing when /proc/net/snmp6 not found #718 * [BUGFIX] Fix off by one in Linux interrupts collector #721 * [BUGFIX] Add and use sysReadFile in hwmon collector #728
This commit is contained in:
parent
6e2053c557
commit
4a6d2cd4d8
|
@ -1,3 +1,11 @@
|
|||
## v0.15.1 / 2017-11-07
|
||||
|
||||
* [BUGFIX] xfs: expose correct fields, fix metric names #708
|
||||
* [BUGFIX] Correct buffer_bytes > INT_MAX on BSD/amd64. #712
|
||||
* [BUGFIX] netstat: return nothing when /proc/net/snmp6 not found #718
|
||||
* [BUGFIX] Fix off by one in Linux interrupts collector #721
|
||||
* [BUGFIX] Add and use sysReadFile in hwmon collector #728
|
||||
|
||||
## v0.15.0 / 2017-10-06
|
||||
|
||||
**Breaking changes**
|
||||
|
|
|
@ -861,6 +861,120 @@ node_infiniband_unicast_packets_received_total{device="mlx4_0",port="2"} 0
|
|||
# TYPE node_infiniband_unicast_packets_transmitted_total counter
|
||||
node_infiniband_unicast_packets_transmitted_total{device="mlx4_0",port="1"} 61239
|
||||
node_infiniband_unicast_packets_transmitted_total{device="mlx4_0",port="2"} 0
|
||||
# HELP node_interrupts Interrupt details.
|
||||
# TYPE node_interrupts counter
|
||||
node_interrupts{CPU="0",devices="",info="APIC ICR read retries",type="RTR"} 0
|
||||
node_interrupts{CPU="0",devices="",info="Function call interrupts",type="CAL"} 148554
|
||||
node_interrupts{CPU="0",devices="",info="IRQ work interrupts",type="IWI"} 1.509379e+06
|
||||
node_interrupts{CPU="0",devices="",info="Local timer interrupts",type="LOC"} 1.74326351e+08
|
||||
node_interrupts{CPU="0",devices="",info="Machine check exceptions",type="MCE"} 0
|
||||
node_interrupts{CPU="0",devices="",info="Machine check polls",type="MCP"} 2406
|
||||
node_interrupts{CPU="0",devices="",info="Non-maskable interrupts",type="NMI"} 47
|
||||
node_interrupts{CPU="0",devices="",info="Performance monitoring interrupts",type="PMI"} 47
|
||||
node_interrupts{CPU="0",devices="",info="Rescheduling interrupts",type="RES"} 1.0847134e+07
|
||||
node_interrupts{CPU="0",devices="",info="Spurious interrupts",type="SPU"} 0
|
||||
node_interrupts{CPU="0",devices="",info="TLB shootdowns",type="TLB"} 1.0460334e+07
|
||||
node_interrupts{CPU="0",devices="",info="Thermal event interrupts",type="TRM"} 0
|
||||
node_interrupts{CPU="0",devices="",info="Threshold APIC interrupts",type="THR"} 0
|
||||
node_interrupts{CPU="0",devices="acpi",info="IR-IO-APIC-fasteoi",type="9"} 398553
|
||||
node_interrupts{CPU="0",devices="ahci",info="IR-PCI-MSI-edge",type="43"} 7.434032e+06
|
||||
node_interrupts{CPU="0",devices="dmar0",info="DMAR_MSI-edge",type="40"} 0
|
||||
node_interrupts{CPU="0",devices="dmar1",info="DMAR_MSI-edge",type="41"} 0
|
||||
node_interrupts{CPU="0",devices="ehci_hcd:usb1, mmc0",info="IR-IO-APIC-fasteoi",type="16"} 328511
|
||||
node_interrupts{CPU="0",devices="ehci_hcd:usb2",info="IR-IO-APIC-fasteoi",type="23"} 1.451445e+06
|
||||
node_interrupts{CPU="0",devices="i8042",info="IR-IO-APIC-edge",type="1"} 17960
|
||||
node_interrupts{CPU="0",devices="i8042",info="IR-IO-APIC-edge",type="12"} 380847
|
||||
node_interrupts{CPU="0",devices="i915",info="IR-PCI-MSI-edge",type="44"} 140636
|
||||
node_interrupts{CPU="0",devices="iwlwifi",info="IR-PCI-MSI-edge",type="46"} 4.3078464e+07
|
||||
node_interrupts{CPU="0",devices="mei_me",info="IR-PCI-MSI-edge",type="45"} 4
|
||||
node_interrupts{CPU="0",devices="rtc0",info="IR-IO-APIC-edge",type="8"} 1
|
||||
node_interrupts{CPU="0",devices="snd_hda_intel",info="IR-PCI-MSI-edge",type="47"} 350
|
||||
node_interrupts{CPU="0",devices="timer",info="IR-IO-APIC-edge",type="0"} 18
|
||||
node_interrupts{CPU="0",devices="xhci_hcd",info="IR-PCI-MSI-edge",type="42"} 378324
|
||||
node_interrupts{CPU="1",devices="",info="APIC ICR read retries",type="RTR"} 0
|
||||
node_interrupts{CPU="1",devices="",info="Function call interrupts",type="CAL"} 157441
|
||||
node_interrupts{CPU="1",devices="",info="IRQ work interrupts",type="IWI"} 2.411776e+06
|
||||
node_interrupts{CPU="1",devices="",info="Local timer interrupts",type="LOC"} 1.35776678e+08
|
||||
node_interrupts{CPU="1",devices="",info="Machine check exceptions",type="MCE"} 0
|
||||
node_interrupts{CPU="1",devices="",info="Machine check polls",type="MCP"} 2399
|
||||
node_interrupts{CPU="1",devices="",info="Non-maskable interrupts",type="NMI"} 5031
|
||||
node_interrupts{CPU="1",devices="",info="Performance monitoring interrupts",type="PMI"} 5031
|
||||
node_interrupts{CPU="1",devices="",info="Rescheduling interrupts",type="RES"} 9.111507e+06
|
||||
node_interrupts{CPU="1",devices="",info="Spurious interrupts",type="SPU"} 0
|
||||
node_interrupts{CPU="1",devices="",info="TLB shootdowns",type="TLB"} 9.918429e+06
|
||||
node_interrupts{CPU="1",devices="",info="Thermal event interrupts",type="TRM"} 0
|
||||
node_interrupts{CPU="1",devices="",info="Threshold APIC interrupts",type="THR"} 0
|
||||
node_interrupts{CPU="1",devices="acpi",info="IR-IO-APIC-fasteoi",type="9"} 2320
|
||||
node_interrupts{CPU="1",devices="ahci",info="IR-PCI-MSI-edge",type="43"} 8.092205e+06
|
||||
node_interrupts{CPU="1",devices="dmar0",info="DMAR_MSI-edge",type="40"} 0
|
||||
node_interrupts{CPU="1",devices="dmar1",info="DMAR_MSI-edge",type="41"} 0
|
||||
node_interrupts{CPU="1",devices="ehci_hcd:usb1, mmc0",info="IR-IO-APIC-fasteoi",type="16"} 322879
|
||||
node_interrupts{CPU="1",devices="ehci_hcd:usb2",info="IR-IO-APIC-fasteoi",type="23"} 3.333499e+06
|
||||
node_interrupts{CPU="1",devices="i8042",info="IR-IO-APIC-edge",type="1"} 105
|
||||
node_interrupts{CPU="1",devices="i8042",info="IR-IO-APIC-edge",type="12"} 1021
|
||||
node_interrupts{CPU="1",devices="i915",info="IR-PCI-MSI-edge",type="44"} 226313
|
||||
node_interrupts{CPU="1",devices="iwlwifi",info="IR-PCI-MSI-edge",type="46"} 130
|
||||
node_interrupts{CPU="1",devices="mei_me",info="IR-PCI-MSI-edge",type="45"} 22
|
||||
node_interrupts{CPU="1",devices="rtc0",info="IR-IO-APIC-edge",type="8"} 0
|
||||
node_interrupts{CPU="1",devices="snd_hda_intel",info="IR-PCI-MSI-edge",type="47"} 224
|
||||
node_interrupts{CPU="1",devices="timer",info="IR-IO-APIC-edge",type="0"} 0
|
||||
node_interrupts{CPU="1",devices="xhci_hcd",info="IR-PCI-MSI-edge",type="42"} 1.734637e+06
|
||||
node_interrupts{CPU="2",devices="",info="APIC ICR read retries",type="RTR"} 0
|
||||
node_interrupts{CPU="2",devices="",info="Function call interrupts",type="CAL"} 142912
|
||||
node_interrupts{CPU="2",devices="",info="IRQ work interrupts",type="IWI"} 1.512975e+06
|
||||
node_interrupts{CPU="2",devices="",info="Local timer interrupts",type="LOC"} 1.68393257e+08
|
||||
node_interrupts{CPU="2",devices="",info="Machine check exceptions",type="MCE"} 0
|
||||
node_interrupts{CPU="2",devices="",info="Machine check polls",type="MCP"} 2399
|
||||
node_interrupts{CPU="2",devices="",info="Non-maskable interrupts",type="NMI"} 6211
|
||||
node_interrupts{CPU="2",devices="",info="Performance monitoring interrupts",type="PMI"} 6211
|
||||
node_interrupts{CPU="2",devices="",info="Rescheduling interrupts",type="RES"} 1.5999335e+07
|
||||
node_interrupts{CPU="2",devices="",info="Spurious interrupts",type="SPU"} 0
|
||||
node_interrupts{CPU="2",devices="",info="TLB shootdowns",type="TLB"} 1.0494258e+07
|
||||
node_interrupts{CPU="2",devices="",info="Thermal event interrupts",type="TRM"} 0
|
||||
node_interrupts{CPU="2",devices="",info="Threshold APIC interrupts",type="THR"} 0
|
||||
node_interrupts{CPU="2",devices="acpi",info="IR-IO-APIC-fasteoi",type="9"} 824
|
||||
node_interrupts{CPU="2",devices="ahci",info="IR-PCI-MSI-edge",type="43"} 6.478877e+06
|
||||
node_interrupts{CPU="2",devices="dmar0",info="DMAR_MSI-edge",type="40"} 0
|
||||
node_interrupts{CPU="2",devices="dmar1",info="DMAR_MSI-edge",type="41"} 0
|
||||
node_interrupts{CPU="2",devices="ehci_hcd:usb1, mmc0",info="IR-IO-APIC-fasteoi",type="16"} 293782
|
||||
node_interrupts{CPU="2",devices="ehci_hcd:usb2",info="IR-IO-APIC-fasteoi",type="23"} 1.092032e+06
|
||||
node_interrupts{CPU="2",devices="i8042",info="IR-IO-APIC-edge",type="1"} 28
|
||||
node_interrupts{CPU="2",devices="i8042",info="IR-IO-APIC-edge",type="12"} 240
|
||||
node_interrupts{CPU="2",devices="i915",info="IR-PCI-MSI-edge",type="44"} 347
|
||||
node_interrupts{CPU="2",devices="iwlwifi",info="IR-PCI-MSI-edge",type="46"} 460171
|
||||
node_interrupts{CPU="2",devices="mei_me",info="IR-PCI-MSI-edge",type="45"} 0
|
||||
node_interrupts{CPU="2",devices="rtc0",info="IR-IO-APIC-edge",type="8"} 0
|
||||
node_interrupts{CPU="2",devices="snd_hda_intel",info="IR-PCI-MSI-edge",type="47"} 0
|
||||
node_interrupts{CPU="2",devices="timer",info="IR-IO-APIC-edge",type="0"} 0
|
||||
node_interrupts{CPU="2",devices="xhci_hcd",info="IR-PCI-MSI-edge",type="42"} 440240
|
||||
node_interrupts{CPU="3",devices="",info="APIC ICR read retries",type="RTR"} 0
|
||||
node_interrupts{CPU="3",devices="",info="Function call interrupts",type="CAL"} 155528
|
||||
node_interrupts{CPU="3",devices="",info="IRQ work interrupts",type="IWI"} 2.428828e+06
|
||||
node_interrupts{CPU="3",devices="",info="Local timer interrupts",type="LOC"} 1.30980079e+08
|
||||
node_interrupts{CPU="3",devices="",info="Machine check exceptions",type="MCE"} 0
|
||||
node_interrupts{CPU="3",devices="",info="Machine check polls",type="MCP"} 2399
|
||||
node_interrupts{CPU="3",devices="",info="Non-maskable interrupts",type="NMI"} 4968
|
||||
node_interrupts{CPU="3",devices="",info="Performance monitoring interrupts",type="PMI"} 4968
|
||||
node_interrupts{CPU="3",devices="",info="Rescheduling interrupts",type="RES"} 7.45726e+06
|
||||
node_interrupts{CPU="3",devices="",info="Spurious interrupts",type="SPU"} 0
|
||||
node_interrupts{CPU="3",devices="",info="TLB shootdowns",type="TLB"} 1.0345022e+07
|
||||
node_interrupts{CPU="3",devices="",info="Thermal event interrupts",type="TRM"} 0
|
||||
node_interrupts{CPU="3",devices="",info="Threshold APIC interrupts",type="THR"} 0
|
||||
node_interrupts{CPU="3",devices="acpi",info="IR-IO-APIC-fasteoi",type="9"} 863
|
||||
node_interrupts{CPU="3",devices="ahci",info="IR-PCI-MSI-edge",type="43"} 7.492252e+06
|
||||
node_interrupts{CPU="3",devices="dmar0",info="DMAR_MSI-edge",type="40"} 0
|
||||
node_interrupts{CPU="3",devices="dmar1",info="DMAR_MSI-edge",type="41"} 0
|
||||
node_interrupts{CPU="3",devices="ehci_hcd:usb1, mmc0",info="IR-IO-APIC-fasteoi",type="16"} 351412
|
||||
node_interrupts{CPU="3",devices="ehci_hcd:usb2",info="IR-IO-APIC-fasteoi",type="23"} 2.644609e+06
|
||||
node_interrupts{CPU="3",devices="i8042",info="IR-IO-APIC-edge",type="1"} 28
|
||||
node_interrupts{CPU="3",devices="i8042",info="IR-IO-APIC-edge",type="12"} 198
|
||||
node_interrupts{CPU="3",devices="i915",info="IR-PCI-MSI-edge",type="44"} 633
|
||||
node_interrupts{CPU="3",devices="iwlwifi",info="IR-PCI-MSI-edge",type="46"} 290
|
||||
node_interrupts{CPU="3",devices="mei_me",info="IR-PCI-MSI-edge",type="45"} 0
|
||||
node_interrupts{CPU="3",devices="rtc0",info="IR-IO-APIC-edge",type="8"} 0
|
||||
node_interrupts{CPU="3",devices="snd_hda_intel",info="IR-PCI-MSI-edge",type="47"} 0
|
||||
node_interrupts{CPU="3",devices="timer",info="IR-IO-APIC-edge",type="0"} 0
|
||||
node_interrupts{CPU="3",devices="xhci_hcd",info="IR-PCI-MSI-edge",type="42"} 2.434308e+06
|
||||
# HELP node_intr Total number of interrupts serviced.
|
||||
# TYPE node_intr counter
|
||||
node_intr 8.885917e+06
|
||||
|
@ -2552,6 +2666,7 @@ node_scrape_collector_success{collector="entropy"} 1
|
|||
node_scrape_collector_success{collector="filefd"} 1
|
||||
node_scrape_collector_success{collector="hwmon"} 1
|
||||
node_scrape_collector_success{collector="infiniband"} 1
|
||||
node_scrape_collector_success{collector="interrupts"} 1
|
||||
node_scrape_collector_success{collector="ipvs"} 1
|
||||
node_scrape_collector_success{collector="ksmd"} 1
|
||||
node_scrape_collector_success{collector="loadavg"} 1
|
||||
|
@ -2660,18 +2775,18 @@ node_xfs_allocation_btree_records_deleted_total{device="sda1"} 0
|
|||
# HELP node_xfs_allocation_btree_records_inserted_total Number of allocation B-tree records inserted for a filesystem.
|
||||
# TYPE node_xfs_allocation_btree_records_inserted_total counter
|
||||
node_xfs_allocation_btree_records_inserted_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_mapping_btree_compares_total Number of block map B-tree compares for a filesystem.
|
||||
# TYPE node_xfs_block_mapping_btree_compares_total counter
|
||||
node_xfs_block_mapping_btree_compares_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_mapping_btree_lookups_total Number of block map B-tree lookups for a filesystem.
|
||||
# TYPE node_xfs_block_mapping_btree_lookups_total counter
|
||||
node_xfs_block_mapping_btree_lookups_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_mapping_btree_records_deleted_total Number of block map B-tree records deleted for a filesystem.
|
||||
# TYPE node_xfs_block_mapping_btree_records_deleted_total counter
|
||||
node_xfs_block_mapping_btree_records_deleted_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_mapping_btree_records_inserted_total Number of block map B-tree records inserted for a filesystem.
|
||||
# TYPE node_xfs_block_mapping_btree_records_inserted_total counter
|
||||
node_xfs_block_mapping_btree_records_inserted_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_map_btree_compares_total Number of block map B-tree compares for a filesystem.
|
||||
# TYPE node_xfs_block_map_btree_compares_total counter
|
||||
node_xfs_block_map_btree_compares_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_map_btree_lookups_total Number of block map B-tree lookups for a filesystem.
|
||||
# TYPE node_xfs_block_map_btree_lookups_total counter
|
||||
node_xfs_block_map_btree_lookups_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_map_btree_records_deleted_total Number of block map B-tree records deleted for a filesystem.
|
||||
# TYPE node_xfs_block_map_btree_records_deleted_total counter
|
||||
node_xfs_block_map_btree_records_deleted_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_map_btree_records_inserted_total Number of block map B-tree records inserted for a filesystem.
|
||||
# TYPE node_xfs_block_map_btree_records_inserted_total counter
|
||||
node_xfs_block_map_btree_records_inserted_total{device="sda1"} 0
|
||||
# HELP node_xfs_block_mapping_extent_list_compares_total Number of extent list compares for a filesystem.
|
||||
# TYPE node_xfs_block_mapping_extent_list_compares_total counter
|
||||
node_xfs_block_mapping_extent_list_compares_total{device="sda1"} 0
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/common/log"
|
||||
|
@ -61,8 +62,8 @@ func cleanMetricName(name string) string {
|
|||
}
|
||||
|
||||
func addValueFile(data map[string]map[string]string, sensor string, prop string, file string) {
|
||||
raw, e := ioutil.ReadFile(file)
|
||||
if e != nil {
|
||||
raw, err := sysReadFile(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
value := strings.Trim(string(raw), "\n")
|
||||
|
@ -74,6 +75,28 @@ func addValueFile(data map[string]map[string]string, sensor string, prop string,
|
|||
data[sensor][prop] = value
|
||||
}
|
||||
|
||||
// sysReadFile is a simplified ioutil.ReadFile that invokes syscall.Read directly.
|
||||
func sysReadFile(file string) ([]byte, error) {
|
||||
f, err := os.Open(file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// On some machines, hwmon drivers are broken and return EAGAIN. This causes
|
||||
// Go's ioutil.ReadFile implementation to poll forever.
|
||||
//
|
||||
// Since we either want to read data or bail immediately, do the simplest
|
||||
// possible read using syscall directly.
|
||||
b := make([]byte, 128)
|
||||
n, err := syscall.Read(int(f.Fd()), b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return b[:n], nil
|
||||
}
|
||||
|
||||
// explodeSensorFilename splits a sensor name into <type><num>_<property>.
|
||||
func explodeSensorFilename(filename string) (ok bool, sensorType string, sensorNum int, sensorProperty string) {
|
||||
matches := hwmonFilenameFormat.FindStringSubmatch(filename)
|
||||
|
|
|
@ -82,7 +82,7 @@ func parseInterrupts(r io.Reader) (map[string]interrupt, error) {
|
|||
}
|
||||
intName := parts[0][:len(parts[0])-1] // remove trailing :
|
||||
intr := interrupt{
|
||||
values: parts[1:cpuNum],
|
||||
values: parts[1 : cpuNum+1],
|
||||
}
|
||||
|
||||
if _, err := strconv.Atoi(intName); err == nil { // numeral interrupt
|
||||
|
|
|
@ -33,4 +33,8 @@ func TestInterrupts(t *testing.T) {
|
|||
if want, got := "5031", interrupts["NMI"].values[1]; want != got {
|
||||
t.Errorf("want interrupts %s, got %s", want, got)
|
||||
}
|
||||
|
||||
if want, got := "4968", interrupts["NMI"].values[3]; want != got {
|
||||
t.Errorf("want interrupts %s, got %s", want, got)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ func (c *meminfoCollector) getMemInfo() (map[string]float64, error) {
|
|||
{name: "inactive_bytes", mib: "vm.stats.vm.v_inactive_count", conversion: fromPage},
|
||||
{name: "wired_bytes", mib: "vm.stats.vm.v_wire_count", conversion: fromPage},
|
||||
{name: "cache_bytes", mib: "vm.stats.vm.v_cache_count", conversion: fromPage},
|
||||
{name: "buffer_bytes", mib: "vfs.bufspace"},
|
||||
{name: "buffer_bytes", mib: "vfs.bufspace", dataType: bsdSysctlTypeCLong},
|
||||
{name: "free_bytes", mib: "vm.stats.vm.v_free_count", conversion: fromPage},
|
||||
{name: "size_bytes", mib: "vm.stats.vm.v_page_count", conversion: fromPage},
|
||||
{name: "swap_in_bytes_total", mib: "vm.stats.vm.v_swappgsin", conversion: fromPage},
|
||||
|
|
|
@ -121,6 +121,12 @@ func parseNetStats(r io.Reader, fileName string) (map[string]map[string]string,
|
|||
func getSNMP6Stats(fileName string) (map[string]map[string]string, error) {
|
||||
file, err := os.Open(fileName)
|
||||
if err != nil {
|
||||
// On systems with IPv6 disabled, this file won't exist.
|
||||
// Do nothing.
|
||||
if os.IsNotExist(err) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
|
|
@ -35,9 +35,11 @@ const (
|
|||
bsdSysctlTypeUint32 bsdSysctlType = iota
|
||||
bsdSysctlTypeUint64
|
||||
bsdSysctlTypeStructTimeval
|
||||
bsdSysctlTypeCLong
|
||||
)
|
||||
|
||||
// Contains all the info needed to map a single bsd-sysctl to a prometheus value.
|
||||
// Contains all the info needed to map a single bsd-sysctl to a prometheus
|
||||
// value.
|
||||
type bsdSysctl struct {
|
||||
// Prometheus name
|
||||
name string
|
||||
|
@ -72,42 +74,9 @@ func (b bsdSysctl) Value() (float64, error) {
|
|||
tmp64, err = unix.SysctlUint64(b.mib)
|
||||
tmpf64 = float64(tmp64)
|
||||
case bsdSysctlTypeStructTimeval:
|
||||
raw, err := unix.SysctlRaw(b.mib)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
/*
|
||||
* From 10.3-RELEASE sources:
|
||||
*
|
||||
* /usr/include/sys/_timeval.h:47
|
||||
* time_t tv_sec
|
||||
* suseconds_t tv_usec
|
||||
*
|
||||
* /usr/include/sys/_types.h:60
|
||||
* long __suseconds_t
|
||||
*
|
||||
* ... architecture dependent, via #ifdef:
|
||||
* typedef __int64_t __time_t;
|
||||
* typedef __int32_t __time_t;
|
||||
*/
|
||||
if len(raw) != (C.sizeof_time_t + C.sizeof_suseconds_t) {
|
||||
// Shouldn't get here, unless the ABI changes...
|
||||
return 0, fmt.Errorf(
|
||||
"length of bytes received from sysctl (%d) does not match expected bytes (%d)",
|
||||
len(raw),
|
||||
C.sizeof_time_t+C.sizeof_suseconds_t,
|
||||
)
|
||||
}
|
||||
|
||||
secondsUp := unsafe.Pointer(&raw[0])
|
||||
susecondsUp := uintptr(secondsUp) + C.sizeof_time_t
|
||||
unix := float64(*(*C.time_t)(secondsUp))
|
||||
usec := float64(*(*C.suseconds_t)(unsafe.Pointer(susecondsUp)))
|
||||
|
||||
// This conversion maintains the usec precision. Using
|
||||
// the time package did not.
|
||||
tmpf64 = unix + (usec / float64(1000*1000))
|
||||
tmpf64, err = b.getStructTimeval()
|
||||
case bsdSysctlTypeCLong:
|
||||
tmpf64, err = b.getCLong()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
@ -120,3 +89,69 @@ func (b bsdSysctl) Value() (float64, error) {
|
|||
|
||||
return tmpf64, nil
|
||||
}
|
||||
|
||||
func (b bsdSysctl) getStructTimeval() (float64, error) {
|
||||
raw, err := unix.SysctlRaw(b.mib)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
/*
|
||||
* From 10.3-RELEASE sources:
|
||||
*
|
||||
* /usr/include/sys/_timeval.h:47
|
||||
* time_t tv_sec
|
||||
* suseconds_t tv_usec
|
||||
*
|
||||
* /usr/include/sys/_types.h:60
|
||||
* long __suseconds_t
|
||||
*
|
||||
* ... architecture dependent, via #ifdef:
|
||||
* typedef __int64_t __time_t;
|
||||
* typedef __int32_t __time_t;
|
||||
*/
|
||||
if len(raw) != (C.sizeof_time_t + C.sizeof_suseconds_t) {
|
||||
// Shouldn't get here, unless the ABI changes...
|
||||
return 0, fmt.Errorf(
|
||||
"length of bytes received from sysctl (%d) does not match expected bytes (%d)",
|
||||
len(raw),
|
||||
C.sizeof_time_t+C.sizeof_suseconds_t,
|
||||
)
|
||||
}
|
||||
|
||||
secondsUp := unsafe.Pointer(&raw[0])
|
||||
susecondsUp := uintptr(secondsUp) + C.sizeof_time_t
|
||||
unix := float64(*(*C.time_t)(secondsUp))
|
||||
usec := float64(*(*C.suseconds_t)(unsafe.Pointer(susecondsUp)))
|
||||
|
||||
// This conversion maintains the usec precision. Using the time
|
||||
// package did not.
|
||||
return (unix + (usec / float64(1000*1000))), nil
|
||||
}
|
||||
|
||||
func (b bsdSysctl) getCLong() (float64, error) {
|
||||
raw, err := unix.SysctlRaw(b.mib)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if len(raw) == C.sizeof_long {
|
||||
return float64(*(*C.long)(unsafe.Pointer(&raw[0]))), nil
|
||||
}
|
||||
|
||||
if len(raw) == C.sizeof_int {
|
||||
// This is valid for at least vfs.bufspace, and the default
|
||||
// long handler - which can clamp longs to 32-bits:
|
||||
// https://github.com/freebsd/freebsd/blob/releng/10.3/sys/kern/vfs_bio.c#L338
|
||||
// https://github.com/freebsd/freebsd/blob/releng/10.3/sys/kern/kern_sysctl.c#L1062
|
||||
return float64(*(*C.int)(unsafe.Pointer(&raw[0]))), nil
|
||||
}
|
||||
|
||||
return 0, fmt.Errorf(
|
||||
"length of bytes received from sysctl (%d) does not match expected bytes (long: %d), (int: %d)",
|
||||
len(raw),
|
||||
C.sizeof_long,
|
||||
C.sizeof_int,
|
||||
)
|
||||
|
||||
}
|
||||
|
|
|
@ -156,24 +156,24 @@ func (c *xfsCollector) updateXFSStats(ch chan<- prometheus.Metric, s *xfs.Stats)
|
|||
value: float64(s.BlockMapping.ExtentListCompares),
|
||||
},
|
||||
{
|
||||
name: "block_mapping_btree_lookups_total",
|
||||
name: "block_map_btree_lookups_total",
|
||||
desc: "Number of block map B-tree lookups for a filesystem.",
|
||||
value: float64(s.AllocationBTree.Lookups),
|
||||
value: float64(s.BlockMapBTree.Lookups),
|
||||
},
|
||||
{
|
||||
name: "block_mapping_btree_compares_total",
|
||||
name: "block_map_btree_compares_total",
|
||||
desc: "Number of block map B-tree compares for a filesystem.",
|
||||
value: float64(s.AllocationBTree.Compares),
|
||||
value: float64(s.BlockMapBTree.Compares),
|
||||
},
|
||||
{
|
||||
name: "block_mapping_btree_records_inserted_total",
|
||||
name: "block_map_btree_records_inserted_total",
|
||||
desc: "Number of block map B-tree records inserted for a filesystem.",
|
||||
value: float64(s.AllocationBTree.RecordsInserted),
|
||||
value: float64(s.BlockMapBTree.RecordsInserted),
|
||||
},
|
||||
{
|
||||
name: "block_mapping_btree_records_deleted_total",
|
||||
name: "block_map_btree_records_deleted_total",
|
||||
desc: "Number of block map B-tree records deleted for a filesystem.",
|
||||
value: float64(s.AllocationBTree.RecordsDeleted),
|
||||
value: float64(s.BlockMapBTree.RecordsDeleted),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ enabled_collectors=$(cat << COLLECTORS
|
|||
filefd
|
||||
hwmon
|
||||
infiniband
|
||||
interrupts
|
||||
ipvs
|
||||
ksmd
|
||||
loadavg
|
||||
|
|
Loading…
Reference in a new issue