description: Kubernetes 生产级日志处理器

Kubernetes

Kubernetes - 图1

Fluent Bit 是一个轻量级且可扩展的日志处理器,它完全支持 Kubernetes:

  • 从文件系统或 Systemd/Journaled 处理 Kubernetes 容器日志
  • 使用 Kubernetes 元数据丰富日志
  • 将您的日志汇聚到第三方存储服务中,例如 Elasticsearch,InfluxDB,HTTP 等

相关概念

在开始之前,重要的是要了解如何部署 Fluent Bit。Kubernetes 管理 nodes 集群,因此我们的日志代理工具需要在每个节点上运行以从每个 POD 收集日志,因此Fluent Bit 被部署为 DaemonSet(在集群的每个 node 上运行的 POD)。

当 Fluent Bit 运行时,它将读取,解析和过滤每个 POD 的日志,并将使用以下信息(元数据)丰富每条数据:

  • Pod Name
  • Pod ID
  • Container Name
  • Container ID
  • Labels
  • Annotations

为了获得这些信息,名为 kubernetes 的内置过滤器插件与 Kubernetes API Server 进行通信以检索相关信息,例如 pod_idlabelsannotations,其他字段,例如 pod_namecontainer_idcontainer _name 是从本地日志文件名检索。所有这些都是自动处理的,从配置方面来说不需要干预。

Kubernetes 过滤器插件完全受 Jimmi Dyson 编写的 Fluentd Kubernetes 元数据过滤器的启发。

部署

Fluent Bit 必须作为 DaemonSet 部署,这样就可以在 Kubernetes 集群的每个节点上使用它。首先,请使用以下命令来创建名称空间,服务帐号和角色设置(namespace, serviceaccount, role):

  1. $ kubectl create namespace logging
  2. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-service-account.yaml
  3. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-role.yaml
  4. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-role-binding.yaml

然后创建由 Fluent Bit DaemonSet 使用的 ConfigMap:

  1. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-configmap.yaml

Kubernetes < v1.16 注意事项

对于 v1.16 之前版本的 Kubernetes,DaemonSet 资源对象在 apiVersion: apps/v1 上不可用,该资源对象在 apiVersion: extensions/v1beta1 上可用。我们当前的 Daemonset Yaml 文件使用新版本的 apiVersion

如果您使用的是较旧版本的 Kubernetes,请手动获取 Daemonset Yaml 文件,并替换 apiVersion 的值,从:

  1. apiVersion: apps/v1

替换为

  1. apiVersion: extensions/v1beta1

您可以在 Kubernetes v1.14 Changelog 上阅读有关此变更/弃用的更多信息: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.14.md#deprecations

Fluent Bit to Elasticsearch

Fluent Bit DaemonSet 可以与 Kubernetes 集群上的 Elasticsearch 一起使用:

  1. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-ds.yaml

Fluent Bit to Elasticsearch on Minikube

如果您使用 Minikube 进行测试,请使用以下 DaemonSet 清单:

  1. $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-ds-minikube.yaml

详情

Fluent Bit 的默认配置可确保以下内容:

  • 使用运行节点上的所有容器日志
  • Tail 输入插件 不会在引擎中添加超过 5MB 的内容,直到将他们刷新到 Elasticsearch。此限制旨在为积压方案提供解决方法
  • Kubernetes 过滤器插件将使用 Kubernetes 元数据(特别是 labelsannotations)丰富日志数据。过滤器仅在找不到缓存信息时才访问 API 服务器,否则将使用缓存
  • 配置中的默认后端是由 Elasticsearch 输出插件设置的 Elasticsearch。它使用 Logstash 格式处理日志。如果您需要其他索引和类型,请参考插件选项并自行进行调整
  • 选项 Retry_Limit 设置为 False,这意味着如果 Fluent Bit 无法将记录刷新到 Elasticsearch,它将无限期地重试直到成功