The ECS schema processing pipeline is a multi-stage system that transforms raw YAML schema definitions (located in schemas/*.yml) into various consumer-facing formats such as Elasticsearch templates, Beats configurations, CSV exports, and Markdown documentation.
Pipeline Stages:
- loader.py: Loads YAML files and creates a deeply nested dictionary structure.
- cleaner.py: Validates the schema, normalizes data, and applies default values.
- finalizer.py: Handles field reuse logic and calculates final field names.
- Filters (Optional):
subset_filter.py and exclude_filter.py can be applied to refine the schema. - intermediate_files.py: Generates flat and nested YAML files.
- Generators: The final stage where specific outputs are produced via:
es_template.py (Elasticsearch templates)beats.py (Beats field definitions)csv_generator.py (CSV field export)markdown_fields (Markdown documentation)
┌─────────────┐
│ YAML Schema │ Raw schema files in schemas/*.yml
│ Files │
└──────┬──────┘
│
v
┌─────────────┐
│ loader.py │ Load & nest: YAML → deeply nested dict
│ │
v
┌─────────────┐
│ cleaner.py │ Validate, normalize, apply defaults
│ │
v
┌─────────────┐
│finalizer.py │ Perform field reuse, calculate names
│ │
v (Optional filters)
┌─────────────┐ ┌────────────────┐
│subset_filter│─>│exclude_filter │
│ .py │ │ .py │
└──────┬──────┘ └──────┬─────────┘
│ │
v v
┌─────────────────────────────┐
│ intermediate_files.py │ Generate flat & nested YAML
│ │
v
┌────────────────────┐
│ Generators │
├────────────────────┤
│ • es_template.py │ Elasticsearch templates
│ • beats.py │ Beats field definitions
│ • csv_generator.py │ CSV field export
│ • markdown_fields │ Markdown documentation
└────────────────────┘