dusharu / ZBX_Disk_Stat

Send statistic from /proc/diskstats to Zabbix
GNU General Public License v3.0
7 stars 5 forks source link

BUG: disk_stat check also virtual controller #9

Closed duven87 closed 1 month ago

duven87 commented 10 months ago

Hi again, Yesterday I saltstacked the new script with the bsdmainutils package everywhere and all but 2 servers were fixed.

1. Failed: cannot extract value from json by path "$['ZBX_Disk_Stat'][0]['write_complete']": cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'Password for user zbx_monitor: 
psql: fe_sendauth: no password supplied'
  5449:20231110:151711.182 error reason for "elearn7.server.de:custom.blkdev.write_operation_pm[nvme1c1n1]" changed: Preprocessing failed for: 
1. Failed: cannot extract value from json by path "$['ZBX_Disk_Stat'][0]['write_complete']": cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'psql: FATAL:  Ident authentication failed for user "zbx_monitor"
FATAL:  Ident authentication failed for user "zbx_monitor"'
  5449:20231110:151711.182 error reason for "elearn7.server.de:custom.blkdev.read_sum_time_pm[nvme1c1n1]" changed: Preprocessing failed for: 
1. Failed: cannot extract value from json by path "$['ZBX_Disk_Stat'][0]['read_time']": cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'Password for user zbx_monitor: 
psql: fe_sendauth: no password supplied'

Something super weird happens... it asks for zbx_monitor user login which is the user for our postgresql template but those 2 servers have not been assigned that template and postgresql is not even installed.

Anyway, the point is that the script want to analyze a disk that is not real (nvme1c1n1). It is a virtual controller:

root@elearn7:~# grep -r nvme1c1n1 /

/sys/kernel/tracing/per_cpu/cpu36/trace:           <...>-174719  [036] ..... 38612.423043: s1dsoenter: (do_sys_openat2+0x0/0x160) dfd=-100 filename="/sys/block/nvme1c1n1/hidden" flags=557056 mode=0
/sys/kernel/tracing/per_cpu/cpu36/trace:           <...>-174719  [036] ..... 38612.423045: s1dofilpopen_enter: (do_filp_open+0x0/0x160) filename="/sys/block/nvme1c1n1/hidden" flags=32768
/sys/kernel/tracing/per_cpu/cpu36/trace_pipe:           <...>-174719  [036] ..... 38612.423043: s1dsoenter: (do_sys_openat2+0x0/0x160) dfd=-100 filename="/sys/block/nvme1c1n1/hidden" flags=557056 mode=0
/sys/kernel/tracing/per_cpu/cpu36/trace_pipe:           <...>-174719  [036] ..... 38612.423045: s1dofilpopen_enter: (do_filp_open+0x0/0x160) filename="/sys/block/nvme1c1n1/hidden" flags=32768
...
/sys/kernel/tracing/per_cpu/cpu28/trace:           <...>-174936  [028] ..... 38673.194788: s1dsoenter: (do_sys_openat2+0x0/0x160) dfd=-100 filename="/sys/block/nvme1c1n1/hidden" flags=557056 mode=0
/sys/kernel/tracing/per_cpu/cpu28/trace:           <...>-174936  [028] ..... 38673.194790: s1dofilpopen_enter: (do_filp_open+0x0/0x160) filename="/sys/block/nvme1c1n1/hidden" flags=32768
/sys/kernel/tracing/per_cpu/cpu28/trace_pipe:           <...>-174936  [028] ..... 38673.194788: s1dsoenter: (do_sys_openat2+0x0/0x160) dfd=-100 filename="/sys/block/nvme1c1n1/hidden" flags=557056 mode=0
/sys/kernel/tracing/per_cpu/cpu28/trace_pipe:           <...>-174936  [028] ..... 38673.194790: s1dofilpopen_enter: (do_filp_open+0x0/0x160) filename="/sys/block/nvme1c1n1/hidden" flags=32768

Should I add some string on overrides right?

image

dusharu commented 10 months ago

Hi,
Thank you for your feedback.

Should I add some string on overrides right?

"$['ZBX_Disk_Stat'][0]['read_time']": cannot parse as a valid JSON object

# from zabbix-server/proxy
zabbix_get -s <HOST> -k 'system.run[ "/usr/libexec/zabbix/disk_stat.sh blkdev_all_stat nvme1c1n1" ]'

# or from problem host
/usr/libexec/zabbix/disk_stat.sh blkdev_all_stat nvme1c1n1
grep nvme /proc/diskstats