136 lines
6.9 KiB
Markdown
136 lines
6.9 KiB
Markdown
# 配置文件
|
||
|
||
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: "<dataDir>/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` | 日志文件路径,相对路径基于配置文件目录解析 | 否 | `<dataDir>/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` |
|
||
| `timeout` | `10s` |
|
||
|
||
各 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` | 拨测间隔 | 否 | `30s` |
|
||
| `timeout` | 超时时间 | 否 | `10s` |
|
||
|
||
## Checker 专属配置
|
||
|
||
每个 target 必须根据 `type` 配置对应的 checker 专属字段。详情见 [Checker 参考](checkers/README.md)。
|
||
|
||
## 校验规则
|
||
|
||
`expect` 字段按 checker 类型不同而变化。通用断言模型见 [校验规则](expectations.md)。
|