Записывая для VPSVille три ролика по Graylog понял, что на хабре по нему только одна обзорная статья, а мануалы на любом языке запутаны из-за различной работы компонентов в разных версиях ПО. Потратив сутки на переваривание всей этой красоты пишу мануал: как настроить сервер Graylog для сбора событий из Windows и Linux.
Кто очень хочет понимать Linux, но не поймет с чего начинать — прошу ко мне на канал.
Вместо введения: 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 (или что вам больше нравится), который события собирает и отправляет.
Для приема сообщений из 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)nxlognxlog.exe' -u
'C:Program Files (x86)graylogcollector-sidecargraylog-collector-sidecar.exe' -service install
Редактируем файл конфигурации Sidecar (C:Program Files (x86)graylogcollector-sidecarcollector_sidecar.yml), а именно указываем порт прослушки глобальный (12900), ip сервера, и самое главное: метку, по которой будет принят конфиг. У меня это выглядит так:
server_url: http://10.0.1.10:12900
node_id: graylog-collector-sidecar
collector_id: file:C:Program Files (x86)graylogcollector-sidecarcollector-id
tags: windows
log_path: C:Program Files (x86)graylogcollector-sidecar
update_interval: 10
backends:
- name: nxlog
enabled: true
binary_path: C:Program Files (x86)nxlognxlog.exe
configuration_path: C:Program Files (x86)graylogcollector-sidecargeneratednxlog.conf
Запускаем sidecar 'C:Program Files (x86)graylogcollector-sidecargraylog-collector-sidecar.exe' -service start
Создаем событие eventcreate /l Application /t INFORMATION /id 1 /d “Suck it”
Смотрим логи в его директории (C:Program Files (x86)graylogcollector-sidecar), и если все ок — отправляемся в веб-морду смотреть логи винды на инпуте.
Нюансы:
- бывает что файл конфига нужно создать вручную пустой C:Program Files (x86)graylogcollector-sidecargeneratednxlog.conf;
- бывает что нужно перезапустить винду, чтобы все сервисы все схватили;
- у меня был косяк с опечаткой в названии метки, убил час, разбираясь;
- сама метка должна отметиться в веб-интерфейсе в рамочку, иначе это не метка.
Ну а дальше уже начинается работа в веб-интерфейсе: какие именно логи откуда брать, как на какие события реагировать, что отфильтровывать и т.д. Начнете копать — разберетесь. Вот на всякий случай еще раз мануал.
Автор: semaev