文章目录

  • 1. 概念
  • 2. 安装
    • 2.1. Fluent Bit to Elasticsearch
    • 2.2. Fluent Bit to Kafka
    • 2.3. 注意 Kubernetes < v1.16
  • 3. 通过 Helm Chart 安装
  • 4. 详情
  • 5. 容器运行时接口(CRI)解析器
  • 6. Windows 部署
    • 6.1. 日志文件概述
    • 6.2. 配置 Fluent Bit
    • 6.3. 减轻 Windows pod 上不稳定的网络

官方文档地址: Kubernetes


Kubernetes 生产级日志处理器


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

  • 治理来自文件系统或 Systemd / Journald 的 Kubernetes 容器日志。
  • 用 Kubernetes 元数据丰富日志。
  • 将你的日志集中在第三方存储服务中,比如 Elasticsearch,inflxdb,HTTP等。

1. 概念

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

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

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

为了获得这些信息,一个名为 kubernetes 的内置过滤器插件与 kubernetes API Server 对话,以检索相关信息,如 pod_id、labels 和 annotations,其他字段,如 pod_name、container_id 和 container_name 在本地从日志文件名称中检索。所有这些都是自动处理的,不需要从配置方面进行干预。

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

2. 安装

资源库地址:https://github.com/fluent/fluent-bit-kubernetes-logging

译者注

官方网站文档不全,本节一部分的内容是在这个资源库的 README.md 找到的。

不一定必须按照下面方法来,也可直接访问该资源库,将下面提到的文件下载到服务器上,普通K8S部署的话需要五个 Yaml 文件,然后修改里面的部分内容,再创建 POD,我们就是这么做的。

一般的K8S上的安装只看这一节基本上就能搞定,具体配置文件的修改稍后会发表一篇博文专门讲述。

这个资源库包含一组用于部署 Fluent Bit 的 Yaml 文件,这些文件里面包括了名称空间、RBAC、服务帐户等。

Fluent Bit 必须部署为 DaemonSet,这样它就可以在 Kubernetes 集群的每个节点上使用。首先运行以下命令来创建命名空间、服务帐户、角色设置以及账户角色绑定:

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

如果您在 openshift 上部署 fluent-bit,还需要运行以下命令:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-openshift-security-context-constraints.yaml

2.1. Fluent Bit to Elasticsearch

创建将由我们的 Fluent Bit DaemonSet 使用的 ConfigMap:

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

默认的 configmap 假设集群使用了 dockershim。如果使用 CRI 运行时,如 containerd 或 CRI-O,则应该使用 CRI 解析器。更具体地说,将input-kubernetes.confParser的描述从 docker 改为 cri。

Fluent Bit DaemonSet 可与 Elasticsearch 在一个普通的 Kubernetes 集群上一起使用:

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

Minikube 上的 Fluent Bit to Elasticsearch

如果您正在使用 Minikube 进行测试,请使用以下可选的 DaemonSet 清单:

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

2.2. Fluent Bit to Kafka

创建将由我们的 Fluent Bit DaemonSet 使用的 ConfigMap:

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

Fluent Bit DaemonSet 可与 Kafka 在一个普通的 Kubernetes 集群上一起使用:

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

Minikube 上的 Fluent Bit to Kafka

如果您正在使用 Minikube 进行测试,请使用以下可选的 DaemonSet 清单:

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

2.3. 注意 Kubernetes < v1.16

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

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

apiVersion: apps/v1

apiVersion: extensions/v1beta1

你可以在 Kubernetes v1.14 Changelog 上关于这个弃用的信息:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#deprecations

3. 通过 Helm Chart 安装

Helm 是 Kubernetes 的包管理器,允许您将应用程序包快速部署到正在运行的集群中。Fluent Bit 通过 Fluent Helm Charts repo 中的 helm chart 进行分布式部署:https://github.com/fluent/helm-charts

要添加 Fluent Helm Charts repo,请使用以下命令:

helm repo add fluent https://fluent.github.io/helm-charts

要验证是否添加了 repo,您可以运行helm search repo fluent,以确保图表已添加。然后可以通过运行以下程序安装默认图表:

helm install fluent-bit fluent/fluent-bit

默认值

默认的图表值包括读取容器日志的配置,使用 Docker 解析,systemd 日志应用 Kubernetes 元数据充实并最终输出到 Elasticsearch 集群。您可以修改https://github.com/fluent/helm-charts/blob/master/charts/fluent-bit/values.yaml文件包含的值,以指定其他输出、运行状况检查、监视端点或其他配置选项。

4. 详情

