Skip to content

Установка Graylog в Debian Jessie 8

Задача сбора и хранения логов, рано или поздно, встает перед каждым админом. Раньше данные собирались с помощью rsyslog и выводились через LogAnalyzer. Но времена меняются, сейчас в моде DevOPS и Java и логов всевозможных стало гораздо больше и средства для их хранения/аналитики шагнули далеко вперед (Elasticsearch/MongoDB), и визуализация стала на порядок лучше.
Словом, ни одной причины не попробовать что-нибудь из новомодных штук.

Я решил остановиться на Graylog2 — он мне показался довольно простым в установке, да и DevOPS’ы наши посоветовали именно его.

Установка, с одной стороны, не занимает много времени — там подключили репо, тут поправили конфиг. С другой — как всегда, всплыли нюансы 🙂
Словом, поехали.

Исходные данные

Ставить мы будем самую свежую (на момент публикации) версию: 2.1. Если вы мигрируете с версии 1.х, то лучше всего будет ознакомиться с официальной документацией на сайте производителя.

Для начала нам потребуется java8.

1
2
3
# 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 установлена корректно:

1
2
3
4
$ 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)

Качаем пакеты

Подключаем репозитории:

1
2
3
4
5
6
7
8
9
10
# 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

Ставим:

1
2
3
# 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 (если у вас многосерверная конфигурация, думаю, вы и без меня знаете, что делать ;)):

1
2
3
4
5
6
7
8
9
# 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"]
...

Включаем:

1
2
3
# sudo systemctl daemon-reload
# sudo systemctl enable elasticsearch.service
# sudo systemctl restart elasticsearch

Проверяем, что elasticsearch жив:

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

Вывод должен быть примерно такой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

1
2
3
4
5
6
7
# sudo nano /etc/mongodb.conf
...
net:
  port: 27017
  bindIp: 127.0.0.1
...
# sudo systemctl restart mongo

Почти закончили.
Правим конфиг сервера graylog2. В отличие от версии 1.х, здесь нет разделения на сервер и веб-часть, вся конфигурация в одном месте:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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
...

Стартуем:

1
2
3
# sudo systemctl daemon-reload
# sudo systemctl enable graylog-server.service
# sudo systemctl start graylog-server.service

Проверяем, что graylog успешно стартовал:

1
2
root@telelog:~# netstat -apnout | grep 12900
tcp6       0      0 127.0.0.1:12900         :::*                    LISTEN      6120/java        off (0.00/0/0)
1
2
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:

1
2
3
4
# sudo apt-get install apache2
# sudo a2enmod proxy
# sudo a2enmod ssl
# sudo a2enmod proxy_http
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# sudo nano /etc/apache2/sites-available/graylog-web.conf
<VirtualHost *:443>
        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
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

    <Location />
        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/
    </Location>
    <Location /api/>
        ProxyPass http://127.0.0.1:12900/
        ProxyPassReverse http://127.0.0.1:12900/
    </Location>

</VirtualHost>

<VirtualHost *:80>
        ServerAdmin root@nixman.info
        ServerName graylog
        Redirect / https://graylog/
</VirtualHost>

Вот и все. Если видите нечто вроде такого:

значит, у вас всё получилось 🙂

Теперь осталось только создать inputs (т.е. входные потоки данных), на которые можно слать стандартный syslog, или форматированные сообщения с помощью специальных агентов в формате GELF

Be First to Comment

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

%d такие блоггеры, как: