可观测数据采集端的管控方案的简单对比

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
性能测试 PTS,5000VUM额度
简介: 当前,主流的日志采集产品除了SLS的ilogtail,还有Elastic Agent、Fluentd、Telegraf、Sysdig、Logkit、Loggie、Flume等。详细的对比结果见下表:备注: ○ 集群监控:表示工具可以查看管理采集端的运行状态、采集速度等数据 ○ 集群管理:表示工具可以对管理采集端的采集配置、运行参数等进行添加、修改、删除

作者:杨泽华(玄飏)

概述

当前,主流的日志采集产品除了SLS的ilogtail,还有Elastic Agent、Fluentd、Telegraf、Sysdig、Logkit、Loggie、Flume等。详细的对比结果见下表:

备注:

  • 集群监控:表示工具可以查看管理采集端的运行状态、采集速度等数据
  • 集群管理:表示工具可以对管理采集端的采集配置、运行参数等进行添加、修改、删除

ilogtail

Elastic

Logkit

Sysdig

Fluentd

Telegraf

Loggie

Flume

产品类型

企业版

企业版

开源版

企业版

开源版

开源版

开源版

开源版

单机部署

支持

支持

支持

支持

支持

支持

支持

支持

集群管理

控制台(阿里云)、API、K8s Operator

控制台(Fleet Server)

Logkit 助手

不支持

容器下有三方开源的Fluent Operator和Logging Operator,主机下不支持

不支持

Kubernetes下可通过CRD配置,主机下不支持

不支持

集群监控

阿里云控制台

Fleet UI

Logkit助手

Sysdig Monitor

通过第三方Prometheus,或REST API

InfluxData Platform

通过第三方Prometheus

使用额外的exporter

可以看到提供完整集群管理能力的,主要是SLS、Elastic、和Logkit,下面会针对Elastic、Logkit做进一步介绍。

Elastic Agent - Fleet 介绍

Fleet 是一个用于管理 Elastic Agent 配置的组件,由两部分组成:Fleet UI 和 Fleet Server。Fleet UI 是一个带有用户界面的 Kibana 应用程序,供用户载入和配置 agent 策略(注: agent 策略类似于SLS的ilogtail采集配置)、管理载入数据以及管理整个环境中的Elastic Agent。

Fleet Server是 Elastic Stack 的一个后端组件,作为 Elastic Agent 的一部分部署在主机(服务器)上,Elastic Agent连接到该组件,以执行检索 agent 策略、更新和管理等命令。一个 Fleet Server 进程可以支持多个 Elastic Agent 连接,并作为控制平台,用作更新 agent 策略、收集状态信息以及协调多个 Elastic Agent 操作。Fleet Server 需要连接到支持 Elasticsearch 的集群才能运行。

主要功能

Fleet 允许用户集中管理大量Elastic Agent,是管理与 Elastic Agents 通信的基础设施组件。

  1. 用户可以在 Fleet UI 页面上查看所有Elastic Agent的状态,看到Elastic Agent的在线状态、健康状态、上次注册时间,还可以查看Elastic Agent的二进制文件和 agent 策略的版本。
  2. 若用户更改了 agent 策略,所有的Elastic Agent都会在下次注册的时候收到更新。
  3. Fleet Server 会自动为每个Elastic Agent生成 Elasticsearch API 密钥,对正在运行的集群具有最低权限,更好地保护Elastic Agent。
  4. Fleet Server提供了更新Elastic Agent的控制层,并指示它们执行诸如跨主机运行 OSQuery 或在网络层隔离主机以遏制安全威胁等操作。
  5. Fleet Server 可以集中部署,也可以部署在专用网络的边缘。
  6. Elastic提供设计了对Fleet Server的监控功能

设计

部署模型

Fleet Server有两种部署模型,分别适用Elastic Cloud部署和本地部署。

Elastic Cloud部署

在 Elastic Cloud 中配置和托管 Fleet Server,可以简化 Elastic Agent 的部署。在这种情况下,创建部署时,会自动部署一组高度可用的 Fleet Server。

