适用于 Linux 的 Chronicle 转发器

本文档介绍了如何在 Linux 上安装和配置转发器。 如需在 Windows 上安装转发器,请参阅 Windows 转发器

转发器用于将日志从客户环境发送到 Chronicle 实例。如果客户希望将日志直接发送到 Chonicle,不希望使用 Cloud 存储分区来注入数据,或者日志类型没有通过第三方 API 进行原生注入,则会使用此方法。转发器可以用作现成部署解决方案,而无需手动整合提取 API。

您可以在各种 Linux 发行版(包括 Debian、Ubuntu、Red Hat 和 Suse)上安装转发器。Google Cloud 使用 Docker 容器提供软件。您可以在运行 Linux 的实体或虚拟机上运行和管理 Docker 容器。

系统要求

以下是一般性建议。 如需获取适用于您的系统的建议,请与 Chronicle 支持团队联系。

  • RAM - Chronicle 接受用于提取的每种收集的数据类型(收集器)的 RAM 为 1 GB。例如,如果您指定了 4 个不同的收集器,则需要 4 GB 的 RAM 来收集所有这四个收集器的数据。

  • CPU - 2 个 CPU 足以处理每秒不到 10,000 个事件 (EPS)(所有数据类型的总数)。如果您预期转发超过 10000 EPS,请供应 4 到 6 个 CPU。

  • 磁盘 - 无论 Chronicle 转发器处理多少数据,100 MB 的磁盘空间都足够。如果您需要将积压的消息缓冲到磁盘而不是内存,请参阅磁盘缓冲。默认情况下,Chronicle 转发器会缓冲到内存。

Google IP 地址范围

设置转发器配置(例如设置防火墙配置)时,您可能需要打开 IP 地址范围。Google 无法提供具体的 IP 地址列表。不过,您可以获取 Google IP 地址范围

验证防火墙配置

Chronicle 转发容器和互联网之间的任何防火墙或经过身份验证的代理都需要规则才能开放对以下主机的访问权限:

连接类型 目标 端口
TCP malachiteingestion-pa.googleapis.com 443
TCP asia-northeast1-malachiteingestion-pa.googleapis.com 443
TCP asia-south1-malachiteingestion-pa.googleapis.com 443
TCP asia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP australia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP europe-malachiteingestion-pa.googleapis.com 443
TCP europe-west2-malachiteingestion-pa.googleapis.com 443
TCP europe-west3-malachiteingestion-pa.googleapis.com 443
TCP europe-west6-malachiteingestion-pa.googleapis.com 443
TCP me-central2-malachiteingestion-pa.googleapis.com 443
TCP me-west1-malachiteingestion-pa.googleapis.com 443
TCP northamerica-northeast2-malachiteingestion-pa.googleapis.com 443
TCP accounts.google.com 443
TCP gcr.io 443
TCP oauth2.googleapis.com 443
TCP storage.googleapis.com 443

自定义配置文件

Google Cloud 使用特定元数据为转发器实例定制配置文件,如输出部分所示。您可以根据自己的要求下载配置文件,并在收集器部分下包含要提取的日志类型的相关信息。如需详细了解配置设置,请参阅配置设置参考文档

配置 Linux 转发器

如需通过界面配置 Linux 转发器,请参阅通过 Chronicle 界面管理转发器配置

如需手动配置 Linux 转发器,请执行以下操作:

  1. 创建软件提供的配置文件模板的副本。

  2. 通过界面下载配置文件

  3. 使用以下命名惯例将两个文件保存在同一目录中:

    FORWARDER_NAME.conf - 使用此文件定义与日志提取相关的配置设置。

    FORWARDER_NAME_auth.conf - 此文件用于定义授权凭据。

  4. 修改这些文件,以包含转发器实例的配置。使用本文档中提供的示例作为参考。

  5. 确保 FORWARDER_NAME_auth.conf 文件中的每个输入都存在一个条目,即使输入没有相应的身份验证详细信息也是如此。这是正确映射数据所必需的。

转发器会在 5 分钟内自动应用对配置文件所做的任何更改。

配置示例

以下代码示例展示了转发器配置文件的格式。如需详细了解每类提取机制(例如 Splunk 或 Syslog)的设置,请参阅收集数据

