Централизованный сбор и анализ логово с помощью syslog-ng,td-agent,elasticsearch,kibana,grafana,elasticalert

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

Содержание

 

  • 1. Настраиваем кластер для сбора логов на основе syslog-ng,elasticsearch,kibana,graphana,elasticalert
  • 2. Настраиваем агенты на клиентах и форматы логов для отправки в агрегатор
  • 3. Различные сниппеты по логам
  • 4. Исправление ошибок
  • 5. Syslog-ng module incubator
  • 6. Запросы в kibana
  • 7. Syslog-ng alerts на события

 

Настраиваем кластер для сбора логов на основе syslog-ng,elasticsearch,kibana,graphana,elasticalert

Наш кластер будет состоять из 4 нод.

1 нода — elasticsearch master нода, syslog-ng агрегатор логов, kibana и graphana для визуализации логов, elasticalert для реагирования на события по логам(например большого количества 500 ошибок nginx в определенный период времени).
2 нода — elasticsearch data нода
3 нода — elasticsearch data нода
4 нода — elasticsearch data нода(это уже как хотите)
На всех нодах установлена debian 8 с ядром 4.9.0. Как показала практика одна из стабильных связок.

Установка syslog-ng

Удаляем rsyslog

Ставим необхдимые системные пакеты

Ставим java на debian 8

Ставим java на ubuntu

Устанавливаем переменную окружения

Правим файл

Добавляем

Делаем Export — для того чтобы дебажить через запуска без демона

Ставим syslog-ng последней версии на debian 8

Ставим syslog-ng последней версии на ubuntu 16.04

Ставим последний elasticsearch и kibana на все ноды

Правим системные файлы.

Правим limits.conf

Правим sysctl.conf

настраиваем kibana и elasticsearch

НАстроим на макимальное использование памяти
в /usr/lib/systemd/system/elasticsearch.service

И

Отредактируем файл на всех нодах

Блок — делаем половину озу — у меня 12 — поставил 6

Конфиг master ноды elasticsearch

Смотрим здоровье и статус кластера

Такой вывод

Конфиг dataноды elasticsearch elasticnode2

Конфиг dataноды elasticsearch elasticnode3

Конфиг kibana

Рестартуес сервисы

Подготовка формата логов nginx,php и nodejs

Настройка формата логов в nginx

Ставим nginx mainline с GEOIP или собираем из исходников. Проблем не будет.

Скачиваем бызы geoip и рапаковываем

Добавляем формат логов и включаем запись их в файлы

Настройка логов php — отправка их в nginxerror.log

Добаляем в конфиг, например у мея это

Таким образом логи ошибок будут php будут попадать в nginx error log.
Идем далее.

Настройка формата логов nodejs, запускаемой через pm2

Делаем запуск с такими параметрами

Логи будет писаться в одну строку в json формате. Хотя это г. все равно не пишет логи как надо — выскакивает из json.

На этом подготовка формата логов окончена
Настраиваем syslog-ng на отправку логов nginx,php и nodejs через udp или tcp на сервер логов

Приведем syslog-ng к определенному виду. У нас на текущий момент версия 3.12

Все конфиги будем инклудить для удобства через conf.d. Конфиг для парсинга созданных нами логов и отправки их на сервер. Шлем по udp и tcp — кому как нравиться — tcp с флагом flow-control — контроль очереди на приемнике.

Далее отдельным файлом выделим файл access с geoip. В принципе можете оставить только его.

Далее отдельным файлом выделим стандартные системные логи

Вставляем содержимое

Проверяем — запускаем с выводом и дебагом

Если всё ок — стартуем syslog-ng, но только после того как настроим прием логов на сервере.

Настраиваем syslog-ng сервер на прием логов nginx,php и nodejs через udp и отправку их в elasticsearch и postgresql. Так же настроим прием системных логов и отправку их в elasticsearch

Приведем syslog-ng к определенному виду. У нас на текущий момент версия 3.12

Так же как и на клиентах, все конфиги будем инклудить для удобства через conf.d.

Примечание. Также включаем прием по tcp — как показала практика, udp иногда падает — решения с форумов и от разработчиков не помогло.

Здесь мы настроили парсинг входящего лога nginx acceess для отпраки его в elasticsearch и postgres, а также прием логов nginx error и nodejs и отправку их в elasticsearch.
Настраиваем прием системных логов c удаленных хостов через syslog-ng.

Вставляем содержимое

Индексы созданные в elasticsearch соответственно буду иметь следующие названия:

И т.д.- смотрим на имена индексов.
Чтобы логи писались в postgresql создадим базу nginx_access на любой ноде и настроим подключения по вашим данным

В ней будут создаваться таблицы вида

Все рестартуем агенты на сервере и отправителе.

Заходим в kibana на

Добавляем индекс

В поле timestamp выбираем

Смотрим в discover наши логи


Все разложено как и надо по парам!!!
Теперь перейдем к постройке графиков, например по статусам nginx. У нас передается поле с именем

3. Различные сниппеты по логам

3.1 Обработчик лога — сырого формата json

source s_tcp_json { tcp(port(10514) flags(no-parse)); };
parser p_json { json-parser(prefix(«.json.»)); };
destination d_file { file(«/var/log/remote.log»
template(«${.json.timestamp} ${.json.source} ${.json.app}[${.json.id}]: ${.json.msg}\n»)); };
destination d_mongodb { mongodb(collection(«remote_log»)
value-pairs(
pair(«PROGRAM» «${.json.app}»)
pair(«HOST» «${.json.source}»)
pair(«PID» «${.json.id}»)
pair(«MESSAGE» «${.json.msg}»)
pair(«DATE» «${.json.timestamp}»)
pair(«PRIORITY» «${.json.prio}»)
pair(«FACILITY» «auth»)
)); };
log {
source(s_tcp_json);
parser(p_json);
destination(d_file);
destination(d_mongodb);
};

3.2 Обработчик лога — syslog над json

 

3.3 Обработчик лога — mixed syslog json

3.4 Скрипт очистки логов nginx чтобы не засирать систему.

Добавляем его по крону каждые 2 часа

4. Исправление ошибок

Фикс ошибки Kibana

Courier Fetch: 5 of 10 shards failed.
Одним из вариантов решения является обновление полей индекса в elasticsearch

Courier Fetch: 5 of 10 shards failed.
Фикс ошибки при запуске syslog-ng

Error parsing destination, destination plugin java not found in destination block elasticsearch2
Решение

5. Syslog-ng module incubator

Syslog-ng module incubator представляет собой набор инструментов и модулей для syslog-ng, которые по той или иной причине не являются частью официального репозитория. Syslog-ng module incubator служит как в качестве промежуточной площадки для экспериментальных модулей, так и в качестве хранилища плагинов.
Установка Syslog-ng module incubator
Требуемые зависимости

Установка

После установки регистрируемся

Что мы интересного в данном складе модулей?
Парсеры
grok parser

Триггеры

Дополнительная целевая база для отправки логов.
Riemann

Rss канал

Мониторинг с помощью syslog-ng и lua скриптов

Скрипт /etc/syslog-ng/mark.lua

6. Запросы в kibana

Найти время ответа сервера в промежутке между 10 и 11 сек(длительность)

Syslog-ng alerts на события

Пример конфгига для alets. Отправка уведомления на почту

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *