منصوبے کے بارے میں

Tero Edge ایک ہلکا پھلکا، ہائی پرفارمنس ٹیلی میٹری پراکسی ہے جو Zig میں لکھی گئی ہے اور ٹیلی میٹری ڈیٹا کے منزل تک پہنچنے سے پہلے اس پر پالیسی بیسڈ فلٹرنگ (DROP/KEEP) لاگو کرتی ہے۔ یہ OpenTelemetry Collector کے ساتھ مل کر کام کرنے کے لیے ڈیزائن کی گئی ہے، نہ کہ اسے بدلنے کے لیے، اور پالیسی انفورسمنٹ کے لیے ایک مرکوز متبادل فراہم کرتی ہے۔ اس پروجیکٹ میں مختلف استعمالات کے لیے متعدد پہلے سے کنفیگر شدہ ڈسٹری بیوشنز (انٹری پوائنٹس) شامل ہیں: - **Full distribution**: لاگز اور میٹرکس کے لیے Datadog اور OTLP دونوں انجیسشن کو ہینڈل کرتی ہے۔ - **Datadog distribution**: Datadog لاگ اور میٹرکس اینڈ پوائنٹس پر مرکوز۔ - **OTLP distribution**: OpenTelemetry Protocol لاگ انجیسشن پر مرکوز۔ - **Prometheus distribution**: اسٹریمنگ فلٹرنگ کے ساتھ Prometheus میٹرکس اسکریپنگ کے لیے سائیڈ کار پراکسی کے طور پر کام کرتی ہے۔ - **Lambda distribution**: Datadog ٹیلی میٹری پروسیسنگ کے لیے AWS Lambda ایکسٹینشن۔ - **Edge Tail**: لائن اورینٹڈ لاگ کاپی کرنے کے لیے فائل/اسٹریم ٹیلر، چیک پوائنٹڈ ریزوم کے ساتھ۔ اہم خصوصیات میں شامل ہیں: - لاگز اور میٹرکس پر پالیسی بیسڈ فلٹرنگ (DROP/KEEP) - ایسنک پالیسی لوڈنگ (سرور فوراً شروع ہوتا ہے جبکہ پالیسیاں بیک گراؤنڈ میں لوڈ ہوتی ہیں) - فیل اوپن رویہ (ایررز ڈیٹا کو بغیر تبدیلی کے گزرنے دیتے ہیں) - ایٹمک اسنیپ شاٹس کے ذریعے لاک فری پالیسی اپڈیٹس - سگنل ہینڈلنگ کے ساتھ گریس فل شٹ ڈاؤن - کریش ڈائگناسٹکس کے لیے SIGSEGV ہینڈلر - Prometheus کے لیے اسٹریمنگ رسپانس پروسیسنگ (باؤنڈڈ میموری) - پالیسی چیکس پاس کرنے والے میٹرکس کے لیے زیرو کاپی فارورڈنگ - فی اسکریپ قابل کنفیگر حدود - فائل اور HTTP پالیسی پرووائیڈرز کی سپورٹ - `/_edge/metrics` پر Prometheus میٹرکس اینڈ پوائنٹ - کیشے کوہیرینسی کے لیے ڈیٹا اورینٹڈ ڈیزائن - واضح ڈیپنڈنسیز کے ساتھ ماڈیولر پیکیج اسٹرکچر ## ریپوزٹری اسٹرکچر سورس کوڈ ماڈیولر پیکیجز میں منظم ہے: - `core/` - رن ٹائم پرائمٹوز (حدود، کنکشن سلیب، ایرینا پول، I/O) - `frontend/` - ان باؤنڈ HTTP (stdio اور httpz فرنٹ اینڈز) - `service/` - روٹنگ اور فی سگنل ریکویسٹ پلاننگ - `signals/` - پروٹوکول ریکارڈ ٹائپس (Datadog، OTLP، Prometheus) - `pipeline/` - فریمنگ، کوڈیکس، اور اسٹریمنگ ریکارڈ پائپ لائن - `runtime/` - پروسیس لائف سائیکل، ڈسٹری بیوشنز، میٹرکس - `tail/` - فائل اور stdin ٹیلنگ - `config/` - کنفیگریشن پارسنگ - `lambda/` - AWS Lambda ایکسٹینشن سپورٹ - `zonfig/` - env اوور رائیڈز کے ساتھ کمپ ٹائم کنفیگریشن ## بلڈنگ اور رننگ تمام ٹارگٹس `zig build` کے ساتھ بلڈ کریں۔ ٹیسٹس `zig build test` کے ساتھ چلائیں۔ مخصوص ڈسٹری بیوشنز `zig build edge`، `zig build datadog`، `zig build otlp`، `zig build prometheus`، `zig build tail`، یا `zig build lambda` کے ساتھ بلڈ کریں۔ پہلے سے بلڈ شدہ بائنریز Linux x86_64، Linux ARM64، اور macOS ARM64 کے لیے دستیاب ہیں۔ Docker امیجز GitHub Container Registry سے دستیاب ہیں۔ ## کنفیگریشن کنفیگریشن JSON فائل کے ذریعے کی جاتی ہے۔ اہم سیٹنگز میں شامل ہیں: - `listen_address` / `listen_port` - سرور بائنڈ ایڈریس - `upstream_url` - ڈیفالٹ اپ اسٹریم منزل - `logs_url` / `metrics_url` - اختیاری مخصوص اپ اسٹریم URLs - `workspace_id` - پالیسی سنک کے لیے ورک اسپیس آئیڈینٹیفائر - `log_level` - لاگنگ لیول - `policy_providers` - پالیسی سورسز کی فہرست (file/http) - `max_body_size` - ریکویسٹ/رسپانس باڈی حدود `TERO_LOG_LEVEL` جیسے انوائرنمنٹ ویری ایبلز سیٹنگز کو اوور رائیڈ کر سکتے ہیں۔ ## سائزنگ اور پرفارمنس README میں سائزنگ ٹیبلز شامل ہیں جو مختلف پے لوڈ سائزز اور ریکویسٹ ریٹس کے لیے CPU اور میموری کے استعمال کو ظاہر کرتی ہیں۔ میموری بنیادی طور پر کنکرنٹ سینڈرز کی تعداد سے طے ہوتی ہے، نہ کہ ریکویسٹ ریٹ سے۔ CPU ریکارڈ کی تعداد کے ساتھ اسکیل کرتی ہے نہ کہ ریکویسٹ کی تعداد کے ساتھ۔ پالیسی کی تعداد کا پرفارمنس پر کم سے کم اثر ہوتا ہے۔ ## Prometheus میٹرکس رن ٹائم میٹرکس `GET /_edge/metrics` پر Prometheus ٹیکسٹ فارمیٹ میں دستیاب ہوتے ہیں۔ تمام لیبلز باؤنڈڈ اینمز ہیں تاکہ سیریز ایکسپلوشن کو روکا جا سکے۔ میٹرکس ریکویسٹس، رسپانسز، کنکشنز، اپ اسٹریم اٹیمپٹس، پالیسی ایویلیوایشنز، اور بلڈ انفو کا احاطہ کرتے ہیں۔ ## ڈیزائن اصول 1. **Data-Oriented Design** - کیشے کوہیرینسی اور میموری ایکسیس پیٹرنز کے لیے آپٹیمائز کریں 2. **Lock-Free Reads** - پالیسی ایویلیوایشن زیرو کنٹینشن ریڈز کے لیے ایٹمک اسنیپ شاٹ پوائنٹرز استعمال کرتی ہے 3. **Fail-Open** - پالیسی ایویلیوایشن میں ایررز کے نتیجے میں ڈیٹا پاس تھرو ہوتا ہے، ڈراپ نہیں 4. **Modular Composition** - پیکیجز آزادانہ طور پر استعمال یا ایک ساتھ کمپوز کیے جا سکتے ہیں 5. **Explicit Dependencies** - ہر پیکیج اپنی ڈیپنڈنسیز امپورٹس کے ذریعے ظاہر کرتا ہے