스프링 부트를 사용한 예제 애플리케이션을 AWS를 통해 모노리식에서 MSA로 MSA에서 다시 컨테이너 오케스트레이션으로 개선해나가는 과정을 모두 담은 강의를 출시하게 되었습니다.
강의 과정에서 15개 이상의 서비스를 사용하게 됩니다.
그래서 클라우드 개발자가 아닌 개발자, 학생 분들도 AWS의 폭넓은 지식을 쉽고 빠르게 습득할 수 있는 기회가 될 수 있다고 생각합니다!
배너를 누르면 강의로 이동됩니다.
블로그를 통해 구매하시는 분들에게만 10%할인 쿠폰을 증정중입니다.
꼭 아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
Logstash 설치 및 실행 테스트 (mac 기준)
logstash 설치
brew install elastic/tap/logstash-full
* 기존에 설치된 logstash 가 있으면 brew unlink logstash 명령어를 통해 Unlink 후 재시도
brew 를 통해 mac 에서 설치하면 logstash 의 설정 파일의 경로는 /usr/local/etc/logstash 에 생성된다.
logstash 기본 설정 및 실행
실행 전 /usr/local/etc/logstash/pipelines.yml 파일을 수정해 준다.
기존 내용의 9번, 15번 라인의 주석을 풀어주고 15번 라인에 설치된 logstash 환경설정 파일들의 경로와 와일드카드 및 확장자로 지정
*추가로 앞으로 환경설정의 변동이 있을거고 매번 재시작하기 번거롭다면 /usr/local/etc/logstash/logstash.yml 파일의 다음 부분을 수정해주 면 된다.
logstash 실행
brew services start elastic/tap/logstash-full
logstash 로그 확인
cat /usr/local/var/log/logstash.log
정상적으로 설정 후 실행을 하게 되면 위와 같이 에러 없이 로그가 출력된다.
SpringBoot Logback 을 통해 Logstash로 로그 출력
logstash 입출력 설정
로그파일 입력 및 출력을 설정하기 위해 logstash 설정파일을 /usr/local/etc/logstash 에 추가해준다.
vi /usr/local/etc/logstash/logstash-example.conf
input{
tcp {
port => 8900
codec => json_lines
}
}
output{
stdout{}
}
- input{} - 입력 받을 로그 정보
- tcp {} - tcp 입력을 받음
- port - tcp 입력 받을 포트 (8900번 포트로 출력되는 로그들을 입력 받는다)
- codec - 디코딩할 코덱 (json_lines - 행 구분을 위한 코덱으로 여러 json 이 한번에 들어올 경우 사용)
- tcp {} - tcp 입력을 받음
- output{} - 로그 출력 정보
- stdout {} - 입력받은 로그를 logstash 로그로 그대로 출력, 디버깅용으로 주로 사용
SpringBoot Logback 설정
spring boot 에서 로그를 logstash 가 읽을 수 있는 json 형태로 변환하기 위해 encoder 종속성을 추가해준다.
dependencies {
implementation("net.logstash.logback:logstash-logback-encoder:7.2")
}
최신버전 확인 - https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder
logstash encoder 를 적용한 appender 작성 및 로그 적용을 위해 logback-spring.xml 파일 수정
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProfile name="burger">
<property resource="logback-burger.properties"/>
</springProfile>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
<destination>127.0.0.1:8900</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<springProfile name="burger">
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</springProfile>
</configuration>
위의 설정들이 끝났으면 logstash 와 spring boot 를 각각 재시작 하고 logstash 의 로그를 확인해보면,
위와 같은 spring boot 의 INFO 로그들이 출력되어있다.
Logstash로 입력받은 로그를 ElasticSearch에 전달
Elasticsearch 설치 및 실행
Homebrew로 설치하려면 먼저 Elastic Homebrew 리포지토리를 탭해야 한다
brew tap elastic/tap
Homebrew 를 통해 elasticsearch 설치
brew install elastic/tap/elasticsearch-full
다른 설치 방법은 아래 링크에서 확인
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/install-elasticsearch.html
elasticsearch 실행
brew services start elasticsearch
실행 후 다음 명령어 또는 localhost:9200 접속을 통해 정상적으로 실행되었는지 확인할 수 있다.
$curl -XGET 'localhost:9200'
Logstash 에서 Elasticsearch 로 출력하도록 Logstash 환경설정 수정
spring boot 로 부터 입력받은 로그를 elasticsearch 로 출력하기 위해 다음과 같이 output 설정에 elasticsearch 플러그인을 사용하여 설정을 입력해 준다.
input{
tcp {
port => 8900
codec => json_lines
}
}
output{
elasticsearch{
hosts => "http://localhost:9200"
index => "logstash-spring-boot-%{+YYYY.MM.dd}"
}
}
- elasticsearch {} - 출력 플러그인
- hosts - 출력받을 elasticsearch 주소
- index - 출력받은 로그의 index ( %{+YYYY.MM.dd} 의 식을 통해 생성일이 index 이름으로 사용됨)
Elasticsearch 가 받은 로그 데이터 확인
http://localhost:9200/[index이름]/_search 로 접속하여 logstash로부터 전달받은 로그 데이터를 확인한다.
*위 설정의 경우 작성일 기준 http://localhost:9200/logstash-spring-boot-2022.12.29/_search 로 접속
ElasticSearch의 인덱스를 Kibana를 통해 시각화
kibana 설치
brew install elastic/tap/kibana-full
kibana 실행
brew services start elastic/tap/kibana-full
Kibana 접속
http://localhost:5601 접속
*5601 포트는 다른 설정을 하지 않았을 경우 kibana 의 기본 포트
생성한 인덱스 관리 설정
관리할 인덱스 생성을 위해 탭의 Stack Management 선택
Stack Management 의 Create Index Pattern 선택
생성된 인덱스가 포함되는 이름 및 와일드카드로 필터링하여 항목이 보이면 Next step 선
타임 필터로 사용할 index 의 필드를 선택 후 Create index pattern 클릭
관리에 포함된 인덱스의 데이터 확인
확인을 위해 탭의 Discover 로 이동
Discover 페이지로 이동하면 다음과 같이 인덱스에 쌓인 로그들을 확인할 수 있다.
* elasticsearch 에서는 보였는데 kibana에서는 안 보일 경우 우측 상단의 Show dates 를 클릭하여 필터할 데이터 시간을 조정해 준다.
'ELK' 카테고리의 다른 글
[Curator] Curator를 이용하여 elasticsearch index 관리 (0) | 2021.12.03 |
---|---|
[ELK] Elasitcsearch 란, Elasticsearch 를 사용하는 이유 (0) | 2021.11.25 |
[ELK] Filebeat 설치 및 시작 for Mac (Elasticsearch, Kibana 연동) (0) | 2021.11.15 |
[ELK] Logstash 와 Filebeat의 차이 (0) | 2021.11.15 |