27 lines
900 B
Python
27 lines
900 B
Python
#!/usr/bin/env python3
|
|
|
|
from subprocess import check_output
|
|
from json import loads
|
|
import time
|
|
|
|
|
|
nanosecond = time.time_ns()
|
|
|
|
for line in check_output(['/usr/sbin/smartctl', '--scan', '-d', 'scsi']).splitlines():
|
|
device = line.split()[0].decode()
|
|
smart = loads(check_output(['/usr/sbin/smartctl', '-a', device, '-j']))
|
|
attributes = {
|
|
attribute['name']: attribute['flags']['value']
|
|
for attribute in smart['ata_smart_attributes']['table']
|
|
if int(attribute['id']) in [
|
|
# https://www.backblaze.com/blog/what-smart-stats-indicate-hard-drive-failures/
|
|
5,
|
|
187,
|
|
188,
|
|
197,
|
|
198,
|
|
]
|
|
}
|
|
attributes_string = ','.join(f'{k}={v}' for k, v in attributes.items())
|
|
|
|
print(f"smart_errors,host=${node.name},device={device} {attributes_string} {nanosecond}")
|