Triển khai hệ thống phân tích, lưu trữ log với Django sử dụng ELK Stack

Aug 25, 2020

Đặt vấn đề

Vào một ngày cuối tuần đẹp trời hệ thống bạn đang quản lý đang chạy ngon lành thì tự nhiên lăn đùng ra chết. Bạn lục lọi từng server để tìm file log, bạn cố gắng mò để tìm nguyên nhân trong đống những file log hàng trăm GB. Và kết quả thật đau buồn khi chỉ là con số 0...
Đừng vội cay cú, vì khi đã có trong tay bộ phần mềm quản lý phân tích logging ELK Stack cực kỳ ngầu và xịn mọi vấn đề đều của bạn sẽ được giải quyết.
Nhắc tới log, vậy thì log là gì, tại sao chúng ta lại cần quản lý và phân tích chúng.

Log là những dữ liệu được ghi lại trong quá trình hệ thống hoạt động,
Nhờ có log mà có thể xem được trạng thái của hệ thống đã hoạt động trong quá khứ, xem những code nào đã được chạy, hoặc có thể dự đoán được những gì hệ thống sẽ sảy ra trong tương lai.
Từ đó có thể tìm ra lỗi, để có thể kịp thời xử lý và có phương án khắc phục nhanh hơn.

ELK Stack là gì?

ELK Stack là bộ 3 phần mềm mã nguồn mở: Logstash, Elasticsearch, Kibana. Trong đó:
Logstash: Tiếp nhận log từ nhiều nguồn khác nhau, xử lý log theo cấu hình cài sẵn để tạo log mong muốn, sau đó đưa log tới Elasticsearch.
Elasticsearch: là một server đóng vai trò lưu trữ, thực hiện việc tìm kiếm và phân tích log.
Kibana: Cung cấp giao diện web để người dùng tương tác với Elasticsearch một cách trực quan và dễ dàng.

Vì sao ELK Stack lại được nhiều công ty lựa chọn?

pasted-image-0
Như đã nói ở trên, việc dùng ELK Stack sẽ giúp tiết kiệm được rất nhiều thời gian trong việc tìm và phân tích log trong hệ thống lớn. Ngoài ra ELK Stack còn rất nhiều những tính năng hay ho khác:
Hoàn toàn miễn phí: ELK Stack là open source cho nên nó hoàn toàn miễn phí.
Dễ dàng tích hợp: Logstash hoàn toàn đọc được log dù cho hệ thống của bạn sử dụng Nginx hay Apache, MySQL, MongoDB,... cho nên việc tích hợp vào hệ thống rất dễ dàng.
Dễ sử dụng: Phần mềm Kibana cung cấp một giao diện web trực quan, thao tác đơn giản chỉ với vài cú click chuột.
Mở rộng dễ dàng và linh hoạt: Với hệ thống lớn, khi có thêm server, ta chỉ việc tăng node trên Elasticsearch là vấn đề được giải quyết.
Cộng đồng đông đảo: thời điểm hiện tại thì ELK Stack đang rất phổ biến và được nhiều công ty sử dụng, cộng động hoạt động mạnh mẽ.

Cách triển khai

Cài đặt môi trường
Cài đặt OpenJDK 11:
sudo apt install openjdk-11-jdk

sudo nano /etc/environment
Thêm dòng sau:
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

Cài đặt Nginx:

sudo apt install nginx
sudo ufw allow 'Nginx Full'
sudo systemctl start nginx

Cấu hình logging dự án Django
Cài đặt module cần thiết:
pip install django-elasticsearch-dsl
Cấu hình file setting.py

NSTALLED_APPS = [
  # .... 
    'django_elasticsearch_dsl',
]

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': 'localhost:9200'
    },
}

LOGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'console': {
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
        },
        'file': {
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console'
        },
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'formatter': 'file',
            'filename': 'tmp/debug.log'
        }
    },
    'loggers': {
        '': {
            'level': 'DEBUG',
            'handlers': ['console', 'file']
        }
    }
}

Log được tạo ra khi dự án hoạt động
1

Cấu hình ELK Stack
Cấu hình Logstash

Cài đặt:
sudo apt-get install logstash
Cấu hình input, filter, output:
Thêm nội dung vào file: /etc/logstash/conf.d/logstash.conf

input {
 beats {
   port => 5044
 }
}

filter {
 grok {
   match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}] %{LOGLEVEL:loglevel}\|%{GREEDYDATA:module}\|%{GREEDYDATA:content}" }
 }
 date {
   locale => "en"
   match => [ "timestamp", "YYYY-MM-dd HH:mm:ss"]
   target => "@timestamp"
   timezone => "America/New_York"
 }
}

output {
 elasticsearch {
   hosts => "localhost:9200"
   manage_template => false
   index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
 }
}

Cấu hình Filebeat
Cài đặt:
sudo apt-get install filebeat
Cấu hình:
Thêm nội dung vào file: /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/tadevx/work/gitwork/django_elkstack_test/tmp/*.log
output.logstash:
  hosts: ["localhost:5044"]

Cấu hình Elasticsearch
Cài đặt :
sudo apt-get install elasticsearch
Cấu hình:
Thêm dòng sau vào file: /etc/elasticsearch/elasticsearch.yml
network.host: localhost

Cấu hình Kibana
Cài đặt:
sudo apt-get install kibana
Cấu hình tài khoản:
echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Và đây là thành quả

Sau khi bạn hì hục gõ toàn bộ những command phía trên thì bạn đã có một hệ thống phân tích log với ELK Stack rồi đó. Bạn truy cập vào Kibana theo đường dẫn bên dưới để xem thành qủa của mình nhé.
http://localhost:5601

pasted-image-0--1-

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.