管理员可以选择分配给 Fleet Server 的资源,以及是否希望将 Fleet Server 部署在多个可用区中。

一旦作为服务部署在 Elastic Cloud 上,Fleet Server 的整个生命周期都由 Elastic 管理。Fleet Server 具有可扩展性和高可用性,可在多个实例之间实现流量入口负载平衡,以满足规模要求。

本地部署

Fleet Server 可以在本地部署并由用户管理。在此部署模型中,管理员负责 Fleet Server 部署和生命周期管理。这种操作模式主要用于满足数据处理要求,或用于Elastic Agent只能访问私有分段网络的场景,需要管理员配置 Fleet Server 的多个实例并使用负载均衡器来更好地扩展部署。

高可用性

Fleet Server 是无状态的。因此,只要 Fleet Server 有能力接受更多连接,就可以对 Fleet Server 的连接进行负载均衡。负载均衡是在循环的基础上完成的。

在 Elastic Cloud 部署模型中,会自动预置多个 Fleet Server 以满足所选的实例大小(修改实例大小以满足规模要求),也选择多个可用区来满足容错要求,这些实例也可用于平衡负载。

在本地部署中,Fleet Server 的高可用性、容错性和生命周期管理是管理员的责任。

监控自建的 Fleet Server

对于自建的 Fleet Server,监控是关键,因为 Fleet Server 的运行对于已部署Elastic Agent及其提供的服务的健康状况至关重要。当 Fleet Server 运行不正常时,可能会导致其管理的Elastic Agent的签入、状态信息和更新延迟。Elastic提供设计了对Fleet Server的监控功能。监控数据将告诉用户何时为 Fleet Server 添加容量,并提供错误日志和信息以解决其他问题。对于自我管理的Fleet Server,当用户创建新的 agent 策略或使用现有的 Default Fleet Server  策略时,默认情况下会启用监控。

高度的环境依赖性

Fleet 严重依赖 Elastic 环境,Fleet Server 对于合作的 Elastic 产品有兼容要求。

  • Elastic Stack 7.13 或更高版本(在 Elastic Cloud 上托管 Elasticsearch 服务,或自行管理的集群)。
  • Elastic Cloud Enterprise 2.9(自行管理 Fleet Server)/ 2.10及以上版本(Elastic Cloud 上使用托管的 Fleet Server)。

通信机制

Elastic Agent 使用 http 协议, 通过 Fleet Server 与 Elasticsearch 通信:

  1. 在Fleet UI上创建新的 agent 策略后,保存到 Elasticsearch。
  2. Elastic Agent 使用身份验证生成注册密钥,向 Fleet Server 发送注册 agent 策略请求。
  3. Fleet Server 接收请求并从 Elasticsearch 获取 agent 策略,然后将 agent 策略发送到所有注册了该 agent 策略的 Elastic Agent。
  4. Elastic Agent 使用 agent 策略中的配置信息来收集数据并将其发送到 Elasticsearch。
  5. Elastic Agent 登记录入 Fleet Server 以获取更新,并且保持开放连接。
  6. 当 agent 策略更新时,Fleet Server 从 Elasticsearch 检索更新的 agent 策略并将其发送到连接的 Elastic Agent。

Fleet Server 使用服务令牌与包含fleet-server服务帐户的 Elasticsearch 进行通信。每个 Fleet Server 可以使用自己的服务令牌,并且可以在多个服务器之间共享它(不推荐)。为每个服务器使用单独的令牌的优点是可以分别使每个服务器无效。

配置说明

Elastic Cloud部署

Elastic Cloud 直接托管 Fleet Server ,在不考虑扩展的情况下,不需要额外的设置(使用 Fleet 需要确保部署包含一个集成服务器实例)。可以在Fleet UI上确认集成服务器的可用性。

本地部署

要部署自我管理的 Fleet Server,需要安装 Elastic Agent 并将其注册到包含 Fleet Server 集成的 agent 策略中。每个主机只能安装一个 Elastic Agent,不能在同一主机上运行 Fleet Server 和另一个 Elastic Agent,除非部署容器化 Fleet Server。

