일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 지연로딩
- 힙
- 연결리스트
- JPQL
- querydsl
- exclusive lock
- eager
- SQL프로그래밍
- 일대다
- 다대다
- BOJ
- 유니크제약조건
- 다대일
- dfs
- 비관적락
- FetchType
- CHECK OPTION
- PS
- shared lock
- 백트래킹
- fetch
- 스프링 폼
- 이진탐색
- 스토어드 프로시저
- 즉시로딩
- 동적sql
- 데코레이터
- 낙관적락
- execute
- 연관관계
- Today
- Total
흰 스타렉스에서 내가 내리지
Amazon OpenSearch 그리고 logstash 그리고 Spring boot 본문
Amazon OpenSearch 도메인 생성
표준 생성 > 개발 및 테스트
OpenSearch 엔진을 써도 되고,. ElasticSearch 엔진을 써도 좋다.
나는 여기서는 ElasticSeach 7.10 버전을 쓰곘다.
Instance family 를 General purpose 라 하고 인스턴스 유형을 가장 아래 레벨인 t3.small 로 하자..
요금 폭탄에 주의하자
참고로 지금도 계속 돈이 청구되고 있다. 피눈물이 난다.
인턴 심사 끝나면 바로 끌거다...
노드 수 를 1로 하고, 나머지는 놔뒀다.
하고 싶은대로 설정하자
AWS 네트워크를 관리할 수 있는 상황이라면 VPC 액세스를 하겠으나,
난 그냥 퍼블릭 액세스로 설정하여 URL 을 발급할 수 있도록 하였다.
세분화된 액세스 제어에서 마스터 사용자 생성을 하고 이름 암호를 쓴다.
이건 앞으로 logstash 설정과 Kibana 대시보드에 접속할 때 쓰일 것이니 꼭 메모해 놓을 것
그리고 생성을 하면,
ElasticSearch 엔드포인트와 Kibana 대시보드에 접속할 수 있는 URL 이 발급되었다.
Logstash 설치
우리의 애플리케이션이 실행되고 있는 ec2 인스턴스에 보안그룹의 인바운드 규칙을 설정하자.
5000번 포트로 Logstach TCP 로그를 받고, 5044 로 Filebeat 로그를 받을 수 있다.
이 포스팅에서는 Filebeat 를 쓰지는 않을거다.
다음에 기회가 되면 정리해야지
ec2 인스턴스에 접속하여 도커를 설치하고 logstash 이미지를 다운받는다.
이거까지 명령어는 알아서 입력하도록 하자.
Logstash 설정 파일 생성
pipline 폴더 생성 후 logstash conf 파일을 생성한다.
input {
tcp {
port => 5000
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["https://elasticsearch 엔드포인트 주소 넣기.es.amazonaws.com:443"]
ssl => true
index => "logstash-%{+YYYY.MM.dd}"
user => "admin"
password => "비밀번호~"
ilm_enabled => false
}
stdout{}
}
이때 주의할 것은, hosts 엔드포인트 부분에 뒤에 443 포트 번호를 넣어줘야 한다.
저거 때문에 하루를 꼬박 날렸다.
Logstash 실행
docker run --name logstash -p 5000:5000 -p 5044:5044 -d -e LS_JAVA_OPTS="-Xms512M -Xmx512M -XX:ParallelGCThreads=1" -v /home/ec2-user/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash-oss:7.10.2
Logstash 로그 확인
docker logs -f logstash
Successfully started 문구를 확인했으면 끝났다.
만약 실패했을 경우 위의 가이드를 정확히 잘 따라하였는지 다시 한 번 확인해 보자.
Spring boot 설정
먼저 build.gradle 에 아래 의존성을 추가해줍니다.
// logstash
implementation 'net.logstash.logback:logstash-logback-encoder:6.6'
logback.spring.xml\
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- Console -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<!-- Logstash -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5000</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"appname"}</customFields>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOGSTASH" />
</root>
</configuration>
위와 같이 설정하면, Logstash 를 통해서 ElasticSearch 에 로그가 쌓이게 된다.
운영환경에 따른 logback 설정
개발 시 로컬 환경에서는 로그를 남기지 않는다.
logback.xml 경로를 application.yml 에서 설정해서 사용하면, 운영환경별로 로그를 보낼 수 있다.
spring:
profiles:
active: local
... ...
logging:
config: classpath:logback-spring-${spring.profiles.active}.xml
Kibana 대시보드 접속
OpenSearch 를 만들었을 때 제공해준 대시보드 퍼블릭 URL 로 접속한다.
아 참고로, elasticsearch 도메인에서, 하단 탭 중에 '인덱스' 에 들어가서, 아래와 같이 우리가 로그로 찍을 인덱스가 적절하게 나타나는지 확인하자. 안 나타나면 뭔가 오류가 있는것.
다시 대시보드로 넘어가서, 왼쪽 내비게이션 탭에서 'Index Management' 를 누르자.
그리고 다시 왼쪽 내비게이션 탭에서 'Indices' 탭을 누른다.
그러면 Logstash 를 통해 전달된 로그를 통해서 생성된 인덱스 목록을 확인할 수 있다.
패턴 생성
인덱스의 내용을 확인하거나 검색을 하기 위해서 패턴을 등록해야 한다.
메뉴에서 'Stack Management' > 'Index Patterns'
Index pattern 은 Logstash config 파일에 등록했던 패턴을 등록해줍니다.
우리는
index => "logstash-%{+YYYY.MM.dd}"
이렇게 만들었으므로, 'logstash-*' 와 같이 설정했다.
나는 이미 등록을 해 놓아서 임시로 아무거나 함
패턴 등록후 Time field 에 @timestamp 를 primary time field 로 선택한다.
로그 확인
메뉴에서 Discover 를 선택한다.
상단에 로그의 기간과 쿼리로 상세히 검색할 수 있다.
쿼리 가이드는 아래 링크를 참고하면 된다.
https://www.elastic.co/guide/en/kibana/7.10/kuery-query.html
권한 에러가 날 경우
대시보드에서 'Security' > 'Roles' > 'all_access'
'Mapped users' 탭에 들어가서, 'Manage mapping' 을 누르고
그 오류메시지에 나와있던 arn 을 추가해주면 된다.
나중에 캡처한거라서, 아마 :root arn 을 등록하면 되었던것 같다.
'AWS' 카테고리의 다른 글
AWS CloudFormation 의 개념과 구성요소 (0) | 2024.09.13 |
---|---|
AWS CLI에서 계정 전환 및 기본 프로필 설정 방법 (0) | 2024.09.13 |
RDS에서 Read Replica 사용 시 데이터 유실 문제와 해결 방법 (0) | 2024.07.01 |
Amazon EventBridge 에서 Cron 규칙으로 Lambda 호출하기 (0) | 2024.06.29 |
Spring boot 에 ElastiCache for Redis 사용하기 (0) | 2024.05.06 |