Outputs 和 ClusterOutputs
有关如何配置 Flow
和 ClusterFlow
的完整详细信息,请参阅 Logging Operator 文档。
有关如何解决 Logging 缓冲区的内存问题,请参阅 Rancher 与 Logging 服务的集成:故障排除。
Outputs
Output
资源定义了你的 Flow
可以发送日志消息的位置。Output
是 Logging Flow
的最后阶段。
Output
是命名空间资源,换言之,只有同一命名空间内的 Flow
可以访问它。
你可以在这些定义中使用密文,但这些密文也必须位于同一命名空间中。
你可以通过在 Rancher UI 中填写表单来配置 Output
。
有关 Output
自定义资源的更多详细信息,请参阅 OutputSpec。
Rancher UI 提供了用于配置以下类型 Output
的表单:
- Amazon ElasticSearch
- Azure Storage
- Cloudwatch
- Datadog
- Elasticsearch
- File
- Fluentd
- GCS
- Kafka
- Kinesis Stream
- LogDNA
- LogZ
- Loki
- New Relic
- Splunk
- SumoLogic
- Syslog
Rancher UI 提供了用于配置 Output
类型、目标和访问凭证(如果适用)的表单。
有关 Logging Operator 支持的日志插件配置示例,请参阅 Logging Operator 文档。
ClusterOutputs
ClusterOutput
定义了一个没有命名空间限制的 Output
。只有在与 Logging Operator 部署在同一命名空间中时,它才能生效。
你可以通过在 Rancher UI 中填写表单来配置 ClusterOutput
。
有关 ClusterOutput
自定义资源的更多详细信息,请参阅 ClusterOutput。
YAML 示例
安装 Logging 后,你可以参考以下示例来构建你自己的 Logging 流水线:
ClusterOutput 设为 ElasticSearch
假设你想将集群中的所有日志发送到 elasticsearch
集群。首先,创建一个集群 Output
:
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
name: "example-es"
namespace: "cattle-logging-system"
spec:
elasticsearch:
host: elasticsearch.example.com
port: 9200
scheme: http
在与 Operator 相同的命名空间(cattle-logging-system
)中,我们创建了这个 ClusterOutput
(没有 elasticsearch 配置)。每次创建 ClusterFlow
或 ClusterOutput
时,我们都必须将其放在 cattle-logging-system
命名空间中。
配置日志的目的位置后,我们可以尝试将所有日志都配置到该 ClusterOutput
:
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
name: "all-logs"
namespace: "cattle-logging-system"
spec:
globalOutputRefs:
- "example-es"
现在,我们应该能看到配置的包含日志的索引。
Output 设为 Splunk
有时候,你的应用程序团队可能只想将某个命名空间的日志发送到 splunk
服务器。对于这种情况,你可以使用命名空间范围的 Output
和 Flow
。
在开始之前,先设置该团队的应用程序 coolapp
。
apiVersion: v1
kind: Namespace
metadata:
name: devteam
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: coolapp
namespace: devteam
labels:
app: coolapp
spec:
replicas: 2
selector:
matchLabels:
app: coolapp
template:
metadata:
labels:
app: coolapp
spec:
containers:
- name: generator
image: paynejacob/loggenerator:latest
coolapp
运行时,我们将使用与创建 ClusterOutput
时类似的路径。但是,我们不使用 ClusterOutput
,而是在应用程序的命名空间中创建 Output
。
apiVersion: logging.banzaicloud.io/v1beta1
kind: Output
metadata:
name: "devteam-splunk"
namespace: "devteam"
spec:
splunkHec:
hec_host: splunk.example.com
hec_port: 8088
protocol: http
然后,再次为 Output
提供一些日志:
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
name: "devteam-logs"
namespace: "devteam"
spec:
localOutputRefs:
- "devteam-splunk"
Output 设为 Syslog
假设你想将集群中的所有日志发送到 syslog
服务器。首先,我们创建一个 ClusterOutput
:
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
name: "example-syslog"
namespace: "cattle-logging-system"
spec:
syslog:
buffer:
timekey: 30s
timekey_use_utc: true
timekey_wait: 10s
flush_interval: 5s
format:
type: json
app_name_field: test
host: syslog.example.com
insecure: true
port: 514
transport: tcp
配置日志的目的位置后,我们可以尝试将所有日志都配置到该 Output
:
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
name: "all-logs"
namespace: cattle-logging-system
spec:
globalOutputRefs:
- "example-syslog"
不支持的 Output
对于最后一个示例,我们创建一个 Output
来将日志写入到不是开箱即用的目标位置:
Syslog 注意事项:
Syslog
是受支持的 Output
。但是,此示例仍提供了不受支持的插件概述。
apiVersion: v1
kind: Secret
metadata:
name: syslog-config
namespace: cattle-logging-system
type: Opaque
stringData:
fluent-bit.conf: |
[INPUT]
Name forward
Port 24224
[OUTPUT]
Name syslog
InstanceName syslog-output
Match *
Addr syslog.example.com
Port 514
Cluster ranchers
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fluentbit-syslog-forwarder
namespace: cattle-logging-system
labels:
output: syslog
spec:
selector:
matchLabels:
output: syslog
template:
metadata:
labels:
output: syslog
spec:
containers:
- name: fluentbit
image: paynejacob/fluent-bit-out-syslog:latest
ports:
- containerPort: 24224
volumeMounts:
- mountPath: "/fluent-bit/etc/"
name: configuration
volumes:
- name: configuration
secret:
secretName: syslog-config
---
apiVersion: v1
kind: Service
metadata:
name: syslog-forwarder
namespace: cattle-logging-system
spec:
selector:
output: syslog
ports:
- protocol: TCP
port: 24224
targetPort: 24224
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
name: all-logs
namespace: cattle-logging-system
spec:
globalOutputRefs:
- syslog
---
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
name: syslog
namespace: cattle-logging-system
spec:
forward:
servers:
- host: "syslog-forwarder.cattle-logging-system"
require_ack_response: false
ignore_network_errors_at_startup: false
现在,我们分解这里的内容。首先,我们创建一个容器 Deployment,该容器具有额外的 syslog
插件并支持转发自另一个 fluentd
的日志。接下来,我们创建一个配置为 Deployment 转发器的 Output
。然后,Deployment fluentd
会将所有日志转发到配置的 syslog
目标。