본문 바로가기

문돌이 존버/ELK 스터디

Mac 버전 장고(Django), MySQL, Logstash 연동 튜토리얼

반응형

저는 장고 웹서버를 구축하고 models.py에서 DB 테이블을 생성해놓은 상태입니다. 처음엔 장고에 기본으로 탑재된 sqlite3 DB를 사용하다가 로그스태시 input plugin의 오류 문제를 해결하지 못해 결국 MySQL DB를 연동했습니다. 이는 ELK 공식 홈페이지에 예제로 잘 소개되어 있으니 참고하시기 바랍니다.

제가 잘 몰라서 그렇겠지만 tcp input plugin과 sqlite input plugin을 시도해봤는데 두 방법 모두 안되더라고요. 특히, sqlite input plugin은 앨라스틱 홈페이지에서도 2018년을 마지막으로 업데이트를 진행했고 현재는 공식 지원하는 시스템이 아니라고 합니다. 장고 DB를 MySQL로 설정하더라도 장고 py 파일 내부 명령어는 변경되지 않으니 걱정하지 말고 settings.py 설정만 조금 바꿔주면 됩니다.(MySQL 다운로드는 공식 사이트에서 가능하니 따로 설명은 하지 않겠습니다.) 

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB name',
        'USER': 'DB username',
        'PASSWORD': 'DB password',
        'HOST': 'localhost',
        'PORT': '', # default: 3306
    }
}

기본 sqlite3 DB의 경우, settings.py 파일은 아래와 같습니다.

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

이제는 로그스태시를 건드릴 차례입니다. 아래 장고와 앨라스틱서치를 연동하기 위해 수정한 로그스태시 conf xml 파일을 보고 그대로 따라하시면 될 겁니다. 

sudo vi conf xml
# conf xml
input {
    jdbc {
        jdbc_driver_library => "/connector 다운로드 경로/mysql-connector-java-8.0.21.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        # 아래 타임존 설정 필수(미설정시 timezone KST error 발생)
        jdbc_connection_string => "jdbc:mysql://localhost:3306/django?useTimezone=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
        jdbc_user => "DB usernanme"
        jdbc_password => "DB password"
        statement => "SELECT * FROM myblog_post;"
        schedule => " * * * * * *" # 연속으로 쿼리문을 날림(시간 설정 가능, HHMMSS)
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "djangotest"
    }
    stdout{
        codec => rubydebug
    }
}

자! bin/logstash - f ~~ /logstash-django.conf 명령어를 통해 로그스태시를 실행하기 전에 설치해야 할 라이브러리가 남았습니다. 현재 장고 DB는 MySQL로 설정되어 있기 때문에 이와 로그스태시를 연결하는 connector가 별도로 필요합니다. 위 코드 중에서 jdbc_driver_library path 에 설정되는 것으로 https://dev.mysql.com/downloads/connector/j/에 접속하여 직접 설치하셔야 합니다. 아래와 같은 화면이 나오면 OS를 "Platform Independent"로 하시고 tar이나 zip 파일을 다운로드 하시면 됩니다. 

이후 로그스태시를  실행해보면 콘솔에서도 데이터가 전송된 것을 확인할 수 있으며, kibana를 사용하고 계시다면 더욱 편리하게 확인할 수 있습니다. 

추가로, jdbc plugin이 설치되어 있어야 하는데요. 이는 앨라스틱서치, 로그스태시를 다운로드할 시 기본적으로 설치되는 것으로 알고 있는데 혹시나 이와 관련된 문제가 발생한다면 bin/logstash-plugin list jdbc 를 통해 확인하시고... 없다면 bin/logstash-plugin install logstash-input-jdbc 로 설치하시고 실행하시면 됩니다. 

또 하나, 위 코드에도 명시했지만 mysql connector가 버전이 업데이트되면서 5.x 이후로는 타임존 에러가 많이 발생한다고 하네요. 저도 처음에 발생해서 UTC 타임존을 설정해줘서 해결했는데요. 참고한 사이트는 YENA WORLD님의 블로그 글입니다. 장고는 아니지만 JAVA MySQL 연동 시 발생하는 각종 에러들을 모아놓고 해결 방법도 잘 설명해주셨습니다. 타임존 에러가 아닌 다른 에러 메시지가 뜨는 경우, 잘 참고하시기 바랍니다. 

728x90
반응형