티스토리 뷰

[업데이트 2016.12.01 01:15]

 

3) Logstash

Logstash도 마찬가지로 아래의 주소에서 설치 파일을 다운로드한 후, 원하는 위치에 압축을 해제합니다. bin 디렉토리로 이동 후, logstash.bat를 실행하면 되는데, 실행 시 파라메터로 configuration 파일을 넘겨주어야 합니다.

 

* 참고: https://www.elastic.co/downloads/logstash

* 참고: https://www.elastic.co/guide/en/logstash/current/configuration.html

 

위의 configuration 파일 생성 및 실행을 참고하여 Logstash를 실행합니다.

 

 

Logstash는 아래와 같이 Pipeline 아키텍쳐를 가지고 있습니다. inputs -> filters -> outputs의 순으로 데이터를 가공하여 Elasticsearch 또는 다른 ouput으로 전달합니다. 따라서 데이터 변환 부터 out하기까지 inputs,filters,outputs를 어떻게 구성하느냐가 Logstash에서 중요한 부분인 것 같습니다.

 

* 참고: https://www.elastic.co/guide/en/logstash/current/pipeline.html

 

* 참고: https://www.elastic.co/guide/en/logstash/current/first-event.html

 

Configuration 파일 생성 및 Logstash 실행 후, Command prompt에서 문자를 입력해보면 stdin을 통해 키보드 입력이 가능하며, 입력된 내용이 message에 추가되어 다시 표시됨을 확인할수 있습니다.

 

 

해당 메세지를 ouput 결과로 보았다면, 기본적인 준비가 완료된 상태입니다.

 

저는 jdbc inputs plugin을 이용하여 MySQL에 query를 한후, 가져온 데이터를 Elasticsearch에 맞게 가공하여 import하는 것에 대해 스터디를 해보려고 합니다.

 

1) JDBC Input Plugin 사용 MySQL 데이터 Query 및 가져오기

먼저 jdbc사용을 위해 MySQL 사이트에서 connector/j 최신 버전을 다운로드한 후, 압축을 해체합니다. 압축을 해제하면 mysql-connector-java-5.1.40-bin.jar 와 같은 jar 파일을 확인 할 수 있습니다.(2016.11.28 기준)

 

https://dev.mysql.com/downloads/connector/j/

 

이제 특정 폴더에 jar파일을 복사한 후, configuration 파일의 inputs plugin 정의 부분을 jdbc를 사용할 수 있도록 변경합니다. (아래의 링크 참조)

 

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

 

 

input {
      jdbc {
           jdbc_driver_library => "C:\mysql-connector-java-5.1.40\mysql-connector-java-5.1.40-bin.jar"
           jdbc_driver_class => "com.mysql.jdbc.Driver"
           jdbc_connection_string => "jdbc:mysql://localhost/mydb"
           jdbc_user => "root"
           jdbc_password => "1234"
           statement => "SELECT registered_date,customer FROM tbl_users"
           schedule => "* * * * *"
      }
}
filter {
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}


 

위에서 볼 수 있듯이 query 주기를 scheduling 할 수 있습니다. 자세한 내용은 링크를 참조하시기 바랍니다. 위에 설정된 값은 매 분마다 query를 하도록 설정되어 있습니다.

 

이제 input plugins에 jdbc plugin 설정 후, 다시 Logstash를 실행하면 매분마다 정의된 query를 수행하여 데이터를 가져오는 것을 Windows command prompt를 통해 확인 할 수 있습니다. output plugins stdout을 설정 하였기 때문에, Windows command prompt에서 볼 수 있습니다.

 

Data Source로 부터 데이터를 가져올 때 새로 추가된 레코드만 가져오는 것이 효율적인데, 이러한 것을 구현하기 위해 JDBC Input plugin에는 sql_last_value라는 Predefined된 파라메터를 제공합니다. 아래와 같이 use_column_value를 true로 지정, tracking_column을 unique ID로 지정한 후, query문에서 조건문을 아래와 같이 지정합니다. 마지막으로 query했던 ID가 큰 경우는 새로운 레코드이므로, 이 경우에만 query 결과에 대해 import를 수행합니다.

 

 

input {
  jdbc {
    statement => "SELECT id, mycolumn1, mycolumn2 FROM my_table WHERE id > :sql_last_value"
    use_column_value => true
    tracking_column => id
    # ... other configuration bits
  }
}


  * 참고: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

 

2) Elasticsearch Output Plugin 사용

기본적으로 output으로 elasticsearch plugin에 index pattern에 대해 입력하지 않으면, logstash-yyyy.mm.dd 형식으로 index pattern이 추가됩니다. 또한 동일한 데이터 중복 import 방지를 위해 아래와 같이 document_id를 DB 레코드의 unique ID컬럼으로 업데이트 할 수도 있습니다.

 

document_id => ["%{unique_id}"]

 

이제 Kibana에서 Dev Tools > Console 창을 통해 REST API를 통해 해당 index pattern을 검색해봅니다. 아래와 같이 검색해보면 정상적으로 index가 추가 되었음을 확인 할 수 있습니다.

 

 

GET /logstash-2016.11.28/_search?q=*


 

이제 기존에 Kibana를 통해 index pattern을 검색하였던대로, Management에서 index pattern 추가후 Discover,Visualize에서 원하는 데이터를 검색 및 시각화를 할 준비가 완료 되었습니다.

 

정리해보면,

 

Data Source(MySQL) -> Inputs(JDBC) -> Filters() -> Outputs(Elasticsearch)

 

와 같이 MySQL 데이터를 Input Plugin인 JDBC를 통해 주기적으로 query후, 최종 전송하는 Output plugin을 Elasticsearch로 지정함으로써 주기적으로 Data Source의 데이터를 분석할 수 있는 환경을 ELK를 통해 구축해보게 되었습니다. Filter Plugin의 경우는 중간에 별도로 변환이 필요한 부분이 없어도 되기 때문에 정의를 하지 않았습니다.

 

앞으로 보다 세부적인 부분에 대해 어떻게 운영하는 것이 좋을지는 추가로 더 공부해볼 예정입니다. 방대한 데이터를 매번 query하여 search를 할 때,  Kibana에서 performance 저하 현상 등이 발생할 여지가 있는데, 필요한 데이터만 부분적으로 query한다던지 최적화에 대해 고민이 필요할 것 같습니다. 이것으로 ELK stack 사용에 대한 포스팅을 마치겠습니다.

 

<GitHub>

https://github.com/asyncbridge/analytics/tree/master/ELK

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함