使用Fleet UI可以快速部署Fleet Server。

  1. 指定一个或多个 Elastic Agents 将用于连接到 Fleet Server 的主机 URL。
  2. 单击“Agent”选项卡并按照产品内的说明添加 Fleet Server。
  • 选择Quick Start 可以让 Fleet 自动生成 Fleet Server 策略、注册令牌和自签名证书,不建议用于生产用例。
  • 选择高级可以使用自己的 Fleet Server 策略、使用自己的 TLS 证书来加密 Elastic Agents 和 Fleet Server 之间的流量。

可扩展性

修改部署中的设置和 Fleet Server 策略来扩展 Fleet Server。Fleet Server 提供了一些高级设置。

cache

 num_counters

 //Size of the hash table. Best practice is to have this set to 10 times the max connections.

 max_cost

 //Total size of the cache.

server.limits

 policy_throttle

 //How often a new policy is rolled out to the agents.

 checkin_limit.interval

 //How fast the agents can check in to the Fleet Server.

 checkin_limit.burst

 //Burst of check-ins allowed before falling back to the rate defined by interval.

 checkin_limit.max

 //Maximum number of agents.

 artifact_limit.max

 //Maximum number of agents that can call the artifact API concurrently. It allows the user to avoid overloading the Fleet Server from artifact API calls.

 artifact_limit.interval

 //How often artifacts are rolled out. Default of 100ms allows 10 artifacts to be rolled out per second.

 artifact_limit.burst

 //Number of transactions allowed for a burst, controlling oversubscription on outbound buffer.

 ack_limit.max

 //Maximum number of agents that can call the Ack API concurrently. It allows the user to avoid overloading the Fleet Server from Ack API calls.

 ack_limit.interval

 //How often an acknowledgment (ACK) is sent. Default value of 10ms enables 100 ACKs per second to be sent.

 ack_limit.burst

 //Burst of ACKs to accommodate (default of 20) before falling back to the rate defined in interval.

 enroll_limit.max

 //Maximum number of agents that can call the Enroll API concurrently. This setting allows the user to avoid overloading the Fleet Server from Enrollment API calls.

 enroll_limit.interval

 //Interval between processing enrollment request. Enrollment is both CPU and RAM intensive, so the number of enrollment requests needs to be limited for overall system health. Default value of 100ms allows 10 enrollments per second.

 enroll_limit.burst

 //Burst of enrollments to accept before falling back to the rate defined by interval.

分析

Fleet Server是一款成熟的商业产品,其对各个场景的支持、对安全的处理、配置的扩展性等等,都做的比较完善。文档较为详细,按照文档内容可以实现较快速的部署上手。

由于Fleet Server是企业版软件,所以若是想脱离环境和生态单独使用会比较困难。

Logkit - Cluster介绍

Cluster是Logkit的集群管理解决方案。Logkit 通过添加 runner 的形式,提供了丰富的功能来收集、解析和发送多种格式的日志和系统信息。Cluster是为了解决在集群中部署多个 Logkit 时,runner 的管理变得繁琐的问题而开发的。

主要功能

开发者将 Logkit 分成 master 和 slave 两类,master 可以管理 slave 上的 runner。master本身也可以是一个slave,承担数据收集的责任。

  1. 通过 master 可以查看所有 Logkit 上的 runner 的运行状态;
  2. 通过 master 可以批量对 Logkit 上的 runner 添加/删除/更新/停止 等操作;

设计

  1. Logkit 的 cluster 功能采用了 master/slave 的架构,slave 会定期向 master 发心跳注册;
  2. 一个 slave 的 master 可以有多个,它们都可以对该 slave 进行管理,master本身是一个无状态服务,相当于一个中转站,负责将用户的请求分发给所有的slave,也可以收集所有slave的状态方便用户查看;
  3. 每一个 slave 都分配一个集群名称,集群名称可以用于将 slave 分类。 master 可以以集群为单位,对 slave 进行批量操作。当然也可以对某一个特定的 slave 进行操作。
  4. 所有master和slave之间的通信都是通过http进行的。

