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 是受支援的 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 目的地。