2009-10-29 13 views
7

Por razones de seguridad (soy desarrollador) no tengo acceso de línea de comandos a nuestros servidores de producción donde se escriben los archivos de registro. I puede, sin embargo, acceda a esos archivos de registro a través de HTTP. ¿Existe una utilidad en la forma de "tail -f" que pueda "seguir" un archivo de texto plano usando solo HTTP?siguiendo un archivo de registro a través de http

Respuesta

6

Puede hacerlo si el servidor HTTP acepta solicitudes para devolver partes de un recurso. Por ejemplo, si una petición HTTP contiene el encabezado:

Range: bytes = -500

la respuesta contendrá los últimos 500 bytes del recurso. Puede buscar eso y luego analizarlo en líneas, etc. No conozco ningún cliente prefabricado que haga esto por usted; escribiría un script para hacer el trabajo.

Puede usar Hurl para experimentar con encabezados (de recursos disponibles públicamente).

+0

+1 Esto es muy útil. Pensé en utilizar un método HEAD para obtener el tamaño del recurso y ver si se había agregado algo nuevo. Junto con un GET en un rango específico, podría estar en algo. ¡Gracias! – kurosch

0

Puede usar PsExec para ejecutar el comando en la computadora remota. El comando tail para windows se puede encontrar en http://tailforwin32.sourceforge.net/

Si tiene que ser HTTP, puede escribir un servicio web liviano para lograrlo fácilmente. por ejemplo, leer texto dentro de un archivo especificado de la línea 0 a la línea 200.

+0

No podría ejecutar nada remotamente, eso haría que las personas de seguridad se vuelvan apopléticas. Esperaba que algo ya existiera antes de intentar rodar el mío. – kurosch

1

Puede utilizar la utilidad java pequeña para leer el archivo de registro a través de HTTP utilizando la biblioteca HTTP de Apche.

HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet request = new HttpGet(uri); 
    HttpResponse response = client.execute(request); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(
      response.getEntity().getContent())); 
    String s = ""; 
    while ((s = rd.readLine()) != null) { 
     //Process the line 
    } 
Cuestiones relacionadas