본문 바로가기

문돌이 존버/ELK 스터디

AWS EC2 Ubuntu 18.04 Django 서버 구축 및 Logstash 연동 (2탄)

반응형

<출처: stackoverflow>

지난 번 우분투 환경에 장고 서버를 구축하는 과정과 장고 DB를 기본 sqlite3에서 MySQL로 교체하는 작업을 설명했습니다. 오늘은 로그스태시를 활용하여 장고와 ELK를 연동, MySQL 데이터를 앨라스틱서치에 전달해 키바나로 시각화할 수 있는 단계를 소개하겠습니다. 저는 유로띠님의 블로그 글을 아주 유용하게 활용했습니다. 감사합니다 ^^

가장 먼저 필요한 것은 장고 MySQL과 로그스태시를 연결할 수 있는 connector가 필요한데요, 이 사이트에서 다운로드할 수 있습니다. 저는 5.1.45 버전을 다운로드하였는데, 버전은 상관없을 듯 합니다. 다운받은 파일은 /usr/share/logstash/tools 경로에 이동시켜줍니다. (저는 윈도우라 WinSCP를 통해 우분투 디렉토리에 옮기고 이후 sudo mv 명령어로 최종 위치로 이동시켰는데요. /usr/share/logstash/tools 경로가 root 권한이 필요하기 때문에 이렇게 귀찮게 했답니다.)

connector를 다운받는 다른 방법으로는 명령어를 입력하는 것인데요. 이건 저도 시도하지 않은 방법이나 구글링을 하다 발견한 것으로 혹시나 하는 마음에 공유합니다. MitNy님의 블로그 글을 참고했고, 장고가 아닌 java와의 연동이지만 어쨌든 connector 설치 방법이 있어 잘 보면 좋을 듯합니다.

sudo apt-get install libmysql-java 

위의 명령어를 입력하면 /usr/share/java 경로에서 mysql-connector-java-5.1.45.jar 파일이 설치된 것을 확인할 수 있습니다.

이제 로그스태시 conf 파일 추가가 필요합니다. 

cd /etc/logstash
ls # logstash-sample.conf 파일 존재
sudo vi logstash-django.conf # 나만의 conf 파일 생성

아래는 logstash-django.conf 파일 코드입니다. 로컬(Mac)에서 코드를 돌릴 때는 Timezone의 KST 에러가 발생했는데, 이번엔 connector 버전이 낮아서 그런지 입력하지 않아도 잘 진행되네요. 

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/tools/mysql-connector-java-5.1.45.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_validate_connection => true
    jdbc_connection_string => "jdbc:mysql://AWS ec2-ip:3306/monitor" # MySQL이 있는 AWS ec2 ip를 입력
    jdbc_user => "username"
    jdbc_password => "userpassword"
    tracking_column => "regdate"
    use_column_value => true
    statement => "SELECT d.id as deviceid_id, d.status, d.station, d.region, d.installdate, p.id, p.degree, p.hasMask, t.mask_pop, t.hightemp_pop
                  FROM monitor_app_tbl_device_info as d 
                  left join monitor_app_tbl_person_info as p on d.id = p.deviceid_id
                  left join monitor_app_tbl_total_info as t on d.id = t.deviceid_id
                  WHERE p.regdate>:sql_last_value;"
    schedule => "* * * * * *"
  }
}

output {
    elasticsearch {
        hosts => ["AWS ec2-ip:9200"] # 앨라스틱서치가 있는 AWS ec2 ip를 입력
        index => "django_test"
        document_id => "%{id}"
    }
    stdout{
        codec => rubydebug
    }
}

이렇게 설정한 이후 sudo /usr/share/logstash/bin/logstash -f /etc/logstash/logstash-django.conf 을 입력하여 로그스태시를 실행하면 장고 MySQL 테이블에 있는 데이터들이 잘 전송되는 것을 확인할 수 있습니다. 이후 키바나에서도 인덱스를 살펴보면 잘 들어온 것을 볼 수 있습니다. 

* 참고: 로그스태시를 실행시키거나 conf 파일을 생성할 때 사용된 경로는 아무것도 건드리지 않은 디폴트 경로입니다. 만약 경로를 직접 건드리셨다면 그에 따라 바꾸시면 됩니다.

728x90
반응형