Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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