티스토리 뷰

이 글은 로그 분석을 위한 아키텍처 구현과 발생한 이슈에 대한 내용을 정리하였습니다

 

들어가기에 앞서 아키텍처 구성(AWS 서비스)은 데모 수준의 사양으로 구성되었습니다

운영을 위한 아키텍처가 필요한 경우 같은 구성에서 서버의 사양은 달리 설정해야 할 것 같습니다

 

진행 목록
1. Create MSK
2. Create Opensearch
3. Create EC2 for Web Application(API Server) and connect MSK
4. Create EC2 for Logstash and connect both MSK and Opensearch
5. Use Opensearch Dashboard

 

4. Create EC2 for Logstash and connect both MSK and Opensearch

 

4_1. Logstash 사용을 위한 EC2 생성

작성일 기준으로 AWS 에서 Opensearch(Elasticsearch, Kibana)는 서비스로 지원하지만 Logstash 는 지원하지 않습니다

물론 다른 아키텍처로 예를 들면 MSK 에서 람다로 전달하여 함수 실행으로 Logstash 처럼 데이터를 핸들링 하고

Opensearch 로 전달하여 ELK 와 같은 작업을 수행할 수 있으나 여기서는 EC2 에서 Logstash 를 설치하여 테스트합니다

 

EC2 생성은 3_1 에서 생성한 EC2 인스턴스 생성 방법과 동일하게 적용합니다

 

4_2. Logstash 설치

생성한 EC2 인스턴스에 AWS 연결 또는 SSH 연결프로그램으로 연결하여 JDK 8, Logstash 를 설치 합니다 

# JDK 설치
sudo dnf update
sudo dnf install java-1.8.0-amazon-corretto
# JDK 버전을 여러개 사용할 경우 전환하는 명령어
sudo alternatives --config java

# Logstash 설치
curl https://artifacts.opensearch.org/logstash/logstash-oss-with-opensearch-output-plugin-7.16.3-linux-x64.tar.gz --output logstash-oss-with-opensearch-output-plugin-7.16.3-linux-x64.tar.gz
tar -xvf logstash-oss-with-opensearch-output-plugin-7.16.3-linux-x64.tar.gz

 

4_3. Logstash 와 MSK(Consumer), Opensearch 연결

Logstash 폴더 안에 config 폴더로 이동하고 아래와 같이 파일을 생성합니다

input 은 AWS MSK 에 대한 설정 값들을 입력하면 되고

output 은 AWS Opensearch 에 대한 설정 값들을 입력하면 됩니다

즉 1_x. 에서 메모 했던 값들을 적용하면 됩니다

output - opensearch - index 값 으로 우리가 전달한 데이터가 인덱싱됩니다 원하는 값으로 설정합니다(index 메모)

sudo vi 파일이름마음대로.conf

# 안에 넣을 설정 값
input {
  kafka {
    bootstrap_servers => "AWS MSK 클러스터의 클라이언트 프라이빗 엔드포인트 N개 중 1개, 배열로 여러개도 적용 가능함"
    security_protocol => "SASL_SSL"
    sasl_mechanism => "SCRAM-SHA-512"
    sasl_jaas_config => "org.apache.kafka.common.security.scram.ScramLoginModule required username='AWS SM에서 설정한 username'  password='AWS SM에서 설정한 password';"
    topics => ["토픽"]
  }
}

output {
  opensearch {
    hosts => ["Opensearch 도메인 엔드포인트"]
    index => "인덱스"
    user => "Opensearch 마스터 이름"
    password => "Opensearch 마스터 비밀번호"
    ecs_compatibility => disabled
  }
}

# 저장

 

4_4. Logstash 실행

(압축해제한폴더)/bin/logstash -f config/(바로 위에서 생성한 conf 파일)

실행시 출력되는 메시지를 확인하여 정상적으로 실행되었다면

다시 한번 포스트맨으로 요청을 전달합니다

 

5. Use Opensearch Dashboard

 

5_1. Logstash 에서 전달한 값 확인

1_x 에서 Opensearch 생성 후 메모했던 Opensearch 대시보드 URL 을 브라우저에 띄웁니다

마스터 이름, 패스워드를 입력하고 로그인합니다

 

Opensearch 대시보드 메인화면에서 상단에 Manage 클릭

다음 화면에서 좌측에 Index patterns 클릭

우측에 Create index pattern 클릭

아래 movies 는 제가 테스트로 진행했던 값인데 이 값 대신

앞 전에 Logstash 설정에서 output - opensearch - index 에 설정한 값으로 목록에 출력됩니다

위에 Index pattern name 에 똑같은 값을 입력하고 우측에 Next step 버튼을 클릭하고 인덱스 패턴 정의를 완료합니다

 

다시 Opensearch 대시보드 메인화면으로 돌아와서 좌측 상단에 선 3개로 된 사이드 메뉴 확장 버튼 클릭

Opensearch Dashboards 에 Discover 클릭합니다

 

저는 movies 로 설정했기 때문에 movies 인덱스로 넣은 데이터 목록이 출력됩니다

위 Search 에 값을 입력하여 원하는 데이터만 쿼리할 수 있습니다

 

저는 테스트를 진행하면서 1.x 에 있는 인증 관련 이슈 때문에 설치하고 지우고를 반복하면서

Logstash 에서 kafka 를 호출할 때 사용하는 버전이 AWS MSK 와 버전이 틀어졌는데도 사용하는데 문제가 없었습니다

(AWS MSK apache kafka 2.6.2 였으며 Logstash 에서 테스트할 때 설치한 Kafka 클라이언트 버전은 2.8.x)

버전은 어느정도 문제없이 호환 가능한 것 같고 전체 글에서 빨간색으로 처리한 인증과 같은 부분만 신경써서 적용하시면

저와 같은 결과를 확인할 수 있을 것 같습니다