# 配置文件 DiAL 通过 YAML 配置文件定义运行参数和拨测目标。完整可运行示例参见 [`../../probes.example.yaml`](../../probes.example.yaml)。配置 JSON Schema 位于 [`../../probe-config.schema.json`](../../probe-config.schema.json)。 ## 配置结构 ```yaml # yaml-language-server: $schema=./probe-config.schema.json server: listen: host: "127.0.0.1" port: "${server_port}" storage: dataDir: "/tmp/probes_data" retention: "${retention}" logging: level: "${log_level|info}" file: path: "/logs/dial.log" probes: execution: maxConcurrentChecks: "${max_checks}" variables: server_port: 3000 retention: "7d" max_checks: 20 default_interval: "30s" default_timeout: "10s" targets: - id: "baidu-home" name: "Baidu" type: http interval: "${default_interval}" timeout: "${default_timeout}" http: url: "https://www.baidu.com" expect: status: [200] ``` ## server.listen | 字段 | 说明 | 必填 | 默认值 | | ------ | -------- | ---- | ----------- | | `host` | 监听地址 | 否 | `127.0.0.1` | | `port` | 监听端口 | 否 | `3000` | ## server.storage | 字段 | 说明 | 必填 | 默认值 | | ----------- | ---------------------------------------------------- | ---- | -------- | | `dataDir` | 数据目录,相对路径基于配置文件所在目录解析 | 否 | `./data` | | `retention` | 历史数据保留时长,支持 `ms`、`s`、`m`、`h`、`d` 单位 | 否 | `7d` | ## probes.execution | 字段 | 说明 | 必填 | 默认值 | | --------------------- | -------------- | ---- | ------ | | `maxConcurrentChecks` | 最大并发拨测数 | 否 | `20` | ## server.logging | 字段 | 说明 | 必填 | 默认值 | | ---------------------------------------- | ---------------------------------------------- | ---- | ------------------------- | | `server.logging.level` | 全局日志等级,console 和 file 未指定时继承此值 | 否 | `info` | | `server.logging.console.level` | 控制台日志等级 | 否 | 继承 `level` | | `server.logging.file.level` | 文件日志等级 | 否 | 继承 `level` | | `server.logging.file.path` | 日志文件路径,相对路径基于配置文件目录解析 | 否 | `/logs/dial.log` | | `server.logging.file.rotation.size` | 按大小滚动,支持 `KB`、`MB`、`GB` 单位 | 否 | `50MB` | | `server.logging.file.rotation.frequency` | 按时间滚动:`hourly`、`daily`、`weekly` | 否 | `daily` | | `server.logging.file.rotation.maxFiles` | 保留的归档文件数量,不含活跃日志 | 否 | `14` | 日志等级支持:`trace`、`debug`、`info`、`warn`、`error`、`fatal`。 控制台始终输出 pretty 格式,文件始终输出 JSONL 格式并支持滚动。`rotation.size` 和 `rotation.frequency` 任一条件触发即滚动。 ## 内置默认值 | 字段 | 默认值 | 约束 | | ---------- | ------ | ----------------------- | | `interval` | `30s` | 最小 `10s` | | `timeout` | `10s` | 必须小于等于 `interval` | 各 checker 专属默认值见 [Checker 参考](checkers/README.md)。 ## variables `variables` 是顶层动态键值表,key 必须符合 `[a-zA-Z_][a-zA-Z0-9_]*`,value 仅支持 string、number、boolean。`server`、`probes` 和 `targets` 中的字符串值可引用变量。 | 语法 | 说明 | | ----------------- | ------------------------------------------ | | `${key}` | 引用 variables 或环境变量 | | `${key\|default}` | variables 和环境变量都不存在时使用默认值 | | `${key\|}` | variables 和环境变量都不存在时使用空字符串 | | `$${key}` | 转义输出字面量 `${key}` | 解析优先级为 `variables -> process.env -> 默认值`。三者均不存在时配置校验失败。字段值完整等于单个变量引用时会保留 number、boolean、string 类型;部分拼接时统一转为字符串。 变量替换作用于 `server`、`probes` 和 `targets`,不作用于 `variables` 段自身,且不会替换 `targets[].id` 和 `targets[].type` 字段;对象 key 不参与替换。 ## 配置加载形态 配置加载内部区分三层形态: | 形态 | 说明 | | ----------------- | ------------------------------------------------------------------------------------- | | Authoring Config | 用户 YAML 可书写形态,允许变量引用和 expect 简写 | | Normalized Config | `normalizeAuthoringConfig()` 完成变量替换、expect 简写展开并移除 `variables` 后的形态 | | ResolvedConfig | checker `resolve()` 补默认值并解析 duration、size、路径和运行期环境后的形态 | 根目录 `probe-config.schema.json` 面向 Authoring Config,因此 VSCode 校验会接受 `server.listen.port: "${server_port|3000}"`、`http.maxRedirects: "${MAX|5}"` 和 `expect.durationMs: 5000` 这类写法。 ## targets 通用字段 | 字段 | 说明 | 必填 | 默认值 | | ------------- | ------------------------------------------------------------------------------------ | ---- | --------- | | `id` | 目标唯一标识,最长 30 字符,支持字母数字、下划线、连字符,不参与变量替换 | 是 | 无 | | `name` | 展示名称,最长 30 字符,支持变量替换,可省略或显式 null;前端展示时 null 回退到 `id` | 否 | 无 | | `description` | 目标描述,最长 500 字符,支持变量替换,可省略或显式 null,允许空字符串 | 否 | 无 | | `type` | 目标类型:`http`、`cmd`、`db`、`tcp`、`udp`、`dns`、`icmp`、`llm`、`ws` | 是 | 无 | | `group` | 分组名称 | 否 | `default` | | `interval` | 拨测间隔,最小 `10s` | 否 | `30s` | | `timeout` | 超时时间,必须小于等于 `interval` | 否 | `10s` | ## Checker 专属配置 每个 target 必须根据 `type` 配置对应的 checker 专属字段。详情见 [Checker 参考](checkers/README.md)。 ## 校验规则 `expect` 字段按 checker 类型不同而变化。通用断言模型见 [校验规则](expectations.md)。