十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 Fleet 的 disk_space 表驱动 macOS 磁盘空间自动化与报告

用 Fleet 的 disk_space 表驱动 macOS 磁盘空间自动化与报告 用 Fleet 的 disk_space 表驱动 macOS 磁盘空间自动化与报告【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet当 macOS 上的磁盘空间查询结果与系统报告不一致时问题往往出在数据源mounts表不包含 purgeable可回收空间会持续低估可用容量。本篇指南讲解如何在 Fleet 中改用disk_space表正确度量 macOS 可用磁盘空间并基于它构建更新合规策略、容量报告与 Webhook 清理自动化让你的监控数据与用户和 macOS 安装器看到的一致。问题mounts 表低估了 macOS 的真实可用空间一位客户的 IT 团队在 Fleet 中建立了一条磁盘空间查询发现数字与 macOS 系统报告不一致——他们是对的。mounts表报告的是文件系统原始块total、free、used它不包含 purgeable 空间因此会持续低估真实可用的容量。这个差距在两种场景下影响最大Mac 无法下载或安装软件更新时你怀疑是空间不足但mounts给出的数字让你误判方向用户坚信自己的磁盘没那么满而仪表盘显示的空间与 Finder 里显示的“可用空间”对不上产生大量工单。两种情况的修复都只需一行改动把mounts换成disk_space。purgeable 空间介于“已用”与“真正空闲”之间macOS 将 purgeable 空间缓存、Time Machine 本地快照以及其他可回收数据视为可用。在 Finder 中对启动磁盘执行Get Info显示的数字就包含了 purgeable 空间。而mounts表不会这样做。客户 IT 团队立即发现了这个差异“查询似乎没有包含可重写的磁盘空间。”The query doesnt seem to include rewritable disk space.他们问对了问题。macOS 主动管理着一层介于“已用”和“真正空闲”之间的可回收存储层当应用或安装器需要空间时系统会按需回收它从用户角度看这块空间是可用的从文件系统角度看它已经被分配。因此一个磁盘在mounts中可能显示已用 90%而 macOS 告诉用户还有 50 GB 可用。两个数字在各自语境下都是正确的但只有后者匹配用户的真实体验也只有后者是 macOS 安装器实际会使用的数字。为什么这与更新合规性直接相关这个差距不再只是舍入误差而是会引发真实问题。macOS 需要足够的空闲空间来暂存stage更新否则不会下载或安装。Apple 没有公布硬性数字但实际测试大致如下更新类型大致所需空闲空间小版本更新minor update约 15 GB大版本升级major upgrade约 35 GB安装器本身 升级过程的工作空间如果主机空间不足更新会静默失败、下载中途卡住或者用户直接忽略“空间不足”提示继续工作。排查一批 Mac 更新滞后时检查mounts会把你引向错误方向主机可能有 30 GB 的 purgeable 缓存闲置在那里macOS 会在更新过程中自动回收但mounts把这些空间计为“已用”。你必须手动深入主机才能发现它其实空间充足。改用disk_space后你拿到的数字与安装器看到的完全一致——一个主机如果空间检查失败那是真的空间不足而不是缓存数据造成的误报。前置条件一个已注册 macOS 主机的 Fleet 实例在 Fleet 中运行实时查询live queries和创建策略policies的权限。使用 disk_space 表disk_space是 fleetdFleet 的 osquery 代理在 macOS 平台上提供的扩展表。从源码看它的实现位于 orbit/pkg/table/disk_space/disk_space_darwin.go通过osascript以 JavaScript 调用 Apple 的NSURLVolumeAvailableCapacityForImportantUsageKey和NSURLVolumeTotalCapacityKey两个 API 获取数据——这正是 macOS 用于计算“可用空间”并展示给用户的同一组 API因此它天然包含 purgeable 空间。表提供两个列bytes_available可用容量字节包含 purgeable 空间bytes_total总容量字节。该表在 orbit/pkg/table/extension_darwin.go 中注册且带darwin构建标签即只有 macOS 平台会加载。在你的 macOS 主机上运行这条查询SELECT bytes_available FROM disk_space;就这一行。bytes_available给出包含 purgeable 空间在内的可用容量与用户在 Finder 中看到的一致也与 macOS 安装器实际可用的容量一致。注意disk_space仅适用于 macOS。做跨平台报告时Linux 和 Windows 上仍需使用mountsLinux 用logical_drives等表因为在这些平台上不存在 purgeable 空间这一因素。服务端如何消费 disk_space服务端在 server/service/osquery_utils/queries.go 中定义了disk_space_darwin这个主机详情查询它把原始字节换算成更易读的指标SELECT ROUND(bytes_available * 100.0 / bytes_total, 2) AS percent_disk_space_available, ROUND(bytes_available * 10e-10, 2) AS gigs_disk_space_available, ROUND(bytes_total * 10e-10, 2) AS gigs_total_disk_space FROM disk_space LIMIT 1;percent_disk_space_available可用空间百分比gigs_disk_space_available可用空间GBgigs_total_disk_space总容量GB。该查询带有discoveryTable(disk_space)探测语句只有当主机具备disk_space表时才执行对于不支持该表的老版本 macOS fleetd服务端还保留了disk_space_darwin_legacy查询回退到基于mounts的计算保证兼容性。采集结果最终通过directIngestDiskSpace函数queries.go写入主机磁盘空间字段供 UI 仪表盘直接展示。构建自动化与报告一旦你的查询反映真实情况就可以用它来排查更新问题而不只是做常规告警。标记无法进行下一次更新的主机由于小版本更新与大版本升级所需的空间余量不同请分别设置阈值。下面是小版本更新的策略policy- name: Sufficient disk space for macOS minor update query: SELECT 1 FROM disk_space WHERE bytes_available 15000000000; critical: false description: - This policy checks whether a host has at least 15GB of available disk space, including purgeable space, which is roughly what macOS needs to download and install a minor update. Hosts that fail this policy are likely stuck on an older version because the update cant stage, not because anyone is ignoring the update prompt. resolution: |- Free up disk space by removing unnecessary files, emptying the Trash, or uninstalling unused applications. Once the host has enough free space, macOS should be able to download and install the pending update. If the issue persists, please reach out to support. platform: darwin webhooks_and_tickets_enabled: true对大版本升级把阈值提高到约 35 GB即bytes_available 35000000000并相应调整名称和描述。两条策略并排运行一眼就能看出某台主机更新滞后是因为磁盘空间还是其他原因在排查合规差距时非常省时。说明该策略显式声明platform: darwin确保只针对 macOS 主机评估critical: false表示它属于普通非高危策略。webhooks_and_tickets_enabled: true让失败的主机进入 Webhook / 工单自动化通道。更多策略字段如run_script、install_software、labels_include_any等可参考 docs/Configuration/yaml-files.md 中的策略示例。构建容量报告把SELECT bytes_available FROM disk_space;配置为 Fleet 中的报告report按固定间隔采集并导出结果用于构建仪表盘或喂给 ITSM 工具。报告在 GitOps YAML 中的写法如下参考 docs/Configuration/yaml-files.mdreports: - name: macOS available disk space (including purgeable) description: Reports the available disk capacity on macOS hosts as seen by users and the macOS installer. query: SELECT bytes_available FROM disk_space; platform: darwin interval: 300 observer_can_run: true automations_enabled: falseinterval采集间隔秒platform: darwin只对 macOS 主机执行observer_can_run是否允许观察者角色运行automations_enabled是否启用相关自动化。导出的数字将与用户上报的一致这意味着“但我的 Mac 明明显示还有空间”这类工单会大幅减少。自动化清理工作流利用 Fleet 的 Webhook 集成在可用空间越过边界变成一次更新失败之前触发动作提示用户清理、自动开一张工单或启动一个清理已知缓存目录的修复脚本。Fleet 的失败策略 Webhook 配置位于webhook_settings.failing_policies_webhook下参考 docs/Configuration/yaml-files.mdwebhook_settings: failing_policies_webhook: enable_failing_policies_webhook: true destination_url: https://example.org/webhook_handler policy_ids: - 1 # Sufficient disk space for macOS minor update - 2 # Sufficient disk space for macOS major upgrade host_batch_size: 100enable_failing_policies_webhook开启后失败策略的 host 标识会 POST 到destination_urlpolicy_ids触发 Webhook 的策略 ID 列表host_batch_size单次请求最多携带的主机数0表示一次发送全部全局的webhook_settings.interval默认24h控制策略 Webhook 与主机状态 Webhook 的触发频率可按需调小以便更快响应。配合webhooks_and_tickets_enabled: true的磁盘空间策略你可以在空间不足真正阻断更新之前就通过 Webhook 把“该清理磁盘了”的提醒推给用户或 ITSM 系统形成闭环。进一步阅读内置的跨平台“Disk space”查询基于mounts见 docs/queries.yml其中包含 Linux 下对/media、/dev、/proc、/sys、docker 挂载点等的排除逻辑可作为跨平台报告的参考disk_space表的源码实现见 orbit/pkg/table/disk_space/disk_space_darwin.go服务端磁盘空间详情查询与摄入逻辑见 server/service/osquery_utils/queries.go策略、报告与 Webhook 的 GitOps YAML 语法见 docs/Configuration/yaml-files.md。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表