Stack ELK untuk menyimpan log aplikasi Django

Setiap proyek yang melampaui tahap prototipe perlu mengatur penebangan. Penebangan yang tepat memecahkan banyak masalah dan membantu untuk memahami status proyek. Pada tahap awal, masuk ke file cocok untuk saya sampai proyek tumbuh dan pencarian dengan log tidak mulai memakan waktu.


Solusinya adalah membuat repositori log terpusat dengan agregasi log dan pencarian. Pilihannya jatuh pada tumpukan ELK. ELK adalah kombinasi dari tiga proyek OpenSource: ElasticSearch, Logstash dan Kibana. ELK menyimpan log, membuat grafik, dan ada dukungan untuk pencarian teks lengkap dengan filter. Artikel ini menjelaskan proses pengaturan tumpukan ELK untuk menyimpan log aplikasi Django.


Instalasi RUSA


Docker akan digunakan untuk menginstal tumpukan ELK, berdasarkan repositori docker-elk . Ubah pengaturan Logstash, tambahkan pola GROK untuk mencocokkan log nginx dan mengubah bagian output sehingga log aplikasi Django dan log nginx disimpan dalam indeks ElasticSearch yang berbeda. Hasilnya, logstash.conf terlihat seperti ini:


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" } } } 

Setelah melakukan perubahan, jalankan tumpukan:


 docker-compose up 

Setelah memulai, tumpukan mendengarkan pada port berikut:


  • 5000: Logstash input TCP.
  • 9200: HTTP Elasticsearch
  • 9300: Transportasi TCP Elasticsearch
  • 5601: Kibana

Arsitektur Penebangan


Pertimbangkan arsitektur logging dari aplikasi Django.


gambar


Seperti yang dapat Anda lihat dari diagram, aplikasi terdiri dari layanan: nginx, aplikasi Django, pekerja seledri. Setiap layanan mengirim log ke tumpukan ELK. Pertimbangkan untuk mengkonfigurasi setiap layanan secara individual.


Menulis Log Nginx ke ELK


Untuk bekerja dengan log nginx, layanan Filebeat tambahan diperlukan. Proses instalasi untuk Filebeat dijelaskan secara rinci di situs web resmi . Contoh menginstal layanan Filebeat di server 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 akan membaca log dari file dan mengirim ke Logstash. Contoh Konfigurasi:


 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"] 

Kami meluncurkan layanan Filebeat kami dan mengamati tampilan log di Kibana.


Menulis Django Log dalam ELK


Agar Django berinteraksi dengan layanan Logstash, instal paket Python-logstash opsional.


 pip install python-logstash 

Mari kita ubah pengaturan aplikasi Django sehingga log dikirim ke layanan 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, }, ... } } 

Setelah itu, aplikasi akan mengirim log ke Logstash. Contoh penggunaan:


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

Setelah itu, konfigurasikan Kibana untuk diri Anda sendiri untuk menampilkan informasi yang diperlukan. Contoh tangkapan layar pengaturan Anda sendiri:


gambar
gambar
gambar


Sistem mengumpulkan log layanan, memungkinkan Anda dengan mudah mencarinya, membuat grafik dan visualisasi, memungkinkan Anda untuk dengan cepat mendeteksi dan memperbaiki masalah.

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


All Articles