본문 바로가기
infra/ELK

[ELK] docker compose이용하여 elk stack구축해보기

by hjhello423 2020. 2. 12.

elk 스택을 docker compose를 이용해 구성해보도록 하겠습니다.

elk 스택 구성원의 docker image는 링크를 참고해 pull 해주세요. 저는 기본적으로 7.5.2 버전을 사용했습니다.

docker는 이미 설치했다는 가정하에 진행하도록 하겠습니다.

 

git clone

github에 elk stack을 구성해둔 repository가 이미 존재합니다.

이 repo를 clone 해서 빠르게 진행해 보겠습니다.

git clone https://github.com/deviantony/docker-elk

 

 

프로젝트 안에는 kibana, logstash, ES의 디렉터리가 있고 그 안에 각각의 설정 파일과 Dockerfile이 존재합니다.

우리는 이 설정 파일과 Dockerfile, docker-compose.yml을 수정하여 간단하게 elk환경 구축을 하면 됩니다.

filebeat는 해당 repository에 없어서 별도로 구축해 보겠습니다.

ES

xpack를 사용할 생각이 없으므로 설정 파일에 있는 xpack 관련 설정을 주석 처리하겠습니다.

<elasticsearch.yml>

---
cluster.name: "docker-cluster"
network.host: 0.0.0.0

kibana

키바나 또한 x-pack 설정을 제거해 주었습니다.

<kibana.yml>

---
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

logstash

<logstash.yml>

---
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

logstash.conf의 경우 logstash-pipeline-logstash.conf 경로에 있습니다.

<logstash.conf>

input {
	tcp {
		port => 5000
	}
}

## Add your filters / logstash plugins configuration here

output {
	elasticsearch {
		hosts => "elasticsearch:9200"
		user => "elastic"
		password => "changeme"
	}
}

실행

.env 파일에서 elk의 버전을 7.5.2로 수정하였습니다. 이 파일에 내한 내용은 링크를 확인해 주세요.

docker-compose build && docker-compose up -d

Filebeat

공식 문서를 참조해 filebeat를 설치해 보겠습니다. 링크

image pull

docker pull docker.elastic.co/beats/filebeat:7.5.2

run

docker run \
docker.elastic.co/beats/filebeat:7.6.0 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]  

elasticsearch:9200에 Kibana 및 Elasticsearch 호스트 및 포트를 대체해야 합니다.

config

 

아래의 filebeat.docker.yml설정 파일을 이용해 보겠습니다.

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
- add_cloud_metadata: ~

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: '${ELASTICSEARCH_USERNAME:}'
  password: '${ELASTICSEARCH_PASSWORD:}'

Docker에서 Filebeat를 설정하는 방법은 볼륨 마운트를 통해 filebeat.docker.yml을 공유하는 방법입니다.

docker run명령어에 아래와 같이 --volume 옵션을 추가해야 마운트해 주세요.

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  docker.elastic.co/beats/filebeat:7.5.2 filebeat -e -strict.perms=false \
  -E output.elasticsearch.hosts=["elasticsearch:9200"] 

 

 

반응형

댓글