Dozzle Cloud 数据边界指南:什么数据离开你的主机、如何拦截以及云端的存储与删除 Dozzle Cloud 数据边界指南什么数据离开你的主机、如何拦截以及云端的存储与删除【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzleDozzle 自托管实例通过出站连接与 Dozzle Cloud 建立联系无需开放端口、公网 IP 或安装 Agent。本文围绕 Your Data 文档系统讲解哪些数据会离开主机、如何用dev.dozzle.cloud.min_level标签在日志离开主机前进行过滤、Cloud 到底存储了什么、API Key 的安全模型以及不注销账号也能停止数据收集的完整操作路径帮助你在使用云服务时保持对数据的掌控。链接 Cloud 不会暴露你的 Dozzle很多用户担心链接到云端意味着把自托管的 Dozzle 暴露到公网事实恰恰相反Dozzle 实例与 Cloud 之间建立的是outbound出站连接由你的实例主动发起并保持没有打开任何入站端口不需要端口转发Cloud 无法主动连回你的实例Cloud 访问你的实例的唯一途径就是你实例主动建立的这条连接取消链接Unlink后该访问通道立即终止。从源码实现看这条连接的承载者是 gRPC 客户端 internal/cloud/client.go。它通过apiKeyFunc获取当前 Cloud API Key 建立ToolStream长连接并支持自动重连退避策略initialBackoff 1s、maxBackoff 30s、指数因子 2、10% 抖动见 internal/cloud/client.go。连接目标默认是agent.doligence.dozzle.dev:443可通过环境变量AGENT_URL覆盖http://前缀仅用于本地开发调试断线重连、被动等待都由客户端自动完成。链接不等于加认证这一点必须单独处理链接 Cloud 不会给自托管 Dozzle 添加任何认证机制。这是一个独立且重要的问题默认情况下 Dozzle没有登录。任何能访问到你网络的人都能查看你的日志。如果你将 Dozzle 暴露到公网或者与不可信的人共享网络必须在实例自身配置 Authentication认证 —— 无论是否链接 Cloud 都适用。链接与否只决定数据是否流向 Cloud与本地访问安全完全是两码事。另外容器操作start / stop / restart默认被你的实例拒绝除非你显式开启DOZZLE_ENABLE_ACTIONS或启动参数--enable-actions详见 Actions。这意味着即使链接了 Cloud你的实例也不会擅自对容器执行任何变更操作。控制哪些内容被转发在日志离开主机前过滤最有效的隐私控制是从一开始就不发送。默认情况下链接期间每个运行中容器的日志都会被流式转发到 Cloud。对于日志级别为 info 但毫无诊断价值的容器或者包含你希望留在主机上的敏感内容的容器可以通过一个标签进行过滤或整体跳过。dev.dozzle.cloud.min_level标签取值效果(未设置)转发所有日志行。默认行为。disabled完全跳过该容器不向 Cloud 转发任何日志。trace与未设置相同因为 trace 是最低级别所有内容都被转发。debug/info/warn/error/fatal仅转发等于或高于该级别的日志行。无法识别级别的日志行始终会通过级别未知的日志不参与过滤。未被识别的值例如拼写错误的warning或wran会被记录为错误并被忽略效果等同于标签未设置 —— 容器将流式转发全部日志。注意值的大小写与前后空格会被自动归一化strings.ToLowerTrimSpace例如DISABLED、disabled均与disabled等价。标签的读取发生在日志读取器log reader启动时。对运行中容器修改标签需要重启容器后才能生效。services: zigbee2mqtt: image: koenkk/zigbee2mqtt labels: # 只把 warn/error/fatal 转发给 Dozzle Cloud - dev.dozzle.cloud.min_levelwarn noisy-debug-tool: image: example/debug labels: # 该容器不发送任何内容 - dev.dozzle.cloud.min_leveldisabled源码级实现过滤发生在离开主机之前标签解析与过滤逻辑集中在 internal/cloud/log_streamer.go标签常量定义为cloudMinLevelLabel dev.dozzle.cloud.min_levellog_streamer.go级别按严重程度排序trace(1) debug(2) info(3) warn(4) error(5) fatal(6)不在表中的级别如 unknown排在第 0 位始终通过过滤log_streamer.goparseMinLevel返回三个值rank级别阈值、disabled是否整容器跳过、valid值是否合法。空值合法且不加过滤disabled合法且跳过整个容器无法识别的非空值非法log_streamer.go在startReader中若disabled为真则直接return不会为该容器创建日志读取器也不会启动任何流式 goroutinelog_streamer.go非法值会被记录log.Error提示预期取值是trace, debug, info, warn, error, fatal, disabled之一随后按无过滤处理log_streamer.go实际行级过滤发生在runReader的消费循环里if r : cloudLevelRank[ev.Level]; r 0 r minRank { continue }—— 级别高于 0 且低于阈值才被丢弃log_streamer.go。测试 internal/cloud/log_streamer_test.go 对这些行为有明确验证TestParseMinLevel覆盖了空值、disabled、DISABLED、disabled带空格、info、WARN、garbage等大小写与空白归一化场景log_streamer_test.goTestLogStreamer_InvalidLabelIgnoredStreamsAll验证非法标签被忽略后 debug/info/warn 级别全部通过log_streamer_test.go还有专门测试断言disabled容器的 client service 从未被流式访问assert.False(t, disabledClient.streamed.Load(), disabled container must not be streamed)。关键点过滤在你的 Dozzle 实例上运行、在日志离开主机之前完成。被丢弃的日志行永远不会触碰网络也不占用你的套餐额度不进入 log volume也不产生事件。本地日志查看完全不受影响。注意该标签只作用于日志流从 internal/cloud/stats_streamer.go 的注释可以明确dev.dozzle.cloud.min_level是日志级别过滤器只约束日志流不影响指标metrics上报。让min_leveldisabled的容器仍然会上报 CPU、内存、网络、磁盘等统计序列 —— 代码注释中明确写道此处刻意没有提供退出选项因为指标退出需要独立的标签机制而不是复用这个标签否则min_leveldisabled会悄悄清空容器的 CPU/内存图表。因此如果你希望某个容器连指标都不上报当前版本的标签机制并不支持只能考虑不解链或整体控制。Cloud 存储了哪些数据链接后以下数据会进入 Dozzle Cloud日志行从你链接的实例转发的日志用于全文搜索事件与告警匹配你规则的告警事件以及对应的排查记录investigations和结论findings容器与主机元数据名称、镜像、状态、资源使用情况你的账户信息邮箱地址、套餐、通知渠道设置与 Chat Agent 的对话历史。所有数据都限定在你的账户范围内其他用户无法看到你的数据。存储的数据按照你套餐的保留窗口retention window保存到期后自动删除。各套餐的保留期限如 Free 24 小时日志搜索 / 1 天事件历史Pro 与 Team 30 天日志与 30 天事件历史见 Plans Limits套餐与限制。从实现上看日志与指标是两条独立的流式管线log_streamer.go 将原始日志行以LogBatch批量推送每批上限 500 条 / 256 KB或 1 秒定时冲刷从当前时刻开始读取避免每次重连重放历史日志stats_streamer.go 以 30 秒窗口聚合 Docker 约 1Hz 的统计样本将 CPU按核数归一化、内存、网络收发总量、磁盘读写总量打包为StatsBatch上报每窗口一次。这两条管线都随 Cloud 连接创建、随连接断开销毁并在重连后全新启动。API Key实例的认证凭证每个链接的实例使用独立的 API Key进行认证Key 使用BLAKE2b哈希存储支持过期时间绝不保存明文在 Instances实例页面删除某个 Key 会立即且永久断开对应实例被删除的 Key无法恢复也无法重新挂载—— 只能重新链接实例以生成新 Key如果你怀疑 Key 已泄露删除并重新链接即可。这是完整的补救手段旧 Key 在删除的那一刻立即失效。从代码结构看API Key 作为连接认证凭据由 internal/cloud/client.go 的apiKeyFunc动态提供并且在每次 unary 调用如日志搜索时通过 gRPC metadatax-api-key、x-instance-id携带身份信息供云端注册表区分同一 Key 下的多路连接例如 swarm 副本或远程 agent。这与文档所述的每实例独立 Key模型一致。登录方式无密码基于 GitHub / GoogleDozzle Cloud 使用GitHub 或 Google 登录无需创建独立密码Cloud永远不会看到你的 GitHub 或 Google 密码OAuth 流程由对应平台完成如果你用提供商 A 注册之后用提供商 B 并以相同邮箱登录会进入同一个账户。不注销账户也能停止数据收集如果你暂时不需要云服务但不想删除账户可以按以下两步停止收集在 Instances实例页面删除实例的 API Key—— 转发立即停止在 Channels渠道页面禁用你的通知渠道—— 确保没有任何消息被投递。此后已存在的历史数据会在套餐保留窗口内自然老化并删除例如 Free 套餐的日志搜索与事件历史为 1 天。关闭账户目前没有自助删除按钮。需要使用账户绑定的邮箱发送邮件至amirdozzle.dev申请删除。如果你在付费套餐上请先在设置中取消订阅以免被继续扣费。也可以不等待人工删除直接使用上一步的操作自行完成绝大部分清理删除所有 API Key 即停止全部数据收集已存数据随保留窗口自然老化。小结关注点结论安全模型出站连接无入站端口取消链接立即切断访问认证链接不等于认证自托管 Dozzle 默认无登录暴露前务必配置认证日志过滤dev.dozzle.cloud.min_level标签在主机侧拦截离线前生效不占额度指标min_level只作用于日志不影响 CPU/内存等指标上报存储范围日志、事件/告警、容器与主机元数据、账户信息、对话历史均限账户内凭证每实例独立 API KeyBLAKE2b 哈希、可过期、删除即永久断开停止收集删 Key 禁用渠道历史数据按保留窗口老化删除账户邮件申请amirdozzle.dev付费用户先取消订阅相关延伸阅读Dozzle Cloud 总览、连接你的实例含防火墙规则与排障、通知渠道、套餐与限制。【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考