Fleet 4.17.0 深度解析:Orbit 与 Fleet Desktop 正式 GA,macOS 电池健康监测上线
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
本篇技术指南围绕开源设备管理平台 Fleet 的 4.17.0 版本展开,逐条剖析该版本的核心变更:osquery 安装器 Orbit 正式退出 Beta、Fleet Desktop 桌面客户端正式 GA、macOS 主机详情页新增电池健康状况字段,以及一批围绕健康检查、漏洞扫描、API 修复与匿名使用统计的改进。读完本文,你将掌握如何使用fleetctl package生成带 Fleet Desktop 的 agent 安装包、理解 battery 健康度的底层计算逻辑,以及如何利用/healthz?check=mysql、/healthz?check=redis对 Fleet 服务做精细化健康探活。
版本概览
Fleet 4.17.0 发布于 2022 年 7 月,是 Fleet 在 osquery 管理与终端用户体验两个方向上的关键里程碑。该版本的三大 Highlights 均对 Fleet Free 与 Fleet Premium 同时开放:
- Orbit(osquery 安装器)正式 GA:将 osquery 的安装、更新与配置自动化封装为轻量级守护进程,可脱离 Fleet 单独使用;
- Fleet Desktop 正式 GA:让终端用户通过系统托盘即可查看 Fleet 可见的设备信息、漏洞软件与策略合规计分卡;
- Host Details 新增电池状况(macOS):帮助管理员快速判断 Mac 电池是否需要更换。
让 Orbit 正式成为你的 osquery 安装器
可用范围:Fleet Free 与 Fleet Premium
Orbit 是 Fleet 为 osquery 打造的轻量级包装器(wrapper),其核心职责是自动化完成 osquery 在设备上的安装、更新与配置。4.17.0 之前它以 Beta 形态交付,本次正式 GA 意味着它已可作为生产环境的标准安装通道。值得强调的是,即使你不使用 Fleet 服务器,也可以单独借助 Orbit 来管理 osquery 的部署与升级。
使用 fleetctl package 生成安装器
生成安装包的入口是fleetctlCLI 的package子命令,其定义位于 cmd/fleetctl/fleetctl/package.go:
func packageCommand() *cli.Command { return &cli.Command{ Name: "package", Usage: "Create a fleetd agent", Description: "An easy way to create fully boot-strapped installer packages for Windows, macOS, or Linux", ... } }如果你要接入 Fleet 服务器,最推荐的方式是在 Fleet UI 的Hosts > Add hosts页面获取已预填当前实例专属参数(Fleet URL、enroll secret 等)的完整命令;生成安装包后,解压并在目标主机上运行即可完成注册。
一个最小化的生成命令形如:
fleetctl package --type=pkg --fleet-url=https://fleet.example.com --enroll-secret=<your-secret>从源码看,fleetctl package支持以下常用参数(含默认值与说明):
| 参数 | 说明 | 默认值 |
|---|---|---|
--type | 安装包类型(必需),如 pkg / deb / rpm / msi 等 | 无 |
--arch | 目标 CPU 架构,仅对 deb、rpm、msi、pkg.tar.zst 生效 | amd64 |
--enroll-secret | 向 Fleet 服务器认证的注册密钥 | 无 |
--fleet-url | Fleet 服务器地址(host:port) | 无 |
--fleet-certificate | Fleet 服务器证书链路径 | 无 |
--identifier | 安装包产品标识 | com.fleetdm.orbit |
--insecure | 关闭 TLS 证书校验 | 否 |
--service | 以持久化服务方式安装(launchd / systemd 等) | true |
--fleet-desktop | 在安装包中附带 Fleet Desktop 应用 | 否 |
--fleet-desktop-alternative-browser-host | Fleet Desktop 在浏览器中使用的替代 host:port(TLS 客户端认证场景下可能需要) | 无 |
--disable-updates | 禁用生成的安装包自动更新 | 否 |
--update-url | 更新服务器地址 | update 默认 URL |
--update-roots | 更新服务器根密钥 JSON 元数据(来自fleetctl updates roots) | 无 |
--osquery-flagfile | 打包并提供给 osquery 的 flagfile | 无 |
--update-interval | Orbit 检查更新的间隔(如 10s、1h) | 15m |
--debug | 开启 orbit 调试日志 | 否 |
--host-identifier | 注册时使用的 host 标识符:uuid或instance | 无 |
--enable-scripts | 启用脚本执行能力 | 否 |
--use-system-configuration | 尝试从主机配置读取--fleet-url与--enroll-secret(目前仅支持 macOS 描述文件) | 否 |
Orbit 的守护进程实现
在 orbit/cmd/orbit/orbit.go 中可以看到 Orbit 运行时的完整逻辑:它接受--fleet-desktop等 CLI 标志(如 L191 处的标志定义),并在启动后负责拉起、监控 osquery 进程,按--update-interval周期检查组件更新。同时,Orbit 还会根据系统是否存在登录 GUI 用户来决定是否启动 Fleet Desktop(源码中通过查找 GUI 用户、清理历史实例、失败重试等逻辑保证桌面组件的稳定存活)。
面向未来的远程管理规划
官方对该安装器的后续规划包括:在无需重新安装、也无需 SSH 到单台机器的情况下,直接跨组织管理osquery扩展(extensions)与注册(enrollment)标志,最终形成远程管理 osquery 的一站式入口。这一能力在后续版本中逐步演化为 fleetd 的分布式配置能力,可从 orbit/pkg/update 与 orbit/pkg/wstransport 的模块结构中看到其演进脉络。
通过 Fleet Desktop 与终端用户互动
可用范围:Fleet Free 与 Fleet Premium
Fleet Desktop 是运行在终端用户系统托盘中的桌面客户端,它的定位是把安全责任可视化地交还给用户:点击托盘中的 Fleet 图标,用户即可看到 Fleet 在自己设备上能看到什么、是否装有存在漏洞的软件,以及自己的策略计分卡(policy scorecard)。如果组织采用 Zero Trust 框架,用户可以在被阻断访问内部工具之前主动修复漏洞、维持合规状态,从而避免不必要的访问中断。
Fleet 官方对该功能的长期愿景是:成为 IT 与安全团队和终端用户之间的开放式沟通渠道,帮助用户主动掌控设备健康、快速自助解决问题。
如何将 Fleet Desktop 打进安装包
只需在fleetctl package命令中追加--fleet-desktop标志:
fleetctl package --type=pkg \ --fleet-url=https://fleet.example.com \ --enroll-secret=<your-secret> \ --fleet-desktop该标志在 cmd/fleetctl/fleetctl/package.go 中定义,会将 Fleet Desktop 应用一并打包;Orbit 启动后会自动检测并拉起该桌面应用(相关处理逻辑见 orbit/cmd/orbit/orbit.go 的execute函数注释:确保 fleet-desktop 正在运行,且进程被持续监控)。
Fleet Desktop 的运行机制
从 orbit/cmd/desktop/desktop.go 的源码可以确认其关键行为:
- 每5 分钟调用一次摘要 API 以刷新策略状态(
desktopSummaryInterval = 5 * time.Minute); - 每10 秒执行一次连通性 ping,与 osquery 分布式查询的默认读取间隔保持一致;
- 用户点击My device或About Fleet时会触发一次即时的策略检查。
Fleet Desktop 的托盘菜单逻辑位于 orbit/cmd/desktop/menu/menu.go,并针对 Windows、macOS、Linux 分别实现了平台适配层(见 orbit/cmd/desktop 下的desktop_windows.go、desktop_darwin.go、desktop_linux.go)。需要注意的是,源码注释明确提及策略状态上报等能力依赖 Fleet 的授权许可(License),部署时应结合实际订阅确认功能可用性。
Host Details 新增 macOS 电池健康状况
可用范围:Fleet Free 与 Fleet Premium
物理硬件的健康与安全同等重要。4.17.0 在 macOS 主机的Host Details页面新增电池状况字段,管理员无需接触设备即可判断电池是否需要更换。
数据来源与计算逻辑
Fleet 通过 osquery 的battery表采集电池数据。当前仓库中该查询的定义位于 server/service/osquery_utils/queries.go:
"battery": { // This query is used to determine battery health of macOS and Windows hosts // based on the cycle count, designed capacity, and max capacity of the battery. Query: `SELECT serial_number, cycle_count, designed_capacity, max_capacity FROM battery`, ... },服务端在 server/service/osquery_utils/queries.go 的directIngestBattery/generateBatteryHealth中完成健康度计算,规则如下:
- 采集字段:
cycle_count(循环次数)、designed_capacity(设计容量)、max_capacity(当前最大容量); - 若循环次数达到或超过1000(
batteryDegradedCycleCount),判定为Service recommended(建议维修/更换); - 否则计算健康度百分比:
max_capacity / designed_capacity * 100,低于80%(batteryDegradedThreshold)判定为Service recommended; - 满足条件则判定为
Normal(正常); - 若容量数据缺失或解析失败,返回
Unknown(未知)并记录错误日志。
三种状态的常量定义与阈值在源码中一目了然:batteryStatusGood = "Normal"、batteryStatusDegraded = "Service recommended"、batteryStatusUnknown = "Unknown"、batteryDegradedThreshold = 80、batteryDegradedCycleCount = 1000。
说明:上述计算逻辑取自当前仓库源码,与 4.17.0 首版相比可能经历了后续版本的演进,但可据此理解 battery 健康度判定的基本模型。
更多新特性、改进与修复
除了三大亮点,Fleet 4.17.0 还包含以下值得关注的变更:
平台与架构支持
- 原生支持 M1 Mac:为 Apple Silicon 提供原生构建,不再依赖 Rosetta 转译,提升 agent 性能与稳定性。
服务健康检查精细化
独立的 MySQL 与 Redis 健康检查:健康仪表盘(health dashboard)改进了错误状态上报,并支持对依赖项做精确探活:
/healthz?check=mysql:仅检查 MySQL 状态;/healthz?check=redis:仅检查 Redis 状态。
从 server/health/health.go 的源码可以看到,
/healthz处理器从 URL 查询参数读取check列表,可一次传入多个检查项;未指定时默认检查全部依赖。对应测试用例位于 server/health/health_test.go,覆盖了空检查名(400)、非法检查名(400)、混合通过/失败(500)以及全部通过(200)等场景。这一能力对 Kubernetes、容器编排环境中的 Readiness Probe 尤为实用。
查询与数据准确性
- Query 页面新增
docker_container_envs表:在 osquery 表结构中补充了 Docker 容器环境变量的查询能力,便于排查容器配置与敏感信息泄露面。 - 修复报告错误平台的 osquery 表:修正部分表的 platform 标记,避免在错误平台执行查询。
- Ubuntu 的
os_version反映准确补丁号:更新了主机详情查询,使 Ubuntu 主机的os_version包含准确的补丁号,便于精确的版本与漏洞管理。 - 改进
software_host_counts准确性:当某软件被卸载后,会从对应软件的 host 计数中移除该主机,避免软件清单与漏洞暴露面板出现虚高数字。 - 改进
last_restarted日期准确性:修正主机上次重启时间的计算口径,为基于重启时长的策略提供可靠依据。 - 修复操作系统版本策略的 SQL 生成:减少因版本比较 SQL 生成不当导致的误报(false negatives)。
API 与命令行修复
- 修复
/api/v1/fleet/hosts/identifier/{identifier}的host.status返回值:该端点此前可能返回错误的 status 字段。该路由在 server/service/handler.go 中注册,集成测试(如 server/service/integration_core_hosts_test.go)覆盖了不存在主机返回 404、正常主机返回 200 的场景。 - 改进 fleetctl 遇到权限错误时的日志输出:让管理员在生成安装包、写入配置等操作失败时能更快定位问题。
漏洞扫描与使用统计
- 支持使用 OVAL 定义扫描 RHEL 系与 Fedora 主机:扩展漏洞扫描覆盖面,从 Debian/Ubuntu 扩展到红帽系发行版,缩小 Linux 设备在漏洞暴露面的盲区。
- 匿名使用统计新增两项指标:按操作系统及其版本统计的已注册主机数,以及每周活跃用户数。这些数据仅以匿名聚合形式回传,用于帮助官方改进产品。
如何升级到 Fleet 4.17.0
升级前建议先完整阅读 Fleet 官方文档中的升级指南(Upgrading Fleet),并遵循以下通用检查项:
- 备份数据库:升级涉及数据库迁移,务必提前备份;
- 阅读变更日志:对照版本间变更确认是否有破坏性调整;
- 小范围灰度:先升级测试环境,再推广到生产;
- 验证健康检查:升级后使用
/healthz、/healthz?check=mysql、/healthz?check=redis确认服务与依赖状态。
总结
Fleet 4.17.0 是一份"体验升级"色彩浓厚的版本:Orbit 与 Fleet Desktop 双双 GA,标志着 osquery 的规模化交付与终端用户自助合规从实验走向生产;电池健康状况让主机详情从"软件视角"延伸到"物理硬件视角";而细粒度健康检查、RHEL/Fedora OVAL 扫描、API 修复等配套改动则夯实了企业级部署的可靠性底座。对于正在规划设备管理平台的团队,这一版本提供了从 agent 打包、桌面互动到硬件健康监测的完整参考实现。
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考