tail -f odpowiednik dla adresu URL

10

Chcę monitorować plik dziennika mojej aplikacji, która jednak nie działa lokalnie, ale na platformie SaaS i jest dostępna przez HTTP i WebDAV. Odpowiednik tail -f działający w przypadku adresów URL byłby dla mnie świetny.

PS Jeśli znasz jakieś inne narzędzia, które mogą monitorować zdalne pliki przez HTTP, może być również pomocne. Dzięki

chrupać
źródło
1
Czy jest wyświetlany jako zwykły tekst na zdalnym serwerze lub jako HTML?
terdon
Zwykły tekst w określonym formacie: [sygnatura czasowa] Nazwa_błędu ... Które następnie zamierzam przefiltrować przez grep
munch
Możesz użyć wget -N http://somewhere/somethingtego, aby pobrać plik tylko wtedy, gdy jest on nowszy niż pobrany wcześniej lub użyć wget -O - http://somewhere/somethingdo przekierowania pliku na standardowe wyjście.
tydzień

Odpowiedzi:

11

Może być do tego specjalne narzędzie, ale możesz to również zrobić za pomocą wget. Otwórz terminal i uruchom następujące polecenie:

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

Spowoduje to pobranie pliku dziennika co dwie sekundy i zapisanie go w log.txtdołączeniu wyniku do tego, co już tam jest ( -coznacza kontynuowanie pobierania i -aoznacza dołączenie wyniku do podanej nazwy pliku). -oPrzekierowuje komunikaty o błędach /dev/null/.

Więc teraz masz lokalną kopię pliku log.txt i możesz tail -fna nim uruchomić :

tail -f log.txt 
terdon
źródło
Dowiedziałem się, że mogę użyć davfs2 do integracji z interfejsem webDAV, a następnie użyć pliku jak zwykłego pliku. Tego się naprawdę spodziewałem. Ale twoje rozwiązanie jest prostsze i faktycznie działa
munch
Odkryłem, że wszystko jest zapisywane w pliku „log”, a nie „log.txt”. W moim przypadku działa to: wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek
@munch davfs2 nie działa tak dobrze. W moim przypadku okazało się, że tail -fnie aktualizuje zmian plików, chyba że jest jakiś inny proces aktywnie proszący serwer o aktualizację katalogu ( lswydaje się, że zwykły ). Problem tail -fpolega na inotify, a inotify nie działa na davfs2.
jesjimher
@jesjimher tailnie zależy od inotify. Po prostu czyta plik, szuka wstecz i czyta ponownie. Jeśli nie działa dobrze z davfs, będzie to zależało od tego, jak działa sam davfs. Prawdopodobnie aktualizuje informacje tylko wtedy, gdy coś aktywnie czyta katalog, a ponieważ tailplik jest otwarty, to go nie wyzwala. Lub coś podobnego.
terdon
O ile rozumiem kod ogona, nie jest to zależność, ale używa on inotify, jeśli jest dostępny, uciekając się do sondowania tylko wtedy, gdy inotify nie jest dostępny w systemie. Ponieważ davfs nie może wiedzieć, kiedy plik się zmienił bez wykonania wyraźnego żądania, żadne zdarzenie inotify nie jest generowane, dopóki jakiś inny proces nie zażąda odświeżenia katalogu. Byłoby miło, gdyby ogon miał sposób wymusić sondowanie, nawet jeśli dostępna jest funkcja inotify, ale nie znalazłem takiego parametru.
jesjimher
3

Odpowiedziałem na to samo pytanie tutaj za pomocą pełnego skryptu powłoki, który pobiera adres URL jako argument i tail -fto wszystko. Oto dosłownie kopia tej odpowiedzi:


To zrobi to:

#!/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"

Nie jest zbyt przyjazny na serwerze internetowym. Można wymienić trueze sleep 1będzie mniej nakładów.

Na przykład tail -fmusisz ^Cto zrobić, kiedy skończysz oglądać dane wyjściowe, nawet gdy dane wyjściowe są gotowe.

Brian
źródło
0

Aby to osiągnąć, można użyć curl z opcją zasięgu w połączeniu z zegarkiem:

ZAKRESY

HTTP 1.1 wprowadził zakresy bajtów. Korzystając z tego, klient może poprosić o uzyskanie tylko jednej lub więcej części określonego dokumentu. Curl obsługuje to z flagą -r.

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

Na przykład

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

Spowoduje to pobranie ostatnich 2000 bajtów dziennika co 30 sekund.

Uwaga: w przypadku samopodpisanego https użyj opcji - niezabezpieczone zwijanie

ghm1014
źródło