配置说明

参数说明

cluster 配置参数说明如下(完整的 Logkit 主配置文件字段说明请参考Logkit主配置文件):

参数名称

参数类型

是否必填

参数说明

master_url

string 数组

slave 必填
master 选填

master_url中的每一项都应该是一个url(包括端口号),它们是当前 Logkit 各个 master 的 url
1. 对于 slave, 它会定期向每个链接发心跳注册,以便让其 master 获取自己的状态
2. 对于 master, 当填写该字段后,它本身也会作为 slave 受到它的 master 控制,当然这个 master 可以是它自己。

is_master

bool

必填

标明当前 Logkit 是否是 master:
1. master 请置为 true
2. slave 请置为 false

enable

bool

必填

是否启用 cluster 功能, master 和 slave 都应该置为 true

在启用 cluster 功能时,将 Logkit 主配置文件中的 bind_host 字段显式绑定一个可以保证master、slave能够互相通信的ip地址和端口,防止出现ip与master不在同一网段,造成master无法访问slave的情况。 (因为当此处的ip地址为空时,作为slave的Logkit会自行获取本机的一个ip地址,并在向master发心跳时将该ip地址发送给master, master会利用该ip与slave进行通信。)

在配置结束后,建议先启动作为master的Logkit,再启动作为slave的Logkit,这样可以避免slave产生向master发心跳失败的错误日志。

配置示例

  • master添加字段

{

 "cluster": {

   "master_url": [],

   //若master本身也想承担slave的功能

   //可以填上其他master或自身的地址

   //例如 "master_url": ["http://192.168.0.2:3000"],

   "is_master": true,

   "enable": true

 }

}

  • 完整的 Logkit 主配置文件示例(slave)

{

 "max_procs": 8,                  // 选填,默认为机器的CPU数量

 "debug_level": 1,                // 选填,默认为0,打印DEBUG日志

 "bind_host":"127.0.0.1:3000",    // 选填,默认自己找一个4000以上的可用端口开启

 "profile_host":"localhost:6060", // 选填,默认为空,不开启

 "clean_self_log":true,           // 选填,默认false

 "clean_self_dir":"./run",        // 选填,clean_self_log 为true时候生效,默认 "./run"

 "clean_self_pattern":"*.log-*",  // 选填,clean_self_log 为true时候生效,默认 "*.log-*"

 "clean_self_cnt":5,              // 选填,clean_self_log 为true时候生效,默认 5

 "rest_dir":"./.logkitconfs",     // 选填,通过web页面存放的logkit配置文件夹,默认为logkit程序运行目录的子目录`.logkitconfs`下

 "static_root_path":"./public",   // 必填,logkit页面的静态资源路径,即项目中public目录下的内容,包括html、css以及js文件,请尽量填写绝对路径

 "timeformat_layouts":["[02/Jan/2006:15:04:05 -0700]"], // 选填,默认为空。

 "confs_path": ["confs","confs2", "/home/me/*/confs"],  // 必填,监听的日志目录

 "cluster": {                                           // 启用 cluster 功能时填写.

           "master_url": ["http://192.168.0.2:3000"],

           "is_master": false,

           "enable": true

 }

}

使用

Logkit 具有可视化工具Logkit助手,目前已支持 Cluster 。Logkit 助手主要有三个界面,分别是集群管理页面、机器管理页面和收集器管理页面。

  • “集群管理”页面:集群管理页面展示的是集群列表,在这个页面上,可以对同一个集群的 slave 添加一个 runner ,或者对一个特定的 runner 进行开启、关闭、重置和删除等操作,还可以更改这个集群的名字。当需要进行批量操作时,可以通过一个弹框选择要操作的 runner 的名字。机器地址列是该集群下所有的机器地址。

  • “机器管理”页面:机器页面展示的是 master 管理的所有的 slave, 包括他们的 url、tag、与 master 的连接状态、上次心跳时间等。状态共有三种:15s内有心跳为“ok”,15~30s内有心跳为“bad”,30s以上没有心跳为“lost”。同时在该页面上也可以更改一台机器的集群, 为一台特定的机器添加 runner 以及将这台机器从 master 的 slave 列表中删掉。这个删掉是临时的, 如果这个 slave 还处于活跃状态,当它向 master 发心跳注册时,它还会回到列表中, 提供这个功能的目的是在需要时从列表中清除处于失联状态的 slave。

  • “runner管理”页面:runner 管理页面会展示 master 下所有 slave 的 runner, 在这里可以看到每个 runner 的运行状态,并可以对这些 runner 进行修改、关闭、重启、重置和删除等操作,支持通过集群名称和机器地址进行筛选。

