argus/src/sys/tests/README.md

6.1 KiB
Raw Blame History

ARGUS 系统级端到端测试Sys E2E

本目录包含将 log 与 agent 两线验证合并后的系统级端到端测试。依赖 bind/master/es/kibana + 两个“日志节点”(每个节点容器内同时运行 Fluent Bit 与 argus-agent


一、如何运行

  • 前置条件

    • 已构建镜像:argus-elasticsearch:latestargus-kibana:latestargus-bind9:latestargus-master:latest
      • 可用根目录命令构建:./build/build_images.sh [--intranet]
    • 主机具备 Docker 与 Docker Compose。
  • 一键执行

    • cd src/sys/tests
    • ./scripts/00_e2e_test.sh
  • 分步执行(推荐用于排查)

    • ./scripts/01_bootstrap.sh 生成目录/拷贝 update-dns.sh/构建 agent 二进制/写 .env
    • ./scripts/02_up.sh 启动 Compose 栈(工程名 argus-sys
    • ./scripts/03_wait_ready.sh 等待 ES/Kibana/Master/FluentBit/Bind 就绪Kibana 必须返回 200 且 overall.level=available
    • ./scripts/04_verify_dns_routing.sh 校验 bind 解析与节点内域名解析
    • ./scripts/05_agent_register.sh 获取两个节点的 node_id 与初始 IP检查本地 node.json
    • ./scripts/06_write_health_and_assert.sh 写健康文件并断言 nodes.json 仅包含 2 个在线节点
    • ./scripts/07_logs_send_and_assert.sh 向两个节点写日志,断言 ES train-*/infer-* 计数增长
    • ./scripts/08_restart_agent_reregister.sh node-b 改为固定 IP 172.29.0.200,验证保持同一节点 ID 且 IP/时间戳更新
    • ./scripts/09_down.sh 回收容器、网络并清理 private*/tmp/
  • 重置环境

    • 任何阶段失败可执行 ./scripts/09_down.sh 后重跑 01→…

二、测试部署架构docker-compose

  • 网络

    • 自定义 bridgeargus-sys-net,子网 172.29.0.0/16
    • 固定地址bind=172.29.0.2master=172.29.0.10
  • 服务与端口

    • bindargus-bind9:latest):监听 53/tcp+udp负责同步 *.argus.com 记录
    • masterargus-master:latest):对外 32300→3000API http://localhost:32300
    • esargus-elasticsearch:latest9200→9200;单节点,无安全
    • kibanaargus-kibana:latest5601→5601;通过 ELASTICSEARCH_HOSTS=http://es:9200 访问 ES
    • node-aubuntu:22.04):同时运行 Fluent Bit + argus-agenthostname=dev-yyrshare-nbnyx10-cp2f-pod-02020→2020
    • node-bubuntu:22.04):同时运行 Fluent Bit + argus-agenthostname=dev-yyrshare-uuuu10-ep2f-pod-02021→2020
  • 卷与目录

    • 核心服务bind/master/es/kibana共享宿主 ./private 挂载到容器 /private
    • 两个节点使用独立数据卷,互不与核心服务混用:
      • node-a./private-nodea/argus/agent/<HOST> → /private/argus/agent/<HOST>
      • node-b./private-nodeb/argus/agent/<HOST> → /private/argus/agent/<HOST>
    • 节点容器的 Fluent Bit/agent 资产以只读方式挂载到 /assets//usr/local/bin/argus-agent
  • DNS 配置

    • 节点容器通过 compose 配置 dns: [172.29.0.2] 指向 bind不挂载 /etc/resolv.conf,也不依赖 update-dns.sh
    • master/es/kibana 仍共享 ./privatemaster 启动会写 /private/argus/etc/master.argus.com 供 bind 同步 A 记录
  • 节点入口

    • scripts/node_entrypoint.sh
      • 复制 /assets/fluent-bit/* 到容器 /private,后台启动 Fluent Bit监听 2020
      • 以运行用户(映射 UID/GID前台启动 argus-agent
    • 节点环境变量:MASTER_ENDPOINT=http://master.argus.com:3000REPORT_INTERVAL_SECONDS=2ES_HOST=esES_PORT=9200CLUSTER=localRACK=dev

三、脚本与验证目标

  • 01_bootstrap.sh

    • 目的:准备目录结构、修正 ES/Kibana 数据目录属主、分发 update-dns.sh(仅核心服务使用)、构建 agent 二进制、写 .env
    • 失败排查:若 ES 无法写入数据,重跑本步骤确保目录属主为指定 UID/GID
  • 02_up.sh

    • 目的:以工程名 argus-sys 启动全栈;自动清理旧栈/网络
  • 03_wait_ready.sh

    • 目的:等待关键端口/健康接口可用
    • 判定:
      • ES /_cluster/health?wait_for_status=yellow 成功
      • Kibana GET /api/status 返回 200 且 overall.level=available
      • Master /readyz 成功
      • Fluent Bit 指标接口 :2020/:2021 可访问
      • bind named-checkconf 通过
  • 04_verify_dns_routing.sh

    • 目的:验证从 bind → 节点容器的解析链路
    • 判定:
      • private/argus/etc/master.argus.com 存在且为 master IP
      • 在 node-a/node-b 内 getent hosts master.argus.com 成功解析到 master IP
  • 05_agent_register.sh

    • 目的:确认两个节点注册到 master 并持久化 node.json
    • 输出:tmp/node_id_a|btmp/initial_ip_a|btmp/detail_*.json
  • 06_write_health_and_assert.sh

    • 目的:模拟节点健康上报并在 master 侧可见;nodes.json 仅保留在线节点
    • 操作:写 log-fluentbit.jsonmetric-node-exporter.json 至两个节点的 health 目录
  • 07_logs_send_and_assert.sh

    • 目的:通过 Fluent Bit 将两类日志注入 ES计数应较基线增长且达到阈值≥4
    • 同时校验 ES 健康 green|yellow
  • 08_restart_agent_reregister.sh

    • 目的:验证节点重启与 IP 变更时保持相同 id 并更新 meta_data.iplast_updated
    • 操作:以固定 IP 172.29.0.200 重建 nodeb 后轮询校验
  • 09_down.sh

    • 目的:栈销毁与环境清理;必要时使用临时容器修正属主再删除 private* 目录

常见问题与排查

  • Kibana 长时间 503机器较慢时初始化较久脚本最长等待 ~15 分钟;先确认 ES 已就绪。
  • Fluent Bit 指标未就绪:检查节点容器日志与环境变量 CLUSTER/RACK 是否设置;确认入口脚本已经复制资产到 /private
  • ES 无法启动:多为宿主目录权限问题;重跑 01_bootstrap.sh,或手动 chown -R <UID:GID> src/sys/tests/private/argus/log/*

如需更严格的断言(例如 Kibana 载入具体插件、ES 文档字段校验),可在 07_*.sh 中追加查询与校验逻辑。