Установка Graylog в Debian Jessie 8
Задача сбора и хранения логов, рано или поздно, встает перед каждым админом. Раньше данные собирались с помощью rsyslog и выводились через LogAnalyzer. Но времена меняются, сейчас в моде DevOPS и Java и логов всевозможных стало гораздо больше и средства для их хранения/аналитики шагнули далеко вперед (Elasticsearch/MongoDB), и визуализация стала на порядок лучше.
Словом, ни одной причины не попробовать что-нибудь из новомодных штук.
Я решил остановиться на Graylog2 – он мне показался довольно простым в установке, да и DevOPS’ы наши посоветовали именно его.
Установка, с одной стороны, не занимает много времени – там подключили репо, тут поправили конфиг. С другой – как всегда, всплыли нюансы 🙂
Словом, поехали.
Исходные данные
Ставить мы будем самую свежую (на момент публикации) версию: 2.1. Если вы мигрируете с версии 1.х, то лучше всего будет ознакомиться с официальной документацией на сайте производителя.
Для начала нам потребуется java8.
# sudo echo "deb http://mirror.yandex.ru/debian/ jessie-backports main" >> /etc/apt/sources.list
# sudo apt-get update
# sudo apt-get install openjdk-8-jre-headless
Проверяем, что java установлена корректно:
$ java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-8u102-b14.1-1~bpo8+1-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
Качаем пакеты
Подключаем репозитории:
# sudo echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
# wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -
# wget https://packages.graylog2.org/repo/packages/graylog-2.1-repository_latest.deb
# sudo dpkg -i graylog-2.1-repository_latest.deb
# sudo apt-get update
# sudo apt-get install graylog-server
# sudo echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" >> /etc/apt/sources.list.d/mongodb.list
# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
Ставим:
# sudo apt-get install apt-transport-https
# sudo apt-get update
# sudo apt-get install elasticsearch graylog-server graylog2-stream-dashboard pwgen mongodb-org
Правим конфиги
Настраиваем. Нам нужно, чтобы elasticsearch слушал только localhost (если у вас многосерверная конфигурация, думаю, вы и без меня знаете, что делать ;)):
# sudo nano /etc/elasticsearch/elasticsearch.yml
...
cluster.name: graylog2
network.bind_host: 127.0.0.1
network.publish_host: 127.0.0.1
network.host: 127.0.0.1
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300"]
...
Включаем:
# sudo systemctl daemon-reload
# sudo systemctl enable elasticsearch.service
# sudo systemctl restart elasticsearch
Проверяем, что elasticsearch жив:
$ curl -XGET 'http://localhost:9200/'
$ curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
Вывод должен быть примерно такой:
root@telelog:~# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
"cluster_name" : "graylog2",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
Теперь MongoDB
# sudo nano /etc/mongodb.conf
...
net:
port: 27017
bindIp: 127.0.0.1
...
# sudo systemctl restart mongo
Почти закончили.
Правим конфиг сервера graylog2. В отличие от версии 1.х, здесь нет разделения на сервер и веб-часть, вся конфигурация в одном месте:
# sudo nano /etc/graylog/server/server.conf
...
is_master = true
password_secret = #генерируем значение с помощью pwgen -N 1 -s 96
root_password_sha2 = #генерируем: echo -n yourpassword | shasum -a 256
root_email = "root@nixman.info"
rest_listen_uri = http://127.0.0.1:12900
web_listen_uri = http://127.0.0.1:9000/
elasticsearch_cluster_name = graylog2
elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
mongodb_useauth = false
mongodb_host = 127.0.0.1
mongodb_database = graylog2
mongodb_port = 27017
...
Стартуем:
# sudo systemctl daemon-reload
# sudo systemctl enable graylog-server.service
# sudo systemctl start graylog-server.service
Проверяем, что graylog успешно стартовал:
root@telelog:~# netstat -apnout | grep 12900
tcp6 0 0 127.0.0.1:12900 :::* LISTEN 6120/java off (0.00/0/0)
root@telelog:~# netstat -apnout | grep 9000
tcp6 0 0 127.0.0.1:9000 :::* LISTEN 6120/java off (0.00/0/0)
Заключительные штрихи
Т.к. graylog у нас висит на localhost, то, чтобы до него достучаться извне, воспользуемся прокси. У меня это apache 2.4, сама веб-морда будет жить по адресу syslog.nixman.info:
# sudo apt-get install apache2
# sudo a2enmod proxy
# sudo a2enmod ssl
# sudo a2enmod proxy_http
# sudo nano /etc/apache2/sites-available/graylog-web.conf
ServerName graylog
ServerAlias syslog
ServerAdmin root@nixman.info
# Logging
ErrorLog ${APACHE_LOG_DIR}/graylog2-web.error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/graylog2-web.access.log combined
# SSL Configuration
SSLEngine On
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLOptions StrictRequire
SSLCertificateFile /etc/ssl/graylog2.cert.pem
SSLCertificateKeyFile /etc/ssl/graylog2.key.nopass.pem
SSLCACertificateFile /etc/ssl/cacert.pem
SSLProxyEngine On
ProxyRequests Off
Order deny,allow
Allow from all
RequestHeader set X-Graylog-Server-URL "http://syslog.nixman.info/api/"
ProxyPass http://127.0.0.1:9000/
ProxyPassReverse http://127.0.0.1:9000/
ProxyPass http://127.0.0.1:12900/
ProxyPassReverse http://127.0.0.1:12900/
ServerAdmin root@nixman.info
ServerName graylog
Redirect / https://graylog/
Вот и все. Если видите нечто вроде такого:
значит, у вас всё получилось 🙂
Теперь осталось только создать inputs (т.е. входные потоки данных), на которые можно слать стандартный syslog, или форматированные сообщения с помощью специальных агентов в формате GELF
Кстати, Graylog вообще идеальная штука для сбора логов. В связке EF(Filebeat)K на нагруженном проекте места под логи требуется как не в себе – только успевай докидывать