-
docker로 elk환경 세팅하기환경 구축 2024. 11. 1. 19:19
원래는 쿠버네티스에 elk환경을 구축했었는데, 현재는 쿠버환경이 구축돼있지 않아서 elk환경을 docker로 옮겨볼까 합니다.
필요한 파일은 github에 올려놨습니다.
https://github.com/shinebyul/elk_docker_setting
GitHub - shinebyul/elk_docker_setting: docker환경에서 elk 세팅하기
docker환경에서 elk 세팅하기. Contribute to shinebyul/elk_docker_setting development by creating an account on GitHub.
github.com
docker-compose.yml
컨테이너를 실행시키기 위한 compose 파일입니다.
- elasticsearch에서 노드는 일단 single node로 구성했습니다.
- elasticsearch 폴더는 컨테이너를 실행시키면 생성되는 폴더입니다.
- logstash 의 volume설정 부분에서 conf파일과 jdbc jar파일을 볼륨설저하고 있는데, conf파일을 logstash 파이프라인으로 logstash가 이 파이프라인을 읽고 그대로 실행할 것이고, jdbc-driver은 mariadb 서버와 연동해서 쿼리문을 날리기 위해 필요합니다.
logstash.conf
lostash 의 파이프라인입니다.
db의 elk 스키마에 접근해서 member라는 테이블을 읽어옵니다.
10초마다 쿼리문을 날리도록 설정했습니다. 하지만 10초마다 가져왔던 데이터를 또 가져오면 안되겠죠? 그래서 modified_at과 created_at을 기준으로 최근 수정됐거나 생성된 레코드만 가져오도록 했습니다.
db에서 데이터를 수집하고 나면 elasticsearch에 접속해서 elk-data라는 인덱스에 수집한 데이터를 집어넣습니다. 만약 해당 인덱스가 없을 경우 만들어서 집어넣습니다.
환경 구축하기
1. 먼저 compose 파일을 실행시켜줍니다.
compose파일을 들어가보면, 아래 이미지와 같이 보이는데, service왼쪽의 >> 버튼을 누르면 각 컨테이너(db, es, logstash)컨테이너들이 실행이 됩니다.
각 컨테이너 이름 왼쪽에 원래는 >버튼이였다가 실행이 되면 원모양 화살표 모양으로 변합니다.

컨테이너가 실행중인 compose 파일 2. 컨테이너를 실행시킨 후에 elasticsearh 서버가 잘 연결됐는지 확인하려면, curl 명령어나 postman으로 다음과 같은 uri로 요청을 보내면 됩니다.
curl -X GET "http://localhost:9200"
연결이 잘됐다면, 다음과 같은 응답을 볼 수 있습니다.
{
"name" : "00ae19c57d71",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "Z9mx_9vpQWO-QsuwUsrQcA",
"version" : {
"number" : "7.17.16",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "2b23fa076334f8d4651aeebe458a955a2ae23218",
"build_date" : "2023-12-08T10:06:54.672540567Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}3. 이제 모든 컨테이너들이 정상적으로 실행이되면 logstash가 logstash.conf 파일을 읽고 실행을 할텐데요, 이때 logstash 의 로그를 보면 elk.member를 찾을 수 없다라는 에러 메세지가 뜹니다. 당연히 db 컨테이너가 새로 생성됐기 때문에 아무 테이블도 없을 것입니다. 따라서 elk 스키마 안에 member라는 테이블을 만들어줘야합니다.
테이블 생성하는 dml은 github의 readme에 올려놨습니다.
올려둔 dml말고 직접 작성해도 되지만, logstash 파이프라인에서 modified_at과 created_at이라는 colunm을 읽도록 했기 때문에 해당 컬럼을 포함해서 테이블을 생성해야합니다.
4. db에 member라는 테이블을 생성하면, 파이프라인에 설정된 시간(10초)마다 select문이 날라가는 것을 볼 수 있습니다.
es에 제대로 데이터가 전달됐는지 확인하려면 다음과같이 인덱스를 확인해보면 됩니다.
우선 인덱스가 잘 생성됐는지 확인하려면 다음과 같은 요청을 보내봤을때,
curl -X GET "http://localhost:9200/_cat/indices?v"
아래와 같은 응답에서 elk-data라는 인덱스가 생성된 것을 확인할 수 있습니다.
health checking 상태가 yellow인것은 원래 es는 2개 이상의 노드로 구성해서 복제본이 필요한데 지금은 single node로 돼있기 때문입니다.
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases mPWBofD5SQeXD9kX65oIYA 1 0 38 0 36.5mb 36.5mb
yellow open elk-data ZvT-z1b-S-moipaugZ5ZqA 1 1 10 0 42.6kb 42.6kb다음으로 해당 인덱스에 데이터가 잘 들어왔는지 확인하려면 다음과 같은 요청을 보냅니다.
curl -X GET "http://localhost:9200/elk-data/_search"
5. es에 데이터가 제대로 들어갔다면, elk 기본 환경 구축은 완성입니다.
이 환경을 기본으로 해서 파이프라인을 수정하고, 노드 설정을 바꾸면 됩니다.
'환경 구축' 카테고리의 다른 글
Spark 개념, docker로 cluster 환경 구축하기 (2) 2025.01.12 Hadoop의 개념 및 도커로 클러스터 구성하기 (1) 2025.01.05 k8s에 Logstash 환경 구축하기 (1) 2024.10.28 k8s에 Elasticsearch 환경 구축하기 (1) 2024.10.14 서버 이중화(6) - Clustering 클러스터링 / Galera (1) 2024.05.29