# 故障排查 本文档记录常见运行问题和排查入口。 ## 配置校验失败 DiAL 启动时会校验 YAML 配置。除动态键值表(`headers`、`env`、`variables`)外,未知字段会导致启动失败。 排查顺序: 1. 在 YAML 顶部添加 `# yaml-language-server: $schema=./probe-config.schema.json`。 2. 对照 [配置文件](configuration.md) 检查顶层结构和通用字段。 3. 对照 [Checker 参考](checkers/README.md) 检查 checker 专属字段。 4. 对照 [校验规则](expectations.md) 检查 expect 写法。 ## 变量无法解析 变量解析优先级为 `variables -> process.env -> 默认值`。如果三者均不存在,配置校验会失败。 常见修复: | 问题 | 修复 | | -------------- | ----------------------------------- | --------- | | 环境变量未设置 | 设置环境变量或在 `variables` 中声明 | | 希望允许空值 | 使用 `${key | }` | | 希望提供默认值 | 使用 `${key | default}` | | 希望输出字面量 | 使用 `$${key}` | ## ICMP checker 无法运行 ICMP checker 依赖系统 `ping` 命令。 | 环境 | 处理 | | ------------------- | -------------------------------------- | | Alpine 或精简镜像 | 安装 `iputils-ping` | | Docker 容器 | 运行容器时增加 `--cap-add=NET_RAW` | | Windows/macOS/Linux | 确认系统 `ping` 可执行且输出格式受支持 | Docker 示例: ```bash docker run --rm --cap-add=NET_RAW -p 3000:3000 -v dial-data:/data/dial dial:alpine ``` ## CMD checker 找不到命令 官方 Docker 镜像不内置 `bun`、`node`、`curl`、`dig`、`psql`、`mysql`、`redis-cli` 等额外命令。需要这些命令时请使用派生镜像安装。 ```dockerfile FROM dial:alpine USER root RUN apk add --no-cache curl bind-tools postgresql-client USER dial ``` ## Docker 数据或日志丢失 推荐将数据卷挂载到 `/data/dial`,并在配置中使用该目录作为 storage dataDir。 ```bash docker run --rm -p 3000:3000 -v dial-data:/data/dial dial:alpine ``` 容器示例配置位于 [`../../docker/probes.yaml`](../../docker/probes.yaml)。 ## HTTP 或 LLM 证书问题 HTTP 和 LLM checker 支持 `ignoreSSL`。该选项适合内网、自签名证书或测试环境;生产环境应优先修复证书链。 ## 正则规则被拒绝 `regex` 启动期会执行 ReDoS 风险检测。被拒绝时应改写为更明确、回溯风险更低的表达式。