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

news2024/11/27 9:58:01

概述

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

备注:

  • 集群监控:表示工具可以查看管理采集端的运行状态、采集速度等数据
  • 集群管理:表示工具可以对管理采集端的采集配置、运行参数等进行添加、修改、删除
ilogtailElasticLogkitSysdigFluentdTelegrafLoggieFlume
产品类型企业版企业版开源版企业版开源版开源版开源版开源版
单机部署支持支持支持支持支持支持支持支持
集群管理控制台(阿里云)、API、K8s Operator控制台(Fleet Server)Logkit 助手不支持容器下有三方开源的Fluent Operator和Logging Operator,主机下不支持不支持Kubernetes下可通过CRD配置,主机下不支持不支持
集群监控阿里云控制台Fleet UILogkit助手Sysdig Monitor通过第三方Prometheus,或REST APIInfluxData 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_urlstring 数组slave 必填
master 选填
master_url中的每一项都应该是一个url(包括端口号),它们是当前 Logkit 各个 master 的 url
1. 对于 slave, 它会定期向每个链接发心跳注册,以便让其 master 获取自己的状态
2. 对于 master, 当填写该字段后,它本身也会作为 slave 受到它的 master 控制,当然这个 master 可以是它自己。
is_masterbool必填标明当前 Logkit 是否是 master:
1. master 请置为 true
2. slave 请置为 false
enablebool必填是否启用 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月,社区版与企业版的文档内容产生了冲突。

参考

  • logtail企业版 - 机器组:https://help.aliyun.com/document_detail/65021.html
  • Elastic Agent - Fleet:https://www.Elastic.co/guide/en/fleet/current/manage-agents-in-fleet.html
  • Logkit - Cluster: https://github.com/qiniu/logkit/wiki/Cluster
  • Fluentd:https://docs.fluentd.org/monitoring-fluentd/overview
  • Telegraf:https://docs.influxdata.com/telegraf/v1.23/
  • Loggie:https://loggie-io.github.io/docs/user-guide/architecture/compare/
  • Flume:https://cwiki.apache.org/confluence/display/flume

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iClient for MapboxGL对接WMS服务

作者:yx 文章目录前言一、获取WMS服务二、请求参数说明三、获取参数四、关键代码五、完整代码总结前言 咱们iClient官网Leaflet、OpenLayers、Classic均有对接WMS服务的示例,详情可以参考iClient官网示例https://iclient.supermap.io/。 但是许多小伙伴…

基础知识java

1.浅克隆和深克隆?深克隆的方法 浅克隆:对象的引用变量只会拷贝地址,不会新建一个对象 深克隆:对象的引用变量也会新建一个对象 实现方式: 浅克隆:实现cloneable接口的clone方法 深克隆:实现Ser…

《树莓派项目实战》第八节 使用光敏电阻传感器检测环境中是否有光照

目录 8.1 引脚介绍 8.2 工作原理 8.3 连接到树莓派 8.4 编写代码检测有无光照 在本节,我们将学习如何使用光敏电阻度传感器检测是否有光照,该项目设计到的材料有: 树莓派 * 1面包板 * 1杜邦线若干光敏电阻传感器 * 18.1 引脚介绍 从右到…

tictoc例子理解6-9

tictoc 6-9tictoc 6 自消息实现计时tictoc 7 节点等待时延随机,丢失包概率tictoc 8 两个节点分别定义两个类tictoc 9 保留原始包副本,从而不需要重新构建包tictoc 6 自消息实现计时 在前面的模型中,’ tic’和’ toc’立即将收到的消息发送回…

高防CDN和融合CDN的区别

所有网站比较关心的一个问题就是如何解决南北用户能够稳定的加速访问,为此网站运营商通常用的CDN来解决这个问题。那么CDN是什么呢?CDN是属于一种内容分发网络。通过在现有的网络中增加一层新的网络架构的模式,使用户能够就近获取数据&#x…

利用综合微生物指数评估富营养化危险沿海湿地生态状况

河海大学环境学院李轶课题组近期在《Science of the Total Environment》期刊上(IF10.753)发表的“Eutrophication dangers the ecological status of coastal wetlands: A quantitative assessment by composite microbial index of biotic integrity.”研究论文中&#xff0c…

IP-Guard批量部署客户端的方法有哪些?

常用的批量部署客户端方式有以下几种: 1、通过IP-guard域脚本安装工具推送安装 概括步骤如下: 1)打包好客户端安装包(勾选静默安装),将安装包命名为OAgentInst.exe 2)将客户端安装包OAgentInst.…

React路由

