Sobre el proyecto
# Sistema de monitoreo CI Build-Eye
**Build-Eye** - Sistema de monitoreo automatizado de compilaciones CI y análisis de causa raíz para vLLM-Ascend
## Descripción general del sistema
Build-Eye es un sistema de monitoreo de compilaciones CI diseñado específicamente para el proyecto vLLM-Ascend, capaz de:
- **Monitorear automáticamente** las compilaciones CI del repositorio vllm-project/vllm-ascend
- **Clasificar inteligentemente** la causa raíz de los fallos de compilación (problema de código / problema de infraestructura / problema de interferencia)
- **Generar sugerencias** de reparación de bajo costo y aplicables
- **Archivar informes** estandarizados automáticamente en el repositorio build-eye
## Objetivos de monitoreo
- Repositorio principal monitoreado: https://github.com/vllm-project/vllm-ascend
- Repositorio de archivo: https://github.com/winson-00178005/build-eye.git
## Clasificación de causas raíz de fallos
### 1. Problemas de código del PR
- Fallo de aserción en pruebas
- Errores de compilación (CMake, clang)
- Errores de importación de Python
- Incompatibilidad con la API de vLLM
- Problemas de compilación del kernel de Ascend
### 2. Problemas de infraestructura
- Fallo del cache-service de K8s (cache-service.nginx-pypi-cache)
- Runner no disponible
- Problemas de hardware NPU (910B/910C/310P)
- Problemas del toolkit CANN
- Fallo de comunicación multi-tarjeta HCCL
- Fallo al descargar la imagen Docker
- Fallo de caché de Csrc
- Tiempo de espera de compilación agotado
### 3. Interferencia por concurrencia de múltiples PR
- Varios PR fusionados en poco tiempo
- Diferencias en la matriz de versiones de vLLM
- Competencia por recursos del Runner
- Impacto de actualizaciones de la imagen CANN
## Inicio rápido
### 1. Configurar el token de GitHub
Consulte `docs/token-setup.md` para configurar las claves necesarias.
### 2. Instalar dependencias
```bash
pip install -r requirements.txt
```
### 3. Activar manualmente el monitoreo
```bash
python scripts/monitor/fetch_runs.py --output data/workflow_runs.json
python scripts/monitor/collect_metadata.py --input data/workflow_runs.json --output data/build_metadata.json
python scripts/classify/classifier.py --input data/build_metadata.json --output data/classifications.json
python scripts/recommend/recommender.py --input data/classifications.json --output data/recommendations.json
python scripts/report/generator.py --input data/recommendations.json --output reports/
```
### 4. Archivar informes
```bash
python scripts/archive/archiver.py --input reports/ --repo https://github.com/winson-00178005/build-eye.git
```
## Flujo de trabajo de GitHub Actions
El sistema admite dos modos de activación:
### Sondeo programado
Verifica automáticamente los fallos de compilación recientes cada 6 horas.
Archivo de flujo de trabajo: `.github/workflows/monitor.yml`
### Activación manual
Activación manual mediante `workflow_dispatch` de GitHub Actions.
Parámetros opcionales:
- `lookback_hours`: cuántas horas hacia atrás revisar (por defecto 24)
- `dry_run`: modo de prueba (sin archivar)
- `target_repo`: repositorio objetivo
## Estructura del proyecto
```
build-eye/
├── .github/workflows/
│ └── monitor.yml # Flujo de trabajo de GitHub Actions
├── scripts/
│ ├── monitor/ # Módulo de monitoreo CI
│ │ ├── github_client.py # Cliente de la API de GitHub
│ │ ├── fetch_runs.py # Obtener workflow runs
│ │ ├── collect_metadata.py # Recopilar metadatos
│ │ └── config_loader.py # Carga de configuración
│ ├── classify/ # Módulo de clasificación de fallos
│ │ ├── classifier.py # Motor de clasificación
│ │ ├── code_detector.py # Detección de problemas de código
│ │ ├── infra_detector.py # Detección de infraestructura
│ │ └── interference_detector.py # Detección de interferencias
│ ├── recommend/ # Módulo de sugerencias de reparación
│ │ ├── recommender.py # Generador de sugerencias
│ │ └── templates.py # Plantillas de sugerencias
│ ├── report/ # Módulo de generación de informes
│ │ ├── generator.py # Generador de informes
│ │ ├── formatter.py # Herramientas de formato
│ │ └── summary.py # Generación de resúmenes
│ └── archive/ # Módulo de archivado de informes
│ ├── archiver.py # Archivador
│ └── git_client.py # Cliente Git
├── config/
│ └── config.yaml # Configuración del sistema
├── templates/
│ └ example_reports.py # Ejemplos de informes
├── tests/ # Directorio de pruebas
├── docs/
│ └ token-setup.md # Guía de configuración de Token
├── reports/ # Directorio de salida de informes
└ requirements.txt # Dependencias de Python
└ requirements-dev.txt # Dependencias de desarrollo
└ README.md # Este documento
```
## Opciones de configuración
### config/config.yaml
```yaml
target_repository:
owner: vllm-project
repo: vllm-ascend
url: https://github.com/vllm-project/vllm-ascend
branch: main
monitored_workflows:
- pr_test_full.yaml
- pr_test_light.yaml
archive_repository:
owner: winson-00178005
repo: build-eye
url: https://github.com/winson-00178005/build-eye.git
monitoring:
polling_interval_hours: 6
lookback_hours: 24
```
### Variables de entorno
- `GITHUB_TOKEN`: token de acceso a la API de GitHub
- `ARCHIVE_TOKEN`: token de escritura del repositorio de archivo
- `TARGET_REPO_OWNER`: propietario del repositorio objetivo
- `TARGET_REPO_NAME`: nombre del repositorio objetivo
## Formato del informe
Cada informe contiene:
- Frontmatter YAML (metadatos)
- Resumen (1-2 frases)
- Análisis de causa raíz (clasificación, confianza, razonamiento)
- Evidencia (patrones coincidentes, enlaces, fragmentos de registro)
- Sugerencias de reparación (sugerencia prioritaria, pasos detallados)
- PR relacionados (solo clasificación de interferencia)
Ruta de archivado del informe: `reports/YYYY/MM/DD/<clasificación>-pr-<número>.md`
## Ejecutar pruebas
```bash
pip install -r requirements-dev.txt
pytest tests/
```
## Extender el pipeline nightly
El sistema ya está diseñado para admitir el monitoreo del pipeline nightly; solo hay que añadir en la configuración:
```yaml
target_repository:
monitored_workflows:
- schedule_nightly_test_a2.yaml
- schedule_nightly_test_a3.yaml
```
## Mantenimiento y extensión
### Añadir nuevas reglas de clasificación
Añada un nuevo detector en `scripts/classify/`:
```python
def detect_new_pattern(log_excerpt: str) -> dict:
patterns = [...]
# Implementar la lógica de detección
```
Luego llámelo en `classifier.py`.
### Añadir nuevas plantillas de sugerencias
Añada nuevas plantillas en `scripts/recommend/templates.py`.
## Licencia
Apache License 2.0 - consulte el archivo LICENSE para más detalles
## Contacto
Comentarios: https://github.com/winson-00178005/build-eye/issues
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.