coda -f equivalente per un URL


10

Voglio monitorare il file di registro della mia applicazione, che tuttavia non funziona localmente ma su una piattaforma SaaS ed è esposto su HTTP e WebDAV. Quindi, un equivalente di tail -f che funziona per gli URL farebbe un ottimo lavoro per me.

PS Se conosci altri strumenti in grado di monitorare file remoti su HTTP, può essere di aiuto. Grazie


1
Viene visualizzato come testo normale sul server remoto o come HTML?
terdon,

Testo semplice con formato specifico: [timestamp] Error_name ..... che intendo quindi filtrare in grep
munch

È possibile utilizzare wget -N http://somewhere/something, che scaricherà il file solo se è più recente di quello scaricato in precedenza o utilizzato wget -O - http://somewhere/somethingper reindirizzare il file su stdout.
settimana

Risposte:


11

Potrebbe esserci uno strumento specifico per questo, ma puoi anche farlo usando wget. Apri un terminale ed esegui questo comando:

while(1); do \
    sleep 2; \
    wget -ca -O log.txt -o /dev/null http://yoursite.com/log; \
done

Ciò scaricherà il file di registro ogni due secondi e lo salverà log.txtaggiungendo l'output a ciò che è già presente ( -csignifica continuare il download e -asignifica aggiungere l'output al nome del file indicato). Il -oreindirizza i messaggi di errore a /dev/null/.

Quindi, ora hai una copia locale di log.txt e puoi eseguirlo tail -f:

tail -f log.txt 

Ho scoperto che potevo usare davfs2 per integrarmi con l'interfaccia webDAV e quindi usare il file come un normale file. Questo è quello che mi aspettavo davvero. Ma la tua soluzione è più semplice e funziona davvero
munch

Ho scoperto che tutto viene salvato nel file "log" e non "log.txt". Nel mio caso questo funziona: wget -O -ca log.txt -o / dev / null yoursite.com/log
yatsek

@munch davfs2 non funziona così bene. Nel mio caso ho scoperto che tail -fnon aggiorna le modifiche ai file a meno che non ci siano altri processi che chiedono attivamente aggiornamenti del server per la directory (un piano lssembra abbastanza). Il problema è che tail -fsi basa su inotify e inotify non sembra funzionare su davfs2.
jesjimher,

@jesjimher tailnon dipende da inotify. Legge semplicemente il file, cerca indietro e legge di nuovo. Se non funziona bene con davfs, ciò dipenderà da come funziona davfs stesso. Presumibilmente, aggiorna le informazioni solo quando qualcosa sta attivamente leggendo la directory e poiché tailmantiene aperto il file, ciò non lo attiva. O qualcosa del genere.
terdon,

Per quanto ho capito il codice di coda, non è una dipendenza, ma usa inotify se è disponibile, ricorrendo al comportamento di polling solo se inotify non è disponibile nel sistema. Dato che davfs non può sapere quando un file è cambiato senza fare una richiesta esplicita, nessun evento inotify viene generato fino a quando un altro processo non richiede un aggiornamento della directory. Sarebbe bello se tail avesse un modo per forzare il polling, anche se inotify è disponibile, ma non ho trovato questo parametro.
jesjimher,

3

Ho risposto alla stessa domanda qui con uno script di shell completo che accetta l'URL come argomento e tail -flo è. Ecco una copia di quella risposta alla lettera:


Questo lo farà:

#!/bin/bash

file=$(mktemp)
trap 'rm $file' EXIT

(while true; do
    # shellcheck disable=SC2094
    curl --fail -r "$(stat -c %s "$file")"- "$1" >> "$file"
done) &
pid=$!
trap 'kill $pid; rm $file' EXIT

tail -f "$file"

Non è molto amichevole sul web server. È possibile sostituire il truecon sleep 1per consumare meno risorse.

Ad esempio tail -f, è necessario ^Cquando hai finito di guardare l'output, anche quando l'output è terminato.


0

per ottenere questo risultato è possibile utilizzare l'arricciatura con l'opzione gamma in combinazione con l'orologio:

CAMPI

HTTP 1.1 ha introdotto intervalli di byte. Usando questo, un client può richiedere di ottenere solo una o più sottoparti di un documento specificato. Curl supporta questo con il flag -r.

watch -n <interval> 'curl -s -r -<bytes> <url>'

Per esempio

watch -n 30 'curl -s -r -2000 http://yoursite.com/log'

Ciò recupererà gli ultimi 2000 byte del registro ogni 30 secondi.

Nota: per https autofirmati utilizzare l'opzione --insecure curl curl

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.