ELK Stack لتخزين سجلات تطبيق Django

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


كان الحل هو إنشاء مستودع سجلات مركزي مع تجميع السجلات والبحث. وقع الاختيار على مكدس ELK. ELK هو مزيج من ثلاثة مشاريع مفتوحة المصدر: ElasticSearch و Logstash و Kibana. تقوم ELK بتخزين السجلات ، وإنشاء الرسوم البيانية ، وهناك دعم للبحث عن نص كامل باستخدام الفلاتر. تصف المقالة عملية إعداد مكدس ELK لتخزين سجلات تطبيق Django.


تركيب ELK


سيتم استخدام Docker لتثبيت مكدس ELK ، بناءً على مستودع docker-elk . قم بتغيير إعداد Logstash ، وأضف نمط GROK لمطابقة سجلات nginx وقم بتغيير قسم الإخراج بحيث يتم تخزين سجلات تطبيق Django وسجلات nginx في فهارس مرنة في البحث المرن. نتيجة لذلك ، يبدو logstash.conf كما يلي:


input { beats { port => 5000 host => "0.0.0.0" } } filter { if [type] == "nginx" { grok { match => { "message" => "%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:access_time}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\"" } } } } output { if [type] == "nginx" { elasticsearch { hosts => "elasticsearch:9200" index => "nginx-%{+YYYY.MM.dd}" } } else if [type] == "django" { elasticsearch { hosts => "elasticsearch:9200" index => "django-%{+YYYY.MM.dd}" } } else { elasticsearch { hosts => "elasticsearch:9200" index => "unknown_messages" } } } 

بعد إجراء التغييرات ، قم بتشغيل المكدس:


 docker-compose up 

بعد البدء ، يستمع المكدس على المنافذ التالية:


  • 5000: إدخال TCP Logstash.
  • 9200: Elasticsearch HTTP
  • 9300: نقل Elasticsearch TCP
  • 5601: كيبانا

تسجيل العمارة


خذ بعين الاعتبار بنية التسجيل لتطبيق Django.


الصورة


كما ترى من الرسم البياني ، يتكون التطبيق من الخدمات: nginx ، تطبيق django ، عامل الكرفس. أرسلت كل خدمة سجلات إلى مكدس ELK. خذ بعين الاعتبار تكوين كل خدمة على حدة.


كتابة سجلات Nginx إلى ELK


للعمل مع سجلات nginx ، يلزم توفر خدمة Filebeat إضافية. عملية تثبيت Filebeat موصوفة بالتفصيل على الموقع الرسمي . مثال على تثبيت خدمة Filebeat على خادم Ubuntu:


 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-amd64.deb sudo dpkg -i filebeat-6.4.0-amd64.deb 

سيقوم Filebeat بقراءة السجلات من الملف وإرسالها إلى Logstash. مثال التكوين:


 filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.log fields: type: nginx fields_under_root: true scan_frequency: 5s output.logstash: hosts: ["logstash:5000"] 

أطلقنا خدمة Filebeat ونلاحظ ظهور السجلات في كيبانا.


كتابة سجلات Django في ELK


لكي يتفاعل Django مع خدمة Logstash ، قم بتثبيت حزمة Python-logstash الاختيارية.


 pip install python-logstash 

دعنا نغير إعدادات تطبيق Django بحيث يتم إرسال السجلات إلى خدمة Logstash.


 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'simple': { 'format': 'velname)s %(message)s' }, }, 'handlers': { 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'logstash': { 'level': 'INFO', 'class': 'logstash.TCPLogstashHandler', 'host': 'logstash', 'port': 5000, 'version': 1, 'message_type': 'django', # 'type'   logstash . 'fqdn': False, 'tags': ['django'], #  . }, }, 'loggers': { 'django.request': { 'handlers': ['logstash'], 'level': 'INFO', 'propagate': True, }, ... } } 

بعد ذلك ، سيرسل التطبيق سجلات إلى Logstash. مثال للاستخدام:


 import logging logger = logging.getLogger(__name__) def test_view(request, arg1, arg): ... if is_error: #    logger.error('Something went wrong!') 

بعد ذلك ، قم بتهيئة Kibana لنفسك لعرض المعلومات اللازمة. أمثلة على لقطات الشاشة الخاصة بإعداداتك:


الصورة
الصورة
الصورة


يجمع النظام سجلات الخدمة ، ويسمح لك بالبحث عنها بسهولة ، وإنشاء الرسوم البيانية والمرئيات ، مما يتيح لك اكتشاف المشكلات وإصلاحها بسرعة.

Source: https://habr.com/ru/post/ar421819/


All Articles