添加 Fluentd 作为接收器

您可以在 KubeSphere 中使用 Elasticsearch、Kafka 和 Fluentd 日志接收器。本教程演示:

  • 创建 Fluentd 部署以及对应的服务和 ConfigMap。
  • 添加 Fluentd 作为日志接收器以接收来自 Fluent Bit 的日志,并输出为 stdout(标准输出)。
  • 验证 Fluentd 能否成功接收日志。

准备工作

  • 您需要一个被授予集群管理权限的帐户。例如,您可以直接用 admin 帐户登录控制台,或创建一个具有集群管理权限的角色然后将此角色授予一个帐户。

  • 添加日志接收器前,您需要启用组件 loggingeventsauditing。有关更多信息,请参见启用可插拔组件。本教程启用 logging 作为示例。

步骤 1:创建 Fluentd 部署

由于内存消耗低,KubeSphere 选择 Fluent Bit。Fluentd 一般在 Kubernetes 中以守护进程集的形式部署,在每个节点上收集容器日志。此外,Fluentd 支持多个插件。因此,Fluentd 会以部署的形式在 KubeSphere 中创建,将从 Fluent Bit 接收到的日志发送到多个目标,例如 S3、MongoDB、Cassandra、MySQL、syslog 和 Splunk 等。

执行以下命令:

备注

  • 以下命令将在默认命名空间 default 中创建 Fluentd 部署、服务和 ConfigMap,并为该 Fluentd ConfigMap 添加 filter 以排除 default 命名空间中的日志,避免 Fluent Bit 和 Fluentd 重复日志收集。
  • 如果您想要将 Fluentd 部署至其他命名空间,请修改以下命令中的命名空间名称。
  1. cat <<EOF | kubectl apply -f -
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: fluentd-config
  6. namespace: default
  7. data:
  8. fluent.conf: |-
  9. # Receive logs sent from Fluent Bit on port 24224
  10. <source>
  11. @type forward
  12. port 24224
  13. </source>
  14. # Because this will send logs Fluentd received to stdout,
  15. # to avoid Fluent Bit and Fluentd loop logs collection,
  16. # add a filter here to avoid sending logs from the default namespace to stdout again
  17. <filter **>
  18. @type grep
  19. <exclude>
  20. key $.kubernetes.namespace_name
  21. pattern /^default$/
  22. </exclude>
  23. </filter>
  24. # Send received logs to stdout for demo/test purpose only
  25. # Various output plugins are supported to output logs to S3, MongoDB, Cassandra, MySQL, syslog, Splunk, etc.
  26. <match **>
  27. @type stdout
  28. </match>
  29. ---
  30. apiVersion: apps/v1
  31. kind: Deployment
  32. metadata:
  33. labels:
  34. app: fluentd
  35. name: fluentd
  36. namespace: default
  37. spec:
  38. replicas: 1
  39. selector:
  40. matchLabels:
  41. app: fluentd
  42. template:
  43. metadata:
  44. labels:
  45. app: fluentd
  46. spec:
  47. containers:
  48. - image: fluentd:v1.9.1-1.0
  49. imagePullPolicy: IfNotPresent
  50. name: fluentd
  51. ports:
  52. - containerPort: 24224
  53. name: forward
  54. protocol: TCP
  55. - containerPort: 5140
  56. name: syslog
  57. protocol: TCP
  58. volumeMounts:
  59. - mountPath: /fluentd/etc
  60. name: config
  61. readOnly: true
  62. volumes:
  63. - configMap:
  64. defaultMode: 420
  65. name: fluentd-config
  66. name: config
  67. ---
  68. apiVersion: v1
  69. kind: Service
  70. metadata:
  71. labels:
  72. app: fluentd-svc
  73. name: fluentd-svc
  74. namespace: default
  75. spec:
  76. ports:
  77. - name: forward
  78. port: 24224
  79. protocol: TCP
  80. targetPort: forward
  81. selector:
  82. app: fluentd
  83. sessionAffinity: None
  84. type: ClusterIP
  85. EOF

步骤 2:添加 Fluentd 作为日志接收器

  1. admin 身份登录 KubeSphere 的 Web 控制台。点击左上角的平台管理,然后选择集群管理

  2. 如果您启用了多集群功能,您可以选择一个集群。如果尚未启用该功能,请直接进行下一步。

  3. 集群管理页面,选择集群设置下的日志收集

  4. 点击添加日志接收器并选择 Fluentd

    add-receiver

  5. 输入 Fluentd 服务地址和端口信息,如下所示:

    add-fluentd

  6. Fluentd 会显示在日志收集页面的接收器列表中,状态为收集中

    receiver-list

步骤 3:验证 Fluentd 能否从 Fluent Bit 接收日志

  1. 集群管理页面点击应用负载

  2. 点击工作负载,并从部署选项卡下的下拉菜单中选择 default 项目。

  3. 点击 fluentd 项目并选择 fluentd-xxxxxxxxx-xxxxx Pod。

  4. 点击 fluentd 容器。

  5. fluentd 容器页面,选择容器日志选项卡。

  6. 您可以看到日志持续滚动输出。

    container-logs