FORWARDER_NAME.conf 文件

output:
  url: malachiteingestion-pa.googleapis.com:443
  identity:
    identity:
    collector_id: COLLECTOR_ID \
    customer_id: CUSTOMER_ID \

collectors:
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DHCP"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10514
      udp_address: 0.0.0.0:10514
      connection_timeout_sec: 60
      tcp_buffer_size: 524288
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DNS"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10515
      connection_timeout_sec: 60
      tcp_buffer_size: 524288

FORWARDER_NAME_auth.conf 文件

output:
  identity:
    secret_key: |
      {
        "type": "service_account",
        "project_id": "PROJECT_ID" \,
        "private_key_id": "PRIVATE_KEY_ID" \,
        "private_key": "-----BEGIN PRIVATE KEY-----\\"PRIVATE_KEY" \n-----END PRIVATE KEY-----\n",
        "client_email": "CLIENT_EMAIL" \,
        "client_id": "CLIENT_ID" \,
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/example-account-1%40example-account.iam.gserviceaccount.com"
      }

collectors:
  - syslog:
  - syslog:
      certificate: "../forwarder/inputs/testdata/localhost.pem"
      certificate_key: "../forwarder/inputs/testdata/localhost.key"

借助这两个文件系统,您可以将身份验证凭据存储在单独的文件中,以提高安全性。您可以将 FORWARDER_NAME.conf 文件存储在版本控制代码库或任何开放式配置管理系统中。您可以将 FORWARDER_NAME_auth.conf 文件直接存储在运行转发器的实体机器或虚拟机中。

示例配置(单个文件)

output:
  url: malachiteingestion-pa.googleapis.com:443
  identity:
    identity:
    collector_id: "COLLECTOR_ID" \
    customer_id: "CUSTOMER_ID" \
    secret_key: |
      {
        "type": "service_account",
        "project_id": "PROJECT_ID" \,
        "private_key_id": "PRIVATE_KEY_ID" \,
        "private_key": "-----BEGIN PRIVATE KEY-----\ "PRIVATE_KEY" \n-----END PRIVATE KEY-----\n",
        "client_email": "CLIENT_EMAIL" \,
        "client_id": "CLIENT_ID" \,
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/malachite-test-1%40malachite-test.iam.gserviceaccount.com"
      }

collectors:
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DHCP"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10514
      udp_address: 0.0.0.0:10514
      connection_timeout_sec: 60
      tcp_buffer_size: 524288
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DNS"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10515
      connection_timeout_sec: 60
      certificate: "../forwarder/inputs/testdata/localhost.pem"
      certificate_key: "../forwarder/inputs/testdata/localhost.key"
      tcp_buffer_size: 524288

如果您使用的是单个配置文件,并且想要移至两个文件系统,请执行以下操作:

  1. 创建现有配置的副本。
  2. 将一个文件另存为 FORWARDER_NAME.conf 文件,并从该文件中删除授权凭据。
  3. 将另一个文件另存为 FORWARDER_NAME_auth.conf 文件,并删除该文件中的所有非授权数据。使用本指南中提供的示例配置文件作为参考。
  4. 请务必遵循自定义配置文件部分中提到的命名惯例和其他准则。

安装 Docker

Docker 的安装取决于主机环境。您可以在不同的主机操作系统上安装 Docker。Google Cloud 提供的有限文档可帮助您在多种常用的 Linux 发行版上安装 Docker。不过,Docker 是开源的,并且所有必要的文档均已提供。有关 docker 安装的说明,请参阅 Docker 文档

在系统上安装 Docker 后,Chronicle 转发器的安装过程与任何类型的 Linux 发行版类似。

要检查 Docker 是否已在系统上正确安装,请执行以下命令(提升权限):

   docker ps
  

以下响应表明 Docker 已正确安装:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

实用的 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 时遇到任何问题,Chronicle 支持团队可以请求此命令的输出,以获取帮助和调试问题。

在 Linux 上安装转发器

本部分介绍如何使用 Docker 容器在 Linux 系统上安装 Chronicle Forwarder。

第 1 步:下载、转移和安装转发器配置文件

Chronicle 提供特定于您的操作系统(Linux 或 Windows)的转发器配置文件。您可以根据自己的要求下载配置文件。完成以下步骤之后,将配置文件从笔记本电脑转移到用户主目录中的转发器 /opt/chronicle/config 目录。

  1. 通过终端连接到 Linux 转发器的主机。

  2. 在 Linux 转发器的主机上创建一个新用户。

      adduser USERNAME
      passwd USERNAME
      usermod -aG wheel USERNAME
    

  3. 将目录更改为运行 Docker 容器的新用户的主目录。

  4. 创建一个用于存储 Chronicle 转发器配置文件的目录:

      mkdir /opt/chronicle/config
    

  5. 更改目录。

      cd /opt/chronicle/config
    

  6. 文件传输完毕后,请确保配置文件位于 /opt/chronicle/config 目录中:

      ls -l
    

第 2 步:在 Docker 容器中运行转发器

您可以按照以下步骤首次启动 Chronicle 转发器,以及升级到最新版本的 Chronicle 容器:

--log-opt 选项自 Docker 1.13 起可用。这些选项可限制容器日志文件的大小。只要您的 Docker 版本支持这些选项,就必须使用这些选项。

  1. 如果要升级,请清理之前的所有 Docker 运行。在以下示例中,Docker 容器的名称为 cfps。您可以使用 docker pull 命令从 Google Cloud 获取最新的 Docker 映像,如下所示。

    docker stop cfps
    
    docker rm cfps
    
  2. 从 Google Cloud 获取最新的 Docker 映像:

    docker pull gcr.io/chronicle-container/cf_production_stable
    
  3. 从 Docker 容器启动 Chronicle 转发器:

    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
    

查看转发器日志

如需查看 Chronicle 转发器日志,请执行以下命令:

  sudo docker logs cfps

如需查看存储日志的文件的路径,请执行以下命令:

docker inspect --format='{{.LogPath}}' CONTAINER_NAME
 

如需查看实时运行日志,请执行如下命令:

  sudo docker logs cfps -f

如需将日志存储在文件中,请执行以下命令:

  sudo docker logs cfps &> logs.txt

卸载转发器

以下 Docker 命令可帮助您停止、卸载或移除 Chronicle 转发器。

如需停止或卸载转发器容器,请执行以下操作:

    docker stop cfps
  

如需移除转发器容器,请执行以下操作:

    docker rm cfps
  

更新转发器

Chronicle 转发器包含两个部分,升级如下:

  • 转发器软件包 - 自动更新,无需重启。

  • 转发器 Docker 映像 - 停止现有转发器并启动新实例(如第 2 步中所述)后手动更新。

在代理后面安装转发器

本部分介绍如何在代理后面安装 Chronicle 转发器。

  1. 将机器配置为使用代理。

    1. 将以下代码行添加到 /etc/resolv.conf 文件中:

      nameserver = 10.0.0.1
      nameserver = 10.0.0.2
      
    2. 设置以下环境变量:

      $HTTP_PROXY = http://proxy.example.com:80
      $HTTPS_PROXY = https://proxy.example.com:80
      
  2. 将 Docker 配置为使用代理。

    1. 为 Docker 服务创建 systemd 直接目录。

      mkdir /etc/systemd/system/docker.service.d
      
    2. 创建一个添加 HTTP_PROXYHTTPS_PROXY 环境变量的文件 /etc/systemd/system/docker.service.d/http-proxy.conf

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80/"
      Environment="HTTPS_PROXY=https://proxy.example.com:80/"
      
    3. 刷新更改。

      $ sudo systemctl daemon-reload
      
    4. 验证配置是否已加载。

      $ sudo systemctl show --property Environment docker
      Environment=HTTP_PROXY=http://proxy.example.com:80/
      Environment=HTTPS_PROXY=https://proxy.example.com:80/
      
    5. 重启 Docker。

      $ sudo systemctl restart docker
      
  3. 从 Google Cloud 获取最新的 Chronicle 转发器 Docker 映像。

    docker pull gcr.io/chronicle-container/cf_production_stable
    
  4. 通过添加代理环境变量来运行 Chronicle 转发器容器。

    docker run \
    --env HTTP_PROXY="http://proxy.example.com:80/" \
    --env HTTPS_PROXY="https://proxy.example.com:80/" \
    --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
    

