Chcel som, aby widget Glances v aplikácii Homepage zobrazoval niekoľko metrík hostiteľa bez toho, aby som kvôli tomu musel prevádzkovať celý server Glances. Preto som vytvoril homepage-stats, malú Go službu, ktorá poskytuje tie Glances API endpointy, ktoré widget potrebuje.
Zámerne nejde o plnohodnotnú náhradu Glances. Služba poskytuje obmedzenú sadu metrík Linuxu ako statická Go binárka v minimálnom neprivilegovanom kontajneri scratch.
Čo poskytuje Link to heading
Služba implementuje Glances endpointy používané widgetom:
- Využitie CPU a priemerné zaťaženie systému
- Celkovú a využitú pamäť
- Kapacitu a využitie súborového systému
- Teploty zo senzorov, ak ich hostiteľ sprístupňuje
- Čas prevádzky a základné informácie o systéme
- Stručný súhrn
quicklooka endpoint/healthna kontrolu dostupnosti
Endpointy služby sú dostupné na cestách /api/4/<endpoint>, /api/3/<endpoint> a /<endpoint>. Cesta v3 je iba aliasom pre túto podmnožinu API, takže služba nie je plne kompatibilná s Glances v3. Údaje o CPU sa vzorkujú raz za sekundu; ostatné metriky sa načítajú až pri požiadavke.
V jednom nasadení v homelabe som nameral približne 10 MB RAM, zatiaľ čo minimálne nasadenie Glances spotrebovalo asi 100 MB. Nešlo o kontrolovaný benchmark a výsledok sa môže líšiť podľa hostiteľa a prostredia.
Compose Link to heading
Predvolený Compose súbor sprístupňuje port služby iba na localhost. Koreňový súborový systém kontajnera je iba na čítanie a kontajner nemá pridelené Linux capabilities:
services:
stats:
image: ${STATS_IMAGE:?Set STATS_IMAGE to a published image}
user: "${PUID:-65532}:${GUID:-65532}"
environment:
- STATS_DISK_PATH=${STATS_DISK_PATH:-/}
- STATS_PORT=${STATS_PORT:-61208}
ports:
- ${STATS_BIND_IP:-127.0.0.1}:${STATS_PORT:-61208}:${STATS_PORT:-61208}
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
restart: unless-stopped
STATS_IMAGE nastavte na tag vydania alebo digest obrazu. STATS_BIND_IP určuje, na ktorej adrese hostiteľa sa port sprístupní. Predvolene je dostupný iba cez localhost. Ak Homepage beží v inom kontajneri, pripojte obe služby do spoločnej Docker siete a použite http://stats:61208. Pri prístupe cez LAN povoľte firewallom prístup iba hostiteľovi Homepage.
Do Homepage pridajte widget:
- glances:
url: http://stats:61208
version: 4
cpu: true
mem: true
cputemp: true
disk: /
uptime: true
label: Môj server
Súborový systém a senzory Link to heading
Predvolene sa údaje o disku týkajú koreňového súborového systému kontajnera (/), ktorým môže byť jeho overlay filesystem, nie dátový disk hostiteľa. Ak chcete sledovať konkrétny súborový systém hostiteľa, pripojte ho iba na čítanie a nastavte STATS_DISK_PATH na cestu vo vnútri kontajnera:
environment:
- STATS_DISK_PATH=/hostfs
volumes:
- /cesta/na/hostitelovi:/hostfs:ro
API zobrazí pripojený súborový systém ako /, čo zodpovedá nastaveniu disk: / vo widgete Homepage. Teploty závisia od senzorov hostiteľa a podpory v jadre. Služba nemá vlastné prihlasovanie ani TLS, preto ju nechajte v dôveryhodnej sieti a nevystavujte ju verejne.
Služba číta CPU, systémové zaťaženie a pamäť z počítadiel jadra Linuxu, ktoré vidí kontajner. Nejde o využitie zdrojov kontajnera podľa cgroups, takže tieto údaje opisujú hostiteľa, nie samotný kontajner.
Zdrojový kód je na github.com/pduchnovsky/homepage-stats.