2009-10-29 4 views
7

По соображениям безопасности (я разработчик) У меня нет доступа к командной строке для наших производственных серверов, на которых записаны файлы журналов. I может, однако доступ к этим файлам журнала через HTTP. Есть ли утилита в виде «tail -f», которая может «следовать» в текстовом файле, используя только HTTP?после файла журнала по адресу http

ответ

6

Это можно сделать, если HTTP-сервер принимает запросы на возврат частей ресурса. Например, если запрос HTTP содержит заголовок:

диапазон: байт = -500

ответ будет содержать последние 500 байт ресурса. Вы можете получить это, а затем проанализировать его в строках и т. Д. Я не знаю никаких готовых клиентов, которые сделают это для вас - я бы написал сценарий для выполнения этой работы.

Вы можете использовать Hurl для экспериментов с заголовками (из общедоступных ресурсов).

+0

+1 Это очень полезно. Я подумал об использовании метода HEAD, чтобы надеяться получить размер ресурса, чтобы увидеть, добавлено ли что-либо новое. В сочетании с GET на определенном диапазоне я могу быть на что-то. Благодаря! – kurosch

0

Для выполнения команды на удаленном компьютере вы можете использовать PsExec. Команда хвоста для окон можно найти по адресу http://tailforwin32.sourceforge.net/

Если это HTTP, вы можете написать легкий веб-сервис, чтобы легко достичь этого. , например, читать текст в указанном файле из строки 0 в строку 200.

+0

Я не смогу выполнить что-либо дистанционно, что сделало бы людей безопасности апоплексическими. Я надеялся, что что-то уже существовало, прежде чем я попробовал опрокинуться. – kurosch

1

Вы можете использовать небольшую утилиту java для чтения файла журнала через Http с помощью Apache HTTP Library.

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 
    }