실무에서 알게된 내용
-
Grafana loki에서 에러 로그 하나가 검색이 안 됐던 이슈실무에서 알게된 내용 2022. 6. 14. 18:49
1. 문제 상황 : Grafan loki에서 다른 에러 로그는 검색이 잘 되는데, 특정 에러 로그 하나가 검색이 안 됐던 이슈가 있었다. 현상 이유 : loki query에서 정규표현식 오퍼레이터 '=~' 는 줄 바꿈(\n)을 포함하여 전체 문자열과 일치해야 검색이 되는데, 정규 표현식 ' . ' 문자는 기본적으로 줄 바꿈과(\n)이 있으면 일치하지 않는다고 판단한다. 이로 인해, 로그 메시지에 줄 바꿈이 포함된 경우 일치하지 않는다고 판단해서 검색이 안 됐던 이슈였다. 해결 as-is $field=~".*$value.*" to-be $field=~"(?s).*$value.*" 이에 대한 내용은 Grafana Loki 공식 문서에 LogQL의 Log queries 부분을 참고하면 된다. 참고 자료 htt..
-
시스템 별로 Feign Client readTimeout 설정 때문에 내부 동작 코드 분석실무에서 알게된 내용 2022. 6. 14. 17:06
현재 내가 담당하고 있는 서비스는 Feign Client로 OkHttpClient를 사용하고 있었다. feign.okhttp.enabled: true 위 yml 설정 때문에, 아래 코드를 보면 Feign Client로 OkHttpClient를 사용하게 된다. [OkHttpFeignLoadBalancedConfiguration 클래스] 다만, 아래 이미지를 보면 OkHttpClient 가 바로 호출되는 건 아니고 현재 내가 담당하고 있는 서비스에서 사용 중인 sleuth 의존성 때문에 TraceLoadBalancerFeignClient(LoadBalancerFeignClient의 하위 클래스)가 호출돼서 내부에서 LazyTracingFeignClient로 위임, 마지막으로 OkHttpClient로 위임하는..
-
현재 운영하고 있는 DB(MySQL) 커넥션 수 확인하기실무에서 알게된 내용 2022. 6. 3. 08:39
대상 DB : Writer DB 상황 : 담당하고 있는 서비스를 사내 배포 환경으로 전환하면서 새로운 인스턴스에다가 배포를 진행했다. 그리고 나서 기존 ALB에서 기존 인스턴스를 detach 함과 동시에 금일 배포한 새로운 인스턴스를 바라보도록 스위칭 작업을 했다. 기존 인스턴스들은 만약에 상황을 대비해서 며칠간 살려두기로 결정했다. 이로 인해, DB 커넥션 수가 얼마나 증가했는지 확인하고 싶었다. 확인 : 전반적으로 DB 커넥션 수가 증가함을 확인함 추가 궁금했던 사항 DB는 커넥션 수를 최대 얼마나 허용하고 있을까? 커넥션 풀 maximum 사이즈는 얼마로 돼 있을까? 1. DB는 커넥션 수를 최대 얼마나 허용하고 있을까? 최대 허용하는 커넥션 수 확인 SHOW VARIABLES LIKE '%max_..
-
Spring Kafka 적용하며 발생했었던 이슈 정리실무에서 알게된 내용 2022. 6. 2. 18:02
1. Consumer exception 문제 상황 : Consumer 동작을 테스트하기 위해 Kafka Cluster로 메시지를 수동으로 발행하고 있었다. 이때, 오타가 발생했고 이로 인해 사전에 약속된 형태(포맷)의 메시지가 아닌 다른 형태(포맷)의 메시지를 발행했다. 현상 : 계속해서 아래 에러 메시지가 올라왔다. (무한 반복) 에러 메시지 : This error handler cannot process 'SerializationException's directly; please consider configuring an 'ErrorHandlingDeserializer' in the value and/or key deserializer (아래 참고) 현상 이유 KafkaMessageListenerCo..
-
Redis를 이용한 동시성 제어실무에서 알게된 내용 2022. 5. 19. 09:28
1. 분산 락 (Distributed lock) 서로 다른 프로세스(또는 쓰레드)가 상호 배타적(mutually exclusive)인 방식으로 공유 자원을 처리해야 하는 환경에서 유용한 기술 2. 분산 락 구현 방법 (고려했던 선택지는 아래 3가지) DB 이용 Redis 이용 ZooKeeper 이용 선택 : Redis를 이용한 분산락 구현 why? 1. DB 이용 DB를 이용하여 분산락을 구현해도 되지만, 락을 잡기위해 간단한 락 정보를 저장하는 테이블을 만들어야 하는게 좋은 선택인지 의문이 들었음 또한, 락 정보는 영구적인 데이터가 아닌 휘발성 데이터에 더 가깝다고 생각하여 DB를 이용하는 것은 선택지에서 제외함 (하지만, 현재 Redis를 쓰고 있는 상황이 아닌데 빠른 시일 안에 구현해야하는 상황이라..