Rsyslog elasticsearch

При адмініструванні парку серверів приблизно від 10 і вище виникає необхідність у централізованому зберіганні логів.

Цілей тут кілька.

  • По-перше, безпека — все фіксується, і дублюється не лише локально, а й на віддаленому сервері. Якщо зламають сервер і потруть логи, то окремо можна буде відновити що і коли було зроблено; ким та звідки.
  • Другий момент – зручна обробка логів. Логи можна швидко заштовхати в еластик і через kibana інтерфейс легко дивитися що відбувається, будувати залежності і тд.
  • Третій, важливий момент — єдине серед програмістів середовище розбору логів. Можна зіставляти час тієї чи іншої подій за певними критеріями з подіями інших серверах, зазвичай цей критерій є основним запровадження централізованої сховища логів.
  • Є ще один дуже важливий момент у великих кампаніях - протокол Syslog дуже зручно використовувати для доставки повідомлень не тільки від серверів але і від додатків, кронів та іншого в сховище. Плюс тут у значному зростанні продуктивності - додатку не потрібно ні відкривати файл на диску, ні тим більше з'єднаються по мережі з elasticsearch - все що потрібно це записати дані в syslog сокет. Далі при правильному налаштуванні доставка відбудеться засобами самого сислога, а процес продовжить свою роботу без істотних затримок.

Приступаємо. На більшості серверів в коробці вже стоїть rsyslogd, який також вміє відправляти логи в еластичний пошук. Це дуже круто, тому що не потрібна зайва ланка у вигляді logstash!

Для надійності в еластиці ми дублюватимемо логи в еластиці та на диску.

Для пересиланнями використовуємо tcp, т.к. мережа велика, з декількома впн тунелями, накладних витрат від такого підходу — 100мс, на встановлення з'єднання, а втрачати логи не джадайською. Конфіг для сторони, що передає, виглядає наступним чином: