@@ -21,6 +21,31 @@ if ! command -v nvme >/dev/null 2>&1; then
21
21
exit 1
22
22
fi
23
23
24
+ # Set path to the DWPD ratings file
25
+ dwpd_file=" /opt/kayobe/etc/monitoring/dwpd_ratings.yml"
26
+
27
+ # Function to load rated DWPD values from the YML file
28
+ load_dwpd_ratings () {
29
+ declare -gA rated_dwpd
30
+ if [[ -f " $dwpd_file " ]]; then
31
+ while IFS= read -r line; do
32
+ key=" $( echo " $line " | jq -r ' .model_name' ) "
33
+ value=" $( echo " $line " | jq -r ' .rated_dwpd' ) "
34
+ # Strip trailing spaces
35
+ key=" $( echo " $key " | sed ' s/[[:space:]]*$//' ) "
36
+ value=" $( echo " $value " | sed ' s/[[:space:]]*$//' ) "
37
+ rated_dwpd[" $key " ]=" $value "
38
+ done < <( jq -c ' .[]' " $dwpd_file " )
39
+ else
40
+ echo " Warning: DWPD ratings file not found at $dwpd_file . Defaulting to 1 DWPD."
41
+ fi
42
+ }
43
+
44
+ load_dwpd_ratings
45
+
46
+ # Debugging purpose: print the array
47
+ # echo "${rated_dwpd[@]}"
48
+
24
49
output_format_awk=" $(
25
50
cat << 'OUTPUTAWK '
26
51
BEGIN { v = "" }
@@ -45,57 +70,68 @@ nvme_version="$(nvme version | awk '$1 == "nvme" {print $3}')"
45
70
echo " nvmecli{version=\" ${nvme_version} \" } 1" | format_output
46
71
47
72
# Get devices (DevicePath and PhysicalSize)
48
- device_info=" $( nvme list -o json | jq -c ' .Devices[] | {DevicePath: .DevicePath, PhysicalSize: .PhysicalSize}' ) "
73
+ device_info=" $( nvme list -o json | jq -c ' .Devices[] | {DevicePath, PhysicalSize, ModelNumber}' ) "
74
+
75
+ # Convert device_info to an array
76
+ device_info_array=()
77
+ while IFS= read -r line; do
78
+ device_info_array+=(" $line " )
79
+ done <<< " $device_info"
49
80
50
81
# Loop through the NVMe devices
51
- echo " $device_info " | while read -r device_data ; do
52
- device=$( echo " $device_data " | jq -r ' .DevicePath' )
82
+ for device_data in " ${device_info_array[@]} " ; do
83
+ device=" $( echo " $device_data " | jq -r ' .DevicePath' ) "
53
84
json_check=" $( nvme smart-log -o json " ${device} " ) "
54
85
disk=" ${device##*/ } "
86
+ model_name=" $( echo " $device_data " | jq -r ' .ModelNumber' ) "
55
87
56
- physical_size=$( echo " $device_data " | jq -r ' .PhysicalSize' )
57
- echo " physical_size_bytes{device=\" ${disk} \" } ${physical_size} "
88
+ physical_size=" $( echo " $device_data " | jq -r ' .PhysicalSize' ) "
89
+ echo " physical_size_bytes{device=\" ${disk} \" ,model= \" ${model_name} \" } ${physical_size} "
58
90
59
91
# The temperature value in JSON is in Kelvin, we want Celsius
60
92
value_temperature=" $( echo " $json_check " | jq ' .temperature - 273' ) "
61
- echo " temperature_celsius{device=\" ${disk} \" } ${value_temperature} "
93
+ echo " temperature_celsius{device=\" ${disk} \" ,model=\" ${model_name} \" } ${value_temperature} "
94
+
95
+ # Get the rated DWPD from the dictionary or default to 1 if not found
96
+ value_rated_dwpd=" ${rated_dwpd[$model_name]:- 1} "
97
+ echo " rated_dwpd{device=\" ${disk} \" ,model=\" ${model_name} \" } ${value_rated_dwpd} "
62
98
63
99
value_available_spare=" $( echo " $json_check " | jq ' .avail_spare / 100' ) "
64
- echo " available_spare_ratio{device=\" ${disk} \" } ${value_available_spare} "
100
+ echo " available_spare_ratio{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_available_spare} "
65
101
66
102
value_available_spare_threshold=" $( echo " $json_check " | jq ' .spare_thresh / 100' ) "
67
- echo " available_spare_threshold_ratio{device=\" ${disk} \" } ${value_available_spare_threshold} "
103
+ echo " available_spare_threshold_ratio{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_available_spare_threshold} "
68
104
69
105
value_percentage_used=" $( echo " $json_check " | jq ' .percent_used / 100' ) "
70
- echo " percentage_used_ratio{device=\" ${disk} \" } ${value_percentage_used} "
106
+ echo " percentage_used_ratio{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_percentage_used} "
71
107
72
108
value_critical_warning=" $( echo " $json_check " | jq ' .critical_warning' ) "
73
- echo " critical_warning_total{device=\" ${disk} \" } ${value_critical_warning} "
109
+ echo " critical_warning_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_critical_warning} "
74
110
75
111
value_media_errors=" $( echo " $json_check " | jq ' .media_errors' ) "
76
- echo " media_errors_total{device=\" ${disk} \" } ${value_media_errors} "
112
+ echo " media_errors_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_media_errors} "
77
113
78
114
value_num_err_log_entries=" $( echo " $json_check " | jq ' .num_err_log_entries' ) "
79
- echo " num_err_log_entries_total{device=\" ${disk} \" } ${value_num_err_log_entries} "
115
+ echo " num_err_log_entries_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_num_err_log_entries} "
80
116
81
117
value_power_cycles=" $( echo " $json_check " | jq ' .power_cycles' ) "
82
- echo " power_cycles_total{device=\" ${disk} \" } ${value_power_cycles} "
118
+ echo " power_cycles_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_power_cycles} "
83
119
84
120
value_power_on_hours=" $( echo " $json_check " | jq ' .power_on_hours' ) "
85
- echo " power_on_hours_total{device=\" ${disk} \" } ${value_power_on_hours} "
121
+ echo " power_on_hours_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_power_on_hours} "
86
122
87
123
value_controller_busy_time=" $( echo " $json_check " | jq ' .controller_busy_time' ) "
88
- echo " controller_busy_time_seconds{device=\" ${disk} \" } ${value_controller_busy_time} "
124
+ echo " controller_busy_time_seconds{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_controller_busy_time} "
89
125
90
126
value_data_units_written=" $( echo " $json_check " | jq ' .data_units_written' ) "
91
- echo " data_units_written_total{device=\" ${disk} \" } ${value_data_units_written} "
127
+ echo " data_units_written_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_data_units_written} "
92
128
93
129
value_data_units_read=" $( echo " $json_check " | jq ' .data_units_read' ) "
94
- echo " data_units_read_total{device=\" ${disk} \" } ${value_data_units_read} "
130
+ echo " data_units_read_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_data_units_read} "
95
131
96
132
value_host_read_commands=" $( echo " $json_check " | jq ' .host_read_commands' ) "
97
- echo " host_read_commands_total{device=\" ${disk} \" } ${value_host_read_commands} "
133
+ echo " host_read_commands_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_host_read_commands} "
98
134
99
135
value_host_write_commands=" $( echo " $json_check " | jq ' .host_write_commands' ) "
100
- echo " host_write_commands_total{device=\" ${disk} \" } ${value_host_write_commands} "
136
+ echo " host_write_commands_total{device=\" ${disk} \" ,model= \" ${model_name} \" } ${value_host_write_commands} "
101
137
done | format_output
0 commit comments