Jaeger 如何配置 Badger 存储后端的目录与 span 保留时长?
Jaeger 如何配置 Badger 存储后端的目录与 span 保留时长【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger当你用 Jaeger 的 Badger 后端存储 span 时需要回答两个配置问题数据写到磁盘的哪个目录key 目录与 value 目录以及 span 保留多长时间后再不可访问。Jaeger 的 Badger 默认是ephemeral临时模式数据放在临时文件系统中directories配置不生效只有显式关闭临时模式并指定目录落盘配置才会起作用。本文基于仓库中 cmd/jaeger/config-badger.yaml 示例与 internal/storage/v1/badger/config.go 的配置定义说明如何完成这一配置并验证结果。Badger 后端配置块包含哪些字段Badger 后端的配置项定义在 internal/storage/v1/badger/config.go 的Config结构体中。各字段的 YAML 键名mapstructure标签与文档给出的含义如下字段YAML 键作用按源码注释默认值TTLttl.spansspan store 数据保留时长超过该时长后 span 数据不再可访问72hDirectoriesdirectories.keys/directories.valueskey 与 value 各自存放的目录。必须ephemeral: false才生效可执行文件所在目录下的/data/keys与/data/valuesEphemeralephemeral为 true 时数据存放在临时文件系统directories配置被忽略trueSyncWritesconsistency为 true 时所有写入立即同步到磁盘源码注释标明这会影响写入性能false性能优先于持久性MaintenanceIntervalmaintenance_interval对存储内容执行维护任务的间隔5mMetricsUpdateIntervalmetrics_update_intervalJaeger 采集 Badger 指标的间隔10sReadOnlyread_only以只读模式打开存储多个实例可以只读方式打开同一个 store但写在 write-ahead-log 中尚未落盘的值需要先 replay 才能打开false两点需要特别注意想配置目录ephemeral必须设为false否则directories直接被忽略。ttl.spans的语义是数据过期后“不再可访问”no longer be accessible这是 TTL 配置注释中的原文表述。在配置文件中写入目录与保留时长仓库中的 cmd/jaeger/config-badger.yaml 给出了完整的 Badger 后端示例。其中jaeger_storage扩展的backends下定义了两个 store主 storesome_storespan 保留 48h与归档 storeanother_store保留 720h即 30 天分别指向不同的 keys/values 目录extensions: jaeger_query: storage: traces: some_store traces_archive: another_store jaeger_storage: backends: some_store: badger: directories: keys: /tmp/jaeger/ values: /tmp/jaeger/ ephemeral: false ttl: spans: 48h # 2 days metrics_update_interval: ${env:BADGER_METRICS_UPDATE_INTERVAL:-10s} another_store: badger: directories: keys: /tmp/jaeger_archive/ values: /tmp/jaeger_archive/ ephemeral: false ttl: spans: 720h # 30 days metrics_update_interval: ${env:BADGER_METRICS_UPDATE_INTERVAL:-10s} exporters: jaeger_storage_exporter: trace_storage: some_store这份配置中有三处关联关系需要保持自洽jaeger_storage.backends中定义的 store 名称如some_store是唯一的引用名导出器jaeger_storage_exporter通过trace_storage: some_store声明 trace 写往哪个 storejaeger_query扩展通过storage.traces以及可选的storage.traces_archive声明查询服务读哪个 store。示例中directories使用/tmp/jaeger/、/tmp/jaeger_archive/只是文档示例路径实际使用时替换为你机器上可写的目录即可metrics_update_interval的值${env:BADGER_METRICS_UPDATE_INTERVAL:-10s}表示读取环境变量BADGER_METRICS_UPDATE_INTERVAL未设置时回落到 10s。如需调整写入同步行为或维护间隔在同一个badger:块内补充consistency、maintenance_interval字段即可。启动服务并验证目录已生效不带配置文件直接启动jaeger时走的是默认 All-in-One 配置并使用内存存储见 cmd/jaeger/internal/command.goBadger 配置不会生效。必须用--config显式传入配置文件jaeger --config cmd/jaeger/config-badger.yaml路径按你实际保存配置文件的位置替换。启动后让系统写入一些 trace然后检查directories指定的目录Badger 目录中会出现数据文件仓库的 Badger v1 到 v3 升级文档 展示了一个 Badger 数据目录的ls示例输出文档示例❯ ls /tmp/badger/ 000001.vlog 000180.sst 000257.sst 000294.sst ... MANIFEST KEYREGISTRY即目录下出现.vlog、.sst、MANIFEST等文件说明数据已按配置落到该目录。如果写入时遇到permission denied类错误文档 Badger file permissions as non-root service 说明Jaeger 1.50 之后 Docker 镜像不再以 root 运行挂载卷上的目录若属主不是进程用户写数据就会报权限错误。文档给出的规避方式是运行一个以 root 执行的初始化步骤预创建数据目录并把属主改为运行 Jaeger 的用户compose 示例文档原文user: root的prepare-data-dir服务只做一次mkdir与chown随后可删除jaeger: image: jaegertracing/all-in-one:latest command: - --badger.ephemeralfalse - --badger.directory-key/badger/data/keys - --badger.directory-value/badger/data/values - --badger.span-store-ttl72h0m0s # limit storage to 72hrs environment: - SPAN_STORAGE_TYPEbadger volumes: - jaeger_badger_data:/badger depends_on: prepare-data-dir: condition: service_completed_successfully prepare-data-dir: # Run this step as root so that we can change the directory owner. user: root image: jaegertracing/all-in-one:latest command: /bin/sh -c mkdir -p /badger/data touch /badger/data/.initialized chown -R 10001:10001 /badger/data volumes: - jaeger_badger_data:/badger注意这段示例面向jaegertracing/all-in-one镜像使用--badger.*命令行参数与SPAN_STORAGE_TYPEbadger环境变量chown会修改挂载目录的属主仅在首次初始化目录时执行。其他两种相关配置位置与限制remote-storage 服务cmd/remote-storage/config-badger.yaml 中同样的badger:配置块位于storage.backends.名称.badger之下示例为ttl.spans: 168h7 天、maintenance_interval: 5m、metrics_update_interval: 10s。read_only 模式多个实例可以只读打开同一个 store但源码注释明确仍在 write-ahead-log 中的值必须先 replay 才能打开因此只读实例不适合紧跟写入实例使用同一目录。TTL 边界ttl.spans只控制 span 数据的过期归档需求像示例那样用第二个 backend 配合更长的 TTL 与独立目录而不是改一个目录内的参数。配置核对的落点是ephemeral为false、directories指向的目标目录可写且出现数据文件、ttl.spans与预期保留时长一致、jaeger_query与jaeger_storage_exporter引用的 store 名称与backends中定义的名称完全一致。满足这四点后Badger 的目录与保留时长配置即按预期生效。【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考