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 |