Сбор и анализ логов Nginx с помощью Graylog2
Aug 21, 2017 14:51 · 468 words · 3 minute read
Graylog2 — бесплатная open source система для централизованного сбора, хранения и анализа логов. Для работы ему нужна Java, конфигурацию он хранит в MongoDB, для поиска и хранения логов — ElasticSearch.
Давайте разберемся со сбором и анализом логов web-сервера Nginx с помощью Graylog2!
Для «быстрого развертывания» будем использовать docker-контейнеры, поэтому считаем что на вашем хосте уже установлен docker
(например, так) и docker-compose
.
Если же нет — выполняем следующие шаги для установки docker’а:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
Для установки последней версии docker-compose
(версию смотрим здесь) используем следующие команды:
export dockerComposeVersion=1.14.0
curl -L https://github.com/docker/compose/releases/download/$dockerComposeVersion/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Создаем файл docker-compose.yml
следующего содержания:
version: '2'
services:
mongo:
restart: always
container_name: mongo
image: "mongo:3"
volumes:
- /srv/graylog/data/mongo:/data/db
elasticsearch:
restart: always
container_name: elasticsearch
image: "elasticsearch:2"
command: "elasticsearch -Des.cluster.name='graylog'"
volumes:
- /srv/graylog/data/elasticsearch:/usr/share/elasticsearch/data
graylog:
restart: always
container_name: graylog
image: graylog2/server:2.2.3-1
volumes:
- /srv/graylog/data/journal:/usr/share/graylog/data/journal
- /srv/graylog/config:/usr/share/graylog/data/config
environment:
GRAYLOG_PASSWORD_SECRET: somepasswordpepper
GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
GRAYLOG_WEB_ENDPOINT_URI: http://graylog.lc:9911/api/
depends_on:
- mongo
- elasticsearch
ports:
- "9911:9000"
- "12201:12201/udp"
- "1514:1514/udp"
- "12301:12301/udp"
- "12302:12302/udp"
Находясь в каталоге с только что созданным файлом выполняем команду:
docker-compose up -d
После запуска контейнеров необходимо подождать пару минут (при первом запуске Graylog2 стартует дольше), после чего можно залогиниться в web-интерфейс (в нашем примере — по адресу http://graylog.lc:9911) используя стандартный логин и пароль: admin/admin.
Далее скачиваем контент-пак в json-формате по этой ссылке, в web-интерфейсе грейлога переходим на вкладку “System/Content Packs”, выбираем пункт “Import content pack” и загружаем скачанный json-файл.
После успешной загрузки контент пак nginx появится в пункте меню “Web Servers”, где можно ознакомиться с его описанием и обязательно нажать кнопку “Apply content”.
Также необходимо внести минимальное количество правок в конфигурационный(е) файл web-сервера Nginx. В конфигурационные файлы сайтов (секция server
) необходимо добавить следующие директивы:
...
access_log syslog:server=127.0.0.1:12301 graylog2_format;
error_log syslog:server=127.0.0.1:12302;
...
Формат лога (graylog2_format
) определяется в основном конфигурационном файле (nginx.conf
) и выглядит так:
...
log_format graylog2_format '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" <msec=$msec|connection=$connection|connection_requests=$connection_requests|millis=$request_time>';
...
Перечитываете конфиг Nginx командой:
nginx -s reload
и логи начинают поступать в Graylog2, где с ними можно очень удобно работать.
Кроме того, в составе установленного контент пака есть уже готовый дашборд с основными метриками web-сервера, а именно:
- количество запросов за последние 24 часа (общее число + график, на котором видно динамику изменения кол-ва запросов);
- количество запросов, завершившихся с кодом 4XX за последние 24 часа (общее число + график, на котором видно динамику изменения кол-ва запросов);
- количество запросов, завершившихся с кодом 5XX за последние 24 часа (общее число + график, на котором видно динамику изменения кол-ва запросов);
- версии HTTP-протокола, по которым обращаются к сайту за последние 24 часа (процент + общее число);
- коды ответа на запросы за последние 24 часа (процент + общее число);
- коды ответа на запросы за последний час (процент + общее число).