文章

使用 Elastic 可观测性实现云原生应用监控(2/4)

本篇文章将学习如何使用 Fluent Bit 采集 Kubernetes 集群的应用日志,并将日志数据输出到ElasticSearch中,使用Kibana将其可视化出来。日志收集工具还有很多,如:Fluentd,Filebeat,Promtail等等。其中 Fluent Bit,Fluentd和 Filebeat 都使用过,基本上都能满足项目上对于日志采集的需求。个人比较首推Fluent Bit,主要是因为其资源占用非常少,采集效率高,设计优雅,配置简单。可以看下下图中,Fluent Bit 的 Data pipeline:

fluent-bit-data-pipeline

Fluent Bit vs Fluentd vs FileBeat

三款日志采集工具的资源占用情况如下:

image-20210719211856708

以下是官方Fluentd和Fluent Bit的对比图:

image-20210719210416796

Fluent Bit 安装

修改 Fluent Bit 官方Helm Values 文件,并保存为:fluent-bit-values.yaml:

image-20210719233054607

安装成功后:

image-20210719225211982

在Kibana中验证日志采集

执行 test-pod.yaml 文件,方便使用Kibana查看日志:

image-20210719230401477

可以看到Fluent Bit开始监听该容器,并采集日志:

image-20210719225236371

在Kibana上添加Index Pattern

登陆在第一篇中已经安装好的 Kibana,添加 Index Pattern

1)填写 Index Pattern Name

image-20210719230129220

2)配置 time field:

image-20210719230145253

3)添加成功:

image-20210719230214267

接下来在Discover中,选择Index:k8s-dev查看日志:

image-20210719230524837

测试多行日志

运行如下我准备好的镜像,里面会自动打印正常日志和堆栈错误日志:

 kubectl run -it --rm k8s-example-service --image=amuguelove/example-service:2021-07-19-232202-master --restart=Never

image-20210719232720768

查看上图中第二条日志的详情,可以在stack_trace字段看到异常堆栈的详细信息:

image-20210719232921375

到这里日志采集系统就到这里结束了。日志采集工具选择哪一种需要结合项目的实际情况,就目前来说Fluent Bit的插件比较少,支持目前比较主流的一些数据存储,如ElasticSearch,Kafaka,Loki等。

最后,说一下关于多行日志的问题。在实际项目中最关键的难点还是在如何采集多行日志,有的做法是使用采集工具的插件,先识别第一行日志的前缀,然后正则匹配剩下的部分,个人不是特别看好这种方式,1)是采集效率低,损耗性能;2)通用性不高,因为不同语言的多行日志的规则不同,如PHP,Ruby,Java等,它们的异常格式都不同,无法使用统一的正则去匹配。

个人比较推荐的方式是项目本身通过JSON的格式去输出项目日志,1)避免了多行日志的问题,2)可以在ElasticSearch中直接生成Index,方便快速查询。

Reference

  1. Elastic 官网:https://www.elastic.co

  2. Elastic 可观测性:https://www.elastic.co/cn/observability

  3. Fluent Bit 官网:https://fluentbit.io/

  4. Fluentd 官网:https://www.fluentd.org/

  5. FileBeat 官网:https://www.elastic.co/beats/filebeat

License:  CC BY 4.0