أين يجب أن يكتب خادم OpenVPN سجله، ولماذا
تختلف log وlog-append وsyslog، ومدير الخدمة يحتفظ بنسخته الخاصة. اختر تدفقًا واحدًا مرجعيًا، وأبقِ دورة الحياة مقروءة، وحدد مدة الاحتفاظ.
يجيب تصميم السجل عن ثلاثة أسئلة: أي عملية أنتجت السجل، وأين يهبط ذلك السجل، وكم من الوقت يبقى. يستطيع OpenVPN أن يكتب إلى ملف، أو يسلّم الرسائل إلى مسجّل النظام، أو يتركها لما يلتقطه مدير الخدمة، وهذه ليست ثلاث نسخ من تدفق واحد. كل خيار يغيّر من يملك التدوير، وأي مستخدم يستطيع قراءة النتيجة، وما يحدث أثناء الإقلاع. احسم الإجابات قبل وقوع حادث، لأنك بعدها ترث ما تم تكوينه.
ما الذي يفعله الخادم فعليًا بالتوجيه
التوجيهات ليست تجريدات؛ كل واحد منها يقرر أين تكتب العملية رسائلها. log /path يفتح ذلك الملف، log-append /path يفتحه للإلحاق، syslog يسلّم الرسائل إلى مسجّل النظام المحلي عبر مقبسه. من دون أي منها يذهب الخرج إلى الخرج القياسي، ويقرر مدير الخدمة ما يحدث بعد ذلك. اقرأ الوحدة الفعلية والملف الشخصي معًا قبل أن تستنتج أن الخادم يتجاهل تكوينك.
الحالة الأخيرة شائعة في التثبيت من حزمة، وهي تفسر لماذا يختلف مسؤولان حول مكان السجل. أحدهما يقرأ سجل الوحدة، والآخر يقرأ ملفًا لم يكتبه الخادم قط.
افحص التكوين العامل بدلًا من الملف على القرص. يمكن لتجاوز وحدة من نوع drop-in أو ملف بيئة أن يغيّر التوجيه الفعلي دون لمس الملف الشخصي الذي تقرأه.
log يقتطع، وlog-append لا
log يقتطع ملفًا موجودًا عند سريان التوجيه، لذا تمحو إعادة التشغيل الأدلة السابقة. log-append يحتفظ بما هو موجود ويضيف. لا أحد الخيارين يدوّر شيئًا، ولا أحدهما يعيد فتح الملف لاحقًا من تلقاء نفسه، ولهذا يحتاج التدوير إلى تعاون.
إذا أعاد التدوير تسمية الملف بينما لا يزال الخادم يكتب إلى الواصف القديم، يبقى الملف الجديد فارغًا ويستمر استهلاك القرص في الارتفاع في الملف المعاد تسميته. أرسل إشارة إلى العملية لإعادة الفتح، أو دوّر باستراتيجية النسخ والقطع واقبل نافذة النسخ.
الدليل والملكية والأذونات جزء من التصميم. قد يعمل الخادم بعد الإقلاع بمستخدم غير مميز، وقد لا يكون دليل أنشأه root وقت التثبيت قابلًا للكتابة حينها. جهّزه عبر الحزم أو عملية النشر بدلًا من إصلاح الأذونات أثناء حادث.
مدير الخدمة يحتفظ بنسخة ثانية
يلتقط systemd الخرج القياسي والخطأ القياسي افتراضيًا، لذا فإن وحدة بلا إعادة توجيه صريحة لديها سجل بالفعل. إضافة توجيه ملف تعطي تدفقين مختلفَي الاحتفاظ والقراء والطوابع الزمنية.
هذا ليس خطأً تلقائيًا، لكنه يجب أن يكون قرارًا. أبقِ سجل الإقلاع في journal، لأن الأعطال قبل وجود الملف المكوَّن لا تظهر في أي مكان آخر. ثم اجعل الملف مرجعيًا لأحداث التشغيل المستقر واذكر ذلك في runbook. تدفقان مرجعيان يعنيان جوابين لكل سؤال.
أكّد الاختيار باختبار يفشل عمدًا. ابدأ الخادم بشهادة غير مقروءة وافحص أي تدفق يسجل الخطأ.
الإسهاب ليس هو التفصيل القابل للاستخدام
مستوى verb الأعلى يضيف سطورًا، وبعد نقطة معينة سطورًا لا يقرأها أحد. المستوى 3 حالة مستقرة معقولة لمعظم عمليات النشر، بينما يناسب المستوى 4 وما فوق تحقيقًا محدودًا بسؤال معروف. تقليل التكرار يخفض الضجيج، لكنه يجب ألا يخفي عدد مرات تكرار الحدث. اضبط المستوى الذي تستطيع تحمله، وارفعه فقط لتحقيق مسمّى له نهاية.
احتفظ بهوية النسخة والطوابع الزمنية في السجل. يبدو إعادة الاتصال تمامًا كأول اتصال عندما يُلحق بالملف لأشهر ويغيب اسم النسخة.
انتبه لما يسقط أيضًا في ذلك الملف. قد يتضمن الخرج المعاد توجيهه نصًا من نصوص برمجية مستدعاة، وبرنامج مساعد يطبع بيئته يضع بيانات الاعتماد ومسارات المفاتيح في سجل مقروء. تعامل مع الوصول إلى السجل كقرار أمني حتى عندما لا يطبع الخادم نفسه شيئًا حساسًا.
التدوير والاحتفاظ والإشارات التي تعيد التحميل
قرر الاحتفاظ مع الشخص الذي يملك القرص، واضبطه قبل أن يقرر الحجم نيابة عنك. إشارة إعادة التحميل ليست أمر صيانة للسجل: إرسال الإشارة الخاطئة يعيد تشغيل النفق ويقطع كل مستخدم. اكتب إجراء إعادة الفتح بجانب قاعدة التدوير حتى لا ينفصل الاثنان.
يجب أن تكون النتيجة خدمة يستطيع المشغل وصفها: تدفق مرجعي واحد، وكل حدث موضوع في دورة الحياة، وسجل يمكن الحصول عليه دون جمع كل ملف يحمل أسرارًا على المضيف. هذا الوصف هو اختبار القبول للتصميم، وفحصه قبل الحادث التالي رخيص.