apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
# ...
spec:
# ...
collection:
type: <log_collector_type> (1)
resources: {}
tolerations: {}
# ...
Red Hat OpenShift 的日志记录功能会从集群收集操作和应用程序日志,并使用 Kubernetes Pod 和项目元数据丰富数据。所有支持的对日志收集器的修改都可以通过ClusterLogging
自定义资源 (CR) 中的spec.collection
部分来执行。
您可以通过修改ClusterLogging
自定义资源 (CR) 来配置日志使用的日志收集器类型。
Fluentd 已弃用,计划在未来的版本中移除。Red Hat 在当前的发布生命周期中为该功能提供错误修复和支持,但此功能不再接收增强功能。作为 Fluentd 的替代方案,您可以使用 Vector。 |
您拥有管理员权限。
您已安装 OpenShift CLI (oc
)。
您已安装 Red Hat OpenShift Logging Operator。
您已创建ClusterLogging
CR。
修改ClusterLogging
CR 的collection
规范
ClusterLogging
CR 示例apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
# ...
spec:
# ...
collection:
type: <log_collector_type> (1)
resources: {}
tolerations: {}
# ...
1 | 您要用于日志记录的日志收集器类型。可以是vector 或fluentd 。 |
通过运行以下命令应用ClusterLogging
CR
$ oc apply -f <filename>.yaml
在日志版本 5.8 和更高版本中,LogFileMetricExporter 默认不再与收集器一起部署。您必须手动创建一个LogFileMetricExporter
自定义资源 (CR) 以从运行容器生成的日志生成指标。
如果您不创建LogFileMetricExporter
CR,您可能会在 AWS 网络控制台的 Red Hat OpenShift Service 仪表板中看到未找到数据点消息(针对已生成的日志)。
您拥有管理员权限。
您已安装 Red Hat OpenShift Logging Operator。
您已安装 OpenShift CLI (oc
)。
将LogFileMetricExporter
CR 创建为 YAML 文件
LogFileMetricExporter
CR 示例apiVersion: logging.openshift.io/v1alpha1
kind: LogFileMetricExporter
metadata:
name: instance
namespace: openshift-logging
spec:
nodeSelector: {} (1)
resources: (2)
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 200m
memory: 128Mi
tolerations: [] (3)
# ...
1 | 可选:nodeSelector 部分定义了 Pod 调度的节点。 |
2 | resources 部分定义了LogFileMetricExporter CR 的资源需求。 |
3 | 可选:tolerations 部分定义了 Pod 接受的容忍度。 |
通过运行以下命令应用LogFileMetricExporter
CR
$ oc apply -f <filename>.yaml
logfilesmetricexporter
Pod 会与每个节点上的collector
Pod 并发运行。
通过运行以下命令并在输出中观察,验证logfilesmetricexporter
Pod 是否在您已创建LogFileMetricExporter
CR 的命名空间中运行
$ oc get pods -l app.kubernetes.io/component=logfilesmetricexporter -n openshift-logging
NAME READY STATUS RESTARTS AGE
logfilesmetricexporter-9qbjj 1/1 Running 0 2m46s
logfilesmetricexporter-cbc4v 1/1 Running 0 2m46s
日志收集器允许调整 CPU 和内存限制。
编辑openshift-logging
项目中的ClusterLogging
自定义资源 (CR)
$ oc -n openshift-logging edit ClusterLogging instance
apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
name: instance
namespace: openshift-logging
spec:
collection:
type: fluentd
resources:
limits: (1)
memory: 736Mi
requests:
cpu: 100m
memory: 736Mi
# ...
1 | 根据需要指定 CPU 和内存限制和请求。显示的值是默认值。 |
Red Hat OpenShift Logging Operator 为每个配置的输入接收器部署一项服务,以便客户端可以写入收集器。此服务公开为输入接收器指定的端口。服务名称基于以下内容生成
对于多日志转发器ClusterLogForwarder
CR 部署,服务名称格式为<ClusterLogForwarder_CR_name>-<input_name>
。例如,example-http-receiver
。
对于旧版ClusterLogForwarder
CR 部署(即命名为instance
并位于openshift-logging
命名空间中的那些部署),服务名称格式为collector-<input_name>
。例如,collector-http-receiver
。
您可以通过在ClusterLogForwarder
自定义资源 (CR) 中将http
指定为接收器输入,来配置日志收集器以侦听 HTTP 连接并接收审计日志作为 HTTP 服务器。这使您可以为从 AWS 集群内部和外部收集的审计日志使用通用的日志存储。
您拥有管理员权限。
您已安装 OpenShift CLI (oc
)。
您已安装 Red Hat OpenShift Logging Operator。
您已创建ClusterLogForwarder
CR。
修改ClusterLogForwarder
CR 以添加http
接收器输入的配置
ClusterLogForwarder
CR 示例apiVersion: logging.openshift.io/v1beta1
kind: ClusterLogForwarder
metadata:
# ...
spec:
serviceAccountName: <service_account_name>
inputs:
- name: http-receiver (1)
receiver:
type: http (2)
http:
format: kubeAPIAudit (3)
port: 8443 (4)
pipelines: (5)
- name: http-pipeline
inputRefs:
- http-receiver
# ...
1 | 指定输入接收器的名称。 |
2 | 将输入接收器类型指定为http 。 |
3 | 目前,仅支持http 输入接收器的kube-apiserver Webhook 格式。 |
4 | 可选:指定输入接收器侦听的端口。这必须是1024 和65535 之间的值。如果未指定,则默认值为8443 。 |
5 | 为您的输入接收器配置管道。 |
ClusterLogForwarder
CR 示例apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
name: instance
namespace: openshift-logging
spec:
inputs:
- name: http-receiver (1)
receiver:
type: http (2)
http:
format: kubeAPIAudit (3)
port: 8443 (4)
pipelines: (5)
- inputRefs:
- http-receiver
name: http-pipeline
# ...
1 | 指定输入接收器的名称。 |
2 | 将输入接收器类型指定为http 。 |
3 | 目前,仅支持http 输入接收器的kube-apiserver Webhook 格式。 |
4 | 可选:指定输入接收器侦听的端口。这必须是1024 和65535 之间的值。如果未指定,则默认值为8443 。 |
5 | 为您的输入接收器配置管道。 |
通过运行以下命令应用对ClusterLogForwarder
CR 的更改
$ oc apply -f <filename>.yaml
Fluentd 已弃用,计划在未来的版本中移除。Red Hat 在当前的发布生命周期中为该功能提供错误修复和支持,但此功能不再接收增强功能。作为 Fluentd 的替代方案,您可以使用 Vector。 |
日志记录包含多个 Fluentd 参数,您可以使用这些参数来调整 Fluentd 日志转发器的性能。使用这些参数,您可以更改以下 Fluentd 行为
块和块缓冲区大小
块刷新行为
块转发重试行为
Fluentd 将日志数据收集到称为“块”的单个 blob 中。当 Fluentd 创建一个块时,该块被认为处于“阶段”,其中块被填充数据。当块已满时,Fluentd 将块移动到“队列”,在该队列中,块在刷新(或写入其目标)之前被保存。Fluentd 可能会由于多种原因而无法刷新块,例如网络问题或目标处的容量问题。如果无法刷新块,Fluentd 会根据配置重试刷新。
在 Red Hat OpenShift Service on AWS 中,Fluentd 默认使用指数退避方法来重试刷新,其中 Fluentd 会将等待时间加倍,以减少对目标的连接请求。
这些参数可以帮助您确定延迟和吞吐量之间的权衡。
为了优化 Fluentd 的吞吐量,您可以使用这些参数通过配置更大的缓冲区和队列、延迟刷新以及设置更长的重试时间间隔来减少网络数据包数量。请注意,较大的缓冲区需要节点文件系统上更多的空间。
为了优化低延迟,您可以使用这些参数尽快发送数据,避免批处理的累积,拥有更短的队列和缓冲区,并使用更频繁的刷新和重试。
您可以使用ClusterLogging
自定义资源 (CR) 中的以下参数来配置块和刷新行为。然后,这些参数会自动添加到 Fluentd 配置映射中,供 Fluentd 使用。
这些参数是:
|
参数 | 描述 | 默认值 |
---|---|---|
|
每个数据块的最大大小。当Fluentd写入的数据达到此大小限制时,它会停止写入,将数据块发送到队列,然后打开一个新的数据块。 |
|
|
缓冲区的最大大小,即阶段和队列的总大小。如果缓冲区大小超过此值,Fluentd将停止向数据块添加数据,并报错。所有不在数据块中的数据将会丢失。 |
大约节点磁盘空间的15%,分布在所有输出端。 |
|
数据块刷新间隔。可以使用 |
|
|
执行刷新的方法
|
|
|
执行数据块刷新的线程数。增加线程数可以提高刷新吞吐量,从而隐藏网络延迟。 |
|
|
队列已满时的分块行为
|
|
|
|
|
|
刷新失败时的重试方法
|
|
|
在丢弃记录之前尝试重试的最大时间间隔。 |
|
|
下一次数据块刷新之前的时间(秒)。 |
|
有关Fluentd数据块生命周期的更多信息,请参阅Fluentd文档中的缓冲区插件。
编辑openshift-logging
项目中的ClusterLogging
自定义资源 (CR)
$ oc edit ClusterLogging instance
添加或修改以下任何参数
apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
name: instance
namespace: openshift-logging
spec:
collection:
fluentd:
buffer:
chunkLimitSize: 8m (1)
flushInterval: 5s (2)
flushMode: interval (3)
flushThreadCount: 3 (4)
overflowAction: throw_exception (5)
retryMaxInterval: "300s" (6)
retryType: periodic (7)
retryWait: 1s (8)
totalLimitSize: 32m (9)
# ...
1 | 指定每个数据块在排队刷新之前的最大大小。 |
2 | 指定数据块刷新间隔。 |
3 | 指定执行数据块刷新的方法:lazy 、interval 或immediate 。 |
4 | 指定用于数据块刷新的线程数。 |
5 | 指定队列已满时的分块行为:throw_exception 、block 或drop_oldest_chunk 。 |
6 | 指定exponential_backoff 数据块刷新方法的最大时间间隔(秒)。 |
7 | 指定数据块刷新失败时的重试类型:exponential_backoff 或periodic 。 |
8 | 指定下一次数据块刷新之前的时间(秒)。 |
9 | 指定数据块缓冲区的最大大小。 |
验证Fluentd Pod是否已重新部署
$ oc get pods -l component=collector -n openshift-logging
检查新的值是否在fluentd
配置映射中
$ oc extract configmap/collector-config --confirm
<buffer>
@type file
path '/var/lib/fluentd/default'
flush_mode interval
flush_interval 5s
flush_thread_count 3
retry_type periodic
retry_wait 1s
retry_max_interval 300s
retry_timeout 60m
queued_chunks_limit_size "#{ENV['BUFFER_QUEUE_LIMIT'] || '32'}"
total_limit_size "#{ENV['TOTAL_LIMIT_SIZE_PER_BUFFER'] || '8589934592'}"
chunk_limit_size 8m
overflow_action throw_exception
disable_chunk_backup true
</buffer>