2024. április 19., péntek

Gyorskeresés

System monitor - hardveresen

Írta: | Kulcsszavak: conky . system moitor . sysmon . arduino

[ ÚJ BEJEGYZÉS ]

Picit tovább gondoltam a NAS okosítást (azzal majd lesz valami).

Néha nem árt tudni a számítógép állapotát, viszont nem mindig van rá lehetőség, illetve nem mindig kényelmes ablakot váltani, hogy ránézzünk a system monitorra nem beszélve arról, hogy nem igazán van egyetlen olyan program ami mindent mutat, amit tudni szeretnénk. Kivéve persze a jó öreg Conky-t, de ehhez is az asztalra kell ugrani.

Windowsról meg aztán ne is beszéljünk.

Ja, igen.. ha valakinek nem lenne egyértelmű: linux desktop rendszerről beszélünk, azon belül is leginkább ubuntu vagy annak valamilyen variánsa. Egy jó ideje Mint-et használok, nem tervezem a váltást.

Szóval az ötlet adott volt, valahogy látni kellene a rendszer állapotát. Ilyenekre gondolok, mint CPU kihasználtság, hőmérséklet, gpu-val ugyanez, feszültség értékek, ram és swap használat, foglalt/szabad hely a lemezen, aktuális lemezkihasználtság, lemez hőmérséklet, hálózati statisztika, stb...

Ahhoz, hogy mindezt megtudjuk, léteznek jellemzően aprócska célprogramok konzolos felületen, csak mindegyikből ki kell szűrni a szükséges adatokat, összegezni és egyszerre kiírni a megfelelő helyre. Ez a hely esetünkben egy bármilyen fizikai LCD, TFT, Oled vagy bármi egyéb kijelző. Meghajtáshoz arduino nano-t fogok használni.

Miért a nano?
Mert van benne usb/serial chip és 5V-al működik, a helyigénye egész kicsi. Eleinte gondolkodtam valamilyen hálózatos (akár webes felületen konfigolható) eszközön is de annyi féle hardver és szoftver van, hogy ezt elvetettem. Nehéz lenne egy olyan egységes hardvert csinálni, ami a legtöbb rendszerrel kompatibilis. No meg annak is kell áram. Lehetne variálni akkuval de nagyobb, drágább lesz és egyszer úgyis lemerül. Ezért döntöttem az USB mellett. Ha van egy kijelzőm, az asztali gépbe akár könnyedén be is építhető, csak az egyik 5,25"-os takaró műanyagot kivágom, belülről ráragasztom a kijelzőt és az alkatrészeket. Jellemzően minden alaplapon van nem használt usb kivezetés, erre rákötve megvan az áram és a kommunikáció is egyben. Ha nem lenne ilyenünk, egy hátsó usb portról egész észrevétlenül be lehet vezetni a kábelt a gépbe.
Szerencsére szabvány soros portként ismeri fel a gép az eszközt, ezért innentől kezdve a kommunikáció szintén viszonylag könnyű. Írok egy scriptet, ami összeszedi a megfelelő adatokat és formázva kiküldi a soros portra (esetleg a monitorra is, ez már részlet kérdés), majd az arduino feldolgozza és megjeleníti a kijelzőn a kívánt formában.

Ennek még egy előnye van: notebookkal is működik, sőt, szinte bármilyen linuxos eszközön, amin van soros vagy USB port, de ennyire most nem mélyedek bele, PC-re csinálom. Meg talán RPi-re, mert van azon egy szerverem. Szóval ha külső eszköz lesz belőle, akkor meg egy egész kicsi műanyag házba beépíthető, mint pl. ez. De nyomtatni is lehet hozzá 3D nyomtatóval. Más kérdés, hogy szerintem nem éri meg. Kijelzőnek először egy 2x16 karakteres LCD-re gondoltam mert olcsó és egyszerű, mint a faék, de szívás van a kurzor vezérlésével és nagyon kevés infó fér ki rá, ráadásul csak karakteres formában (néhány egyedi karaktert lehet definiálni és akkor úgy tűnik, mintha grafikus lenne, de nagyon korlátozottak a lehetőségeink). Szóval ezt elvetettem.
Van egy ehhez hasonló OLED kijelzőm, csak 1.54"-os és teljesen kék. Ez jól mutat a gépházban, pontosan akkora, hogy épp bele illik a takaró műanyagba és világít a sötétben. Gondoltam még a nokia 5110 kijelzőre is, viszont ennek kisebb a felbontása (előzőnek 128x64, ennek pedig 84x48) viszont olcsó és áramot szinte semmit nem fogyaszt, ha esetleg számít a fogyasztás. Lehet, hogy majd ha csinálok elemes wifis eszközt, akkor ebből lesz. De van ennél jobb monokróm is, ugyanekkora a kijelző csak nagyobb területet hasznosít és nagyobb a felbontása is (96x68) ennek a kijelzőnek. Az ára hasonló. Természetesen ezeken kívül van mindenféle méretben, színes is, monokróm is, technológiákban, árban eltérőek.

Szerintem én jelen esetben az OLED-et fogom választani, majd ez a napokban kiderül ha eljutottam odáig.

Elkezdtem megírni a scriptet, egyelőre ott tartok, hogy ez a kimenet (konzol képernyőre):

cpu: 2% 39°C
ram: 39%
swap: 0%
net KB/s:
in -> 0.06 0.06 <- out
disk used: 9%

