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/v1beta1
kind: ClusterOutput
metadata:
name: "example-es"
namespace: "cattle-logging-system"
spec:
elasticsearch:
host: elasticsearch.example.com
port: 9200
scheme: http
Copy
我们已经创建了这个ClusterOutput
,没有 elasticsearch 配置,和我们的操作者在同一个命名空间:cattle-logging-system
。任何时候我们创建一个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"
Copy
现在我们应该看到我们配置的索引,里面有日志。
Splunk
如果我们有一个应用团队只想把特定命名空间的日志发送到splunk
服务器上,该怎么办?对于这种情况,我们可以使用命名空间的Outputs
和Flows
。
在我们开始之前,让我们设置该团队的应用程序: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
Copy
随着coolapp
的运行,我们将遵循与创建ClusterOutput
时类似的路径。然而,与ClusterOutputs
不同的是,我们在应用程序的命名空间中创建我们的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
Copy
再一次,让我们给我们的output
提供一些日志。
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
name: "devteam-logs"
namespace: "devteam"
spec:
localOutputRefs:
- "devteam-splunk"
Copy
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
Copy
现在我们已经配置好日志的去向,让我们把所有的日志都配置到output
。
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
name: "all-logs"
namespace: cattle-logging-system
spec:
globalOutputRefs:
- "example-syslog"
Copy
其他不支持的输出类型
在最后一个例子中,我们创建了一个output
,将日志写到一个不支持的目的地。
关于 syslog 的说明从 Rancher v2.5.4 开始,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
Copy
让我们来分析一下这里发生了什么。首先,我们创建一个容器的部署,它有额外的syslog
插件,接受从另一个fluentd
转发的日志。接下来我们创建一个Output
,配置为我们部署的转发器。部署的fluentd
将转发所有的日志到配置的syslog
目的地。