Fluent Bit 的默认配置确保了以下功能:

  • 消费运行节点的所有容器日志。
  • Tail 输入插件将不会追加超过 5MB 到引擎,直到他们刷新到 Elasticsearch 后端。这个限制的目的是为反压情况提供一个解决方案。
  • Kubernetes 过滤器将使用 Kubernetes 元数据(特别是 labels 和 annotations)丰富日志。过滤器只在找不到缓存的信息时才转到 API 服务器,否则它将使用缓存。
  • 配置中的默认后端是 Elasticsearch 输出插件设置的 Elasticsearch。它使用 Logstash 格式来摄取日志。如果你需要一个不同的索引和类型,请参考插件选项并自行调整。
  • 有一个名为 Retry_Limit 的选项设置为 False,这意味着如果 Fluent Bit 不能将记录刷新到 Elasticsearch,它将无限期地重新尝试,直到成功。

5. 容器运行时接口(CRI)解析器

Fluent Bit 默认假设日志是按照 Docker 接口标准格式化的。但是,在使用 CRI 时,如果不修改所使用的解析器,就会遇到格式不正确的 JSON 问题。Fluent Bit 包括一个 CRI 日志解析器可以用来代替。下面是解析器的一个示例:

# CRI Parser
[PARSER]# http://rubular.com/r/tjUt3Awgg4Name criFormat regexRegex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$Time_Key    timeTime_Format %Y-%m-%dT%H:%M:%S.%L%z

要使用此解析器,请将配置的 Input 部分从docker更改为cri

