# yaml-language-server: $schema=./probe-config.schema.json server: host: "127.0.0.1" port: 3000 dataDir: "/tmp/probes_data" runtime: maxConcurrentChecks: 20 defaults: interval: "30s" timeout: "10s" http: maxBodyBytes: "10MB" cmd: maxOutputBytes: "1MB" variables: env_name: "演示" httpbin_base: "https://httpbin.org" api_token: "Bearer demo-token" sqlite_url: "sqlite://:memory:" targets: # ========== HTTP targets ========== - id: "baidu-home" name: "Baidu 首页可用" description: "监控百度首页的可用性和响应时间" type: http group: "搜索引擎" http: url: "https://www.baidu.com" expect: status: [200] durationMs: lte: 5000 - id: "httpbin-json" name: "${env_name} JSON API — 完整流水线" type: http group: "后端服务" interval: "1m" timeout: "15s" http: url: "${httpbin_base}/json" headers: Accept: "application/json" Authorization: "${api_token|Bearer fallback-token}" expect: headers: Content-Type: contains: "application/json" durationMs: lte: 8000 body: - json: path: "$.slideshow.title" equals: "Sample Slide Show" - json: path: "$.slideshow.slides[0].title" contains: "Wake" - regex: '"title"' - id: "httpbin-post" name: "POST 接口测试" type: http http: url: "${httpbin_base}/post" method: POST headers: Content-Type: "application/json" body: '{"action":"check","version":1}' expect: status: [200] body: - json: path: "$.json.action" equals: "check" - json: path: "$.json.version" gte: 1 # ========== Cmd targets ========== - id: "bun-version" name: "Bun 版本输出匹配" type: cmd group: "系统检查" cmd: exec: "bun" args: ["--version"] expect: exitCode: [0] stdout: - regex: "^\\d+\\.\\d+\\.\\d+" - id: "bun-stdout-rules" name: "多规则 stdout 顺序校验" type: cmd interval: "5m" cmd: exec: "bun" args: ["-e", "console.log('version: 2.0.1, status: healthy')"] expect: stdout: - contains: "version:" - regex: "\\d+\\.\\d+\\.\\d+" - contains: "healthy" - id: "bun-stderr" name: "stderr 内容检查" type: cmd cmd: exec: "bun" args: ["-e", "process.stderr.write('simulated error\\n'); process.exit(1)"] expect: exitCode: [1] stderr: - contains: "simulated error" # ========== DB targets ========== - id: "sqlite-connect" name: "SQLite 内存数据库连接测试" type: db group: "数据库" db: url: "${sqlite_url}" expect: durationMs: lte: 1000 - id: "sqlite-query" name: "SQLite 内存数据库多列结果校验" type: db db: url: "${sqlite_url}" query: "SELECT 1 as id, 'Alice' as name, 'engineer' as role" expect: rowCount: 1 rows: - id: gte: 1 name: exists: true role: contains: "engineer" result: - json: path: "$.rows[0].role" equals: "engineer" # ========== TCP targets ========== - id: "redis-port" name: "Redis 端口可达" type: tcp group: "基础设施" tcp: host: "127.0.0.1" port: 6379 expect: durationMs: lte: 3000 - id: "smtp-banner" name: "SMTP Banner 探测" type: tcp group: "基础设施" tcp: host: "127.0.0.1" port: 25 readBanner: true bannerReadTimeout: 3000 expect: banner: - contains: "ESMTP" # ========== Ping targets ========== - id: "gateway-ping" name: "网关 ICMP 可达" type: ping group: "基础设施" ping: host: "127.0.0.1" count: 3 packetSize: 56 expect: alive: true packetLossPercent: lte: 10 avgLatencyMs: lte: 100 maxLatencyMs: lte: 300 durationMs: lte: 5000 # ========== UDP targets ========== - id: "udp-heartbeat" name: "UDP 心跳检测" type: udp group: "基础设施" udp: host: "127.0.0.1" port: 9000 payload: "PING" expect: response: - contains: "PONG" durationMs: lte: 100 - id: "udp-binary-probe" name: "UDP 二进制协议探测" type: udp group: "基础设施" udp: host: "127.0.0.1" port: 5683 payload: "400100" encoding: hex responseEncoding: hex expect: responseSize: gte: 4 durationMs: lte: 200 - id: "udp-fire-and-forget" name: "UDP 发送验证(不等待响应)" type: udp group: "基础设施" udp: host: "127.0.0.1" port: 514 payload: "<14>health check" expect: responded: false - id: "llm-openai-probe" name: "OpenAI Chat Completions 健康检查" type: llm group: "AI 服务" llm: provider: openai url: "https://open.bigmodel.cn/api/paas/v4" model: "glm-4.7-flash" prompt: "Say OK" key: "d1e97306540d12bb2f834be961fcacb1.SNBShlCxWYJCx0qZ" expect: status: - 200 finishReason: "stop" output: - contains: "OK"