분류 전체보기 1341

Ch08. 마이크로미터, 프로메테우스, 그라파나 - 마이크로미터 소개

한번 더 이야기하지만전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다는 말이 있다. 이 말을 서비스를 운영하는 개발자에게 맞추어 보면 장애는 언제든지 발생할 수 있다. 하지만 모니터링(경계)은 잘 대응하는 것이 중요하다. 서비스를 운영할 때는 애플리케이션의 CPU, 메모리, 커넥션 사용, 고객 요청수 같은 수많은 지표들을 확인하는 것이 필요하다. 그래야 어디에 어떤 문제가 발생했는지 사전에 대응도 할 수 있고, 실제 문제가 발생해도 원인을 빠르게 파악해서 대처할 수 있다. 예를 들어서 메모리 사용량이 가득 찼다면 메모리 문제와 관련 있는 곳을 빠르게 찾아서 대응할 수 있을 것이다. 세상에는 수 많은 모니터링 툴이 있고, 시스템의 다양한 정보를 이 모니터링 툴에 전달해서..

Ch07. 액츄에이터 - 액츄에이터와 보안

보안 주의 액츄에이터가 제공하는 기능들은 우리 애플리케이션의 내부 정보를 너무 많이 노출한다. 그래서 외부 인터넷 망이 공개된 곳에 액츄에이터의 엔드포인트를 공개하는 것은 보안상 좋은 방안이 아니다. 액츄에이터의 엔드포인트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근 가능한 내부망을 사용하는 것이 안전하다. 액츄에이터를 다른 포트에서 실행 예를 들어서 외부 인터넷 망을 통해서 8080 포트에만 접근할 수 있고, 다른 포트는 내부망에서만 접근할 수 있다면 액츄에이터에 다른 포트를 설정하면 된다. 액츄에이터의 기능을 애플리케이션 서버와는 다른 포트에서 실행하려면 다음과 같이 설정하면 된다. 이 경우 기존 8080 포트에서는 액츄에이터를 접근할 수 없다. management: server: p..

Ch07. 액츄에이터 - HTTP 요청 응답 기록

HTTP 요청과 응답의 과거 기록을 확인하고 싶다면 httpexchanges 엔드포인트를 사용하면 된다. HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록하면 httpexchanges 엔드포인트를 사용할 수 있다. (주의! 해당 빈을 등록하지 않으면 httpexchanges 엔드포인트가 활성화되지 않는다) 스프링 부트는 기본으로 InMemoryHttpExchangeRepository 구현체를 제공한다. InMemoryHttpExchangeRepository 추가 @SpringBootApplication public class ActuatorApplication { public static void main(String[] args) { SpringApplication.run(Ac..

Ch07. 액츄에이터 - 로거

loggers 엔드포인트를 사용하면 로깅과 관련된 정보를 확인하고, 또 실시간으로 변경할 수도 있다. 코드를 통해서 알아보자. LogController @Slf4j @RestController public class LogController { @GetMapping("/log") public String log(){ log.trace("trace log"); log.debug("debug log"); log.info("info log"); log.warn("warn log"); log.error("error log"); return "ok"; } } 여러 레벨을 로그를 남기는 단순한 컨트롤러이다. application.yml 설정 logging: level: hello.controller: debug h..

Ch07. 액츄에이터 - 애플리케이션 정보

info 엔드포인트는 애플리케이션의 기본 정보를 노출한다. 기본으로 제공하는 기능들은 다음과 같다. java : 자바 런타임 정보 os: OS 정보 env : Environment 에서 info. 로 시작하는 정보 build : 빌드 정보, META-INF/build-info.properties 파일이 필요하다. git : git 정보, git.properties 파일이 필요하다. env, java, os는 기본으로 비활성화되어 있다. java, os management: info: java: enabled: true os: enabled: true management.info..enabled 의 값을 true 로 지정하면 활성화 된다. 주의!: management.endpoint 하위가 아니다. man..

Ch01. Apache Kafka 기본 개념 및 이해 - In-Sync Replicas

Replication(복제) of Partition 장애를 대비하기 위한 기술 Partition을 복제(Replication)하여 다른 Broker상에서 복제물(Replicas)을 만들어서 장애를 미리 대비함 Replicas - Leader Partition(READ,WRITE 가능), Follower Partition(복제물) Replication Factor에 설정한 값에 따라 복제본을 얼마나 가지고 있을지 설정할 수 있다. In-Sync Replicas(ISR) Leader 장애 시 Leader를 선출하는 데 사용 In-Sync Replicas(ISR)는 High Water Mark라고 하는 지점까지 동일한 Replicas (Leader와 Follower 모두)의 목록 High Water Mark까..

Ch01. Apache Kafka 기본 개념 및 이해 - Replication

Think about Reliability Broker에 장애가 발생하면? 장애가 발생한 Broker의 Partition들은 모두 사용할 수 없게 되는 문제 발생 Partition 관련 데이터들(Message, Offset) Producer가 Write하는 LOG-END-OFFSET과 Consumer Group의 Consumer가 Read하고 처리한 후에 Commit한 CURRENT-OFFSET과의 차이(Consumer Lag)가 발생할 수 있음 다른 Broker에서 Partition을 새로 만들 수 있으면 장애가 해결될까??? 다른 Broker에서 장애가 발생한 Partition을 대신해서 Partition을 새로 만들면 장애를 해결? 새로 들어오는 메시지에 대해서는 문제가 발생하지 않겠지만, 기존에 ..

Ch01. Apache Kafka 기본 개념 및 이해 - Consume

Consuming from Kafka Consumer는 각각 고유의 속도로 CommitLog로부터 순서대로 Read(Poll)를 수행 다른 ConsumerGroup에 속한 Consumer들은 서로 관련이 없으며, CommitLog에 있는 Event(Message)를 동시에 다른 위치에서 Read할 수 있음 Consumer Offset Consumer Group이 읽은 위치를 표시한다. Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지한다. __consumer_offsets라는 InternalTopic에서 ConsumerOffset을 저장하여 관리한다. Multi-Partitions with Single Consumer 4개의 Partition으로 구성된 Topic..

Ch01. Apache Kafka 기본 개념 및 이해 - Producer

Apache Kafka 주요 요소(Producer, Consumer, Consumer Group) Producer : 메시지를 생산(Produce)해서 Kafka의 Topic으로 메시지를 보내는 애플리케이션 Consumer : Topic의 메시지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group : Topic의 메시지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group내의 Consumer들은 협력하여 Topic의 메시지를 병렬 처리함 Producer와 Consumer의 기본 동작 방식 Producer와 Consumer는 서로 알지 못하며, Producer와 Consumer는 각각 고유..

Ch07. 액츄에이터 - 헬스 정보

헬스 정보를 사용하면 애플리케이션에 문제가 발생했을 때 문제를 빠르게 인지할 수 있다. http://localhost:8080/actuator/health 기본 동작 헬스 정보는 단순히 애플리케이션이 요청에 응답을 할 수 있는지 판단하는 것을 넘어서 애플리케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량에는 문제가 없는지 같은 다양한 정보들을 포함해서 만들어진다 show-details 옵션 헬스 정보를 더 자세히 보려면 다음 옵션을 지정하면 된다. management.endpoint.health.show-details=always management: endpoint: health: show-details: always #헬스체크 자세히 하는 옵션 각각의 항목이 아주 자세하게 노출되는 것을 확인..