ELK 로컬 실습

SangLog·2023년 2월 27일
0

기본상식

목록 보기
4/8

이론적으로 공부했던 ELK 환경을 로컬 컴퓨터에서 구현해보는 실습 내용을 정리하여 기록해본다.
ELK 환경을 AWS 에서 직접 구현 해보는것이 제일 좋지만 우선은 간단하게 로컬 환경에서 도커를 이용하여 해당하는 프로그램들을 설치하고 수행 해보았다. PC는 M1 맥북 프로를 하용 하였다.

Elastic search 버전 : 8.3.3
Logstash : 8.3.3
Kibana : 8.3.3
filebeat : 8.3.3

ElaseicSearch 설치

$ docker pull elasticsearch:8.3.3

elasticsearch 최신버전 설치 진행

docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 elasticsearch:8.3.3

다운 받은 image 를 컨테이너로 실행 시키는 명령어로
elasticsearch 는 9200포트를 통해서 http 통신을 하며, 노드간 통신에는 9300 포르를 사용한다. 이름은 es01 이고 네트워크는 elastic 을 사용한다.
elastic으로 명시함으로 컨테이너는 동일한 네트워크에 있는 다른 컨테이너와 통신이 가능하다

ElasticSearch는 분산 시스템에 설계되어 여러 대의 노드로 구성이 되며, 이런 노드간의 통신은 Transport 프로토콜을 사용하여 기본적으로 9300 포트를 사용한다.

도커에서 컨테이너간 통신을 하려면 docker network 를 생성해서 연결해야한다. 컨테이너 간 통신을 할때 사설 IP를 사용하거나 컨테이너 이름을 hostname으로 쓸 수 있다.
$ docker network ls // 네트워크 리스트 보기
$ docker network inspect elastic // 특정 네트워크에 연결된 컨테이너

docker 컨테이너를 사용한 후 localhost:9200 으로 브라우저에서 접속을 시도하면 정상적으로 되지 않을 것이다.

로그를 확인해보면
message : received plaintext http traffic on an https channel, closing connection와 같은 메시지가 발생하는것을 확인 할 수 있는데, elasticsearch 를 기동할때 https를 통해서 ssl 인증서가 필요한데 해당 인증서에 대한 선행작업이 이루어지지 않았기 때문이다.

수행중인 컨테이너 shell 에 접속하여 elasticsearch.yml의 아래 항복들을 false 로 변경해줘야한다.

비밀번호 생성등에도 해당 설정이 필요한 것으로 보이기 때문에 설정중에서 다시 true가 필요하기도 하다.

xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
	enabled: false
xpack.security.transport.ssl:
	enabled: false

해당 값이 출력되면 정상적으로 설치가 완료 되었다.

ElasticSearch 에서는 kibana에서 사용되는 토큰과 password 값을 확인 해둬야하며 미리 확인을 못한 경우는 아래의 명령어들을 통해서 해결 할 수 있다.

$ bin/elasticsearch-create-enrollment-token -s kibana // token
$ $ bin/elasticsearch-reset-password -u elastic //패스워드 

Kibana 설치

$ docker pull docker.elastic.co/kibana/kibana:8.3.3
$ docker run --name kib-01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.3.3

kibana 이미지를 다운받고 해당하는 컨테이너를 수행한다 5601 포르틑 사용한다.
컨테이너가 생성된 이후에 localhost:5601로 접속해보면 아래와 같은 페이지가 보인다.

환경 토큰은 elasticsearch 를 수행한 이후에 나오는 로그를 보면
Configure Kibana to use this cluster를 통해서 확인 해볼 수 있다. 해당하는 토큰은 발행후 30분이 지나면 재발급을 받아야 한다.


이후 kibana 콘솔에 접속하여 bin/kibana-verification-code.bat를 수행하여 verification-code를 얻은 후 해당 값을 입력해야한다.

이후 로그인 아이디는 elastic 이며 password응 elasticsearch 에서 확인했던 패스워드를 사용하면 된다

LogStash 설치

$ docker pull logstash:8.3.3
$ docker run --name logstash -v ~/elasticsearch:/data --net elastic -d logstash:8.3.3

-v ~/elasticsearch:/data의 뜻은 Docker 볼륨을 사용하여 호스트 머신의 ~/elasticsearch 디렉토리를 컨테이너의 /data 디렉토리에 매핑합니다. 이를 통해 Logstash 컨테이너는 호스트 머신의 ~/elasticsearch 디렉토리에 데이터를 읽고 쓸 수 있습니다.

-d는 컨테이너를 백그라운드에서 실행하며 터미널에 연결하지 않는다는 뜻이다.

사실상 가장 핵심에 되는건 Logstash 이다. logstash 가 데이터를 받아 들이고 받아드린 데이터를 전송하는 역할을 해주기 때문이다.
해당 설정은 longstash.conf에서 설정해주며
filebeat 가 아니더라도 다양한 방법으로 데이터를 전달 받을 수 있다.
전달을 받는건 input에 설정하며, 전달을 해줘야하는것은 output
중간에 데이터 가공을 원한다면 filter를 사용할 수 있다.

Logstash 설정

설정 파일 : /usr/share/logstash/pipeline/logstash.conf

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    user => "elastic"
    password =>"password"
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    document_type => "log" 
  }
}

docker container 에서 vi 가 안되고 apt-get update 도 권한 떄문에 안되는 경우 발생하면 shell 접근할때 권한을 가지고 들어 가야한다.
$ docker exec -itu 0 /bin/bash
$ apt-get update
$ apt-get install vim

filebeat 설치

$ docker pull docker.elastic.co/beats/filebeat:8.3.3
$ docker run -d --name filebeat --network elastic  docker.elastic.co/beats/filebeat:8.3.3

filebeat.xml 파일에서 읽어드릴 파일 PATH를 설정해야하며
filebeat를 설치할때 원하는 위치를 마운트해서 해당 값을 읽을 수 있도록 셋팅이 되어야한다.

redis 를 활용한 ELK

개별적으로 각각의 파일들을 설치해서 ELK 를 구성하는 과정이 복잡해서 검색하던중 docker-compose 셋팅이 기본적으로 되어있는 가이드 블로그를 확인하고 해당 스택으로 실습을 변경하였다. 블로그 링크

docker-compose는 여러 컨테이너를 가지는 애플리케이션을 통합적으로 Docker 이미지를 만들고 설정하도록 도와준다.

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

해당 프로젝트를 살펴보면 elk 에서 필요한 각각의 yml 파일 셋팅들이 설정되어 있고, 기본적인 네트워크 설정들을 해주기 때문에 고민할 것이 확 줄어든다.
filebeat를 대신해서 redis 를 사용한다는점을 빼면 나머지는 동일하다.
설정은 블로그에 나와있는것과 동일하게
docker-compose.yml 에 redis 서비스를 추가하고
elasticsearch.yml 에 xpack.license.self_generated.type를 basic으로 셋팅하고 logstash.conf input부분 설정만 변경을 해주면 된다.

basic은 elasticsearch의 무료 라이센스로 기본적인 기능만을 제공한다. 작은 규모의 배포나 비상업적인 용도에 사용하며 인덱스관리, 검색기능, https 암호화 등의 기능이 포함. 유료 라이센스로 standard,gold 등이 있으며 모든기능을 30일 동안 테스트겸 사용할 수 있는 trial 라이센스도 있다.





Reference
https://velog.io/@gnlenfn/Docker를-사용해-ELK-설치
https://sundrystore.tistory.com/40

profile
기록 쌓기

0개의 댓글