Docker 환경에서 ELK + MySQL 연동하기 #1 ELK + MySQL 설치


안녕하세요. 남산돈가스입니다.

지난 포스팅까지 Docker의 기본 사용법에 대해서 알아보았습니다.

이번에는, 2번의 포스팅으로 나누어 Docker 환경 위에서 ELK스택을 구성하는 법에 대해서 소개 해드릴까 합니다.

회차 별로 소개할 내용은 다음과 같습니다.


  • #1. ELK + MySQL 설치
  • #2. ELK + MySQL 연동

그 중 첫 번째 시간으로, ELK스택 환경과 연동을 위한 MySQL을 설치해보겠습니다.


Docker 환경 위에서 설치하기 때문에, Docker에 대한 기본 사용법은 숙지하고 계셔야합니다.

Docker(도커) 기본 사용법 을 참고하시면 될 것 같습니다.


자, 그럼 일단 환경설치를 위해서는 Docker 이미지를 설치해야합니다.

필요한 Docker 이미지는 ELK의 Elasticsearch, Logstash, Kibana 그리고 MySQL까지 총 4개입니다.
pull 명령어를 이용하여 해당하는 이미지를 다운받습니다.

* Elasticsearch

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker pull elasticsearch
Using default tag: latest
latest: Pulling from library/elasticsearch
0bd44ff9c2cf: Pull complete
047670ddbd2a: Pull complete
ea7d5dc89438: Pull complete
4a05570971bb: Pull complete
66f679cd5859: Pull complete
89362eaac850: Pull complete
d76c23323cb4: Pull complete
f7a113d2d566: Pull complete
aba04b0b43a6: Pull complete
9a29cd26e638: Pull complete
4e2a9305ca59: Pull complete
0687201a6469: Pull complete
ccf428600204: Pull complete
cb86c34e67e2: Pull complete
560b71b413d5: Pull complete
Digest: sha256:08ae99808465a96359f861a0e8fbb08b5120a0b8030556be2525b9e7f1879baf
Status: Downloaded newer image for elasticsearch:latest

* Logstash

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker pull logstash
Using default tag: latest
latest: Pulling from library/logstash
0bd44ff9c2cf: Already exists
047670ddbd2a: Already exists
ea7d5dc89438: Already exists
4a05570971bb: Already exists
66f679cd5859: Already exists
89362eaac850: Already exists
d76c23323cb4: Already exists
f7a113d2d566: Already exists
cb2dece5a7e2: Pull complete
8cf5a699244c: Pull complete
c275eeaebd29: Pull complete
159e9a1395db: Pull complete
01be31fa2906: Pull complete
9b5ca62233e3: Pull complete
39280aea2b61: Pull complete
6bac8e5eed53: Pull complete
Digest: sha256:edd49321633aff49b0f7d65f0f369b5555b467b1d8b7a29c629802beb9f0a68f
Status: Downloaded newer image for logstash:latest

* kibana

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker pull kibana
Using default tag: latest
latest: Pulling from library/kibana
1c7fe136a31e: Pull complete
2ae044b11314: Pull complete
c8f2070703d2: Pull complete
5cc92ab6db31: Pull complete
ea2c37920862: Pull complete
43d9f974ea9c: Pull complete
a88aa0abc175: Pull complete
d8fc1dc2c1af: Pull complete
601b229b83db: Pull complete
Digest: sha256:ced43063a16a9871d707cb6aa3afb073401eff40a65c44fb3a8bde739d02f637
Status: Downloaded newer image for kibana:latest

* mysql

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker pull mysql:5.7
5.7: Pulling from library/mysql
683abbb4ea60: Pull complete
0550d17aeefa: Pull complete
7e26605ddd77: Pull complete
9882737bd15f: Pull complete
999c06ab75f6: Pull complete
c71d695f9937: Pull complete
c38f847c1491: Pull complete
74f9c61f40bf: Pull complete
30b252a90a12: Pull complete
9f92ebb7da55: Pull complete
90303981d276: Pull complete
Digest: sha256:1203dfba2600f140b74e375a354b1b801fa1b32d6f80fdee5f155d1e9f38c841
Status: Downloaded newer image for mysql:5.7

이렇게 네 개의 이미지를 모두 받은 뒤 images 명령어를 사용하여 설치 된 이미지들을 확인합니다.

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
elasticsearch       latest              34e7bf3e65dc        24 hours ago        486MB
logstash            latest              1e33d1083609        24 hours ago        653MB
mysql               5.7                 66bc0f66b7af        31 hours ago        372MB
kibana              latest              755bc6d73213        31 hours ago        389MB

이미지들이 정상적으로 설치되었으므로, 하나 하나씩 구동을 해보겠습니다.

- MySQL 구동하기

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker run -d --name mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qwer1234 mysql:5.7
eca006b35c8209fd1c2982a8ee57a20d82b7388d4da77e174421ef293a9005d8
gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                    NAMES
eca006b35c82        mysql:5.7           "docker-entrypoint.s…"   Less than a second ago   Up 2 seconds        0.0.0.0:3306->3306/tcp   mysql