分析

Logkit Cluster的配置较为简单,在已经配置好Logkit的情况下,只需要在原有配置的基础上增加"cluster"字段就可以实现。同时,由于Logkit原本就是有Logkit助手这样的一个可视化前端的,所以增加集群功能后老用户很快就可以上手。

美中不足的是,该功能虽然解决了多机器同时添加runner繁琐的问题,但对于单机器同时添加多个runner的场景并没有优化,这里还有提升的空间。Logkit最大的问题在于文档的滞后,例如企业版2019年发布的对比文档中,对于是否支持集群管理,社区版为“不支持”,事实上本文参考的Logkit 社区版 Cluster 文档发布于2017年12月,社区版与企业版的文档内容产生了冲突。

参考


关于iLogtail

iLogtail作为阿里云SLS提供的可观测数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境,支持采集数百种可观测数据(日志、监控、Trace、事件等),已经有千万级的安装量。目前,iLogtail已正式开源,欢迎使用及参与共建。

GitHub:https://github.com/alibaba/ilogtail

社区版文档:https://ilogtail.gitbook.io/ilogtail-docs/about/readme

企业版官网:https://help.aliyun.com/document_detail/65018.html

钉钉群:iLogtail社区

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
26天前
|
数据库连接 数据库 DataX
数据接入方案
数仓平台可直连或通过从库、堡垒机、FTP/SFTP等方式接入业务数据库,需提供可读用户权限及相应连接方式。若无法直连,可通过提供数据文件或脚本处理实现数据导入。
56 7
数据接入方案
|
23天前
|
Go
阿里云可观测 2024 年 11 月产品动态
阿里云可观测 2024 年 11 月产品动态。
|
25天前
|
监控 调度 流计算
数仓质量监控方案
本监控模块涵盖资源、任务和质量三大方面,包括资源利用率、任务状态与运行时间、数据表及字段质量、以及基线监控等,设置详细报警规则,确保系统稳定高效运行。
75 13
|
2月前
|
SQL 人工智能
阿里云可观测 2024 年 9 月产品动态
阿里云可观测 2024 年 9 月产品动态。
|
3月前
|
网络协议
阿里云可观测 2024 年 8 月产品动态
阿里云可观测 2024 年 8 月产品动态。
|
3月前
|
人工智能 自然语言处理 前端开发
从客服场景谈:大模型如何接入业务系统
本文探讨了大模型在AI客服中的应用。大模型虽具有强大的知识生成能力,但在处理具体业务如订单咨询、物流跟踪等问题时,需结合数据库查询、API调用等手段。文章提出用Function Call连接大模型与业务系统,允许大模型调用函数获取私域知识。通过具体示例展示了如何设计系统提示词、实现多轮对话、定义Function Call函数,并利用RAG技术检索文档内容。最后,展示了该方案在订单查询和产品咨询中的实际效果。
|
4月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
6月前
|
Java 监控 自然语言处理
一站式链路追踪:阿里云的端到端解决方案
端到端链路追踪是覆盖全部关联 IT 系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。而真正实现端到端链路追踪,需要解决三个难题:链路插桩、链路采集与加工、链路上下文透传。阿里云 ARMS 目前已支持全链路端到端追踪,快来查看转发吧~
61359 14
|
7月前
|
存储 Java 分布式数据库
阿里云可观测 2022 年 12 月产品动态
阿里云可观测 2022 年 12 月产品动态来啦
阿里云可观测 2022 年 12 月产品动态