cola -f equivalente para una URL


10

Quiero monitorear el archivo de registro de mi aplicación que, sin embargo, no funciona localmente, sino en una plataforma SaaS y está expuesto a través de HTTP y WebDAV. Entonces, un equivalente de tail -f que funcione para URLs haría un gran trabajo para mí.

PD: si conoce otras herramientas que pueden monitorear archivos remotos a través de HTTP, también puede ser de ayuda. Gracias


1
¿Se muestra como texto sin formato en el servidor remoto o como html?
terdon

Texto sin formato con formato específico: [marca de tiempo] Nombre_error ..... que luego intento filtrar a través de grep
munch

Puede usarlo wget -N http://somewhere/something, que descargará el archivo solo si es más nuevo que uno que descargó antes o si lo usa wget -O - http://somewhere/somethingpara redirigir el archivo a stdout.
semana

Respuestas:


11

Puede haber una herramienta específica para esto, pero también puede hacerlo usando wget. Abra una terminal y ejecute este comando:

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

Esto descargará el archivo de registro cada dos segundos y lo guardará para log.txtagregar la salida a lo que ya está allí ( -csignifica continuar descargando y -asignifica agregar la salida al nombre de archivo dado). El -oredirige los mensajes de error a /dev/null/.

Entonces, ahora tienes una copia local de log.txt y puedes ejecutarla tail -f:

tail -f log.txt 

Descubrí que podía usar davfs2 para integrarme con la interfaz webDAV y luego usar el archivo como un archivo normal. Esto es lo que realmente esperaba. Pero su solución es más simple y realmente funciona
munch

Encontré que todo se está guardando en el archivo "log" no "log.txt". En mi caso, esto funciona: wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek

@munch davfs2 no funciona tan bien. En mi caso, descubrí que tail -fno actualiza los cambios de archivos a menos que haya algún otro proceso que solicite activamente al servidor actualizaciones de directorio ( lsparece simple ). El problema se tail -fbasa en inotify, e inotify no parece funcionar sobre davfs2.
jesjimher

@jesjimher tailno depende de inotify. Simplemente lee el archivo, busca y lee de nuevo. Si no funciona bien con davfs, eso dependerá de cómo funciona davfs. Presumiblemente, solo actualiza la información cuando algo está leyendo activamente el directorio y, dado que tailmantiene el archivo abierto, eso no lo activa . O algo por el estilo.
terdon el

Hasta donde entiendo el código de tail, no es una dependencia, pero usa inotify si está disponible, recurriendo al comportamiento de sondeo solo si inotify no está disponible en el sistema. Dado que davfs no puede saber cuándo un archivo ha cambiado sin hacer una solicitud explícita, no se genera ningún evento de notificación hasta que algún otro proceso solicite una actualización del directorio. Sería bueno si la cola tuviera alguna forma de forzar el sondeo, incluso si inotify está disponible, pero no he encontrado ese parámetro.
jesjimher

3

Respondí la misma pregunta aquí con un script de shell completo que toma la URL como argumento y tail -fes. Aquí hay una copia de esa respuesta textualmente:


Esto lo hará:

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

No es muy amigable en el servidor web. Se podría reemplazar la truecon sleep 1a ser menos recursos.

Por ejemplo tail -f, debe hacerlo ^Ccuando haya terminado de ver la salida, incluso cuando la salida haya terminado.


0

La opción de rizo con rango en combinación con el reloj se puede utilizar para lograr esto:

RANGOS

HTTP 1.1 introdujo los rangos de bytes. Con esto, un cliente puede solicitar obtener solo una o más subpartes de un documento especificado. Curl lo admite con la bandera -r.

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

Por ejemplo

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

Esto recuperará los últimos 2000 bytes del registro cada 30 segundos.

Nota: para el uso de https autofirmado - opción insegurar curl

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.