适用于 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 转发器,请执行以下操作:
创建软件提供的配置文件模板的副本。
通过界面下载配置文件。
使用以下命名惯例将两个文件保存在同一目录中:
FORWARDER_NAME
.conf - 使用此文件定义与日志提取相关的配置设置。FORWARDER_NAME
_auth.conf - 此文件用于定义授权凭据。修改这些文件,以包含转发器实例的配置。使用本文档中提供的示例作为参考。
确保
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
如果您使用的是单个配置文件,并且想要移至两个文件系统,请执行以下操作:
- 创建现有配置的副本。
- 将一个文件另存为
FORWARDER_NAME
.conf 文件,并从该文件中删除授权凭据。 - 将另一个文件另存为
FORWARDER_NAME
_auth.conf 文件,并删除该文件中的所有非授权数据。使用本指南中提供的示例配置文件作为参考。 - 请务必遵循自定义配置文件部分中提到的命名惯例和其他准则。
安装 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
目录。
通过终端连接到 Linux 转发器的主机。
在 Linux 转发器的主机上创建一个新用户。
adduser
USERNAME
passwdUSERNAME
usermod -aG wheelUSERNAME
将目录更改为运行 Docker 容器的新用户的主目录。
创建一个用于存储 Chronicle 转发器配置文件的目录:
mkdir /opt/chronicle/config
更改目录。
cd /opt/chronicle/config
文件传输完毕后,请确保配置文件位于 /opt/chronicle/config 目录中:
ls -l
第 2 步:在 Docker 容器中运行转发器
您可以按照以下步骤首次启动 Chronicle 转发器,以及升级到最新版本的 Chronicle 容器:
--log-opt
选项自 Docker 1.13 起可用。这些选项可限制容器日志文件的大小。只要您的 Docker 版本支持这些选项,就必须使用这些选项。
如果要升级,请清理之前的所有 Docker 运行。在以下示例中,Docker 容器的名称为
cfps
。您可以使用docker pull
命令从 Google Cloud 获取最新的 Docker 映像,如下所示。docker stop cfps
docker rm cfps
从 Google Cloud 获取最新的 Docker 映像:
docker pull gcr.io/chronicle-container/cf_production_stable
从 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 转发器。
将机器配置为使用代理。
将以下代码行添加到
/etc/resolv.conf
文件中:nameserver = 10.0.0.1 nameserver = 10.0.0.2
设置以下环境变量:
$HTTP_PROXY = http://proxy.example.com:80 $HTTPS_PROXY = https://proxy.example.com:80
将 Docker 配置为使用代理。
为 Docker 服务创建 systemd 直接目录。
mkdir /etc/systemd/system/docker.service.d
创建一个添加
HTTP_PROXY
和HTTPS_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/"
刷新更改。
$ sudo systemctl daemon-reload
验证配置是否已加载。
$ sudo systemctl show --property Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/ Environment=HTTPS_PROXY=https://proxy.example.com:80/
重启 Docker。
$ sudo systemctl restart docker
从 Google Cloud 获取最新的 Chronicle 转发器 Docker 映像。
docker pull gcr.io/chronicle-container/cf_production_stable
通过添加代理环境变量来运行 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
文件,请执行以下操作:
为您的 Splunk 凭据创建一个本地文件,并将其命名为
creds.txt
。将用户名放在第一行,将密码放在第二行:
cat creds.txt myusername mypassword
如需使用 Chronicle 转发器访问 Splunk 实例,请将
creds.txt
文件复制到配置目录(配置文件所在的目录)。例如:cp creds.txt /opt/chronicle/config/creds.txt
验证
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 概念或命令。