본문 바로가기

TIL

[TIL]2023-10-18

오늘은 어제 공부한 Elastic Search에 대한 이해를 기반으로 ELK Stack(ElasticSearch, Kibana, Logstash) 환경을 현재 사용중인 로컬 PC에 구축을 진행했다. 

 

[ElasticSearch 공부하기] 1화 엘라스틱 서치 설치하기 - 윈도우 : 네이버 블로그 (naver.com)

 

[ElasticSearch 공부하기] 1화 엘라스틱 서치 설치하기 - 윈도우

0. ElasticSearch? 검색엔진이 생소하신 분들은 ElasticSearch? 이게 뭐지 하실 수 있습니다. 그러나, ...

blog.naver.com

기본적으로는 이 분의 블로그를 참고해서 진행하였다.

 

위의 블로그를 참고해 구축을 진행했지만, 몇 가지 버전에 차이점이 있어서 해당 차이점을 다른 곳에서 찾아서 하는 방식으로 진행했다.

일단 기본적으로 해당 파일들을 한 곳에 두었다. 

Elastic Search - Apache Lucene에 구축되어 배포된 검색 및 분석 엔진입니다. 다양한 언어를 지원하고 고성능에 스키마가 없는 JSON 문서

Logstash - 다양한 소스로부터 데이터를 수집하고 전환하여 원하는 대상에 전송할 수 있도록 하는 오픈 소스 데이터 수집 도구

Kibana - Kibana는 로그 및 이벤트 검토에 사용하는 데이터 시각화 및 탐색 도구

 

ELK는 Logstash로 데이터를 수집 및 변환, 올바른 대상으로 전송하고, Elasticsearch로 수집된 데이터를 인덱싱, 분석하고 검색하고, Kibana로 해당 결과를 시각화한다.

 

일단 Elasticsearch를 다운받아서 실행했는데, 7.x버전은 기본적으로 auth를 인증할 필요가 없었으나, 8.x버전은 auth를 인증할 필요가 있어서 elasticsearch-setup-passwords.bat를 실행해서 기본적인 elasticsearch의 계정을 만들고 해당 계정으로 auth를 진행했다. 

 

또한 해당 기본 계정을 만들 때 kibana계정도 자동적으로 만들게 되는데 해당 정보를 kibana.yml을 통해서 등록해주고, server.host, server.name, elasticsearch.hosts 와 같은 정보들도 추가적으로 kibana.yml을 통해서 등록해주었다.

 

Logstash의 경우에는 아직 .conf파일을 만들지는 않았고 잘 돌아가는지 확인정도만 진행했다.

 

그러나 해당 elasticsearch를 활용하기 위해서는 spring에서 접근을 했어야 했는데

@Configuration
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {

    @Override
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();
        return RestClients.create(clientConfiguration).rest();
    }
}

와 같은 방식으로 접근을 하려고 했으나 auth를 진행하지 않아서 elasticsearch로의 접근이 거부당했다. 

 

@Configuration
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${elasticsearch.username}")
    private String username;
    @Value("${elasticsearch.password}")
    private String password;
    @Override
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .usingSsl()
                .withBasicAuth(username, password)
                .build();
        return RestClients.create(clientConfiguration).rest();
    }
}

와 같은 방식으로 withBasicAuth를 통해 username 과 password를 입력해서 접근을 시도하려고 했으나 ssl방식은 통신이 불가능하다고 거부를 당했다.

 

elasticsearch.yml에서 xpack.security.http.ssl.enabled: true 으로 ssl 을 열어줄 수 있다고 해서 입력을 했더니 서버 자체가 돌아가지 않았다. 

 

알고 보니 xpack.security.enabled: true로 되어 있었는데 해당 옵션이 true일 경우에 xpack.security.http.ssl.enabled 옵션을 설정할 수 없다는 것을 알게 되었다. 

 

하지만 xpack.security.enabled: false로 설정하게 되면 auth없이도 인증이 가능해서 해당 옵션을 false로 두고,

@Override
public RestHighLevelClient elasticsearchClient() {
    ClientConfiguration clientConfiguration = ClientConfiguration.builder()
            .connectedTo("localhost:9200")
            .build();
    return RestClients.create(clientConfiguration).rest();
}

와 같이 Auth인증 없이 일단 접속할 수 있는 것을 확인했다. 만약 보안적인 문제가 발생될 것으로 예상된다면 security옵션을 true로 두고도 통신할 수 있는 방법을 찾을 예정이다.

'TIL' 카테고리의 다른 글

[TIL] 2023-10-20  (0) 2023.10.21
[TIL] 2023-10-19  (0) 2023.10.19
[TIL]2023-09-27  (0) 2023.09.27
[TIL]2023-09-26  (0) 2023.09.27
[TIL]2023-09-25  (0) 2023.09.27