Maga a script pedig így néz ki:
#!/bin/bash
declare -i USED=0
USED=$(top -b -n2 | grep '%Cpu(s):' |tail -n 1 |awk '{print $2}' |sed 's/,[^,]*$//')
echo cpu: $USED% $(sensors | grep -oP 'Package.*?\+\K[0-9]+')°C

echo ram: $(free | grep Mem | awk '{print $3/$2 * 100.0}' |sed 's/.[^.]*$//')%
echo swap: $(cat /proc/swaps | tail -n 1 |awk '{print $4/$3 * 100.0}')%
echo net KB/s:
echo "in -> "$(ifstat -i enp2s0 1 1 |tail -n 1)" <- out"
echo disk used: $(df | grep '/dev/sda2' |awk '{print $5}')

A script valószínűleg akkor fog elkészülni, ha már tudom mennyi helyem lesz a kijelzőn. Írok majd egy teszt programot arduinora, hogy lássam hogyan és mennyi inó fér ki a kijelzőre és majd ahhoz igazítom a scriptet. Utána gyerekjáték lesz befejezni az eszközt.

Szerintem egyébként windowsra sem lehetetlen megírni powershellben valami hasonlót, majd utána nézek ha ez elkészült. Addig ha valakinek van bármilyen ötlete, az jöhet :)

Ha pedig valami univerzálisat és könnyedén konfigurálhatót szeretnék, akkor kellene egy keret program, ami kezeli a szenzor adatokat és egységes formában továbbítja a mikrokontroller felé. Javában szerintem nem nagyon lehet ilyen mélyen belemászni az OS-be, pedig az platformfüggetlen. Esetleg a C++, de azzal meg 500km hosszú lenne a kód. Ez a rész valószínűleg már az unokámra marad :DDD

Viszont ha elkészül az eredeti verzió, ahhoz is bőven lehet találni a neten anyagot. Igazából elég azt tudni, hogy az arduino milyen adatot vár és a bash scriptet úgy rakja össze mindenki magának, ahogy tetszik. A jó oldala a dolognak, ha mondjuk arduinoban erősebb a tudásod de bash-elésben kevésbé, akkor írsz egy olyan szkriptet amit tudsz és akkor a mikrokontroller rendezi a beérkező adatokat. Teljesen rugalmas a dolog.

A következő napokban majd folytatom, ahogy időm engedi. Lehet, hogy majd lesz videó is, bár most várom az új gépem, amibe még majd kell venni RAM-ot a vágáshoz, szóval szerintem max képek lesznek egyelőre ha már lesz olyan része, amit érdemes nézegetni.

Hozzászólások

(#1) bambano


bambano
titán
LOGOUT blog

ez a szkript szép példa arra, hogy hogyan ne programozzunk bashban :)
szerintem dobd fel a Shell szkript topicban, majd jól megfikázzák, de legalább kijavítják :P

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#2) Adamyno válasza bambano (#1) üzenetére


Adamyno
tag

LOL.. Valahol el kell kezdeni :))
Amúgy köszi a linket, majd bedobom, ha már lesz valami életképes verzió, ez még csak alpha 0.0.1.
Addig nem akarok feleslegesen terhelni senkit :D

Alapvetően úgy akarom csinálni, hogy lehetőleg minél kevesebb külső programot használjon, inkább olyan módszerek kellenének, amik alapból benne vannak a rendszerek többségében. Pl. cat /proc/akármi. Még a top szerintem belefér, a sensors szerintem szükséges, de ebben sem vagyok biztos, mert van egy /sys/class/thermal/thermal_zone... csak az a kérdés, hogy ez alapból benne van-e mondjuk egy ubuntuban. Majd letesztelem másik gépen. Az ifstat pedig egyértelműen külső program, majd valamit kitalálok helyette ami közelebb áll a rendszer lelkivilágához.

- Indítsd újra a gépedet! - Az egészet? - Nem, a felét...

(#3) bambano válasza Adamyno (#2) üzenetére


bambano
titán
LOGOUT blog

oké, de olyat nem írunk, hogy cat filenév| tail.
a tail is tud fájlt megnyitni.

nem írunk olyat, hogy awk | sed olyan sed programmal, amit az awk is el tud végezni. tehát ha le akarod szedni a kiírandó számról a törtrészt, akkor awk-ban egészre kell kerekíteni, nem beforkolni egy sedet és levágni a pont utáni részt. ami egyébként azért sem jó, mert nem veheted biztosra, hogy a tizedesek elválasztására pontot használ az adott gép.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#4) ncc1701


ncc1701
veterán

Feldobsz a linuxra egy icinga/nagios-t, telódon ráleshetsz, h mi van vele, és riasztani is tud szépen.
Nem kell feltalálni a meleg vizet. :)

(#5) pet007


pet007
aktív tag

Offba megkerdezem csak, miert nem hasznalsz nasra valami kifejezetten nasra irt os-t mint pl omv vagy nas4free?

(#6) Adamyno válasza bambano (#3) üzenetére


Adamyno
tag

#3 bambano
Igen, a ponttal és vesszővel voltak gondok. Igazából az awk-nak, sed-nek, tail-nek a man-ját nem volt időm végig olvasni, ezért lett ez. Ezért is szeretem, mert egy dolgot sokféleképpen meg lehet oldani. Mondhatni, a végletekig lehet bonyolítani. Igen.. van még mit tanulnom.

#5 pet007
A Zyxelen alapból linux van és tud mindent ami nekem kell. NAS for free-n gondolkodtam, de nem biztos, hogy jobb lenne.

- Indítsd újra a gépedet! - Az egészet? - Nem, a felét...

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.