Введение
В этой лабораторной работе вы научитесь использовать Graylog, мощную платформу управления журналами с открытым исходным кодом, для сбора и анализа журналов. Централизованное ведение журналов является критически важным компонентом кибербезопасности, позволяя отслеживать системные события, обнаруживать аномалии и расследовать инциденты безопасности из единого интерфейса.
Вы начнете с развертывания всего стека Graylog, который включает MongoDB и OpenSearch (современную замену Elasticsearch), с использованием Docker Compose. Затем вы настроите Graylog для приема журналов, отправите в него примеры журналов, выполните поисковые запросы для фильтрации информации и, наконец, создадите визуальную панель мониторинга для отслеживания ключевых метрик. К концу этой лабораторной работы вы получите практический опыт работы с фундаментальным рабочим процессом анализа журналов в Graylog.
Развертывание Graylog с помощью Docker Compose
На первом этапе вы развернете платформу журналирования Graylog. Мы будем использовать Docker Compose v2, инструмент для определения и запуска многоконтейнерных приложений Docker. Этот подход упрощает процесс настройки, управляя всеми необходимыми компонентами — Graylog, OpenSearch и MongoDB — с помощью единого файла конфигурации.
Сначала подготовим среду и запустим сервисы.
Скрипт настройки уже установил для вас Docker Compose v2. Вы можете проверить установку, посмотрев его версию.
docker compose versionВы должны увидеть вывод, указывающий версию Docker Compose, например:
Docker Compose version v2.29.7Перейдите в выделенный каталог для вашей конфигурации Graylog. Это поможет поддерживать порядок в вашем проекте.
cd /home/labex/project/graylogДалее создайте файл конфигурации
docker-compose.ymlс помощью текстового редактораnano. Этот файл указывает Docker Compose, какие контейнеры запускать и как их настраивать.nano docker-compose.ymlСкопируйте и вставьте следующую YAML-конфигурацию в редактор
nano. Эта конфигурация определяет три сервиса:mongodb: Хранит данные конфигурации Graylog.opensearch: Индексирует и хранит сообщения журналов для быстрого поиска. Обратите внимание, что OpenSearch 2.12+ требует начального пароля администратора.graylog: Основное приложение, предоставляющее веб-интерфейс и движок обработки журналов.
services: mongodb: image: mongo:6.0 container_name: graylog_mongodb volumes: - mongo_data:/data/db networks: - graylog_network healthcheck: test: ["CMD", "mongosh", "--eval", "db.runCommand('ping').ok"] interval: 30s timeout: 10s retries: 3 opensearch: image: opensearchproject/opensearch:2.13.0 container_name: graylog_opensearch environment: - discovery.type=single-node - plugins.security.disabled=true - bootstrap.memory_lock=true - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" - "OPENSEARCH_INITIAL_ADMIN_PASSWORD=StrongPassword123!" ulimits: memlock: soft: -1 hard: -1 volumes: - opensearch_data:/usr/share/opensearch/data networks: - graylog_network healthcheck: test: [ "CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1" ] interval: 30s timeout: 10s retries: 3 graylog: image: graylog/graylog:6.1 container_name: graylog_server volumes: - graylog_data:/usr/share/graylog/data environment: - GRAYLOG_PASSWORD_SECRET=somepasswordpepper - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/ - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200 - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog depends_on: mongodb: condition: service_healthy opensearch: condition: service_healthy ports: - "9000:9000" - "1514:1514" - "1514:1514/udp" - "12201:12201" - "12201:12201/udp" networks: - graylog_network volumes: mongo_data: opensearch_data: graylog_data: networks: graylog_network: driver: bridgeНажмите
Ctrl+O, затемEnterдля сохранения файла иCtrl+Xдля выхода изnano.Теперь запустите все сервисы в фоновом режиме, используя флаг
-d(detached).docker compose up -dДля инициализации всех сервисов может потребоваться минута или две. Вы можете проверить статус ваших контейнеров, чтобы убедиться, что они работают правильно.
docker compose psВы должны увидеть все три сервиса (
graylog_server,graylog_opensearch,graylog_mongodb) с состояниемUp.NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS graylog_mongodb mongo:6.0 "docker-entrypoint.s…" mongodb About a minute ago Up About a minute (healthy) 27017/tcp graylog_opensearch opensearchproject/opensearch:2.13.0 "./opensearch-docker…" opensearch About a minute ago Up About a minute (healthy) 9200/tcp, 9300/tcp, 9600/tcp, 9650/tcp graylog_server graylog/graylog:6.1 "tini -- /docker-ent…" graylog About a minute ago Up 34 seconds (healthy) 0.0.0.0:1514->1514/tcp, :::1514->1514/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:1514->1514/udp, :::9000->9000/tcp, :::1514->1514/udp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp, :::12201->12201/tcp, :::12201->12201/udp
Веб-интерфейс Graylog теперь доступен. Вы успешно развернули стек Graylog и готовы к его настройке.
Настройка Syslog Input
После запуска Graylog следующим шагом является настройка "Input" (ввода). Input — это компонент, который сообщает Graylog, как принимать сообщения журналов. Для этой лабораторной работы вы создадите Syslog UDP input, который является распространенным стандартом для сбора журналов с сетевых устройств и серверов Linux/Unix.
Откройте веб-интерфейс Graylog в вашем браузере. Вы можете сделать это, нажав на вкладку "Web Terminal" и выбрав "Desktop" для открытия браузера, или используя специальную иконку браузера в среде лаборатории. Перейдите по следующему URL:
http://127.0.0.1:9000
Войдите, используя учетные данные по умолчанию:
- Имя пользователя:
admin - Пароль:
admin
- Имя пользователя:
После входа вы создадите новый Input. В верхней панели навигации нажмите System, а затем выберите Inputs из выпадающего меню.
На странице Inputs найдите тип "Syslog UDP" в списке "Select input" и нажмите кнопку Launch new input рядом с ним.
Появится модальное окно. Заполните форму следующими данными для настройки Input:
- Node: Выберите единственный доступный узел из выпадающего списка (это будет ваш сервер Graylog).
- Title:
Syslog UDP Input(Это описательное имя для вашего Input). - Bind address:
0.0.0.0(Это указывает Graylog прослушивать журналы на всех сетевых интерфейсах контейнера). - Port:
1514(Это порт, на котором Graylog будет прослушивать входящие сообщения syslog).
Оставьте все остальные настройки по умолчанию и нажмите Save.
После сохранения вы вернетесь на страницу Inputs. Ваш новый "Syslog UDP Input" должен появиться в списке с зеленым статусом "Running", указывающим на то, что он активен и готов к приему данных.
Чтобы протестировать Input, вернитесь в терминал и отправьте пример сообщения журнала с помощью утилиты
netcat(nc). Эта команда формирует базовое сообщение syslog и отправляет его на UDP-порт1514на вашем локальном компьютере.echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514
Теперь вы успешно настроили Graylog для приема журналов. На следующем шаге вы отправите более структурированные журналы и научитесь просматривать их в интерфейсе Graylog.
Отправка и просмотр примеров логов
Теперь, когда ваш Syslog input готов, пришло время сгенерировать и отправить пакет примеров журналов. Это заполнит Graylog данными, позволяя вам практиковаться в поиске и анализе. Вы создадите простой скрипт оболочки для имитации сообщений журналов из приложения.
Сначала вернитесь в корневой каталог вашего проекта в терминале.
cd /home/labex/projectСоздайте новый скрипт оболочки с именем
generate_logs.shс помощью редактораnano.nano generate_logs.shСкопируйте и вставьте следующий скрипт в редактор. Этот скрипт генерирует 10 сообщений журналов в цикле. Каждое сообщение имеет случайный уровень серьезности, временную метку и простой текст сообщения. Затем он использует
ncдля отправки каждого журнала в настроенный вами Graylog input.#!/bin/bash for i in {1..10}; do severity=$(((RANDOM % 8))) timestamp=$(date +'%b %d %H:%M:%S') echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514 echo "Sent log message $i" sleep 1 doneНажмите
Ctrl+O,EnterиCtrl+Xдля сохранения и выхода.Сделайте скрипт исполняемым с помощью команды
chmod.chmod +x generate_logs.shЗапустите скрипт для отправки журналов в Graylog.
./generate_logs.shВ терминале вы увидите вывод по мере отправки каждого журнала.
Sent log message 1 Sent log message 2 ... Sent log message 10Теперь давайте посмотрим эти журналы в Graylog. Вернитесь в веб-интерфейс Graylog в вашем браузере (
http://127.0.0.1:9000).Нажмите на вкладку Search в верхней панели навигации. Вы должны увидеть сообщения журналов, которые вы только что отправили, в списке "Messages". Может потребоваться несколько секунд, чтобы они были проиндексированы и отображены.
Вы можете увидеть, как Graylog автоматически разбирает сообщения, разбивая их на поля, такие как
timestamp,source,application_nameиseverity. Эти структурированные данные являются ключом к эффективному анализу журналов.
Запрос и анализ данных логов
Теперь, когда журналы поступают в Graylog, вы можете научиться их искать и фильтровать. Функция поиска Graylog мощная и позволяет быстро находить конкретные события. Это необходимо для устранения неполадок или расследования инцидентов безопасности.
Перейдите на страницу Search в веб-интерфейсе Graylog. Строка поиска находится в верхней части страницы.
Начнем с простого запроса. Чтобы найти все журналы из вашего симулированного приложения, введите следующее в строку поиска и нажмите
Enter:application_name:sample_appЭто отфильтрует результаты, показывая только те журналы, где поле
application_nameточно соответствуетsample_app.Теперь попробуйте другие запросы, чтобы изучить различные возможности фильтрации:
- Найти журналы с определенным уровнем серьезности (например, уровень 4):
severity:4 - Найти журналы с уровнем серьезности больше 5 (предупреждения, ошибки и т. д.):
severity:>5 - Поиск фразы в сообщении журнала:
message:"log message 5" - Объединение фильтров с использованием
AND:application_name:sample_app AND severity:<3
- Найти журналы с определенным уровнем серьезности (например, уровень 4):
Вы также можете контролировать временной диапазон вашего поиска. По умолчанию Graylog показывает журналы за "Последние 5 минут". Нажмите на селектор временного диапазона слева от строки поиска и измените его на Last 30 minutes, чтобы убедиться, что все сгенерированные вами журналы включены в результаты поиска.
Чтобы сделать часто используемый запрос легкодоступным, вы можете сохранить его. Давайте сохраним поиск для событий с высоким уровнем серьезности.
- Выполните запрос:
severity:>4 - Справа от строки поиска нажмите на иконку дискеты (Save Search).
- В диалоговом окне "Save Search" введите Title, например,
High Severity Events. - Нажмите Save.
Теперь вы можете получить доступ к этому сохраненному поиску в любое время из списка "Saved Searches" на левой боковой панели, что позволит вам быстро проверять критические события.
- Выполните запрос:
Создание панели мониторинга
В то время как страница поиска отлично подходит для активного исследования, панели мониторинга предоставляют обзор ваших данных журналов с первого взгляда. На этом заключительном этапе вы создадите панель мониторинга с несколькими виджетами для визуализации ключевых метрик из ваших журналов.
В веб-интерфейсе Graylog перейдите в раздел Dashboards из верхнего меню.
Нажмите кнопку Create dashboard.
- Введите Title:
Application Health Dashboard - Введите Description:
Monitors the health and activity of sample_app. - Нажмите Create.
- Введите Title:
Теперь у вас есть пустая панель мониторинга. Давайте добавим к ней несколько виджетов. Нажмите кнопку Unlock / Edit, чтобы войти в режим редактирования.
Добавление виджета "Log Count": Этот виджет будет показывать общее количество сообщений журналов с течением времени.
- Нажмите Create Widget for Dashboard.
- Выберите Aggregation в качестве типа виджета.
- В окне конфигурации:
- Title:
Total Log Volume - В разделе "Rows" выберите timestamp в качестве поля.
- Выберите Bar Chart в качестве типа визуализации.
- Title:
- Нажмите Create.
Добавление виджета "Severity Distribution": Этот виджет покажет распределение журналов по уровням серьезности.
- Нажмите Create Widget for Dashboard еще раз.
- Выберите Aggregation в качестве типа виджета.
- В окне конфигурации:
- Title:
Log Severity Distribution - В разделе "Rows" выберите severity в качестве поля.
- Выберите Pie Chart в качестве типа визуализации.
- Title:
- Нажмите Create.
Добавление виджета "Recent Messages": Этот виджет отобразит список последних сообщений журналов.
- Нажмите Create Widget for Dashboard.
- Выберите Messages в качестве типа виджета.
- В окне конфигурации:
- Title:
Recent Log Messages - В поле "Streams" убедитесь, что выбрано
All messages.
- Title:
- Нажмите Create.
После добавления виджетов вы можете перетаскивать их, чтобы расположить макет. Вы также можете изменять их размер, перетаскивая за углы. Расположите их так, чтобы их было легко читать.
Когда вы будете удовлетворены макетом, нажмите кнопку Lock / Save в правом верхнем углу, чтобы сохранить вашу панель мониторинга.
Теперь вы создали базовую панель мониторинга. В реальных сценариях такие панели мониторинга бесценны для отслеживания состояния системы и ее безопасности.
Резюме
В этой лабораторной работе вы получили практический опыт работы с основными функциями Graylog для управления и анализа журналов. Вы начали с развертывания полной среды Graylog с использованием Docker Compose, которая включала сервер Graylog, OpenSearch и MongoDB.
Затем вы настроили вход Syslog для сбора журналов и использовали скрипт для отправки образцов данных журналов, имитируя реальные журналы приложений. Вы научились использовать мощный язык поиска и запросов Graylog для фильтрации и поиска конкретной информации в ваших журналах. Наконец, вы объединили все это, создав пользовательскую панель мониторинга с различными виджетами для визуализации метрик журналов, обеспечивая обзор активности системы с первого взгляда. Эти навыки формируют прочную основу для использования Graylog в мониторинге кибербезопасности и операционной аналитике.



