ITLinuxАдминистрирование

Логи Nginx в Kibana: Elastic Agent, data stream и рабочий dashboard

Ниже — практическая настройка сбора access/error logs Nginx через Elastic Agent и официальную Nginx integration. Сначала проверяем локальные журналы, затем подключаем Agent, убеждаемся в появлении data stream и только после этого строим dashboard.

1. Проверяем Nginx и локальные логи

nginx -v
nginx -T | grep -E 'access_log|error_log|log_format'
ls -lh /var/log/nginx/
tail -n 20 /var/log/nginx/access.log
tail -n 20 /var/log/nginx/error.log

2. Проверяем формат access log

Стандартная Nginx integration лучше всего работает с обычным combined-форматом. Перед изменением log_format сохраните конфигурацию:

cp -a /etc/nginx /root/nginx-backup-$(date +%F-%H%M)
nginx -T > /root/nginx-config-before.txt

3. Проверяем Elastic Agent

elastic-agent version
elastic-agent status
systemctl status elastic-agent --no-pager
journalctl -u elastic-agent -n 100 --no-pager

4. Добавляем Nginx integration в Fleet

  1. Fleet → Agent policies → политика Nginx-сервера.
  2. Add integration → Nginx.
  3. Включите Access logs и Error logs.
  4. Пути: /var/log/nginx/access.log* и /var/log/nginx/error.log*.
  5. При необходимости включите Metrics и укажите stub_status URL.
  6. Сохраните policy и дождитесь статуса Healthy.

5. Генерируем тестовые запросы

curl -I http://127.0.0.1/
curl -I http://127.0.0.1/elastic-test-not-found
for i in $(seq 1 5); do curl -s -o /dev/null http://127.0.0.1/; done
tail -n 20 /var/log/nginx/access.log

6. Проверяем Agent после изменения policy

elastic-agent status
journalctl -u elastic-agent --since '10 min ago' --no-pager

7. Проверяем data streams

curl -sS -u elastic:'PASSWORD' \
  'https://elastic.example.com:9200/_data_stream/logs-nginx.access-*?pretty'

curl -sS -u elastic:'PASSWORD' \
  'https://elastic.example.com:9200/_data_stream/logs-nginx.error-*?pretty'

8. Ищем тестовый 404

curl -sS -u elastic:'PASSWORD' -H 'Content-Type: application/json' \
  'https://elastic.example.com:9200/logs-nginx.access-*/_search?pretty' \
  -d '{"size":10,"sort":[{"@timestamp":"desc"}],"query":{"bool":{"filter":[{"term":{"http.response.status_code":404}}]}}}'

9. Полезные запросы в Kibana Discover

data_stream.dataset : "nginx.access"
http.response.status_code >= 500
http.response.status_code : 404
url.path : "/elastic-test-not-found"
host.name : "web01"

10. Собираем первый dashboard

  • Requests over time — count по @timestamp;
  • Status codes — breakdown по http.response.status_code;
  • Top URLs — terms по url.path;
  • Top 5xx URLs — filter status >= 500;
  • Client IP — terms по source.ip;
  • Error log — таблица последних событий nginx.error.

11. Включаем stub_status для метрик

cat > /etc/nginx/conf.d/stub_status.conf <<'EOF'
server {
    listen 127.0.0.1:8081;
    server_name localhost;
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}
EOF
nginx -t
systemctl reload nginx
curl http://127.0.0.1:8081/nginx_status

В Nginx integration укажите metrics URL http://127.0.0.1:8081/nginx_status.

12. Типовые проблемы

  • data stream не создаётся — Agent не получил новую policy или не читает файлы;
  • события не разбираются — log_format не совместим с pipeline;
  • нет старых логов — Agent обычно начинает чтение с текущей позиции;
  • permission denied — проверьте права на каталог и log-файлы;
  • дубли — один файл читают две integrations;
  • неверное время — проверьте timezone сервера и поле @timestamp.

13. Диагностика

elastic-agent status
elastic-agent inspect components --show-config 2>/dev/null | grep -A20 -B5 '/var/log/nginx'
journalctl -u elastic-agent --since '30 min ago' --no-pager
namei -l /var/log/nginx/access.log
nginx -t

14. Rollback

rm -f /etc/nginx/conf.d/stub_status.conf
nginx -t && systemctl reload nginx

Также удалите Nginx integration из Agent policy, если сбор больше не нужен.

Критерий успеха: Agent Healthy, data streams access/error созданы, тестовый 404 находится в Discover, dashboard показывает запросы и статусы, а stub_status отдаёт метрики только локально.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *