تتبع وصول ملفات PDF على خادم لينكس: دليل عملي سريع وفعال

دقائق القراءة: 5

هل تساءلت يوماً عن إمكانية تتبع عدد المرات التي ينقر فيها مستخدمو موقعك لتحميل الملفات الثنائية مثل ملفات PDF أو JPG؟ الإجابة هي نعم، إنه ممكن. ولكن هل هو سهل؟ لم أكن أعتقد ذلك في البداية، ولكنني كنت مخطئاً.

بدأت القصة بينما كنت أعمل على تحسين صفحة هبوط على موقعي Bootstrap IT لكتابي الجديد، Keeping Up: Backgrounders to all the big technology trends you can’t afford to miss. أردت أن أتيح الوصول إلى ملف PDF لفصل نموذجي من الكتاب، ولكنني أيضاً رغبت في طريقة لمعرفة عدد الأشخاص الذين قاموا بتحميله بالفعل.

لماذا قد لا يكون Google Analytics هو الحل الأمثل؟

دعنا نعود خطوة إلى الوراء. خدمة Google Analytics هي خدمة مجانية تستخدم مقتطفات برمجية (code snippets) تُدرج في ملفات HTML لجمع وعرض البيانات حول عدد مرات الوصول إلى ملفاتك. يكمن سحر ومشكلة Google Analytics في كمية المعلومات التي يمكن الكشف عنها حول مستخدميك. لقد ناقشت بعض المخاوف المتعلقة بالخصوصية المرتبطة بهذه الخدمة في كتاب Keeping Up، وذكرت أيضاً شعوري بالذنب ولو قليلاً لاستخدامي هذه الخدمة على مواقعي الخاصة.

على أي حال، بمفرده، لا يستطيع Google Analytics إخبارك بالكثير عن كيفية استخدام ملفات PDF المستضافة على الويب. بالطبع، هناك حيل للتغلب على هذه المشكلة. تشمل الأساليب التقليدية إعداد Google Tag Manager، أو تخصيص بناء جملة عناوين URL للطلبات التي تستخدمها، أو إذا كان موقعك يستخدم برنامج ووردبريس (WordPress)، العمل مع إضافة MonsterInsights. كل من هذه الطرق يمكن أن تنجح، ولكنها تتطلب منحنى تعلم حاداً إلى حد ما.

نهج مسؤول النظام (Sysadmin) الكسول: سجلات أباتشي تنقذ الموقف

ولكنني مسؤول نظام لينكس (Linux sysadmin). وكما لا أفشل أبداً في تذكير من حولي، فإن أفضل مسؤولي الأنظمة هم الكسالى. منحنى تعلم؟ هذا يبدو وكأنه عمل مشبوه! لن يحدث ذلك في عهدي.

إذن، إليك الحل. خادم الويب الخاص بي، وبشكل واضح، يعمل بنظام لينكس (Linux). وتحت الغطاء، يتم التعامل مع حركة مرور HTTP بواسطة خادم الويب أباتشي (Apache). هذا يعني أن كل ما يحدث على مواقع الويب الخاصة بي سيتم تسجيله بواسطة أباتشي. كل شيء. كل ما سأحتاجه لمعرفة ما حدث لملف PDF النموذجي الخاص بي، هو سطر واحد من أوامر باش (Bash) يتم تشغيله من محطة العمل المحلية الخاصة بي:

echo "cd /var/log/apache2 && grep -nr KeepingUpSampleChapter" \
| ssh -i PrivateKey.pem LoginName@bootstrap-it.com

تحليل الأمر: خطوة بخطوة

دعنا نفكك هذا الأمر. الأمر الأول من الأمرين الموجودين بين علامتي الاقتباس (cd /var/log/apache2) سينقلنا إلى الدليل /var/log/apache2/ على خادم لينكس حيث يكتب أباتشي سجلاته. هذا ليس علماً معقداً. سيكون هناك العديد من الملفات الهامة في هذا الدليل، وذلك لأن الرسائل المتعلقة بالوصول العادي والأخطاء يتم حفظها في ملفات مختلفة، ولأن سياسات تدوير الملفات (file rotation policies) تعني أنه قد يكون هناك أكثر من نسخة واحدة من أي من هذه الملفات أيضاً.

لذلك، سأستخدم الأمر grep للبحث في جميع الملفات غير المضغوطة عن السلسلة النصية KeepingUpSampleChapter. بالطبع، KeepingUpSampleChapter هو جزء من اسم ملف PDF. ثم أقوم بتوجيه هذا الأمر إلى SSH، والذي سيتصل بخادمي البعيد وينفذ الأمر.

إليك ما سيبدو عليه إدخال واحد من تشغيل ناجح (لقد قمت بإزالة عنوان IP الخاص بالمرسل لأسباب تتعلق بالخصوصية):

other_vhosts_access.log.1:12200:bootstrap-it.com:443 <requester 's IP Address> - - [01/Dec/2020:16:39:36 -0500] "GET /davidclinton/KeepingUpSampleChapter.pdf?pdf=SamplePDF HTTP/1.1" 200 65146 "https://bootstrap-it.com/davidclinton/keeping-up/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"

ماذا تكشف سجلات أباتشي؟

يمكننا أن نرى من هذا السجل:

  • ملف السجل الذي ظهر فيه الإدخال (other_vhosts_access.log.1)
  • عنوان IP الخاص بالمرسل (تم حجبه)
  • الطابع الزمني (timestamp) الذي يخبرنا بالضبط متى تم الوصول إلى الملف
  • الموقع النسبي للملف على نظام ملفات الخادم (/davidclinton/KeepingUpSampleChapter.pdf)
  • عنوان URL الذي تم منه الطلب (https://bootstrap-it.com/davidclinton/keeping-up/)
  • والمتصفح الذي كان المستخدم يشغله

هذه كمية كبيرة من المعلومات. إذا كنا مهتمين فقط بعدد مرات تحميل الملف، يمكننا ببساطة توجيه الإخراج إلى الأمر wc الذي سيخبرنا بثلاثة أشياء حول الإخراج: عدد الأسطر والكلمات والأحرف التي يحتوي عليها. سيبدو هذا الأمر كما يلي:

echo "cd /var/log/apache2 && grep -nr KeepingUpSampleChapter | wc" \
| ssh -i PrivateKey.pem LoginName@bootstrap-it.com

تحديات محتملة: التعامل مع الملفات المضغوطة

هناك قيود محتملة واحدة على هذه الطريقة. إذا كان موقع الويب الخاص بك مشغولاً، فستتغير ملفات السجل بشكل متكرر، وغالباً أكثر من مرة في اليوم. بشكل افتراضي، بعد التدوير الأول، يتم ضغط الملفات باستخدام خوارزمية gz، والتي لا يمكن قراءتها بواسطة الأمر grep العادي.

لن يواجه الأمر zgrep أي مشكلة في التعامل مع هذه الملفات، ولكن العملية قد تستغرق وقتاً طويلاً جداً. قد تفكر في كتابة برنامج نصي مخصص بسيط لفك ضغط كل ملف gz ثم تشغيل grep العادي على محتوياته. سيكون هذا مشروعك الخاص.

الخلاصة التقنية

يُظهر هذا الدليل العملي كيف يمكن لمسؤولي الأنظمة الاستفادة من الأدوات المتاحة في بيئة لينكس، مثل سجلات أباتشي وأوامر Bash الأساسية، لتحقيق أهداف تتبع معينة بكفاءة ودون الحاجة إلى حلول خارجية معقدة أو مكلفة. بينما توفر أدوات مثل Google Analytics تحليلات شاملة للويب، فإنها قد لا تكون الخيار الأمثل لتتبع الوصول المباشر للملفات الثنائية مثل PDF، خاصةً مع المخاوف المتعلقة بالخصوصية ومنحنى التعلم. إن استخدام الأوامر المباشرة مثل grep و wc عبر SSH يوفر حلاً سريعاً ومباشراً، وإن كان يتطلب بعض المعرفة الأساسية بالتعامل مع سطر الأوامر. التحدي الوحيد يكمن في التعامل مع سجلات أباتشي المضغوطة، والذي يمكن التغلب عليه ببرامج نصية مخصصة لضمان استمرارية التتبع.

هناك الكثير من المعلومات الإدارية المفيدة في شكل كتب ودورات ومقالات متاحة على موقع bootstrap-it.com الخاص بي.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *