Outputs 和 ClusterOutputs

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

    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 支持的每个日志插件的配置实例,请参见。

    ClusterOutputs

    ClusterOutput定义了一个没有命名空间限制的Output。它只有在部署在与日志操作者相同的命名空间时才有效。

    关于ClusterOutput自定义资源的细节,见

    Output资源定义了你的 “流程 “可以发送日志信息的地方。Outputs是一个日志流程的最后阶段。

    Output是一个命名空间的资源,这意味着只有同一命名空间内的Flow可以访问它。

    你可以在这些定义中使用密钥,但它们也必须在同一个命名空间中。

    关于 logging operator 支持的每个日志插件的配置例子,见logging operator 文档

    ClusterOutputs

    ClusterOutput定义了一个没有命名空间限制的Output。它只有在部署在与记录操作员相同的命名空间时才有效。

    Rancher 用户界面提供了配置ClusterOutput类型、目标和访问证书(如果适用)的表格。

    ClusterOutputs是用 YAML 配置的。关于ClusterOutput自定义资源的细节,见ClusterOutput 文档

    关于日志操作员支持的每个日志插件的配置实例,请参见

    安装了日志后,你可以使用这些例子来帮助制作你自己的日志 pipelines。

    假设你想把你的集群中的所有日志发送到elasticsearch集群。首先,我们创建一个集群Output

    Copy

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

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

    1. apiVersion: logging.banzaicloud.io/v1beta1
    2. kind: ClusterFlow
    3. metadata:
    4. name: "all-logs"
    5. namespace: "cattle-logging-system"
    6. spec:
    7. globalOutputRefs:
    8. - "example-es"

    Copy

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

    Splunk

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

    Copy

    随着coolapp的运行,我们将遵循与创建ClusterOutput时类似的路径。然而,与ClusterOutputs不同的是,我们在应用程序的命名空间中创建我们的Output

    1. apiVersion: logging.banzaicloud.io/v1beta1
    2. kind: Output
    3. metadata:
    4. name: "devteam-splunk"
    5. namespace: "devteam"
    6. spec:
    7. splunkHec:
    8. hec_host: splunk.example.com
    9. hec_port: 8088
    10. protocol: http

    Copy

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

    Copy

    假设你想把你的集群中的所有日志发送到一个syslog服务器。首先,我们创建一个ClusterOutput

    1. apiVersion: logging.banzaicloud.io/v1beta1
    2. kind: ClusterOutput
    3. metadata:
    4. name: "example-syslog"
    5. namespace: "cattle-logging-system"
    6. spec:
    7. syslog:
    8. buffer:
    9. timekey: 30s
    10. timekey_use_utc: true
    11. flush_interval: 5s
    12. format:
    13. type: json
    14. app_name_field: test
    15. host: syslog.example.com
    16. insecure: true
    17. port: 514
    18. transport: tcp

    Copy

    现在我们已经配置好日志的去向,让我们把所有的日志都配置到output

    Copy

    其他不支持的输出类型

    在最后一个例子中,我们创建了一个output,将日志写到一个不支持的目的地。

    关于 syslog 的说明从 Rancher v2.5.4 开始,syslog是一个被支持的output。然而,这个例子仍然提供了一个关于使用不支持的插件的概述。

    1. apiVersion: v1
    2. kind: Secret
    3. metadata:
    4. name: syslog-config
    5. namespace: cattle-logging-system
    6. type: Opaque
    7. stringData:
    8. fluent-bit.conf: |
    9. [INPUT]
    10. Name forward
    11. Port 24224
    12. [OUTPUT]
    13. Name syslog
    14. InstanceName syslog-output
    15. Match *
    16. Addr syslog.example.com
    17. Port 514
    18. Cluster ranchers
    19. ---
    20. apiVersion: apps/v1
    21. kind: Deployment
    22. metadata:
    23. name: fluentbit-syslog-forwarder
    24. namespace: cattle-logging-system
    25. labels:
    26. output: syslog
    27. spec:
    28. selector:
    29. matchLabels:
    30. output: syslog
    31. template:
    32. metadata:
    33. labels:
    34. output: syslog
    35. spec:
    36. - name: fluentbit
    37. image: paynejacob/fluent-bit-out-syslog:latest
    38. ports:
    39. - containerPort: 24224
    40. volumeMounts:
    41. - mountPath: "/fluent-bit/etc/"
    42. name: configuration
    43. volumes:
    44. - name: configuration
    45. secret:
    46. secretName: syslog-config
    47. ---
    48. apiVersion: v1
    49. kind: Service
    50. metadata:
    51. name: syslog-forwarder
    52. namespace: cattle-logging-system
    53. spec:
    54. selector:
    55. output: syslog
    56. ports:
    57. - protocol: TCP
    58. port: 24224
    59. targetPort: 24224
    60. ---
    61. apiVersion: logging.banzaicloud.io/v1beta1
    62. kind: ClusterFlow
    63. metadata:
    64. name: all-logs
    65. namespace: cattle-logging-system
    66. spec:
    67. globalOutputRefs:
    68. - syslog
    69. ---
    70. apiVersion: logging.banzaicloud.io/v1beta1
    71. kind: ClusterOutput
    72. metadata:
    73. name: syslog
    74. namespace: cattle-logging-system
    75. spec:
    76. forward:
    77. servers:
    78. - host: "syslog-forwarder.cattle-logging-system"
    79. require_ack_response: false
    80. ignore_network_errors_at_startup: false

    Copy

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