跳至主要内容

Outputs 和 ClusterOutputs

有關如何設定 Flows 和 ClusterFlows 的完整詳細資訊,請參閱 Logging operator 文件。

有關如何解決日誌緩衝區的記憶體問題,請參閱 Rancher 與日誌記錄服務的整合:疑難排解。

Outputs​

Output 資源定義了您的 Flows 可以將日誌訊息發送到哪裡。Outputs 是日誌記錄 Flow 的最終階段。

Output 是一個命名空間資源,這意味著只有同一命名空間內的 Flow 可以存取它。

您可以在這些定義中使用 secrets,但它們也必須位於同一命名空間中。

Outputs 可以透過在 Rancher UI 中填寫表單來設定。

有關 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 部署在同一命名空間時才有效。

ClusterOutputs 可以透過在 Rancher UI 中填寫表單來設定。

有關 ClusterOutput 自訂資源的詳細資訊,請參閱 ClusterOutput。

YAML 範例​

安裝日誌記錄後,您可以使用這些範例來協助建立自己的日誌管線。

Cluster Output 到 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 相同的命名空間中建立了這個 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"

我們現在應該會看到我們設定的索引中包含日誌。

Output 到 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

在 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"

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"

不支援的 Outputs​

對於最後一個範例,我們建立一個 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

讓我們分解一下這裡發生了什麼。首先,我們建立一個包含額外 syslog 外掛的容器部署,並接受從另一個 fluentd 轉發的日誌。接下來,我們建立一個設定為轉發到我們部署的 Output。部署的 fluentd 將會把所有日誌轉發到設定的 syslog 目的地。