头图

Filebeat 接入观测云——用观测云替换 ELK

作者|小熊博望运维经理 —— 王明松

简单介绍一下

  • ELK
    包括 ElasticSearch、Kibana 和 Logstash,Filebeat 负责在终端进行采集,将数据上报给 Logstash,存储在 ElasticSearch 或者其他存储(如 S3),最终通过 Kibana 来呈现数据并进行分析,设置告警等。我们的原环境里一共有 5 个 ELK 集群,分别承担收集审计日志,收集业务日志,分析业务日志的职能。其中收集审计日志是需要长期保存以供后期;收集业务日志是主要是错误日志的收集和告警生成;分析业务日志只是对业务情况进行实时展示,可靠性要求不高。经过评估,我们准备替换掉前两种收集审计日志和业务日志的共计 4 个 ELK 集群,只保留 1 个需要实时分析业务日志的集群。
  • 观测云
    观测云是国内领先的可观测平台,基本功能可以完全替代 ELK 来做日志收集,并且也可以做进一步的指标生成和告警通知。
  • DataKit
    DataKit 是观测云提供的需安装到主机上的采集器,也是数据上报给观测云的入口。(编者注:观测云还提供一种需要独立部署的可编程数据处理平台 DataFlux Func,也可以作数据采集器使用。)

用观测云替换 ELK 的思路是什么?

我们尝试了以下几种替换方案:

方案一:Logstash 接入,只替换 ElasticSearch 和 Kibana

在我们开始测试的时候,因当时 DataKit 1.2.19(2022 年 5 月 12 日之前的版本)不支持串联 Filebeat 采集器,而之后的 DataKit 版本虽然开始支持串联 Filebeat,但并不稳定,比如不支持 6.x 版本的 Filebeat。

所以当时的思路是 Logstash 对接 DataKit 的 Logstreaming 采集器,观测云替代掉 ElasticSearch 和 Kibana 功能,这不是一个完美的方案,我们还需要维护非常耗费资源而且容易 crash 的 Logstash。这本来就是一个权宜之计,而且在 DataKit 1.4.0 上面实验用 Logstash 6.x 接入并不稳定,最终放弃。参考文档:https://docs.guance.com/integ...

方案二:
Filebeat 接入,整体替换掉 ELK
我们向观测云提了不少 issue,并都得到了回应,很快 DataKit 1.4.1 发布后(2022 年 6 月 7 日)就解决了各些问题,对于 Filebeat 6.x(我们使用的是 6.2.2)和 Filebeat 7.x(我们使用的是 7.12.0)的支持均可以。所以可以启用 DataKit 的 Beats 采集器支持,直接接收 Filebeat 的输出。

DataKit 1.4.1 版更新日志:
https://docs.guance.com/datak...

接入 Filebeat 文档链接:https://docs.guance.com/datak...

这无疑是成本最低,改动最小的一个方案。将对应服务器或者容器镜像里的 Filebeat 输出地址修改为 DataKit 网关地址即可,只不过依然要维护丑陋的 Sidecar。

方案三:程序通过 Socket 直接输入日志给 DataKit,整体替换掉 Filebeat 和 ELK

这是最早的一个思路,希望彻底扔掉任何外部程序,通过程序直接将相关日志对接给 DataKit,启用 DataKit 的日志采集的 Socket 端口获取(跟文件获取方式是互斥的,只能开启一个)。

文档链接:https://docs.guance.com/datak...

支持的语言有 Java,Golang 和 Python,对于 json 格式的日志支持效果非常好。但是这个只能采集应用的日志,无法采集 Web Server 的 access_log,所以经过测试之后最终还是放弃了这个方案。(编者注:可以使用观测云 DataFlux Func 编程平台实现)

最终选择方案二,DataKit 本身自己也是有日志采集功能的,为何不用 DataKit 来替换 Filebeat 呢?主要出于以下考虑:

  1. 我们现阶段只需要日志采集,仅需 DataKit 的小部分能力,可观测云默认会按 DataKit 个数收费,如果每台主机都安装 1 个,数量加起来是一笔不小的开支。虽然也可以改为按时间线收费大幅降低费用,但是相比 Filebeat 可以免费使用,我们优先选择免费了。
  2. DataKit 终端安装包比 Filebeat 要大,在寸土寸金的容器镜像里比较奢侈。
  3. DataKit 带可配置的 Token ID 信息,用来对应观测云 SaaS 端的工作空间 ID,可能需要配置多套 Token ID 来区隔不同环境,这个会对生成容器镜像的研发造成困扰,不如沿用 Filebeat,上手成本低。
  4. 因为观测云是外部服务,由内网的 Filebeat 先采集,再输出到指定的有外网 IP 的 DataKit 网关,可以有效减轻 NAT 网关的压力,也可以方便运维定期升级,做容灾等。

参考链接:https://docs.guance.com/datak...

(编者注:DataKit 自身也支持代理模式,可以多个内网 DataKit,数据汇聚到 1 个在 DMZ 的代理 DataKit 后,汇聚上报数据,观测云只计 1 个接入数。)参考链接:https://docs.guance.com/getti...

替换方案是什么呢?

前置条件

  1. 开通观测云账号
  2. 在一台机器上装好最新版本的 DataKitDataKit 版本:1.4.1 及之后

配置 DataKit

  1. DataKit 开启 Beats 数据采集功能
  2. 确保 TCP 端口对 Filebeat 服务器开放
  3. source 和 service 可以视情况预置在配置文件里,这两个键值会传递到观测云里

配置 Filebeat

  1. 修改 Filebeat 的配置文件
  2. 修改 output.logstash 的 hosts
  3. 地址改为 DataKit 的网关地址,注意此处填写多个地址的话不是一份数据多写,在没有配置 Load Balance 的情况下,只会随机选一个 host 写,配置了 Load Balance 就是负载均衡到多个 host

参考链接:https://www.elastic.co/guide/...

替换完成后,使用效果怎么样?

  1. 登录到观测云之后,打开日志-查看器,即可看到日志。
    图片
  2. Filebeat 配置 Fields 里自定义设置的 LogType,product 和 DataKit 里预置的 source(数据来源)和 service(服务)都能看到。

参考链接:https://www.elastic.co/guide/...

替换后的成本收益如何?

  1. 不再承担人力成本,稳定性提高
  • 节省了维护集群的人力成本若干。
  • SaaS 服务性能弹性,再也不需要再担心 ELK 集群空间满,ELK 集群性能不足等问题导致集群停摆。
  1. 不再承担授权费
  • ELK 如果需要告警并且通知到外部,则需要购买白金级订阅来实现“检测告警外部操作”。
  • 如果使用 Elastic Cloud,也需要订阅白金级才能使用“检测告警外部通知和操作”。

参考链接:https://www.elastic.co/cn/sub...

  1. 基础设施成本减少 90% 以上
  • 替换的外部集群之前的成本约为:18000 元人民币每月。转到观测云之后成本仅为几百元人民币每月。
  • 基础设施成本缩减为不到之前的 5%,而且 SaaS 服务按量付费,成本会更加弹性。

云时代的系统可观测平台

18 声望
79 粉丝
0 条评论

云时代的系统可观测平台

18 声望
79 粉丝
宣传栏