
Fleet 4.1.0 深度解析Schedule 定时查询、Activity feed 活动流与 fleetctl 团队管理【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleetFleet 4.1.0 是开源设备管理平台 FleetREADME.md提升易用性与成熟度的重要版本核心亮点包括用 Schedule 定时查询取代对查询包query packs的理解门槛让数据采集更简单引入 Activity feed 活动流让团队可以审计 Fleet 与 osquery 部署中的每一次变更并新增 fleetctl 团队配置、用户角色配置与用户删除等命令行能力。读完本文你将掌握 4.1.0 中这些功能的使用方法、底层数据模型与源码级实现原理能够独立完成定时查询配置、活动审计、团队与用户权限的声明式管理。版本概览一次聚焦「易用性」与「可观测性」的更新Fleet 4.1.0 围绕两个目标展开更易用的数据采集Usability决定「设备上什么数据、以多频繁度发送到配置的日志目的地」是 Fleet 用户成功的关键。新版 Schedule 功能让新手和老用户都可以直接从设备获取信息而不必理解或使用查询包query packs。更透明的部署可观测性Visibility对 Fleet 部署的任何更改都可能影响采集的数据以及谁有权访问哪些信息。Activity feed 让团队能清楚知道「什么时间、由谁」做了什么变更从而更容易定位发往日志目的地的数据出现意外变化的根源。下表汇总了 4.1.0 的主要功能及其授权级别功能授权级别说明Schedule 定时查询Fleet Core、Fleet Basic按固定间隔在设备上执行查询并采集结果Activity feed 活动流Fleet Core、Fleet Basic记录查询、查询包、实时查询等变更的审计轨迹fleetctl 管理团队Fleet Basic通过 teams 配置文件创建团队、更新 agent options 与 enroll secretsfleetctl 用户角色配置Fleet Basic通过 user_roles 配置文件管理用户访问级别Host 详情页 Users 表Fleet Core、Fleet Basic查看设备上的本地用户账户免邀请直接创建用户Fleet Core、Fleet Basic无需 SMTP 即可添加用户fleetctl user deleteFleet Core、Fleet Basic命令行快速删除用户Schedule让定时数据采集不再依赖查询包从查询包到 Schedule 的演进在 4.1.0 之前想要周期性采集数据用户需要创建并维护 osquery 查询包packs——这要求理解 pack 与 query 之间的关联关系。4.1.0 的 Schedule 将这一过程简化为一对一的映射一条查询 一个执行间隔。在 Fleet UI 中进入Schedule页面即可为你的主机调度周期性执行的查询。操作流程为选择一条已有查询或新建查询设定执行频率Interval保存后 Fleet 便会按该间隔向目标主机下发并执行查询将结果持续发送到你配置的日志目的地。对于已经熟悉 osquery 查询包的老用户Fleet 仍保留完整的查询包管理能力在 Fleet UI 中进入Schedule Advanced即可到达 Packs 页面创建新查询包、修改已有查询包的操作与之前完全一致且该能力同样在 fleetctl 命令行工具中可用。定时查询的底层数据模型在源码中定时查询对应ScheduledQuery结构体其字段直接映射 osquery 的调度配置语义见 server/fleet/scheduled_queries.go字段JSON 键含义Intervalinterval查询执行频率单位秒Snapshotsnapshot是否以快照模式snapshot记录结果Removedremoved是否记录removed差异日志默认 true。当某张表的结果与上次执行时不同osquery 会按{action: removed}或{action: added}输出对应事件Platformplatform逗号分隔的目标平台可选darwin、linux、windows空或 nil 表示所有平台Versionversion仅在该 osquery 版本号及以上版本执行Shardshard将该查询限制在 1-100 百分比的主机上执行Denylistdenylist是否允许该查询被 Watchdog 因资源消耗过大而加入黑名单denylist默认 true值得注意的细节是Snapshot与Removed的组合决定了日志记录模式从 ScheduledQueryFromQuery 的实现可见snapshot模式对应snapshottrue, removedfalsedifferential模式对应snapshotfalse, removedtruedifferential_ignore_removals模式则对应snapshotfalse, removedfalse。这一映射在 ScheduledQueryToQueryPayloadForNewQuery 中反向体现是理解定时查询在设备端产生何种日志的关键。另外4.1.0 及之后的版本中全局定时查询不绑定具体团队由GlobalSchedulePayload承载其 JSON 形如{global_schedule: [...]}见 server/fleet/global_schedule.go。Activity feed完整记录 Fleet 与 osquery 的每一次变更Activity feed 是 4.1.0 引入的审计能力用户可以观察查询在何时、被何人修改查询包何时被创建实时查询live queries何时被执行以及其他更多操作。典型排查场景当组织中的某个人发现发送到已配置日志目的地的数据发生了意想不到的变化时Activity feed 能快速给出答案。一个典型的例子某条查询被修改返回的数据与之前不同而修改者并不知道这条查询被包含在多个查询包中通过 Activity feed 提供的信息你可以快速确定哪条查询需要被修改、哪位同事需要知晓这条查询出现在哪些查询包中。源码中的活动类型体系Fleet 的活动体系在设计上覆盖了从用户到设备、从查询到策略的方方面面。在 server/fleet/activities.go 中每种活动都是一个实现了ActivityName()方法的类型例如查询相关created_saved_query、edited_saved_query、deleted_saved_query、applied_spec_saved_query查询包相关created_pack、edited_pack、deleted_pack、applied_spec_pack实时查询live_query携带目标数量、SQL、统计信息用户与权限user_logged_in、user_failed_login、created_user、deleted_user、changed_user_global_role、changed_user_team_role团队相关created_team、deleted_team、transferred_hosts主机转移、edited_agent_options主机生命周期fleet_enrolled、deleted_host每种活动类型都携带结构化详情字段JSON tag 定义了序列化格式这些字段最终通过/api/v1/fleet/activities系列接口暴露给 UI 与 API 消费者。从实现上可以推断Activity feed 的数据由 server/datastore/mysql/activities.go 持久化到 MySQL并支持按用户、时间等维度查询。用 fleetctl 管理团队声明式下发 osquery 能力teams 配置文件如果你使用配置文件加 fleetctl 命令行管理 Fleet4.1.0 起可以方便地将 osquery 的能力分发到整个组织。新的team 配置文档允许你在命令行或 CI/CD 流水线中创建团队更新团队各自的 agent optionsosquery 与 Orbit 的选项管理团队的 enroll secrets注册密钥。一个典型的团队配置文件YAML结构如下apiVersion: v1 kind: team spec: name: Client Platform Engineering agent_options: config: options: logger_plugin: filesystem schedule_splay_percent: 10 schedule: {} overrides: {} secrets: - secret: team-enroll-secret在源码层面团队规格由TeamSpec结构体承载见 server/fleet/teams.go它区分了「agent_options键缺失保持现有配置不变」与「agent_options键存在但为空清空配置」两种语义——这保证 GitOps 式的增量更新不会意外破坏已有配置。团队级配置还涵盖 host expiry、webhook、集成、MDM、软件安装等维度TeamConfig结构体给出了完整的可配置面见 server/fleet/teams.go。通过fleetctl apply -f teams.yml即可应用配置使用fleetctl get teams teams.yml可以导出当前团队配置用于备份或版本化管理该用法也记录在 docs/Get started/FAQ.md 的降级流程中。user_roles 配置文件4.1.0 同时引入了user_roles 配置文档用于管理组织内个人对 Fleet 的访问级别。其数据结构在 server/fleet/user_roles.go 中定义每个用户映射一个global_role全局角色和/或一组团队角色teams数组每项含团队名与角色名。apiVersion: v1 kind: user_roles spec: roles: aliceexample.com: global_role: admin bobexample.com: teams: - team: Client Platform Engineering role: maintainer从 server/fleet/teams.go 的常量可以看到 Fleet 的角色体系全局与团队角色均包括admin、maintainer、observer后续版本又加入了observer_plus、technician、gitops等高级角色。ValidateRole见 server/fleet/teams.go强制了「要么指定全局角色要么指定团队角色二者不能同时为空或同时存在」的约束保证权限模型清晰无歧义。Host 详情页的 Users 表掌握每台设备上的账户了解设备上存在哪些用户账户是判断哪些终端用户或工具被授予了访问权限的基础。4.1.0 在 Host 详情页新增了Users表格进入Hosts选择一台主机即可看到该设备上用户名username的列表。表格中展示的username、uid、type、groupname等字段同样可以通过 Fleet REST API 获取——调用/api/v1/fleet/hosts/{id}路由即可完整接口定义见 docs/REST API/rest-api.md。如果你好奇这些信息如何从设备采集可以参考 Fleet 标准查询库中基于 osqueryusers表的查询。以 docs/01-Using-Fleet/standard-query-library/standard-query-library.yml 中的标准查询为例SELECT uid, username, type, groupname FROM users u JOIN groups g ON g.gid u.gid;这条查询将 osquery 的users表与groups表按 gid 关联得到每个账户的 uid、用户名、账户类型与所属组。Fleet 前端正是通过周期性地执行这类查询并缓存结果最终在 Host 详情页的 Users 表中呈现给管理员。免邀请创建用户绕过 SMTP 依赖在 4.1.0 之前向 Fleet 添加新用户通常需要发送邮件邀请这要求配置 Simple Mail Transfer ProtocolSMTP服务器。4.1.0 简化了这一流程进入Settings Users选择Create user选择Create user选项直接创建用户无需 SMTP。这样组织可以更方便地在全公司推广 Fleet 的使用而不必先搭建邮件基础设施。对于偏好邮件邀请的团队在Create user弹窗中选择Invite user仍可沿用原有流程。两种方式分别对应源码中的created_user直接创建活动类型且创建与邀请操作都会被记录到 Activity feed 中。用 fleetctl 删除用户4.1.0 为命令行用户新增了fleetctl user delete命令让你可以快速从 Fleet 实例中移除用户。命令实现位于 cmd/fleetctl/fleetctl/user.go基本用法为fleetctl user delete --email userexample.com命令要求通过--email指定要删除用户的邮箱必填底层调用client.DeleteUser(email)完成删除。同文件还提供了批量删除命令fleetctl delete-users可通过 CSV 文件首列为 Email一次导入并删除多个用户见 cmd/fleetctl/fleetctl/user.go。对应的删除操作会以deleted_user活动类型写入 Activity feed保留完整的审计轨迹。小结与升级指引Fleet 4.1.0 通过四个层面的增强提升了部署的易用性与可观测性Schedule让定时数据采集无需理解查询包配合ScheduledQuery结构体提供的 interval、platform、version、shard 等精细控制可以灵活配置设备端的数据上报Activity feed为查询、查询包、实时查询、用户权限等所有关键变更提供结构化审计记录是排障与合规的得力工具fleetctl 的 teams 与 user_roles 配置文档让团队创建、agent options 更新、enroll secrets 与用户权限管理全面进入声明式/CI 流水线Host 详情页 Users 表、免邀请创建用户、fleetctl user delete补齐了日常运维中最常用的用户管理场景。如果你想在自己的环境中体验这些功能可参考 docs 目录下的部署与使用文档或直接克隆当前仓库查看完整的 server/fleet 源码实现。升级现有部署时建议先在测试环境验证 Schedule 与 Activity feed 的行为再对生产环境执行版本更新。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考