介绍
在本实验中,你将学习如何使用 Graylog,一个强大的开源日志管理平台,来收集和分析日志数据。集中式日志记录是网络安全的一个关键组成部分,它允许你从单一界面监控系统事件、检测异常并调查安全事件。
你将首先使用 Docker Compose 部署整个 Graylog 堆栈,其中包括 MongoDB 和 OpenSearch(Elasticsearch 的现代替代品)。然后,你将配置 Graylog 以接收日志数据,向其发送示例日志,执行搜索查询以过滤信息,最后构建一个可视化仪表板来监控关键指标。在本实验结束时,你将对 Graylog 中的日志分析基本工作流程获得实践经验。
使用 Docker Compose 部署 Graylog
在第一步中,你将部署 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接下来,使用
nano文本编辑器创建docker-compose.yml配置文件。此文件告诉 Docker Compose 要运行哪些容器以及如何配置它们。nano docker-compose.yml将以下 YAML 配置复制并粘贴到
nano编辑器中。此配置定义了三个服务:mongodb: 存储 Graylog 的配置数据。opensearch: 索引和存储日志消息以进行快速搜索。请注意,OpenSearch 2.12+ 需要初始管理员密码。graylog: 主应用程序,提供 Web 界面和日志处理引擎。
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 Web 界面了。你已成功部署了 Graylog 堆栈,并准备好进行配置。
配置 Syslog 输入
Graylog 运行后,下一步是配置一个“Input”。Input 是告诉 Graylog 如何接收日志消息的一个组件。在本实验中,你将创建一个 Syslog UDP Input,这是从网络设备和 Linux/Unix 服务器收集日志的常用标准。
在浏览器中打开 Graylog Web 界面。你可以通过点击“Web Terminal”选项卡并选择“Desktop”来打开浏览器,或者使用实验环境中的专用浏览器图标。导航到以下 URL:
http://127.0.0.1:9000
使用默认凭据登录:
- 用户名:
admin - 密码:
admin
- 用户名:
登录后,你将创建新的 Input。在顶部导航栏中,点击 System,然后在下拉菜单中选择 Inputs。
在 Inputs 页面,在“Select input”下拉列表中找到“Syslog UDP”输入类型,然后点击旁边的 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,使你能够练习搜索和分析。你将创建一个简单的 shell 脚本来模拟应用程序的日志消息。
首先,在终端中导航回你的项目根目录。
cd /home/labex/project使用
nano编辑器创建一个名为generate_logs.sh的新 shell 脚本。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 Web 界面(
http://127.0.0.1:9000)。点击顶部导航栏中的 Search 选项卡。你应该会在“Messages”列表中看到你刚刚发送的日志消息。它们可能需要几秒钟才能被索引和显示。
你可以看到 Graylog 如何自动解析消息,将其分解为
timestamp、source、application_name和severity等字段。这种结构化数据是有效日志分析的关键。
查询和分析日志数据
随着日志流入 Graylog,你现在可以学习如何搜索和过滤它们。Graylog 的搜索功能非常强大,可以让你快速定位特定事件。这对于故障排除或调查安全事件至关重要。
在 Graylog Web 界面中转到 Search 页面。搜索栏位于页面顶部。
让我们从一个简单的查询开始。要查找来自你的模拟应用程序的所有日志,请在搜索栏中键入以下内容并按
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 显示“Last 5 minutes”的日志。点击搜索栏左侧的时间范围选择器,将其更改为 Last 30 minutes,以确保所有生成的日志都包含在搜索结果中。
要使常用查询易于访问,你可以将其保存。让我们保存一个用于高严重性事件的搜索。
- 运行查询:
severity:>4 - 在搜索栏的右侧,点击软盘图标(Save Search)。
- 在“Save Search”对话框中,输入一个 Title,例如
High Severity Events。 - 点击 Save。
你现在可以随时从左侧边栏的“Saved Searches”列表中访问此已保存的搜索,从而可以快速检查关键事件。
- 运行查询:
构建监控仪表板
虽然搜索页面非常适合主动调查,但仪表板可以让你一目了然地了解日志数据。在最后一步中,你将创建一个仪表板,其中包含多个小部件,用于可视化日志中的关键指标。
在 Graylog Web 界面中,从顶部菜单导航到 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 进行日志管理和分析的核心功能的实践经验。你首先使用 Docker Compose 部署了一个完整的 Graylog 环境,其中包括 Graylog 服务器、OpenSearch 和 MongoDB。
然后,你配置了一个 Syslog input 来启用日志收集,并使用脚本发送了示例日志数据,模拟了真实世界的应用程序日志。你学习了如何使用 Graylog 强大的搜索和查询语言来过滤和查找日志中的特定信息。最后,你通过构建一个包含各种小部件的自定义仪表板来可视化日志指标,从而一目了然地了解系统活动,将所有内容整合在一起。这些技能为你将在网络安全监控和运营智能中使用 Graylog 打下了坚实的基础。



