Проброс syslog в ELK

Пример сислога:

Пример сислога

Настройка syslog

Выводим все сообщения от PHP в отдельный файл /var/log/php.log:

echo -e ':syslogtag,contains,"php" /var/log/php.log\n& stop' | sudo tee /etc/rsyslog.d/10-php.conf
sudo service rsyslog restart
php -r "syslog(LOG_INFO, 'test info');"
tail /var/log/php.log

Последняя команда должна вывести сообщение, похожее на это: Feb 7 09:21:51 pushorigin-desktop php: test info

Настройка logrotate

Настроим ротацию файла логов /var/log/php.log.

Нужно подправить файл /etc/logrotate.d/rsyslog (Debian) или /etc/logrotate.d/syslog (CentOS), добавив следующее:

/etc/logrotate.d/rsyslog
/var/log/php.log
{
  rotate 7
  daily
  missingok
  notifempty
  compress
  delaycompress
  sharedscripts
  postrotate
          reload rsyslog >/dev/null 2>&1 || true
  endscript  
}

Точную команду для postrotate можно подглядеть в этом же файле.

logrotate обычно висит на ежедневном выполнении: cat /etc/cron.daily/logrotate

Кидаем данные => filebeat => logstash => elasticsearch

На машине с ELK (точнее, нам нужен ES) настраиваем шаблоны индексов. На логирующей машине - устанавливаем и настраиваем filebeat.

Установка и настройка filebeat

На хост-машине, которая будет слать логи в ELK, делаем следующее:

  • скачиваем пакет, filebeat должен быть той же версии, что в ELK, иначе могут быть ошибки
  • устаналиваем filebeat
  • редактируем конфиг: sudo vim /etc/filebeat/filebeat.yml
  • стартуем: sudo service filebeat start
  • смотрим логи: cat /var/log/filebeat/filebeat

Формат сообщения для syslog

Визуализация в Kibana

Печать/экспорт