[INPUT]Name tailPath /var/log/containers/*.logParser criTag kube.*Mem_Buf_Limit 5MBSkip_Long_Lines On

6. Windows 部署

从 v1.5.0 开始,Fluent Bit 支持部署到 Windows pod。

6.1. 日志文件概述

在将 Fluent Bit 部署到 Kubernetes 时,需要注意三个日志文件。

C:\k\kubelet.err.log

  • 这是 kubelet 守护进程在主机上运行的错误日志文件。
  • 您将需要保留这个文件,以便将来进行故障排除(调试部署失败等)。

C:\var\log\containers\<pod>_<namespace>_<container>-<docker>.log

  • 这是您需要查看的主要日志文件。配置 Fluent Bit 以遵循此文件。
  • 它实际上是指向C:\ProgramData\中的 Docker 日志文件的符号链接,文件名上有一些额外的元数据。

C:\ProgramData\Docker\containers\<docker>\<docker>.log

  • Docker 生成的日志文件。
  • 通常不直接从该文件读取,但需要确保该文件在 Fluent Bit 中可见。

通常,您的部署 yaml 包含以下卷配置:

spec:containers:- name: fluent-bitimage: my-repo/fluent-bit:1.5.0volumeMounts:- mountPath: C:\kname: k- mountPath: C:\var\logname: varlog- mountPath: C:\ProgramDataname: progdatavolumes:- name: khostPath:path: C:\k- name: varloghostPath:path: C:\var\log- name: progdatahostPath:path: C:\ProgramData

6.2. 配置 Fluent Bit

假设有上面描述的基本卷配置,您可以应用以下配置来开始日志记录。你可以设想这个构型:

fluent-bit.conf: |[SERVICE]Parsers_File      C:\\fluent-bit\\parsers.conf[INPUT]Name              tailTag               kube.*Path              C:\\var\\log\\containers\\*.logParser            dockerDB                C:\\fluent-bit\\tail_docker.dbMem_Buf_Limit     7MBRefresh_Interval  10[INPUT]Name              tailTag               kubelet.errPath              C:\\k\\kubelet.err.logDB                C:\\fluent-bit\\tail_kubelet.db[FILTER]Name              kubernetesMatch             kube.*Kube_URL          https://kubernetes.default.svc.cluster.local:443[OUTPUT]Name  stdoutMatch *parsers.conf: |[PARSER]Name         dockerFormat       jsonTime_Key     timeTime_Format  %Y-%m-%dT%H:%M:%S.%LTime_Keep    On

6.3. 减轻 Windows pod 上不稳定的网络

Windows pod 经常在启动后立即缺少工作的 DNS(#78479)。为了缓解这个问题,filter_kubernetes提供了一个内置的机制来等待网络启动:

  • DNS_Retries - 重试 N 次,直到网络开始工作(6)
  • DNS_Wait_Time - 网络状态检查之间的查找间隔(30)

默认情况下,Fluent Bit 等待3分钟(30秒x 6次)。如果对您来说还不够,可以按如下方式调整配置。

[filter]Name kubernetes...DNS_Retries 10DNS_Wait_Time 30

【官方文档】Fluent Bit 安装在 Kubernetes相关推荐

  1. 【官方文档】Fluentd 安装前的配置

    文章目录 1. 配置 NTP 2. 增加文件描述符的最大数量 3. 优化网络内核参数 4. 使用粘位符号链接 / 硬链接防护 官方文档地址: Before Installation 在安装 Fluen ...

  2. Kubernetes教程之跟着官方文档从零搭建K8S

    本文将带领读者一起, 参照着 Kubernetes 官方文档,对其安装部署进行讲解.Kubernetes更新迭代很快,书上.网上等教程可能并不能适用于新版本,但官方文可以. Kubernetes 教程 ...

  3. 【kubernetes/k8s概念】Kubernetes1.12从零开始(初):课程介绍与官方文档汇总

    说明 资料和交流方式 Kubernetes的文档介绍 Kubernetes中的术语与资源的操作方法 Kubernetes的API约定与启用方法 Kubernetes中资源(Object)的定义 kub ...

  4. linux3.10.53编译,根据官方文档在Linux下编译安装Apache

    根据官方文档在Linux下编译安装Apache 前言 永远记住官方文档才是最准确的安装手册,这篇文章仅为对官方文档的解读和补充,学习提升务必阅读官方文档: http://httpd.apache.or ...

  5. k8s多master建议用几个_Kubernetes 教程之跟着官方文档从零搭建 K8S

    前言 本文将带领读者一起, 参照者 Kubernetes 官方文档, 对其安装部署进行讲解. Kubernetes 更新迭代很快, 书上.网上等教程可能并不能适用于新版本, 但官方文档能. 阅读这篇文 ...

  6. K8S-网络模型、POD/RC/SVC YAML 语法官方文档

    2019独角兽企业重金招聘Python工程师标准>>> K8S-网络模型.POD/RC/SVC YAML 语法官方文档 博客分类: Kubernetes K8S-网络模型.POD/R ...

  7. dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

    狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习.未经作者授权,禁止转载 分布式理论 什么是分布式系统? 在<分布式系统原理与范 ...

  8. 【官方文档】Fluent Bit 数据管道之过滤插件(Kubernetes)

    文章目录 1. 配置参数 2. 处理 'log' 值 3. Kubernetes Annotations 3.1. Pod 定义中的 annotations 示例 3.1.1. 建议一个解析器 3.1 ...

  9. 【官方文档】Fluent Bit 安装在 Windows

    文章目录 1. 安装包 2. 从 ZIP 归档安装 3. 从 EXE 程序安装 4. Windows 服务支持 5. 从源代码编译 5.1. 准备 5.2. 编译 5.3. 打包 官方文档地址: Wi ...

  10. 【官方文档】Fluent Bit 安装在 Linux

    文章目录 1. Amazon Linux 2. Redhat / CentOS 2.1. 安装在 Redhat / CentOS 上 2.2. 配置 Yum 2.3. 安装 3. Debian 4. ...

最新文章

  1. 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...
  2. linux游戏脚本,ubuntu 新手一键配置脚本
  3. 14. 函数返回值为引用?
  4. XCTF-MISC-新手区-base64stego
  5. docker启动odoo提示module没有安装_Ubuntu20.04通过docker安装微信
  6. 部署HDFS HA的环境
  7. 【HDU - 6081】度度熊的王国战略(SW算法,全局最小割)
  8. linux内存管理(十五)-内存池
  9. Spring Web框架与Struts的区别
  10. mysql事务_MySQL事务提交过程(一)
  11. 电脑 蓝牙不显示 服务器,电脑蓝牙无法使用桌面右下角蓝牙图标不见的解决方法...
  12. 城市“智慧发展”的核心是人性化
  13. 你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)
  14. n (n - 1)的用法
  15. 日语学习资料下载 N5—N1都有
  16. CISCO交换机配置命令及释义
  17. Power BI 参数解决源文件路径问题
  18. 黄金再次失守千八关口 对冲基金空头寸增加
  19. 定位追踪器百科:宠物、老人、小孩、汽车通用的定位器
  20. 踩坑:gitee报错fatal: Couldn‘t find remote ref master。

热门文章

  1. 通信原理第六章思维导图
  2. 平安银行网银助手官方版
  3. 升级到AppCompat v22.1.0,现在获得IllegalArgumentException:AppCompat不支持当前的主题功能
  4. 华为手机怎么设置字体?
  5. AD7124-4 精度
  6. Win10怎么录制内部声音 内录软件哪个好
  7. c语言补码转源码函数,求原码、补码,反码(C语言源代码)
  8. 有关于FireBug和FirePath安装和使用-学习笔记
  9. 哥德巴赫猜想-中文维基百科
  10. 3U VPX板卡设计