排查常见的 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 已启用

  1. 在不启动的情况下进入容器,从而检查配置文件 然后运行以下命令:

    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 中。

  2. 运行以下命令:

    ls -lrt /opt.chronicle/external/
    

    如果您收到权限遭拒的错误,则表示转发器无法 无法打开配置文件,因此无法启动。

如需解决此问题,请执行以下操作:

  1. 运行以下命令检查 SELinux 状态:

      sestatus
    
  2. 如果输出中已启用 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

如需解决此问题,请执行以下操作:

  1. 在转发器配置文件中启用压缩功能。

  2. 增加缓冲区空间 方法是更新 max_memory_buffer_bytesmax_file_buffer_bytes 参数。 这些参数表示 内存或磁盘

转发器和主机未收到日志

如果主机和转发器没有收到日志,请通过 对每个端口运行以下命令:

  netstat -a | grep PORT

PORT 替换为您要检查的端口 ID。

如果该命令未输出任何内容,则表示主机未监听该端口,您应咨询网络管理员。

如果命令的输出表明主机正在监听端口 但转发器仍未收到日志,请执行以下操作:

  1. 通过运行以下命令停止 Docker:

    ​​docker stop cfps
    
    
  2. 根据您的网络设置运行以下某个命令。

    对于 TCP:

    nc -l PORT
    

    对于 UDP:

    nc -l -u PORT
    

    PORT 替换为您要转移的端口 ID 进行问题排查。

  3. 重启外部服务,然后检查问题是否已得到解决。如果问题仍然存在,请[与 Google Security Operations 支持团队联系。

转发器未接收日志,但主机接收了日志

如果主机正在接收日志,但转发器未接收,则表示转发器未在配置文件中指定的端口上监听。

如需解决此问题,请执行以下操作:

  1. 在您的系统上打开两个终端窗口,一个用于配置转发器, 其一是向主机发送测试消息

    1. 在第一个终端(转发器)上,启动 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
      
    2. 指定转发器应监听的端口:

      nc -l PORT
      

      PORT 替换为您要排查问题的端口 ID。

  2. 在第二个终端(主机)上,运行以下命令在端口上发送测试消息 以下命令:

    echo "test message" | nc localhost PORT
    

    PORT 替换为您要转移的端口 ID 进行问题排查。

  3. 重新运行 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 支持团队可以请求 以帮助解决问题并进行调试。