Docker 환경에서 Mysql 구성하는 법은 정말 간단하게 명령어 한줄로 해결됩니다.

$ docker run -d --name mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qwer1234 mysql:5.7

설명하자면, -d 옵션으로 백그라운드에서 Mysql 컨테이너가 실행되도록 했고, --name을 통해 mysql 이라는 이름의 컨테이너를 만들었습니다. 그리고 -p 옵션으로 호스트와 도커환경의 포트를 3306:3306으로 포트포워딩 설정시켰습니다. 그리고 -e 옵션으로 구동할 MYSQL_ROOT_PASSWORD 환경변수를 지정하였습니다.

run 명령을 실행한 뒤, ps 명령을 통해 mysql 컨테이너가 실행되고 있는 지 확인할 수 있습니다.

그렇다면 실제로 해당 mysql이 구동이 되었는 지 확인하기 위해서 mysql workbench에서 해당 호스트로 접속해보겠습니다.

mysql workbench를 실행하고, 새로운 연결을 설정합니다. mysql 구동 시 -p 옵션으로 제 로컬호스트의 3306포트를 mysql이 실행되고있는 도커컨테이너의 3306 포트로 포트포워딩을 했기 때문에
host의 제 로컬호스트인 (127.0.0.1)을, 포트는 3306, 사용자는 root로 설정하여 접속할 수 있게 되었습니다.



- Elastic search 구동하기

다음으로, Elastic Seach를 구동하겠습니다.

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker run -d --name elasticsearch -it -p 9200:9200 -p 9300:9300 elasticsearch
cd8c709eb576d0fb10e2caecbf444ebd655278841f2dced41cfdeabd197d0c54
gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
cd8c709eb576        elasticsearch       "/docker-entrypoint.…"   28 seconds ago      Up 36 seconds       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
eca006b35c82        mysql:5.7           "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       0.0.0.0:3306->3306/tcp                           mysql
gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> curl -XGET localhost:9200
{
  "name" : "dm2Axi5",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "vQyvOv3sTHKjsTWVhZUMpw",
  "version" : {
    "number" : "5.6.10",
    "build_hash" : "b727a60",
    "build_date" : "2018-06-06T15:48:34.860Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}



$ docker run -d --name elasticsearch -it -p 9200:9200 -p 9300:9300 elasticsearch

elasticsearch 역시도 명령어 한 줄로 가볍게 구동할 수 있었습니다. -p 옵션으로 9200, 9300 포트를 포트포워딩하였습니다.

ps명령을 통해 elasticsearch가 실행 중인 것을 확인했고,
실제 elasticsearch가 기능을 하는 지 알아보기 위해 curl으로 요청을 보냈습니다.

$ curl -XGET 127.0.0.1:9200

을 요청하면 위 화면과 같이 설치 된 elasticsearch의 기본 정보를 반환해주고 있습니다.


- Kibana 구동하기

다음은, Kibana 입니다.

gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker run -d -it --name kibana -p 5601:5601 --link elasticsearch:elasticsearch kibana
c7e8d59cdf120724cf5edc1fcab2af59bfea505cb760f6da045667e69b20602d
gimseongsin@gimseongsin-ui-MacBook-Pro:~/Desktop/es/data:> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                                            NAMES
c7e8d59cdf12        kibana              "/docker-entrypoint.…"   Less than a second ago   Up 1 second         0.0.0.0:5601->5601/tcp                           kibana
cd8c709eb576        elasticsearch       "/docker-entrypoint.…"   9 minutes ago            Up 9 minutes        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
eca006b35c82        mysql:5.7           "docker-entrypoint.s…"   20 minutes ago           Up 21 minutes       0.0.0.0:3306->3306/tcp                           mysql

$ docker run -d -it --name kibana -p 5601:5601 --link elasticsearch:elasticsearch kibana

명령어로 kibana를 구동했습니다. 특이한 점은, kibana의 경우 --link옵션으로 도커컨테이너끼리의 연결해줬다는 점입니다. kibana는 내부적으로 elasticsearch의 정보를 시각화해주는 도구이므로 elasticsearch에 연결할 수 있는 상태여야하기 때문에 --link [환경명]:[별칭] 옵션을 통해 elasticsearch와 연결을 한 것입니다.

이렇게 구동을 한 뒤, 웹 브라우저에서 http://localhost:5601 로 접속하면 kibana 에 접속되는 것을 확인하실 수 있습니다.





오늘은 여기까지 mysql, elasticsearch, kibana 까지 설치해보았습니다. logstash같은 경우 다음 포스팅에서 진행 될 mysql 연동과 관련이 있기 때문에 다음 포스팅에서 함께 다루도록 하겠습니다.

감사합니다.

댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

카드뉴스 마케팅 팁

[iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 1부(cocospods)

[정보] Git을 이용한 형상관리 #1 - Git의 세가지 상태, Git 설치

[AWS] Amazon Polly 한국어 서비스 지원