Какое программное обеспечение я могу использовать для получения файлов журнала с нескольких удаленных серверов через SSH?

Я знаю, что могу сделать это с помощью сценариев, но я хотел бы знать, существует ли такая вещь, как "готовое" программное обеспечение, которое позволяет мне настраивать хост (и пути к файлам), которые я хотел бы получить (на регулярной основе). интервалы) от?

Я планирую настроить LogStash для анализа журнала (и отправки его в централизованное хранилище журналов), но многие из журналов, которые LogStash будет анализировать, находятся в файлах на удаленных хостах. Если программное обеспечение, разработанное специально для этого, уже существует, то это действительно упростит настройку извлечения файла журнала.

1 ответ

Вам кажется, что вам нужен компонент, называемый "грузоотправитель журналов" (его не следует путать с репликацией базы данных). Сам Logstash поставляет один; это упоминается как "агент", и это написано на Java. Если вы не хотите устанавливать [определенную версию] Java на всех ваших серверах (что является вполне разумным возражением), то существует множество альтернатив.

Грузоотправители имеют несколько общих свойств, с которыми вы можете сравнить их:

  • они обычно могут отслеживать файлы в (почти) режиме реального времени, либо опрашивая (общие), либо используя inotify;
  • как правило, они хорошо справляются с событиями ротации журналов;
  • они часто будут реализованы на одном из многих языков;
  • они смогут читать из (многих) различных источников, включая базы данных различных типов, или журнал событий Windows;
  • часто доступны варианты коммерческой поддержки, а также бесплатные варианты; коммерческие версии бесплатных могут предлагать больше вариантов ввода;
  • они различаются по кроссплатформенной доступности;
  • Стоимость лицензий для разных платформ может сильно отличаться (например, rsyslog в Windows и Linux)
  • масштабируемость и занимаемая площадь значительно различаются;
  • они могут (не) иметь возможность передавать журналы по SSL;
  • они могут (не) быть в состоянии буферизовать события, если получатель недоступен;
  • они могут (не) быть в состоянии преобразовывать / фильтровать сообщения;
  • у них разные уровни написания сценариев;

Книга Logstash перечисляет несколько; такие как дровосек (написанный на Go, а не упакованный моей ОС), и есть много других.

rsyslog также может читать из файлов, но затраты на лицензирование Windows, скорее всего, вас оттолкнут; но это может быть полезно, если у вас есть устройство RHEL/Centos/ другое, на котором установлен rsyslog (будучи устройством, вы, как правило, не можете свободно устанавливать то, что вам нравится, по соображениям поддержки).

В настоящее время я использую nxlog, который написан на C; он достаточно мал, не имеет надоедливых зависимостей времени выполнения или сборки; работает как минимум на Linux и Windows; довольно хорошо перенесен; легко построить на платформах, которые не имеют пакета; имеет очень хорошую документацию (но может быть еще лучше); отзывчивый разработчик; коммерческая поддержка доступна; может передавать по SSL; читает из различных входных данных, включая файлы, системный журнал, журнал событий Windows и другие; выполняет некоторую обработку, в том числе применяет несколько тегов для последующей обработки в logstash; выводит целую кучу разных вещей (я отправляю мой на центральный лог-сервер, который буферизует, записывает на диск, вращает файлы, а также отправляет данные в Logstash для загрузки в Elastic Search)

Nxlog не идеален; в нем есть ряд ошибок, особенно при разборе конфигурации (обратите внимание на пропущенные точки с запятой), и семантика конфигурации может немного сбить с толку, если вы хотите попробовать что-то более сложное. Я столкнулся, по крайней мере, с одной утечкой памяти, и еще одной проблемой, которая требует от меня реализации некоторого обнаружения зависших процессов на данный момент, но, несмотря на это, я все еще достаточно доволен тем, что до сих пор мы использовали nxlog для нашего флота до сих пор, и мы проталкиваем много данных через него.

Однако, так как вы явно упомянули об использовании SSH (это реальное требование?), Вы можете настроить scp для авторизованных ключей файла, а затем локально подать на него канал logstash; и (при условии, что вы каждый раз вызываете logstash заново), используйте возможность logstash записывать, где в файле он находился. Однако следует соблюдать осторожность, так как вы, вероятно, не хотите, чтобы индекс изменялся, поэтому перезапишите файл, используя "... > file.txt", который заменит содержимое, но не заменит сам файл. Тем не менее, это может привести к срыву ротации журналов. Вы действительно хотите грузоотправителя на удаленной машине. Использование rsyslog может быть полезно, если есть требование минимального прикосновения к среде, хотя у вас не будет возможности передавать по SSL (хотя, возможно, обновленная версия rsyslog позволит это).

Надеюсь, это поможет, Кэмерон

Другие вопросы по тегам