mirror of
https://github.com/prometheus-community/smartctl_exporter.git
synced 2024-11-23 01:43:07 +01:00
920c3429b1
First prometheus-community release. * [FEATURE] Add various new metrics #14 * [BUGFIX] Fix exit code bit parsing #37 Signed-off-by: SuperQ <superq@gmail.com>
395 lines
8.1 KiB
Go
395 lines
8.1 KiB
Go
// Copyright 2022 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.
|
|
|
|
package main
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
var (
|
|
metricSmartctlVersion = prometheus.NewDesc(
|
|
"smartctl_version",
|
|
"smartctl version",
|
|
[]string{
|
|
"json_format_version",
|
|
"smartctl_version",
|
|
"svn_revision",
|
|
"build_info",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceModel = prometheus.NewDesc(
|
|
"smartctl_device",
|
|
"Device info",
|
|
[]string{
|
|
"device",
|
|
"interface",
|
|
"protocol",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"ata_additional_product_id",
|
|
"firmware_version",
|
|
"ata_version",
|
|
"sata_version",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceCapacityBlocks = prometheus.NewDesc(
|
|
"smartctl_device_capacity_blocks",
|
|
"Device capacity in blocks",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceCapacityBytes = prometheus.NewDesc(
|
|
"smartctl_device_capacity_bytes",
|
|
"Device capacity in bytes",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceBlockSize = prometheus.NewDesc(
|
|
"smartctl_device_block_size",
|
|
"Device block size",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"blocks_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceInterfaceSpeed = prometheus.NewDesc(
|
|
"smartctl_device_interface_speed",
|
|
"Device interface speed, bits per second",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"speed_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceAttribute = prometheus.NewDesc(
|
|
"smartctl_device_attribute",
|
|
"Device attributes",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"attribute_name",
|
|
"attribute_flags_short",
|
|
"attribute_flags_long",
|
|
"attribute_value_type",
|
|
"attribute_id",
|
|
},
|
|
nil,
|
|
)
|
|
metricDevicePowerOnSeconds = prometheus.NewDesc(
|
|
"smartctl_device_power_on_seconds",
|
|
"Device power on seconds",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceRotationRate = prometheus.NewDesc(
|
|
"smartctl_device_rotation_rate",
|
|
"Device rotation rate",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceTemperature = prometheus.NewDesc(
|
|
"smartctl_device_temperature",
|
|
"Device temperature celsius",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"temperature_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricDevicePowerCycleCount = prometheus.NewDesc(
|
|
"smartctl_device_power_cycle_count",
|
|
"Device power cycle count",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDevicePercentageUsed = prometheus.NewDesc(
|
|
"smartctl_device_percentage_used",
|
|
"Device write percentage used",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceAvailableSpare = prometheus.NewDesc(
|
|
"smartctl_device_available_spare",
|
|
"Normalized percentage (0 to 100%) of the remaining spare capacity available",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceAvailableSpareThreshold = prometheus.NewDesc(
|
|
"smartctl_device_available_spare_threshold",
|
|
"When the Available Spare falls below the threshold indicated in this field, an asynchronous event completion may occur. The value is indicated as a normalized percentage (0 to 100%)",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceCriticalWarning = prometheus.NewDesc(
|
|
"smartctl_device_critical_warning",
|
|
"This field indicates critical warnings for the state of the controller",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceMediaErrors = prometheus.NewDesc(
|
|
"smartctl_device_media_errors",
|
|
"Contains the number of occurrences where the controller detected an unrecovered data integrity error. Errors such as uncorrectable ECC, CRC checksum failure, or LBA tag mismatch are included in this field",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceNumErrLogEntries = prometheus.NewDesc(
|
|
"smartctl_device_num_err_log_entries",
|
|
"Contains the number of Error Information log entries over the life of the controller",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceBytesRead = prometheus.NewDesc(
|
|
"smartctl_device_bytes_read",
|
|
"",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceBytesWritten = prometheus.NewDesc(
|
|
"smartctl_device_bytes_written",
|
|
"",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceSmartStatus = prometheus.NewDesc(
|
|
"smartctl_device_smart_status",
|
|
"General smart status",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceExitStatus = prometheus.NewDesc(
|
|
"smartctl_device_smartctl_exit_status",
|
|
"Exit status of smartctl on device",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceState = prometheus.NewDesc(
|
|
"smartctl_device_state",
|
|
"Device state (0=active, 1=standby, 2=sleep, 3=dst, 4=offline, 5=sct)",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceStatistics = prometheus.NewDesc(
|
|
"smartctl_device_statistics",
|
|
"Device statistics",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"statistic_table",
|
|
"statistic_name",
|
|
"statistic_flags_short",
|
|
"statistic_flags_long",
|
|
},
|
|
nil,
|
|
)
|
|
metricCriticalWarning = prometheus.NewDesc(
|
|
"critical_warning",
|
|
"Critical warning counter",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceStatus = prometheus.NewDesc(
|
|
"smartctl_device_status",
|
|
"Device status",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricAvailableSpare = prometheus.NewDesc(
|
|
"available_spare",
|
|
"Available spare",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceErrorLogCount = prometheus.NewDesc(
|
|
"smartctl_device_error_log_count",
|
|
"Device SMART error log count",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"error_log_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricMediaErrors = prometheus.NewDesc(
|
|
"media_errors",
|
|
"Media errors counter",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceSelfTestLogCount = prometheus.NewDesc(
|
|
"smartctl_device_self_test_log_count",
|
|
"Device SMART self test log count",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"self_test_log_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricSmartStatus = prometheus.NewDesc(
|
|
"smart_status",
|
|
"Smart status",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceSelfTestLogErrorCount = prometheus.NewDesc(
|
|
"smartctl_device_self_test_log_error_count",
|
|
"Device SMART self test log error count",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"self_test_log_type",
|
|
},
|
|
nil,
|
|
)
|
|
metricDeviceERCSeconds = prometheus.NewDesc(
|
|
"smartctl_device_erc_seconds",
|
|
"Device SMART Error Recovery Control Seconds",
|
|
[]string{
|
|
"device",
|
|
"model_family",
|
|
"model_name",
|
|
"serial_number",
|
|
"op_type",
|
|
},
|
|
nil,
|
|
)
|
|
)
|