排查常见的 Linux 转发器问题
本文档可帮助您识别和排查在使用 Google Security Operations Linux 转发器时可能会遇到的常见问题。
转发器无法启动
转发器无法启动,并处于持续重启循环中,日志中显示以下错误:
F0510 06:17:39.013603 202 main_linux.go:153] open /opt/chronicle/external/*.conf: no such file or directory
可能原因 1:配置文件中的映射不正确
要解决此问题,请确保您将正确的路径传递给 配置文件并将其映射到外部文件夹。
可能的原因 2:SELinux 已启用
在不启动的情况下进入容器,从而检查配置文件 然后运行以下命令:
docker run --name cfps --log-opt max-size=100m --log-opt max-file=10 --net=host -v ~/configuration:/opt/chronicle/external --entrypoint=/bin/bash \ -it gcr.io/chronicle-container/cf_production_
此命令会将您置于容器内的 shell 中。
运行以下命令:
ls -lrt /opt.chronicle/external/
如果您收到权限遭拒的错误,则表示转发器无法 无法打开配置文件,因此无法启动。
如需解决此问题,请执行以下操作:
运行以下命令检查 SELinux 状态:
sestatus
如果输出中已启用 SELinux 状态,请运行以下命令 将其停用:
setenforce 0
日志未到达 Google Security Operations 租户
可能的原因 1:DNS 解析
运行以下命令,检查主机是否无法解析地址或无法与 Google 安全运营团队联系:
nslookup malachiteingestion-pa.googleapis.com
如果命令失败,请与您的网络团队联系以寻求解决方案。
可能的原因 2:防火墙
检查本地防火墙是否阻止 Google Security Operations 之间的通信 和转发器:
firewall-cmd --state
如果防火墙已启用,请通过运行以下命令将其停用:
systemctl stop firewalld
可能的原因 3:缓冲区大小
在日志中查找以下错误,检查是否是缓冲区空间问题:
Memory ceiling (1073741824) reached, freeing a batch from the backlog
如需解决此问题,请执行以下操作:
在转发器配置文件中启用压缩功能。
增加缓冲区空间 方法是更新
max_memory_buffer_bytes
和max_file_buffer_bytes
参数。 这些参数表示 内存或磁盘
转发器和主机未收到日志
如果主机和转发器没有收到日志,请通过 对每个端口运行以下命令:
netstat -a | grep PORT
将 PORT
替换为您要检查的端口 ID。
如果该命令未输出任何内容,则表示主机未监听该端口,您应咨询网络管理员。
如果命令的输出表明主机正在监听端口 但转发器仍未收到日志,请执行以下操作:
通过运行以下命令停止 Docker:
docker stop cfps
根据您的网络设置运行以下某个命令。
对于 TCP:
nc -l PORT
对于 UDP:
nc -l -u PORT
将
PORT
替换为您要转移的端口 ID 进行问题排查。重启外部服务,然后检查问题是否已得到解决。如果问题仍然存在,请[与 Google Security Operations 支持团队联系。
转发器未接收日志,但主机接收了日志
如果主机正在接收日志,但转发器未接收,则表示转发器未在配置文件中指定的端口上监听。
如需解决此问题,请执行以下操作:
在您的系统上打开两个终端窗口,一个用于配置转发器, 其一是向主机发送测试消息
在第一个终端(转发器)上,启动 Docker,而不启动 转发:
docker run \ --name cfps \ --log-opt max-size=100m \ --log-opt max-file=10 \ --net=host \ -v ~/config:/opt/chronicle/external \ --entrypoint=/bin/bash \ -it gcr.io/chronicle-container/cf_production_stable
指定转发器应监听的端口:
nc -l PORT
将
PORT
替换为您要排查问题的端口 ID。
在第二个终端(主机)上,运行以下命令在端口上发送测试消息 以下命令:
echo "test message" | nc localhost PORT
将
PORT
替换为您要转移的端口 ID 进行问题排查。重新运行
docker
命令。运行以下命令,指定-p
标志以及转发器应监听的端口:docker run \ --detach \ –name cfps \ --restart=always \ --log-opt max-size=100m \ --log-opt max-file=10 --net=host \ —v /root/config:/opt/chronicle/external \ -p 11500:11800 \ gcr.io/chronicle-container/cf_production_stable
转发器日志文件中的常见错误
您可以通过运行以下命令来查看转发器日志:
sudo docker logs cfps
请求中包含无效的参数
转发器日志文件会显示以下错误消息:
I0912 18:04:15.187321 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
E0912 18:04:15.410572 333 batcher.go:345] [2_syslog_CISCO_FIREWALL-tid-0] Error exporting batch: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
I0912 18:04:15.964923 333 uploader.go:181] Sent batch error: rpc error: code = InvalidArgument desc = Request contains an invalid argument.
解决方法:
添加无效日志类型时可能会发生此错误。确保仅添加有效的日志类型。在示例错误消息中,CISCO\_FIREWALL
并非
有效的日志类型。如需查看有效日志类型的列表,请参阅支持的日志类型和默认解析器。
找不到服务器
转发器日志文件会显示以下错误消息:
{"log":"Failure: Unable to find the server at accounts.google.com.\n","stream":"stderr","time":"2019-06-12T18:26:53.858804303Z"}`
{"log":"+ [[ 1 -ne 0 ]]\n","stream":"stderr","time":"2019-06-12T18:26:53.919837669Z"}
{"log":"+ err 'ERROR: Problem accessing the Chronicle bundle.'\n","stream":"stderr","time":"2019-06-12T18:26:53.919877852Z"}
解决方法:
请与您的网络团队联系,确保网络正常运行。
JWT 签名无效
转发器日志文件会显示以下错误消息:
E0330 17:05:28.728021 162 stats_manager.go:85] send(): rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
E0404 17:05:28.729012 474 memory.go:483] [1_syslog_FORTINET_FIREWAL-tid-0] Error exporting batch: rpc error: code = Unauthenticated desc = transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
解决方法:
当转发器配置文件包含错误的密钥时,可能会发生此错误 。与 Google Security Operations 支持团队联系 来帮助解决此问题。
令牌必须是短期有效的令牌
转发器日志文件会显示以下错误消息:
token: 400 Bad Request Response:
{"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim."} I0412 05:14:16.539060 480
malachite.go:212] Sent batch error: rpc error: code = Unauthenticated desc =
transport: OAuth 2.0: cannot fetch token: 400 Bad Request Response:
{"error":"invalid_grant","error_description":"Invalid JWT: Token must be a
short-lived token (60 minutes)
解决方法:
当主机和服务器系统时钟不同步时,可能会发生此错误。调整主机上的时间,或尝试使用 NTP 同步时钟。
不存在此类文件或目录
转发器日志文件会显示以下错误消息:
++ cat '/opt/chronicle/external/*.conf'
cat: '/opt/chronicle/external/*.conf': No such file or directory
解决方法:
如果使用错误的驱动器映射启动转发器,可能会发生此错误。使用
配置文件中的完整目录路径(您可以通过运行
pwd
命令)。
未能从配置文件中检索客户 ID
转发器日志文件会显示以下错误消息:
+ err 'ERROR: Failed to retrieve customer ID from configuration file.'
++ date +%Y-%m-%dT%H:%M:%S%z
+ echo '[2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.'
[2023-06-28T09:53:21+0000]: ERROR: Failed to retrieve customer ID from configuration file.
+ err '==> Please contact the Chronicle support team.'
解决方法:
此错误是由映射不正确或配置文件
文件。使用配置文件中的完整目录路径
(您可以通过运行 pwd
命令来获取该路径)。确保正确的
docker run
命令执行,且配置文件存在于
以下位置:
gcr.io/chronicle-container/cf_production_stable
以下代码示例展示了 docker run
命令:
docker run \
--detach \
--name cfps \
--restart=always \
--log-opt max-size=100m \
--log-opt max-file=10 \
--net=host \
-v /opt/chronicle/config:/opt/chronicle/external \
gcr.io/chronicle-container/cf_production_stable
实用的 Docker 命令
您可以使用以下命令收集有关 Docker 安装的其他信息:
docker info
Docker 服务默认处于停用状态。如需检查该功能是否已停用,请执行以下操作: 执行以下命令:
systemctl is-enabled docker
如需启用 Docker 服务并立即启动它,请执行以下命令之一:
sudo systemctl enable --now docker
sudo systemctl enable /usr/lib/systemd/system/docker.service
输出:
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service
启动转发器时,执行以下命令设置转发器 自动重启:
sudo docker run --restart=always `IMAGE_NAME`
IMAGE_NAME
是转发器映像名称。如需检查 Docker 服务的状态和详细信息,请执行以下命令:
sudo systemctl status docker
输出:
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-07-18 11:14:05 UTC; 15s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 263 (dockerd) Tasks: 20 Memory: 100.4M CGroup: /system.slice/docker.service └─263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jul 18 11:14:05 swarm-kraken dockerd[263]: time="2020-07-18T11:14:05.713787002Z" level=info msg="API listen on /run/docker.sock" Jul 18 11:14:05 swarm-kraken systemd[1]: Started Docker Application Container Engine
如果您对 Docker 有任何疑问,Google SecOps 支持团队可以请求 以帮助解决问题并进行调试。