تبسيط جمع السجلات باستخدام مكون http-logger في APISIX
April 11, 2024
مقدمة
في تطوير البرمجيات الحديثة، يُعتبر تسجيل استدعاءات واجهة برمجة التطبيقات (API) جزءًا لا غنى عنه، حيث يقوم بتسجيل معلومات مفصلة لكل استدعاء API في التطبيق. تمكن إدارة السجلات الفرقَ التطويرية من مراقبة أنشطة استدعاءات API في الوقت الفعلي، مما يسهل الكشف السريع عن المشكلات وحلها. بينما توجد حلول ناضجة لأنظمة التسجيل في المؤسسات، قد يواجه المطورون تحديات في دمج السجلات من خدمات الاختبار المبكرة في أنظمة التسجيل الداخلية بسبب قيود الأذونات وإجراءات الموافقة، مما يعيق كفاءة التطوير.
يوفر مكوّن http-logger
المقدم من Apache APISIX تكاملاً مع خوادم HTTP، باستخدام بروتوكول HTTP الواسع الانتشار لاستقبال السجلات. هذا يسمح للمطورين بمشاهدة سجلات استدعاءات API مباشرة، مما يعزز كفاءة التطوير. سنقدم أدناه كيفية عمله وكيفية استخدامه.
مبادئ مكوّن http-logger
يدعم مكوّن http-logger
في APISIX دفع بيانات السجلات إلى خوادم HTTP أو HTTPS. تعتمد فكرته الأساسية على معالجة الطلبات من قبل APISIX عند بدء العميل، وإنشاء سجلات الوصول، وإرسال معلومات سياق الطلب بشكل غير متزامن، مع تنسيقها وفقًا لتنسيقات السجلات المحددة، عبر طلبات POST ككائنات JSON إلى خوادم HTTP أو HTTPS المكونة. هذا يتيح عرض معلومات سجلات API على خدمات HTTP أو HTTPS الخاصة بنا، مما يحسن بشكل كبير كفاءة التطوير. يوضح الرسم البياني التالي تدفق البيانات.
إنشاء خدمة HTTP بسيطة لاستقبال السجلات
على الرغم من وجود العديد من منتجات SaaS والحلول مفتوحة المصدر في السوق لإدارة وتحليل السجلات، مثل Loggly وSplunk وELK Stack، إلا أن الوصول إلى الشبكات الخارجية قد يكون مقيدًا داخل شبكات المؤسسات، مما يشكل تحديات خلال مراحل التطوير والاختبار. لذلك، يمكن تطوير خدمة HTTP بسيطة بسرعة لجمع السجلات. فيما يلي مثال باستخدام Node.js:
// httpserver.js
const http = require('http');
http.createServer((req, res) => {
let data = '';
req.on('data', chunk => {
data += chunk;
});
req.on('end', () => {
console.log('APISIX Log:', data);
});
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(`Hello World\n`);
}).listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
يقوم هذا البرنامج النصي بالاستماع على المنفذ المحلي 3000
وطباعة جسم الطلب للطلبات الموجهة إلى نقطة نهاية هذه الخدمة. يمكنك اتباع هذه الخطوات لتشغيله واختباره:
-
قم بتشغيل
node httpserver.js
لبدء الخدمة. -
استخدم الأمر
curl -i http://127.0.0.1:3000/ -d '{"name": "Jack"}'
للوصول إلى هذه النقطة. -
يجب أن ترى إخراجًا مشابهًا:
Server running at http://localhost:3000/
APISIX Log: {"name": "Jack"}
تمكين مكوّن Http-logger في APISIX
بعد ذلك، سنناقش كيفية تمكين مكوّن http-logger
في APISIX وإرسال السجلات إلى خدمة HTTP التي تم إنشاؤها في الخطوة السابقة.
- استخدم واجهة برمجة تطبيقات إدارة APISIX لإنشاء مسار وتمكين مكوّن
http-logger
:
curl "http://127.0.0.1:9080/apisix/admin/routes/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
},
"plugins": {
"http-logger": {
"uri": "http://127.0.0.1:3000/"
}
}
}'
-
استخدم أمر curl لإرسال طلبات إلى APISIX:
curl -i http://127.0.0.1:9080/get
-
يجب أن ترى بعد ذلك إخراج سجلات مشابه في طرفيتك.
يمكن ملاحظة أننا نجحنا في جمع السجلات المرسلة من APISIX.
تخصيص تنسيقات السجلات
يسمح مكوّن http-logger
للمطورين بتخصيص تنسيقات السجلات لتلبية متطلبات متنوعة. إذا كانت هناك حقول محددة فقط في بيانات السجلات تهمك، يدعم APISIX الإعلان عن تنسيقات ومحتويات السجلات. يمكن تحقيق ذلك عن طريق تعيين بيانات وصفية للمكوّنات المقدمة من APISIX.
1. تكوين بيانات وصفية للمكوّن عبر واجهة برمجة تطبيقات الإدارة:
curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/http-logger \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"log_format": {
"host": "$host",
"@timestamp": "$time_iso8601",
"client_ip": "$remote_addr"
}
}'
- عند إصدار أمر curl مرة أخرى، يجب أن ترى إخراج سجلات مشابه:
APISIX Log: [{"service_id":"a869a037-27df-4278-ab50-4e66d212cfc0","client_ip":"192.168.65.1","host":"127.0.0.1","route_id":"4f499953-9504-4737-9f3d-facaeda4b841","@timestamp":"2024-04-10T00:10:31+00:00"}]
الخاتمة
من خلال استخدام مكوّن http-logger
، لا يقوم المطورون بتبسيط عملية عرض السجلات فحسب، بل يعززون أيضًا كفاءة التطوير اليومية. هذا المكوّن، المقدم من APISIX، هو أبسط وأكثر مكوّنات التسجيل سهولة في الاستخدام، حيث يعمل على بروتوكول HTTP المقبول عالميًا لنقل البيانات عبر الشبكة. يسمح للمطورين بالتكامل بسلاسة مع أي خدمة HTTP واختيار خدمات استقبال السجلات بشكل مرن.
بالإضافة إلى ذلك، يدعم APISIX عشرات المكوّنات الخاصة بالتسجيل لتلبية متطلبات متنوعة في سيناريوهات مختلفة. سواء كان لجمع سجلات HTTP بسيطة، أو تحليل سجلات ومراقبة معقدة، أو متطلبات أداء واستقرار عالية، يوفر APISIX دعمًا شاملاً، مما يخلق أنظمة أكثر ملاءمة وكفاءة للمستخدمين.