Graylog2 стал удобнее и быстрее

Записывая для VPSVille три ролика по Graylog понял, что на хабре по нему только одна обзорная статья, а мануалы на любом языке запутаны из-за различной работы компонентов в разных версиях ПО. Потратив сутки на переваривание всей этой красоты пишу мануал: как настроить сервер Graylog для сбора событий из Windows и Linux.
Кто очень хочет понимать Linux, но не поймет с чего начинать — прошу ко мне на канал.
image
Вместо введения: Graylog это open source программное обеспечение, предназначенное для сбора логов в гигантских сетях их огромного количества источников различными способами. В нем можно удобно организовать сбор событий, фильтрацию, поиск, автоматизацию (всякие алерты) и т.д. Аналогичных средств множество, но Graylog предлагает нереальную производительность с использованием современных компонентов, удобную аналитику и красивый интерфейс.
Для работы ему нужна Java, логи он будет хранить в MongoDB, для поиска использовать ElasticSearch. Про сбор информации из WIndows будет ниже, но спойлер — агенту больше не нужна Java.
Итак, у нас есть официальный мануал, по которому мы должны с вами собрать Graylog. Но в нем очень многое упущено, это просто обрывки информации, поэтому пойдем поэтапно сами (использую Ubuntu 14.04, так как именно ее и советуют разработчики на данный момент). Так как изначально Graylog предназначен для огромнейших сетей, рекомендуется ставить БД, поисковый движок и сам Graylog на разные сервера, создавать из этого всего кластеры, узлы и т.д. Я беру простейший конфиг, в котором все крутится на одной машине.

Первая часть: установка Graylog. (видеоинструкция)

Сначала Java (не ниже восьмой версии):

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Затем MongoDB (вдруг что изменится, вот вам мануал):

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install mongodb-org

Следом ElasticSearch (у которого тоже есть свой мануал):

sudo wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - 
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update
sudo apt-get install elasticsearch

Эластику нужны:
настройка автозапуска:

sudo update-rc.d elasticsearch defaults 95 10


редактирование файла конфигурации:

sudo vi /etc/elasticsearch/elasticsearch.yml


а именно указать имя кластера, например: cluster.name: graylog

и запретить доступ к нему по сети (так как вся система у нас на одной машине): network.bind_host: localhost

еще рекомендуют запретить динамические скрипты, но у меня эластик на эту опцию ругается: script.disable_dynamic: true

Рестартуем Эластик:

sudo service elasticsearch restart


И проверяем

 curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'


Если на выводе нет откровенных ошибок, то все в порядке.

Установка и пробный запуск Graylog:

sudo apt-get install apt-transport-https
wget https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.deb
sudo dpkg -i graylog-2.0-repository_latest.deb
sudo apt-get update
sudo apt-get install graylog-server
sudo rm -f /etc/init/graylog-server.override
sudo start graylog-server

Теперь устанавливаем пароль доступа к нему (у меня »123456789»), шифрованный, как и полагается у взрослых (кому будет непонятен смысл команд ниже: смотрите видео, или пишите вопросы):

sudo apt-get install pwgen
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf
PASSWORD=$(echo -n 123456789 | shasum -a 256 | awk '{print $1}')
sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf

В том же файле конфигурации указываю ip своего будущего сервера Graylog и префикс (он же — имя кластера Эластика выше).

sudo vi /etc/graylog/server/server.conf
rest_listen_uri = http://10.0.1.10:12900/
web_listen_uri = http://10.0.1.10:9000/
elasticsearch_index_prefix = graylog

Перезапускаю Graylog и пробую войти в него через веб-интерфейс:

10.0.1.10:9000/

(само собой все указанные в конфиге порты должны быть открыты). При старте Graylog может пару минут дурачится и писать в веб-интерфейсе что все плохо, не принимать пароль и выбрасывать на главную. Дайте ему время прийти в себя и пробуйте.

Вторая часть: настройка приема логов в Graylog из Linux. (видеоинструкция)

В консоль сервера приема логов нам больше попадать не нужно. Идем в веб-морду и создаем Input для логов. Расписывать навигацию по веб-интерфейсу дело гиблое, потому есть видео. Если кратко:

  • в меню «Система» создается UDP Input;
  • указывается syslog udp;
  • указывается порт (по умолчанию 512, но чтобы graylog мог использовать порты ниже 1024 нужно много возьни), поэтому, например 1234;
  • указывается адрес для прослушивания входящих сообщений, у меня 10.0.1.10;
  • нажимаем Launch.


