Skip to main content

Outputs 和 ClusterOutputs

概述#

关于配置OutputsClusterOutputs的全部细节,请参阅Banzai Cloud 官方文档

v2.5.8 的变化#

现在可以通过在 Rancher 用户界面上填写表格来配置OutputsClusterOutputs

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

我们已经创建了这个ClusterOutput,没有 elasticsearch 配置,和我们的操作者在同一个命名空间:cattle-logging-system。任何时候我们创建一个ClusterFlowClusterOutput,我们都必须把它放在cattle-logging-system命名空间中。

现在我们已经配置了我们想要的日志的位置,让我们配置所有的日志到那个ClusterOutput

apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
name: "all-logs"
namespace: "cattle-logging-system"
spec:
globalOutputRefs:
- "example-es"

现在我们应该看到我们配置的索引,里面有日志。

Splunk#

如果我们有一个应用团队只想把特定命名空间的日志发送到splunk服务器上,该怎么办?对于这种情况,我们可以使用命名空间的OutputsFlows

在我们开始之前,让我们设置该团队的应用程序: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时类似的路径。然而,与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

再一次,让我们给我们的output提供一些日志。

apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
name: "devteam-logs"
namespace: "devteam"
spec:
localOutputRefs:
- "devteam-splunk"

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,将日志写到一个不支持的目的地。

关于 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

让我们来分析一下这里发生了什么。首先,我们创建一个容器的部署,它有额外的syslog插件,接受从另一个fluentd转发的日志。接下来我们创建一个Output,配置为我们部署的转发器。部署的fluentd将转发所有的日志到配置的syslog目的地。

Last updated on by kingsd041