gWebTail: tail -f v prehliadači pre tímy bez SSH prístupu

gWebTail: tail -f v prehliadači pre tímy bez SSH prístupu

Obsah

Známa situácia: na testovací server sa nasadí nový build a vývojár sa pýta „môžeš mi poslať log?“. Niekto so SSH prístupom sa prihlási, spustí tail -f, skopíruje kus do chatu — a o desať minút znova.

Dať SSH prístup na server všetkým nie je riešenie. Stavať celý logovací stack — ELK, Loki s Grafanou, Graylog — pre testovacie prostredie alebo malú on-prem inštaláciu je často zbytočne veľa. Ľudia v skutočnosti potrebujú niečo jednoduché: otvoriť prehliadač, vybrať log a sledovať, ako pribúda.

Presne to robí gWebTail.

Čo to je

gWebTail je malá Go aplikácia, ktorá poskytuje webovú stránku a cez WebSocket posiela do prehliadača nové riadky z log súborov — v podstate tail -f s rozhraním.

gWebTail zobrazuje log .NET aplikácie so zvýrazneným „warn:“

  • Výber súboru — všetky súbory z nastaveného adresára sa zobrazia v rozbaľovacom zozname.
  • Živé sledovanie — nové riadky sa objavia hneď po zápise; server predvolene kontroluje súbory každých 500 ms.
  • Zvýrazňovanie — napíšte warn:, ERROR alebo ID požiadavky a všetky výskyty sa zvýraznia.
  • Limit riadkov a auto-scroll — v prehliadači sa drží posledných N riadkov a zobrazenie sleduje koniec súboru, alebo auto-scroll vypnete a čítate v kľude.
  • Start / Stop — pozastavenie prúdu, keď si potrebujete niečo pozrieť.
  • Žiadne externé závislosti — HTML aj CSS sú súčasťou binárky. Žiadne CDN, nie je potrebný prístup na internet, takže funguje aj v uzavretých on-prem sieťach.

Poradí si aj so skrátením súboru: ak sa log skráti (napríklad logrotate s voľbou copytruncate), gWebTail zaznamená pokles veľkosti a pokračuje od nového obsahu.

Spustenie

Najjednoduchšie je použiť multi-arch Docker obraz (amd64 aj arm64):

docker run -d --name gwebtail \
  -p 127.0.0.1:8080:8080 \
  -v /var/log/myapp:/logs:ro \
  docker.io/bsv9/gwebtail

Potom otvorte http://localhost:8080.

Pár detailov, ktoré ušetria čas:

  • Adresár s logmi pripojte iba na čítanie (:ro) — gWebTail potrebuje len čítať.
  • Kontajner beží pod neprivilegovaným používateľom (UID 10001). Logy musia byť preň čitateľné; veľa súborov v /var/log má práva 640 root:adm, preto upravte práva pre adresár logov vašej aplikácie alebo nechajte aplikáciu zapisovať logy tam, kde sú čitateľné.
  • Zobrazujú sa iba súbory priamo v adresári, nie podadresáre. Pripojte presne ten adresár, ktorý chcete sprístupniť.

S Docker Compose:

services:
  gwebtail:
    image: docker.io/bsv9/gwebtail
    container_name: gwebtail
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - /var/log/myapp:/logs:ro
    restart: unless-stopped

Alebo binárku zostavte a spustite priamo (Go 1.22+):

git clone https://github.com/bsv9/gwebtail.git
cd gwebtail
go build -o gwebtail
LOG_DIR=/var/log/myapp ./gwebtail -port 8080

Konfigurácia

Premenná prostredia Prepínač Popis Predvolene
LOG_DIR -logdir Adresár s log súbormi /logs
— -port HTTP port 8080
— -refreshrate Ako často sa kontrolujú zmeny súborov, ms 500
— -buffersize Koľko bajtov sa načíta naraz; zároveň koľko z konca súboru sa zobrazí po jeho otvorení 32768

Po spustení sledovania gWebTail najprv pošle koniec súboru (do -buffersize bajtov, orezaný na hranici riadku) a potom priebežne posiela nový obsah.

Bezpečnosť: držte ho v internej sieti

gWebTail nemá autentifikáciu a logy často obsahujú veci, ktoré by nemali opustiť tím: interné názvy serverov, ID používateľov, niekedy aj tokeny. Berte ho ako interný nástroj:

  • Nevystavujte ho do internetu. Naviažte ho na localhost alebo interné rozhranie (-p 127.0.0.1:8080:8080 vyššie), prípadne obmedzte prístup firewallom.
  • Ak ho potrebuje viac ľudí, dajte pred neho reverse proxy s autentifikáciou — Nginx alebo Traefik s basic auth, alebo SSO cez oauth2-proxy. Nezabudnite preposielať hlavičky pre WebSocket na endpointe /ws.
  • Spúšťajte ho v kontajneri len s pripojeným adresárom logov, iba na čítanie. Proces tak nevidí nič iné na hoste, nech sa stane čokoľvek.

Tip

V Nginx stačia pre WebSocket tri riadky v bloku location: proxy_http_version 1.1;, proxy_set_header Upgrade $http_upgrade; a proxy_set_header Connection "upgrade";.

Kedy ho použiť — a kedy nie

gWebTail sa hodí na:

  • testovacie a staging servery, kde vývojári chcú sledovať svoje nasadenie;
  • malé on-prem inštalácie u zákazníkov, kde nemôžete nasadiť logovací stack a sieť je izolovaná;
  • sprístupnenie logov jednej aplikácie podpore alebo QA iba na čítanie;
  • Raspberry Pi alebo domáci server, keď chcete vidieť, čo robia vaše služby.

Nie je náhradou centralizovaného logovania. Ak potrebujete vyhľadávanie v histórii za týždne, veľa serverov, retenčné pravidlá, dashboardy alebo alerting, použite Loki, Graylog alebo ELK — gWebTail ukazuje iba to, čo je práve teraz v súboroch.

Zhrnutie

  • Jedna malá binárka alebo Docker obraz, bez závislostí, funguje offline.
  • tail -f v prehliadači so zvýrazňovaním, limitom riadkov a auto-scrollom.
  • Logy pripájajte iba na čítanie, držte ho v internej sieti a ak k nemu potrebuje prístup viac ľudí, dajte pred neho autentifikáciu.

Projekt je open source pod licenciou MIT: github.com/bsv9/gwebtail.

Uvažujete o poriadnom centralizovanom logovaní pre vašu infraštruktúru? Porozprávajme sa.

comments powered by Disqus

Súvisiace články

Monitoring stavu diskov na VMware ESXi pomocou smartctl

Monitoring stavu diskov na VMware ESXi pomocou smartctl

Samostatné ESXi hosty a malé vSphere klastre často bežia na lokálnych SATA alebo SAS diskoch — v homelabe, na pobočke alebo na zálohovacom serveri. Keď niektorý z týchto diskov začne zlyhávať, chcete sa to dozvedieť z monitoringu, nie z datastoru, ktorý sa zrazu prepne do režimu iba na čítanie.

Čítať ďalej
Stav diskov ESXi v Zabbixe: SMART pre SATA, health log pre NVMe

Stav diskov ESXi v Zabbixe: SMART pre SATA, health log pre NVMe

Štandardné Zabbix templaty pre VMware (VMware a VMware Hypervisor, cez vSphere API) sú výborné na CPU, pamäť, datastory a stav VM. Neprezradia však, ako sa majú fyzické disky v samostatnom ESXi hoste. Že disk zlyhal, sa dozviete, keď datastore prejde do offline — nie o týždeň skôr, keď disk začal presúvať sektory.

Čítať ďalej
Chyby 4xx/5xx z Traefiku v Zabbixe bez Promethea

Chyby 4xx/5xx z Traefiku v Zabbixe bez Promethea

Traefik stojí pred množstvom aplikácií: ako reverse proxy pre Docker, ako ingress controller v Kubernetes alebo ako edge router na jednom VM. Vďaka tomu je to najlepšie miesto, kde vidieť, či sú vaše aplikácie zdravé z pohľadu používateľa — každá neúspešná požiadavka ním prechádza.

Čítať ďalej