Для проверки работы Input можно в консоли того же сервера graylog выполнить

echo "Hello Graylog" | nc -w 1 -u 10.0.1.10 1234

и посмотреть в веб-интерфейсе сообщения, полученные на Input.

Конфигурация машин Linux на отправку логов, в принципе проста. Почти везде релизы syslogd ведут себя одинаково. Кто ничего не помнит о демонах журналирования — освежите память у меня на канале. Итак debian и redhat.
Создается файл задания rsyslog:

 sudo vi /etc/rsyslog.d/90-graylog2.conf


c текстом (адрес и порт взят из настроенного Input):
$template GRAYLOGRFC5424,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
*.* @10.0.1.10:1234;GRAYLOGRFC5424

Демон журналов перезапукается командой

sudo service rsyslog restart

(ну или как там в вашей ОС).
И можно смотреть в веб-интерфейсе Graylog полученные сообщения.

Третья часть: настройка приема логов в Graylog из Windows. (видеоинструкция)

В версиях Graylog младше второй использовался graylog collector на java. Во второй (актуальной) он просто игнорируется и дает ошибки (полдня пытался починить, пока не понял это). Вместо него используется graylog sidecar, который получает конфиг с сервера Graylog (что очень удобно, так как нет необходимости лазить по виндовым серверам для редактирования настроек) и передает его в nxlog (или что вам больше нравится), который события собирает и отправляет.
image

Для приема сообщений из Windows надо создать отдельный Input через веб-интерфейс:

  • выбираем GELF UDP;
  • указываем узел, айпишник сервера graylog;
  • запоминаем или редактируем порт приема сообщений (по умолчанию 12201).

Для создания конфигурации отправки логов для nxlog на винде, нужно создать коллектор через веб-интерфейс в graylog:

  • выбираем Collectors;
  • выбираем Manage Configuration;
  • создаем конфигурацию;
  • указываем метку (именно по метке sidecar на windows поймет какую конфигурацию для nxlog ему скачивать к себе на машину);
  • создаем Output для nxlog (в котором просто указываем настройки Input из предыдущего шага: GELF UDP Output, ip, порт);
  • создаем Input для nxlog (указываем простейший вариант: Windows Event Log).

Отправляемся в Windows, Скачиваем и устанавливаем nxlog и graylog-sidecar.
Убираем как службу nxlog, и ставим как службу sidecar:
'C:\Program Files (x86)\nxlog\nxlog.exe' -u
'C:\Program Files (x86)\graylog\collector-sidecar\graylog-collector-sidecar.exe' -service install

Редактируем файл конфигурации Sidecar (C:\Program Files (x86)\graylog\collector-sidecar\collector_sidecar.yml), а именно указываем порт прослушки глобальный (12900), ip сервера, и самое главное: метку, по которой будет принят конфиг. У меня это выглядит так:
server_url: http://10.0.1.10:12900
node_id: graylog-collector-sidecar
collector_id: file:C:\Program Files (x86)\graylog\collector-sidecar\collector-id
tags: windows
log_path: C:\Program Files (x86)\graylog\collector-sidecar
update_interval: 10
backends:
- name: nxlog
enabled: true
binary_path: C:\Program Files (x86)\nxlog\nxlog.exe
configuration_path: C:\Program Files (x86)\graylog\collector-sidecar\generated\nxlog.conf

Запускаем sidecar 'C:\Program Files (x86)\graylog\collector-sidecar\graylog-collector-sidecar.exe' -service start

Создаем событие eventcreate /l Application /t INFORMATION /id 1 /d "Suck it”

Смотрим логи в его директории (C:\Program Files (x86)\graylog\collector-sidecar\), и если все ок — отправляемся в веб-морду смотреть логи винды на инпуте.

Нюансы:

  1. бывает что файл конфига нужно создать вручную пустой C:\Program Files (x86)\graylog\collector-sidecar\generated\nxlog.conf;
  2. бывает что нужно перезапустить винду, чтобы все сервисы все схватили;
  3. у меня был косяк с опечаткой в названии метки, убил час, разбираясь;
  4. сама метка должна отметиться в веб-интерфейсе в рамочку, иначе это не метка.

Ну, а дальше уже начинается работа в веб-интерфейсе: какие именно логи откуда брать, как на какие события реагировать, что отфильтровывать и т.д. Начнете копать — разберетесь. Вот на всякий случай еще раз мануал.

© Habrahabr.ru