title: Outputs 和 ClusterOutputs
description: 关于配置Outputs和ClusterOutputs的全部细节,请参阅Banzai Cloud 官方文档。
keywords:
- rancher
- rancher中文
- rancher中文文档
- rancher官网
- rancher文档
- Rancher
- rancher 中文
- rancher 中文文档
- rancher cn
- rancher 2.5
- 日志服务
- Rancher v2.5 的日志功能
- 配置自定义资源
- Outputs 和 ClusterOutputs
概述
关于配置Outputs和ClusterOutputs的全部细节,请参阅Banzai Cloud 官方文档。
v2.5.8 的变化
现在可以通过在 Rancher 用户界面上填写表格来配置Outputs和ClusterOutputs。
Outputs
Output资源定义了你的Flows可以发送日志信息的地方。Outputs是一个日志Flow的最后阶段。
Output是一个命名空间的资源,这意味着只有同一命名空间内的Flow可以访问它。
你可以在这些定义中使用秘密,但它们也必须在同一命名空间中。
关于Output自定义资源的细节,见OutputSpec.
Rancher 用户界面提供了配置以下Output类型的表格。
- Amazon ElasticSearch
- Azure Storage
- Cloudwatch
- Datadog
- Elasticsearch
- File
- Fluentd
- GCS
- Kafka
- Kinesis Stream
- LogDNA
- LogZ
- Loki
- New Relic
- Splunk
- SumoLogic
- Syslog
Rancher 用户界面提供了配置Output类型、目标和访问凭证(如果适用)的表格。
关于 logging operator 支持的每个日志插件的配置实例,请参见logging operator 文档。
ClusterOutputs
ClusterOutput定义了一个没有命名空间限制的Output。它只有在部署在与日志操作者相同的命名空间时才有效。
关于ClusterOutput自定义资源的细节,见ClusterOutput 文档
Rancher v2.5.8 之前
Outputs
Output资源定义了你的 “流程 “可以发送日志信息的地方。Outputs是一个日志流程的最后阶段。
Output是一个命名空间的资源,这意味着只有同一命名空间内的Flow可以访问它。
你可以在这些定义中使用密钥,但它们也必须在同一个命名空间中。
Outputs是用 YAML 配置的。关于Output自定义资源的细节,见OutputSpec.
关于 logging operator 支持的每个日志插件的配置例子,见logging operator 文档。
ClusterOutputs
ClusterOutput定义了一个没有命名空间限制的Output。它只有在部署在与记录操作员相同的命名空间时才有效。
Rancher 用户界面提供了配置ClusterOutput类型、目标和访问证书(如果适用)的表格。
ClusterOutputs是用 YAML 配置的。关于ClusterOutput自定义资源的细节,见ClusterOutput 文档。
关于日志操作员支持的每个日志插件的配置实例,请参见日志操作员文档。
YAML 示例
安装了日志后,你可以使用这些例子来帮助制作你自己的日志 pipelines。
ElasticSearch
假设你想把你的集群中的所有日志发送到elasticsearch集群。首先,我们创建一个集群Output:
apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterOutputmetadata:name: "example-es"namespace: "cattle-logging-system"spec:elasticsearch:host: elasticsearch.example.comport: 9200scheme: http
我们已经创建了这个ClusterOutput,没有 elasticsearch 配置,和我们的操作者在同一个命名空间:cattle-logging-system。任何时候我们创建一个ClusterFlow或ClusterOutput,我们都必须把它放在cattle-logging-system命名空间中。
现在我们已经配置了我们想要的日志的位置,让我们配置所有的日志到那个ClusterOutput。
apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterFlowmetadata:name: "all-logs"namespace: "cattle-logging-system"spec:globalOutputRefs:- "example-es"
现在我们应该看到我们配置的索引,里面有日志。
Splunk
如果我们有一个应用团队只想把特定命名空间的日志发送到splunk服务器上,该怎么办?对于这种情况,我们可以使用命名空间的Outputs和Flows。
在我们开始之前,让我们设置该团队的应用程序:coolapp。
apiVersion: v1kind: Namespacemetadata:name: devteam---apiVersion: apps/v1kind: Deploymentmetadata:name: coolappnamespace: devteamlabels:app: coolappspec:replicas: 2selector:matchLabels:app: coolapptemplate:metadata:labels:app: coolappspec:containers:- name: generatorimage: paynejacob/loggenerator:latest
随着coolapp的运行,我们将遵循与创建ClusterOutput时类似的路径。然而,与ClusterOutputs不同的是,我们在应用程序的命名空间中创建我们的Output。
apiVersion: logging.banzaicloud.io/v1beta1kind: Outputmetadata:name: "devteam-splunk"namespace: "devteam"spec:splunkHec:hec_host: splunk.example.comhec_port: 8088protocol: http
再一次,让我们给我们的output提供一些日志。
apiVersion: logging.banzaicloud.io/v1beta1kind: Flowmetadata:name: "devteam-logs"namespace: "devteam"spec:localOutputRefs:- "devteam-splunk"
Syslog
假设你想把你的集群中的所有日志发送到一个syslog服务器。首先,我们创建一个ClusterOutput:
apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterOutputmetadata:name: "example-syslog"namespace: "cattle-logging-system"spec:syslog:buffer:timekey: 30stimekey_use_utc: truetimekey_wait: 10sflush_interval: 5sformat:type: jsonapp_name_field: testhost: syslog.example.cominsecure: trueport: 514transport: tcp
现在我们已经配置好日志的去向,让我们把所有的日志都配置到output。
apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterFlowmetadata:name: "all-logs"namespace: cattle-logging-systemspec:globalOutputRefs:- "example-syslog"
其他不支持的输出类型
在最后一个例子中,我们创建了一个output,将日志写到一个不支持的目的地。
关于 syslog 的说明从 Rancher v2.5.4 开始,syslog是一个被支持的output。然而,这个例子仍然提供了一个关于使用不支持的插件的概述。
apiVersion: v1kind: Secretmetadata:name: syslog-confignamespace: cattle-logging-systemtype: OpaquestringData:fluent-bit.conf: |[INPUT]Name forwardPort 24224[OUTPUT]Name syslogInstanceName syslog-outputMatch *Addr syslog.example.comPort 514Cluster ranchers---apiVersion: apps/v1kind: Deploymentmetadata:name: fluentbit-syslog-forwardernamespace: cattle-logging-systemlabels:output: syslogspec:selector:matchLabels:output: syslogtemplate:metadata:labels:output: syslogspec:containers:- name: fluentbitimage: paynejacob/fluent-bit-out-syslog:latestports:- containerPort: 24224volumeMounts:- mountPath: "/fluent-bit/etc/"name: configurationvolumes:- name: configurationsecret:secretName: syslog-config---apiVersion: v1kind: Servicemetadata:name: syslog-forwardernamespace: cattle-logging-systemspec:selector:output: syslogports:- protocol: TCPport: 24224targetPort: 24224---apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterFlowmetadata:name: all-logsnamespace: cattle-logging-systemspec:globalOutputRefs:- syslog---apiVersion: logging.banzaicloud.io/v1beta1kind: ClusterOutputmetadata:name: syslognamespace: cattle-logging-systemspec:forward:servers:- host: "syslog-forwarder.cattle-logging-system"require_ack_response: falseignore_network_errors_at_startup: false
让我们来分析一下这里发生了什么。首先,我们创建一个容器的部署,它有额外的syslog插件,接受从另一个fluentd转发的日志。接下来我们创建一个Output,配置为我们部署的转发器。部署的fluentd将转发所有的日志到配置的syslog目的地。
