收集 Apache Tomcat 日志
解析器版本:3.0
本文档介绍了如何使用 Bindplane 代理将 Apache Tomcat 日志注入到 Google Security Operations。
Apache Tomcat 是一种 Web 应用服务器,可为 HTTP 请求、身份验证事件和服务器活动生成 JSON 访问日志。解析器会从 JSON 格式和 syslog 格式的日志中提取字段,并将这些字段映射到统一数据模型 (UDM)。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - 安装在 Tomcat 服务器上的 Bindplane 代理(用于读取本地日志文件)
- 如果在代理后面运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对 Tomcat 服务器的管理员访问权限
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载数据注入身份验证文件。
将文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
复制并保存组织详细信息部分中的客户 ID。
在 Tomcat 服务器上安装 Bindplane 代理以收集日志文件
在 Tomcat 服务器本身上安装 Bindplane 代理,因为该代理需要读取本地日志文件。
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet等待安装完成。
运行以下命令,验证安装是否成功:
sc query observiq-otel-collector该服务应显示为 正在运行。
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh等待安装完成。
运行以下命令,验证安装是否成功:
sudo systemctl status observiq-otel-collector该服务应显示为有效(正在运行)。
其他安装资源
如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南。
配置 Bindplane 代理以注入 Tomcat 日志并将其发送到 Google SecOps
找到配置文件
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
修改配置文件
将
config.yaml的全部内容替换为以下配置:receivers: filelog/tomcat: include: - /path/to/tomcat/logs/access-log.*.json start_at: beginning exporters: chronicle/tomcat: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: TOMCAT raw_log_field: body service: pipelines: logs/tomcat_to_chronicle: receivers: - filelog/tomcat exporters: - chronicle/tomcat
配置参数
替换以下占位符:
接收器配置:
include:Tomcat JSON 访问日志文件的路径。进行调整以匹配您的 Tomcat 日志目录和文件模式。start_at:设置为beginning可读取现有日志,设置为end可仅读取新条目。
导出器配置:
creds_file_path:提取身份验证文件的完整路径:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:从 Google SecOps 控制台复制的客户 IDendpoint:区域端点网址:- 美国:
malachiteingestion-pa.googleapis.com - 欧洲:
europe-malachiteingestion-pa.googleapis.com - 亚洲:
asia-southeast1-malachiteingestion-pa.googleapis.com - 如需查看完整列表,请参阅区域级端点
- 美国:
保存配置文件
- 修改后,保存文件:
- Linux:依次按
Ctrl+O、Enter和Ctrl+X - Windows:依次点击文件 > 保存
- Linux:依次按
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart observiq-otel-collector验证服务是否正在运行:
sudo systemctl status observiq-otel-collector检查日志是否存在错误:
sudo journalctl -u observiq-otel-collector -f
如需在 Windows 中重启 Bindplane 代理,请选择以下选项之一:
以管理员身份运行命令提示符或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector服务控制台:
- 按
Win+R,输入services.msc,然后按 Enter 键。 - 找到 observIQ OpenTelemetry 收集器。
- 右键点击并选择重新启动。
验证服务是否正在运行:
sc query observiq-otel-collector检查日志是否存在错误:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- 按
在 Tomcat 中配置 JSON 访问日志
- 打开位于
$CATALINA_BASE/conf/server.xml的 Tomcat 配置文件。 找到
<Host>标记,并在其中添加以下内容:<Valve className="org.apache.catalina.valves.JsonAccessLogValve" directory="logs" prefix="access-log" suffix=".json" rotatable="true" maxDays="7"/>重启 Tomcat 以应用更改:
cd /path/to/tomcat bin/catalina.sh stop bin/catalina.sh start每天都会显示一个新的 JSON 日志文件(例如
logs/access-log.2025-07-02.json)。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
@timestamp |
metadata.event_timestamp |
原始日志中的 @timestamp 值直接映射到此 UDM 字段。表示事件发生的时间。 |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
来自代理的临时 ID 会以键值对的形式添加到 additional 字段中。 |
agent.hostname |
observer.hostname |
代理的主机名用作观测器主机名。 |
agent.id |
observer.asset_id |
代理 ID 与代理类型结合使用,以创建观察者资产 ID(例如 filebeat: <agent_id>)。 |
agent.type |
observer.application |
代理类型用作观察者应用。 |
agent.version |
observer.platform_version |
代理版本用作观测者平台版本。 |
host.hostname |
principal.hostname |
主机的 hostname 用作主 hostname。 |
host.id |
principal.asset.asset_id |
在宿主 ID 前添加 Host Id:,即可创建主账号资产 ID。 |
host.ip |
principal.ip,observer.ip |
主 IP 和观测者 IP 均使用宿主的 IP 地址。如果存在多个 IP,则会将它们合并到一个数组中。 |
host.mac |
principal.mac |
主机的 MAC 地址用作主要 MAC 地址。如果存在多个 MAC,则会将它们合并到一个数组中。 |
host.os.family |
principal.platform |
如果宿主操作系统系列为 rhel 或 redhat,则将主要平台设置为 LINUX。 |
host.os.kernel |
principal.platform_patch_level |
主机操作系统内核版本用作主要平台补丁级别。 |
host.os.name |
additional.fields[os_name].value.string_value |
主机操作系统名称以键值对的形式添加到 additional 字段中。 |
host.os.version |
principal.platform_version |
主机操作系统版本用作主要平台版本。 |
log.file.path |
principal.process.file.full_path |
日志路径用作主进程文件的完整路径。 |
log_level |
security_result.severity、security_result.severity_details、security_result.action |
日志级别用于确定安全结果的严重程度、严重程度详情和操作。DEBUG、INFO 和 AUDIT 映射到 INFORMATIONAL 严重程度和 ALLOW 操作。ERROR 映射到 ERROR 严重程度和 BLOCK 操作。WARNING 和 WARN 映射到中等严重程度和 BLOCK 操作。原始 log_level 值也会映射到 severity_details。 |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
来自 Logstash 的 Iron Mountain 环境将作为键值对添加到 additional 字段中。 |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
来自 Logstash 的 Iron Mountain 区域会以键值对的形式添加到 additional 字段中。 |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
来自 Logstash 的 Iron Mountain 网站已作为键值对添加到 additional 字段中。 |
logstash.process.host |
intermediary.hostname |
Logstash 处理主机用作中间主机名。 |
logstash.process.timestamp |
metadata.collected_timestamp |
Logstash 处理时间戳用作收集时间戳。 |
logstash.xyz_environment |
additional.fields[xyz_environment].value.string_value |
来自 Logstash 的 xyz 环境将作为键值对添加到 additional 字段中。 |
logstash.xyz_region |
additional.fields[xyz_region].value.string_value |
来自 Logstash 的 xyz 区域将作为键值对添加到 additional 字段中。 |
logstash.xyz_site |
additional.fields[xyz_site].value.string_value |
来自 Logstash 的 xyz 网站以键值对的形式添加到 additional 字段中。 |
message |
metadata.description |
系统会将消息字段解析为 JSON,并将其 event_message 字段用作元数据说明。中介应用已硬编码为 logstash。元数据事件类型硬编码为 USER_UNCATEGORIZED。元数据日志类型设置为原始日志的 batch.type 或 batch.log_type 中的 TOMCAT。元数据商品名称硬编码为 Tomcat。元数据供应商名称硬编码为 Tomcat。 |
user |
principal.user.userid |
原始日志中的用户字段用作主用户 ID。 |
product_event |
metadata.product_event_type |
从变更日志映射 |
summary |
security_result.summary |
从变更日志映射 |
query |
additional.fields |
从变更日志映射 |