Open v-bulynkin opened 3 months ago
Hi @v-bulynkin
the Smart plugin is disable by default in the Glances configuration file.
You can enable by editing your glances.conf file (/etc/glances/glances.conf inside the container):
[smart]
# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html
# This plugin is disabled by default
disable=True
or via the command line:
docker exec glances glances --enable-plugin smart
Keep us inform.
I wrote that I enabled it in the first message:
- Enabled SMART plugin by
disable=False
in glances.conf.
I mount the glances.conf file in docker-compose.yml the following way:
volumes:
- ./glances/glances.conf:/etc/glances/glances.conf
Is it not enough?
@v-bulynkin That should be enough, but glances looks for paths in multiple locations. So if possible, could you just give the command line variant a try, so that atleast it works when enabled explicitly?
docker exec glances glances --enable-plugin smart
If that works, then could you just try running glances in debug mode (-d
flag) and check the start of the logs?
Should be present at ~/.local/share/glances/glances.log
inside the container
I have this configuration now in docker-compose.yml:
glances:
image: nicolargo/glances:dev
container_name: glances
hostname: example.com
restart: unless-stopped
pid: host
privileged: true
devices:
- "/dev/nvme0"
environment:
GLANCES_OPT: "-w -d --enable-plugin smart"
volumes:
- ./glances/glances.conf:/etc/glances/glances.conf
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/os-release:/etc/os-release:ro
labels:
- "traefik.enable=true"
- "traefik.http.services.glances.loadbalancer.server.port=61208"
- "traefik.http.routers.glances.rule=Host(`example.com`) && (PathPrefix(`/mon/`) || Path(`/mon`))"
- "traefik.http.routers.glances.tls.certresolver=le"
- "traefik.http.routers.glances.entrypoints=websecure"
In logs:
docker logs glances >& glances.log
cat glances.log |grep smart
2024-08-12 14:18:26,406 -- DEBUG -- Init smart plugin
2024-08-12 14:18:26,406 -- DEBUG -- Load section smart in Glances configuration file
2024-08-12 14:18:26,406 -- DEBUG -- Load limit: smart_disable = ['False']
2024-08-12 14:18:26,406 -- DEBUG -- Plugin smart started in 0.006852 seconds
2024-08-12 14:18:26,499 -- DEBUG -- Active plugins list: ['containers', 'uptime', 'help', 'ports', 'now', 'network', 'amps', 'percpu', 'quicklook', 'smart', 'wifi', 'load', 'processcount', 'alert', 'fs', 'core', 'cpu', 'psutilversion', 'mem', 'diskio', 'memswap', 'sensors', 'version', 'folders', 'gpu', 'processlist', 'system']
2024-08-12 14:18:26,823 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.216957 seconds
2024-08-12 14:18:41,452 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.235986 seconds
2024-08-12 14:18:53,826 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.217937 seconds
2024-08-12 14:19:04,340 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.210826 seconds
2024-08-12 14:19:15,909 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.22168 seconds
2024-08-12 14:19:26,381 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.226953 seconds
2024-08-12 14:19:36,934 -- DEBUG -- PluginModel glances.plugins.smart update return [] in 0.220929 seconds
It's perhaps an issue concerning the read rights on the /dev/nvme0n1 file. Inside your container, glances user should be allowed to read this file.
I have the same issue on my laptop (running Glances not from a container):
1) glances
No smart info displayed
2) sudo glances
Note for Glances developer.
A mode exist to run PySmart in sudo:
>>> from pySMART import DeviceList
>>> from pySMART import Device
>>> sda = Device('/dev/sda')
>>> sda
<UNKNOWN INTERFACE device on /dev/sda mod:None sn:None>
>>> devlist = DeviceList()
>>> devlist
<DeviceList contents:
>
>>> from pySMART import SMARTCTL
>>> SMARTCTL.sudo = True
>>> sda = Device('/dev/sda')
>>> sda
[sudo] password for user:
<SAT device on /dev/sda mod:ST10000DM0004-1ZC101 sn:ZA20VNPT>
>>> devlist = DeviceList()
>>> devlist
<DeviceList contents:
<NVME device on /dev/nvme0 mod:Sabrent Rocket 4.0 1TB sn:03850709185D88300410>
<NVME device on /dev/nvme1 mod:Samsung SSD 970 EVO Plus 2TB sn:S59CNM0RB05028D>
<NVME device on /dev/nvme2 mod:Samsung SSD 970 EVO Plus 2TB sn:S59CNM0RB05113H>
<SAT device on /dev/sda mod:ST10000DM0004-1ZC101 sn:ZA20VNPT>
<SAT device on /dev/sdb mod:ST10000DM0004-1ZC101 sn:ZA22W366>
<SAT device on /dev/sdc mod:ST10000DM0004-1ZC101 sn:ZA22SPLG>
<SAT device on /dev/sdd mod:ST10000DM0004-1ZC101 sn:ZA2215HL>
But password should be enter...
...
[sudo] password for user:
...
or sudoers file configure correctly...
I'm running glances (not the current version) on a Fedora server as root and seeing similar output - just formatted slightly differently. I'll try testing a newer version:
root@host1:~# glances --version
Glances version: 4.0.5
Glances API version: 4
PsUtil version: 5.9.8
Log file: /root/.local/share/glances/glances.log
root@host1:~# glances --enable-plugin smart -d --stdout smart
smart: {}
smart: {}
^Croot@host1:~#
root@host1:~# grep smart ~/.local/share/glances/glances.log
2024-08-20 10:41:28,273 -- DEBUG -- Init smart plugin
2024-08-20 10:41:28,273 -- DEBUG -- Load section smart in ['/root/.config/glances/glances.conf', '/etc/glances/glances.conf', '/usr/share/doc/glances/glances.conf']
2024-08-20 10:41:28,273 -- DEBUG -- Load limit: smart_disable = ['False']
2024-08-20 10:41:28,273 -- DEBUG -- Plugin smart started in 0.001074 seconds
2024-08-20 10:41:28,277 -- DEBUG -- Active plugins list: ['alert', 'amps', 'containers', 'core', 'cpu', 'diskio', 'folders', 'fs', 'gpu', 'help', 'ip', 'load', 'mem', 'memswap', 'network', 'now', 'percpu', 'ports', 'processcount', 'processlist', 'psutilversion', 'quicklook', 'sensors', 'smart', 'system', 'uptime', 'version']
2024-08-20 10:41:28,297 -- DEBUG -- PluginModel glances.plugins.smart update return {} in 5e-06 seconds
2024-08-20 10:41:28,479 -- INFO -- Stdout mode is ON, following stats will be displayed: smart
2024-08-20 10:41:48,568 -- DEBUG -- PluginModel glances.plugins.smart update return {} in 2.4e-05 seconds
2024-08-20 10:41:49,779 -- DEBUG -- Stop the smart plugin
Testing pySMART directly:
root@host1:~# python3
Python 3.12.4 (main, Jun 7 2024, 00:00:00) [GCC 14.1.1 20240607 (Red Hat 14.1.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pySMART import DeviceList
>>> from pySMART import Device
>>> sda = Device('/dev/sda')
>>> sda
<SAT device on /dev/sda mod:Samsung SSD 870 EVO 1TB sn:<serial>>
>>> devlist = DeviceList()
>>> devlist
<DeviceList contents:
<SAT device on /dev/sda mod:Samsung SSD 870 EVO 1TB sn:<serial>>
<SAT device on /dev/sdb mod:WDC WD140EFGX-68B0GN0 sn:<serial>>
<SAT device on /dev/sdc mod:WDC WD140EFGX-68B0GN0 sn:<serial>>
<SAT device on /dev/sdd mod:WDC WD140EFGX-68B0GN0 sn:<serial>>
<SAT device on /dev/sde mod:WDC WD140EFGX-68B0GN0 sn:<serial>>
<SAT device on /dev/sdf mod:WDC WD140EFGX-68B0GN0 sn:<serial>>
... long list of devices
>
>>>
I figured there might be some SELinux interference but there are no log entries from setroubleshootd corresponding with the time this is being tested. Also of course, executing pySMART directly does seem to work.
Running the current version I get good output:
root@host1:~# ~/.local/bin/glances --version
Glances version: 4.1.2
Glances API version: 4
PsUtil version: 5.9.8
Log file: /root/.local/share/glances/glances.log
Hello dear sir,
I'm trying to display the SMART information from Docker container. What I've done:
disable=False
in glances.conf.After that:
docker exec glances glances --stdout smart
is empty too:docker exec glances smartctl -a /dev/nvme0n1
works well:=== START OF INFORMATION SECTION === Model Number: Samsung SSD 980 PRO 1TB Serial Number: XXXXXXXXXXXXXXX Firmware Version: 5B2QGXA7 PCI Vendor/Subsystem ID: 0x144d IEEE OUI Identifier: 0x002538 Total NVM Capacity: 1,000,204,886,016 [1.00 TB] Unallocated NVM Capacity: 0 Controller ID: 6 NVMe Version: 1.3 Number of Namespaces: 1 Namespace 1 Size/Capacity: 1,000,204,886,016 [1.00 TB] Namespace 1 Utilization: 115,592,560,640 [115 GB] Namespace 1 Formatted LBA Size: 512 Namespace 1 IEEE EUI-64: 002538 b531a5b590 Local Time is: Sun Aug 11 09:58:14 2024 UTC Firmware Updates (0x16): 3 Slots, no Reset required Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test Optional NVM Commands (0x0057): Comp Wr_Unc DS_Mngmt Sav/Sel_Feat Timestmp Log Page Attributes (0x0f): S/H_per_NS Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Maximum Data Transfer Size: 128 Pages Warning Comp. Temp. Threshold: 82 Celsius Critical Comp. Temp. Threshold: 85 Celsius
Supported Power States St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat 0 + 8.49W - - 0 0 0 0 0 0 1 + 4.48W - - 1 1 1 1 0 200 2 + 3.18W - - 2 2 2 2 0 1000 3 - 0.0400W - - 3 3 3 3 2000 1200 4 - 0.0050W - - 4 4 4 4 500 9500
Supported LBA Sizes (NSID 0x1) Id Fmt Data Metadt Rel_Perf 0 + 512 0 0
=== START OF SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
SMART/Health Information (NVMe Log 0x02) Critical Warning: 0x00 Temperature: 56 Celsius Available Spare: 100% Available Spare Threshold: 10% Percentage Used: 0% Data Units Read: 140,764 [72.0 GB] Data Units Written: 516,631 [264 GB] Host Read Commands: 1,953,083 Host Write Commands: 5,805,489 Controller Busy Time: 82 Power Cycles: 32 Power On Hours: 15 Unsafe Shutdowns: 11 Media and Data Integrity Errors: 0 Error Information Log Entries: 0 Warning Comp. Temperature Time: 0 Critical Comp. Temperature Time: 0 Temperature Sensor 1: 56 Celsius Temperature Sensor 2: 61 Celsius
Error Information (NVMe Log 0x01, 16 of 64 entries) No Errors Logged
Read Self-test Log failed: Invalid Field in Command (0x002)