tail -f equivalente a um URL


10

Quero monitorar o arquivo de log do meu aplicativo que, no entanto, não funciona localmente, mas em uma plataforma SaaS e é exposto por HTTP e WebDAV. Portanto, um equivalente de tail -f que funciona para URLs faria um ótimo trabalho para mim.

PS Se você conhece outras ferramentas que podem monitorar arquivos remotos por HTTP, também pode ser útil. obrigado


11
É mostrado como texto sem formatação no servidor remoto ou como html?
Ter12

Texto simples com formato específico: [timestamp] ERROR_NAME ..... que eu então a intenção de filtro através do grep
Munch

Você pode usar wget -N http://somewhere/something, que fará o download do arquivo apenas se for mais recente do que o que você baixou antes ou usar wget -O - http://somewhere/somethingpara redirecionar o arquivo para o stdout.
semana

Respostas:


11

Pode haver uma ferramenta específica para isso, mas você também pode fazê-lo usando o wget. Abra um terminal e execute este comando:

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

Isso fará o download do arquivo de log a cada dois segundos e o salvará log.txtanexando a saída ao que já existe ( -csignifica continuar o download e -aanexar a saída ao nome do arquivo fornecido). O -oredireciona as mensagens de erro para /dev/null/.

Portanto, agora você tem uma cópia local do log.txt e pode executar tail -f:

tail -f log.txt 

Descobri que poderia usar o davfs2 para integrar-se à interface webDAV e depois usar o arquivo como um arquivo normal. Isso é o que eu realmente esperava. Mas a solução é mais simples e realmente funciona
Munch

Eu descobri que tudo está sendo salvo no arquivo "log" e não "log.txt". No meu caso, isso funciona: wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek

@munch davfs2 não funciona tão bem. No meu caso, descobri que tail -fnão atualiza as alterações no arquivo, a menos que haja algum outro processo solicitando ativamente ao servidor atualizações de diretório (uma planície lsparece suficiente). O problema é tail -fconfiar no inotify e o inotify parece não funcionar com o davfs2.
jesjimher

@jesjimher tailnão depende de inotify. Ele simplesmente lê o arquivo, procura novamente e lê novamente. Se não funcionar bem com o davfs, isso dependerá da forma como o davfs funciona. Presumivelmente, ele só atualiza informações quando algo está lendo ativamente o diretório e, como tailmantém o arquivo aberto, isso não o aciona. Ou algo nesse sentido.
terdon

Tanto quanto eu entendo o código da cauda, ​​não é uma dependência, mas usa inotify se estiver disponível, recorrendo ao comportamento de pesquisa apenas se inotify não estiver disponível no sistema. Como o davfs não pode saber quando um arquivo foi alterado sem fazer uma solicitação explícita, nenhum evento inotify será gerado até que outro processo solicite uma atualização do diretório. Seria bom se o tail tivesse alguma maneira de forçar a pesquisa, mesmo se o inotify estiver disponível, mas não encontrei esse parâmetro.
jesjimher

3

Eu respondi a mesma pergunta aqui com um script de shell completo que pega a URL como argumento e tail -fé isso. Aqui está uma cópia dessa resposta literalmente:


Isso fará isso:

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

Não é muito amigável no servidor web. Você pode substituir o truecom sleep 1por ser menos intensivo em recursos.

Assim tail -f, você precisa ^Cquando terminar de assistir a saída, mesmo quando a saída estiver concluída.


0

a opção curl com faixa em combinação com o relógio pode ser usada para conseguir isso:

GAMAS

O HTTP 1.1 introduziu intervalos de bytes. Usando isso, um cliente pode solicitar a obtenção de apenas uma ou mais subpartes de um documento especificado. A ondulação suporta isso com o sinalizador -r.

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

Por exemplo

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

Isso recuperará os últimos 2000 bytes do log a cada 30 segundos.

Nota: para https autoassinado, use a opção --insecure curl

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.