文章目录单页面应用spa路由路由是什么React路由原理点击页面选项路径改变路径改变页面变化React路由的使用实现点击页面选项路径改变——编写路由链接根据路径显示组件 ——注册路由组件的分类——普通组件和路由组件案例实现选中高亮效果——NavLinkNavLink的封装Switch的使用…

tda4vm mcu1_0应用程序开发系列之ADC采样

文章目录 1. 前言2. 开发过程1. 前言 上一篇我们介绍了如何在tda4vm上拉起MCU域的mcu1_0,感兴趣的小伙伴可以看一下tda4vm如何SPL方式加载MCU域的核?,从本篇开始介绍如何在mcu1_0上开发应用程序,本篇主要介绍mcu1_0上ADC采样应用程序的开发。 2. 开发过程 如果工作中接到…

职业资格证书查询与验证

一、接口介绍 可查询多种类型的职业资格证书,包含:证券从业资格证查询、计算机信息高新技术考试证书查询、计算机技术与软件专业技术资格、全国教师资格证书查询、普通话证书查询合格证明、中小学教师资格考试合格证明(NTCE)、全国…

隐藏文件夹怎么显示,只需1分钟,快速学会

很多人在工作的过程中,将一些文件给隐藏了起来,后来需要使用的时候,却找不到隐藏的文件夹了。win10如何调出隐藏文件夹?隐藏文件夹怎么显示?只需1分钟,快速学会显示隐藏文件夹! 隐藏文件夹怎么显…

【Mysql】复合查询

文章目录**1.基本查询回顾****2.多表查询** (重要)多表查询步骤**3.自连接**4.子查询在from子句中使用子查询5.合并查询1.基本查询回顾 准备工作,创建一个雇员信息表:(来自oracle 9i的经典测试表) EMP员工表 DEPT部门表 SALGRADE工资等级表 案例1:查询…

SVN+Gitee配置版本控制库

软件 TortoiseSVN:Downloads TortoiseSVN Gitee:https://gitee.com/ 操作步骤 在Gitee中新建仓库,设置仓库名以及模板(Readme文件); 启用SVN访问 在仓库的管理页面,选择“功能设置”中的“…

为自己量身打造一个 Rust 项目模板/脚手架

摘要 quick-start-rs(quick start a rust project)是用于快速创建一个 rust 项目的脚手架/模板。 标题:为自己量身打造一个 Rust 项目模板/脚手架深度参考 Rust Code Quick Start文章来自 suhanyujieTags: Rust, utils, quick start, project template,脚…

视频编解码 — 带宽预测

目录 一、带宽预测作用 二、基于延时的带宽预测算法: 1、算法流程 2、计算延时 3、Trendline Filter 4、网络状态判断 5、带宽调整更新 三、基于丢包的带宽预测算法 1、带宽调整 四、最大带宽探测算法 五、最终的预测选择 一、带宽预测作用 控制音视频发…

荧光AF染料477876-64-5,Alexa Fluor 532,AF532 NHS ester

●中文名:AF532 活性酯,AF5 532酯 ●英文名:AF532-NHS ,AF532 NHS ester,Alexa Fluor 532 ●外观以及性质: 荧光AF染料是具有磺化基团的荧光物质。AF染料带负电荷,具有亲水性高、亮度高、光稳定…

软件和硬件中的调用

文章目录**1 概述****2.1 程序进程内的调用:函数调用****2.2 程序进程间的调用:IPC****2.3 远程程序调用:RPC****2.4 远程调用REST****3 硬件“调用”****3.1 综述****总线模型****3.2 片内的总线****3.3 Chiplet多DIE封装互联总线****3.4 板…

1.1 统计学习方法的定义与分类

统计学习方法的定义与分类统计学习的概念统计学习的定义统计学习运用到的领域统计学习的步骤统计学习的分类统计学习的概念 统计学习的定义 统计学习 (Statistical Machine Learning) 是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 以计…

Python任务调度框架Rocketry

文章目录定时任务库对比简介与其余框架的区别安装初试调度器基础测试方法字符串格式具体时间间隔周期某时间段条件 API条件逻辑方法对比执行选项在主进程和线程中执行进程线程异步设置默认选项日志流水线在一个任务后执行输入作为输出会话级参数函数参数TODO:元参数…

为什么说继承是把双刃剑

为什么说继承是把双刃剑 继承其实是把双刃剑:一方面继承是非常强大的;另一方面继承的破坏力也是很强的。 继承广泛应用于各种Java API、框架和类库之中,一方面它们内部大量使用继承,另一方面它们设计了良好的框架结构&#xff0c…