收集数据

以下部分可帮助您配置 Chronicle 转发器以注入不同类型的数据,并将这些数据转发到 Chronicle 实例。

收集 Splunk 数据

您可以配置 Chronicle 转发器以将 Splunk 数据转发到 Chronicle。 Google Cloud 使用以下信息配置 Chronicle 转发器,以转发来自 Splunk 的数据:

  • Splunk REST API 的网址(例如 https://10.0.113.15:8089)。

  • Splunk 查询用于为每个必需数据类型(例如,index=dns)生成数据。

FORWARDER_NAME.conf
output:
collectors:
  - splunk:
      common:
        enabled: true
        data_type: WINDOWS_DNS
        data_hint: "#fields ts      uid     id.orig_h       id.orig_p       id.resp_h         id.resp_p       proto   trans_id        query   qclass  qclass_name"
        batch_n_seconds: 10
        batch_n_bytes: 819200
      url: https://127.0.0.1:8089
      is_ignore_cert: true
      minimum_window_size: 10s
      maximum_window_size: 30s
      query_string: search index=* sourcetype=dns
      query_mode: realtime
  • 将您的 Splunk 帐号凭据提供给 Chronicle 转发器。为此,您可以创建一个 creds.txt 文件。

如需使用 creds.txt 文件,请执行以下操作:

  1. 为您的 Splunk 凭据创建一个本地文件,并将其命名为 creds.txt

  2. 将用户名放在第一行,将密码放在第二行:

    cat creds.txt
    
    myusername
    mypassword
    
  3. 如需使用 Chronicle 转发器访问 Splunk 实例,请将 creds.txt 文件复制到配置目录(配置文件所在的目录)。例如:

    cp creds.txt /opt/chronicle/config/creds.txt
    
  4. 验证 creds.txt 文件是否位于正确的位置:

    ls /opt/chronicle/config
    

收集 Syslog 数据

Chronicle 转发器可以用作 Syslog 服务器。您可以配置任何支持通过 TCP 或 UDP 连接发送 Syslog 数据的设备或服务器,以将其数据转发到 Chronicle 转发器。您可以控制设备或服务器向 Chronicle 转发器发送的确切数据。然后,Chronicle 转发器可以将数据转发到 Chronicle。

FORWARDER_NAME.conf 配置文件(由 Google Cloud 提供)指定要监控每种转发数据的端口(例如端口 10514)。默认情况下,Chronicle 转发器同时接受 TCP 和 UDP 连接。

配置 rsyslog

如需配置 rsyslog,您需要为每个端口(例如,每种数据类型)指定目标。请查阅系统文档,了解正确的语法。以下示例展示了 rsyslog 目标配置:

  • TCP 日志流量:dns.* @@192.168.0.12:10514

  • UDP 日志流量:dns.* @192.168.0.12:10514

为 syslog 配置启用 TLS

您可以为与 Chronicle 转发器的 Syslog 连接启用 TLS。在 Chronicle 转发器配置文件 (FORWARDER_NAME.conf) 中,指定您自己生成的证书和证书密钥的位置,如以下示例所示:

证书 "/opt/chronicle/external/certs/client_generated_cert.pem"
certificate_key "/opt/chronicle/external/certs/client_generated_cert.key"

根据显示的示例,修改 Chronicle 转发器配置文件 (FORWARDER_NAME.conf),如下所示:

  collectors:
- syslog:
    common:
      enabled: true
      data_type: WINDOWS_DNS
      data_hint:
      batch_n_seconds: 10
      batch_n_bytes: 1048576
    tcp_address: 0.0.0.0:10515
    tcp_buffer_size: 65536
    connection_timeout_sec: 60
    certificate: "/opt/chronicle/external/certs/client_generated_cert.pem"
    certificate_key: "/opt/chronicle/external/certs/client_generated_cert.key"
    minimum_tls_version: "TLSv1_3"

需要注意的几个要点:

  • 您可以配置 TCP 缓冲区空间。默认的 TCP 缓冲区空间为 64 KB。

  • connection_timeout 的默认及推荐值为 60 秒。 如果 TCP 连接在指定时间内处于非活动状态,则会终止。

  • 系统会对照输入请求的 TLS 版本检查最低 TLS 版本。输入请求的 TLS 版本应高于最低 TLS 版本。最低 TLS 版本应为以下值之一:TLSv1_0、TLSv1_1、TLSv1_2、TLSv1_3。

您可以在配置目录下创建证书目录,并将证书文件存储在该目录下。

收集文件数据

文件收集器用于从文件中提取日志。该文件应绑定到 Docker 容器。

如果您想从单个日志文件中手动上传日志,请使用此选项。这可用于回填特定日志文件的日志。

从 Docker 容器启动 Chronicle 转发器:

  docker run \
    --name cfps \
    --log-opt max-size=100m \
    --log-opt max-file=10 \
    --net=host \
    -v /opt/chronicle/config:/opt/chronicle/external \
    -v /var/log/crowdstrike/falconhostclient:/opt/chronicle/edr \
     gcr.io/chronicle-container/cf_production_stable

这一 docker run 命令对于将负载卷映射到容器至关重要。

根据此示例,您应按如下方式修改 Chronicle 转发器配置(FORWARDER_NAME.conf 文件)。sample.txt 文件应位于 /var/log/crowdstrike/falconhostclient 文件夹中。

 collectors:
  - file:
       common:
         enabled: true
         data_type: CS_EDR
         data_hint:
         batch_n_seconds: 10
         batch_n_bytes: 1048576
       file_path: /opt/chronicle/edr/sample.txt
       filter:

标志配置

skip_seek_to_end (bool):此标志默认设置为 false,文件输入仅发送新的日志行作为输入。将此项设为 true 会导致在转发器重启期间再次发送之前的所有日志行。这会导致日志重复。将此标志设置为 true 在特定情况下(例如服务中断期间)会很有帮助,因为重启转发器会再次发送缺失的日志行。

poll (bool):文件收集器使用 Tail 库检查文件系统是否有任何更改。通过将此标志设置为 true,Tail 库会使用轮询方法而不是默认的通知方法。

收集数据包数据

Chronicle 转发器可以在 Linux 上使用 libcap 直接从网络接口捕获数据包。如需详细了解 libcap,请参阅 libcap - Linux 手册页

捕获数据包并将其发送给 Chronicle(而不是日志条目)。只能从本地接口处理数据包捕获。如需为您的系统启用数据包捕获功能,请与 Chronicle 支持团队联系。

Google Cloud 为 Chronicle 转发器配置捕获数据包时使用的伯克利数据包过滤器 (BPF) 表达式(例如,端口 53,而不是 localhost)。如需了解详情,请参阅 Berkeley 数据包过滤器

从 Kafka 主题收集数据

您可以从 Kafka 主题提取数据,就像从 Syslog 注入数据一样。利用使用方群组,您可以部署最多 3 个转发器,并从同一 Kafka 主题拉取数据。如需了解详情,请参阅 Kafka

如需详细了解 Kafka 使用方群组,请参阅以下内容:https://docs.confluent.io/platform/current/clients/consumer.html

配置示例:Kafka 输入

以下转发器配置展示了如何设置转发器以从 Kafka 主题中注入数据。

FORWARDER_NAME.conf 文件

collectors:
- kafka:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: NIX_SYSTEM
        enabled: true
      topic: example-topic
      group_id: chronicle-forwarder
      timeout: 60s
      brokers: ["broker-1:9092", "broker-2:9093"]
      tls:
        insecureSkipVerify: true
        certificate: "/path/to/cert.pem"
        certificate_key: "/path/to/cert.key"
- syslog:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: WINEVTLOG
        enabled: true
      tcp_address: 0.0.0.0:30001
      connection_timeout_sec: 60

FORWARDER_NAME_auth.conf 文件

collectors:
- kafka:
      username: user
      password: password
- syslog:

收集 WebProxy 数据

Chronicle 转发器可以使用 Linux 上的 libcap 直接从网络接口捕获 WebProxy 数据。如需详细了解 libcap,请参阅 libcap - Linux 手册页。如需为您的系统启用 WebProxy 数据捕获功能,请与 Chronicle 支持团队联系。

按如下方式修改 Chronicle 转发器配置(FORWARDER_NAME.conf 文件):

- webproxy:
      common:
        enabled : true
        data_type: <Your LogType>
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      interface: any
      bpf: tcp and dst port 80

自定义配置

下表列出了转发器配置文件中使用的重要参数。

参数 说明
data_type 收集器可以收集和处理的日志数据类型。
元数据 元数据,用于替换全局元数据。
max_file_buffer_bytes 磁盘或文件缓冲区中可以累积的字节数上限。默认值为 1073741824,即 1 GB。
max_memory_buffer_bytes 内存缓冲区中可以累计的字节数上限。默认值为 1073741824,即 1 GB。
write_to_disk_dir_path 用于文件或磁盘缓冲区的路径。
write_to_disk_buffer_enabled 如果为 true,则使用磁盘缓冲区而不是内存缓冲区。默认值为 false
batch_n_bytes 收集器可以累积的最大字节数,超过此限制后,系统会批量处理数据。默认值为 1048576,即 1 MB。
batch_n_seconds 对收集器收集的数据进行批处理的秒数。默认值是 11 秒。
data_hint 收集器可以接收的数据格式(通常是描述该格式的日志文件标头)。

如需查看配置文件中使用的参数的完整列表,请参阅转发器配置字段收集器配置字段

切换数据压缩

日志压缩可以降低将日志传输到 Chronicle 时的网络带宽消耗。但是,这种压缩操作可能会导致 CPU 使用率增加。CPU 使用率和带宽之间的权衡取决于许多因素,包括日志数据的类型、数据的可压缩性、运行转发器的主机上 CPU 周期的可用性以及减少网络带宽消耗的需要。

例如,基于文本的日志可以很好地压缩,可以在降低 CPU 使用率的情况下显著节省带宽。但是,原始数据包的加密载荷不能很好地压缩,并且会产生更高的 CPU 使用率。

默认情况下,日志压缩处于停用状态。启用日志压缩可能会减少带宽消耗。但是,启用日志压缩也可能会增加 CPU 使用率。注意利弊。

如需启用日志压缩,请在 Chronicle 转发器配置文件中将 compression 字段设置为 true,如以下示例所示:

FORWARDER_NAME.conf 文件

output:
  compression: true
    url: malachiteingestion-pa.googleapis.com:443
    identity:
      identity:
      collector_id: 10479925-878c-11e7-9421-10604b7cb5c1
      customer_id: ebdc4bb9-878b-11e7-8455-10604b7cb5c1
...

FORWARDER_NAME_auth.conf 文件

output:
  identity:
    secret_key: |
    {
     "type": "service_account",
...
    }

配置磁盘缓冲

磁盘缓冲允许您将积压的消息缓冲到磁盘,而不是内存。可存储积压的消息,以防转发器崩溃或底层主机崩溃。请注意,启用磁盘缓冲可能会影响性能。

如果停用磁盘缓冲,转发器将针对每种日志类型(例如,每个连接器)使用 1 GB 的内存 (RAM)。指定 max_memory_buffer_bytes 配置参数。允许的最大内存为 4 GB。

您可以将自动内存缓冲配置为在收集器之间使用动态共享的缓冲区,以便更好地处理流量高峰。如需启用动态共享缓冲区,请在转发器配置中添加以下内容:

auto_buffer:
  enabled: true
  target_memory_utilization: 80

如果已启用自动磁盘缓冲但未定义 target_memory_utilization,则它会使用默认值 70

如果您使用 Docker 运行转发器,Google 建议安装一个独立于配置卷的卷,以实现隔离。此外,每个输入都应与其自己的目录或卷隔离,以避免冲突。

配置示例:磁盘缓冲

以下配置包括用于启用磁盘缓冲的语法:

collectors:
- syslog:
    common:
      write_to_disk_buffer_enabled: true
      # /buffers/NIX_SYSTEM is part of the external mounted volume for the
forwarder
      write_to_disk_dir_path: /buffers/NIX_SYSTEM
      max_file_buffer_bytes: 1073741824
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

设置正则表达式过滤条件

借助正则表达式过滤条件,您可以根据正则表达式与原始日志匹配来过滤日志。

过滤条件采用此处所述的 RE2 语法:https://github.com/google/re2/wiki/Syntax

过滤条件必须包含正则表达式,并视需要定义匹配时的行为。匹配项的默认行为是块(您也可以明确将其配置为块)。

或者,您也可以使用 allow 行为指定过滤条件。如果您指定任何 allow 过滤条件,转发器会屏蔽与至少一个 allow 过滤条件不匹配的任何日志。

您可以定义任意数量的过滤条件。屏蔽过滤条件优先于 allow 过滤条件。

定义过滤器时,必须为其指定名称。活跃过滤器的名称将通过转发器运行状况指标报告给 Chronicle。在配置的根目录中定义的过滤器会与在收集器级别定义的过滤器合并。如果名称存在冲突,应优先执行收集器级别的过滤条件。如果未在根级或收集器级定义过滤器,则行为是允许全部。

配置示例:正则表达式过滤条件

在以下转发器配置中,与根过滤条件 (allow_filter) 不匹配的 WINEVTLOG 日志将被屏蔽。根据该正则表达式,过滤条件仅允许优先级介于 0 到 99 之间的日志。不过,尽管存在 allow_filter,但包含“foo”或“bar”的所有 NIX_SYSTEM 日志都会被屏蔽。这是因为过滤条件使用逻辑 OR。所有日志都会得到处理,直到过滤条件被触发。

regex_filters:
  allow_filter:
    regexp: ^<[1-9][0-9]?$>.*$
    behavior_on_match: allow
collectors:
- syslog:
    common:
      regex_filters:
        block_filter_1:
          regexp: ^.*foo.*$
          behavior_on_match: block
        block_filter_2:
          regexp: ^.*bar.*$
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

配置任意标签

标签用于使用键值对将任意元数据附加到日志。您可以为整个转发器或转发器的特定收集器内配置标签。如果同时提供两者,则标签与收集器的键合并后,如果键重叠,则优先于转发器的键。

配置示例:任意标签

在以下转发器配置中,“foo=bar”和“meow=mix”键值对附加到 WINEVTLOG 日志,“foo=baz”和“meow=mix”键值对附加到 NIX_SYSTEM 日志。

metadata:
  labels:
    foo: bar
    meow: mix
collectors:
syslog:
    common:
      metadata:
        labels:
          foo: baz
          meow: mix
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

配置命名空间

使用命名空间标签来标识来自不同网络段的日志,并解决重叠的 IP 地址冲突。您可以为整个转发器或在该转发器的特定收集器内配置命名空间标签。如果同时包含两者,则特定收集器的命名空间优先。

为转发器配置的任何命名空间都会与关联的资源一起显示在 Chronicle 界面中。您还可以使用 Chronicle 搜索功能搜索命名空间。

如需了解如何在 Chronicle 界面中查看命名空间,请参阅此处

配置示例:命名空间

在以下转发器配置中,WINEVTLOG 日志会附加到 FORWARDER 命名空间,而 NIX_SYSTEM 日志会附加到 CORPORATE 命名空间。

metadata:
  namespace: FORWARDER
collectors:
- syslog:
      common:
        metadata:
          namespace: CORPORATE
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: NIX_SYSTEM
        enabled: true
      tcp_address: 0.0.0.0:30000
      connection_timeout_sec: 60
- syslog:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: WINEVTLOG
        enabled: true
      tcp_address: 0.0.0.0:30001
      connection_timeout_sec: 60

配置负载均衡和高可用性选项

适用于 Linux 的 Chronicle 转发器可以部署在数据源和转发器实例之间安装了第 4 层负载均衡器的环境中。这样,客户可以将日志集合分发到多个转发器,或者在一个转发器失败时将日志发送到其他转发器。只有 Syslog 集合类型支持此功能。

Linux 转发器包含一个内置 HTTP 服务器,该服务器会响应来自负载均衡器的 HTTP 健康检查。HTTP 服务器还有助于确保在启动或关闭转发器期间不会丢失日志。

在转发器配置文件的 server 部分下配置 HTTP 服务器、负载均衡和高可用性选项。这些选项支持设置超时持续时间和所返回的状态代码,此类状态代码用于响应在容器调度器和基于编排的部署中收到的健康检查,以及从传统负载均衡器返回的健康检查。

使用以下网址路径进行健康状况、就绪性和活跃性检查。<host:port> 值在转发器配置中定义。

  • http://<host:port>/meta/available: 针对容器调度器或编排器的活跃性检查。
  • http://<host:port>/meta/ready: 就绪性检查和传统负载平衡器健康检查。

以下转发器配置是用于负载均衡和高可用性的配置示例:

collectors:
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60
server:
  graceful_timeout: 15s
  drain_timeout: 10s
  http:
    port: 8080
    host: 0.0.0.0
    read_timeout: 3s
    read_header_timeout: 3s
    write_timeout: 3s
    idle_timeout: 3s
    routes:
    - meta:
        available_status: 204
        ready_status: 204
        unready_status: 503
配置路径 说明
server : graceful_timeout 转发器返回就绪性/健康检查错误但仍接受新连接的时长。这也是在收到停止信号和实际开始关闭服务器之间等待的时间。这可让负载均衡器有时间从池中移除转发器。
server : drain_timeout 转发器在由服务器关闭之前,等待活跃连接自行成功关闭的时间。
server : http : port HTTP 服务器用于监听负载均衡器的健康检查的端口号。必须介于 1024-65535 之间。
server : http : host 服务器应监听的 IP 地址或可解析为 IP 地址的主机名。如果为空,则默认值为本地系统 (0.0.0.0)。
server : http : read_timeout 用于微调 HTTP 服务器。通常保留默认设置即可,无需更改。读取整个请求(包括标头和正文)的最长时间。您可以同时设置 read_timeout 和 read_header_timeout。
server : http : read_header_timeout 用于微调 HTTP 服务器。通常保留默认设置即可,无需更改。允许读取请求标头的最长时间。读取标头后,连接的读取截止时间会重置。
server : http : write_timeout 用于微调 HTTP 服务器。通常保留默认设置即可,无需更改。允许发送响应的最长时间。 读取新请求标头时,此值会重置。
server : http : idle_timeout 用于微调 HTTP 服务器。通常保留默认设置即可,无需更改。启用空闲连接后,等待下一个请求的最长时间。如果 free_timeout 为零,则使用 read_timeout 的值。如果两者都为零,则使用 read_header_timeout。
routes : meta : ready_status 转发器在以下任一情况下准备好接受流量时返回的状态代码:
  • 系统从容器调度器或编排器接收就绪性检查。
  • 从传统负载均衡器接收健康检查。
routes : meta : unready_status 转发器在未准备好接受流量时返回的状态代码。
routes : meta : available_status 收到活跃性检查且转发器可用时,转发器返回的状态代码。容器调度器或编排器通常会发送活跃性检查。

常见问题解答

如何更新转发器?

Linux 转发器通过 Docker 映像中的 Shell 脚本不断更新。如需更新 Docker 映像,请运行转发器

什么是 Docker 容器?

  • Docker 容器类似于虚拟机,可提供额外的安全性、隔离和资源管理功能。

  • 虚拟机 - 同时具有特权空间(Linux 内核)和用户空间(您与之互动的所有空间:libc、python、ls、tcpdump 等)。

  • 容器 - 只有一个用户空间(您与之互动的所有内容:libc、python、ls、tcpdump 等),并依赖主机的特权空间。

为什么要使用容器分发 Chronicle 转发器?

  • 通过隔离提供更好的安全性:
    • 客户环境和要求不会影响 Chronicle 转发器。
    • Chronicle 转发器环境和要求不会影响客户。
    • 容器分发机制已存在,并且对于 Google Cloud 和客户而言是私有的和独立的。https://cloud.google.com/container-registry/

为什么将 Linux 用于容器?那么 Windows 呢?

  • 容器是先针对 Linux 开发的,可以在生产环境中投入使用。

  • Windows 正在开发对容器的支持。容器适用于 Windows Server 2016 和 Windows 10。

您是否需要学习高级 Docker 命令?

  • Chronicle 转发器使用单个容器,因此无需了解 Swarm、编排或其他高级 Docker 概念或命令。