4. Index
i. ASP.NET Core 소개
ii. HealthCheck에 대하여
iii. AspNetCore.Diagnostics.HealthChecks 소개 및 WebHook 연계
iv. 각 플랫폼 별 Deployment
v. Customize한 Package 개발 및 연계
vi. 기타 시나리오 소개(Azure DevOps및 Kubernetes)
6. 소개
• Open Source (https://github.com/aspnet/AspNetCore
• 크로스 플랫폼 프레임워크 (Windows, Linux, macOS..)
• 다향한 호스트 환경 지원(Kestrel, IIS, Nginx, Apache, Docker)
• Side-by-side 버전 관리 지원(.Net Core)
7. Startup 클래스
• Application의 호스트 구성 후(Program.cs)의 진입점
• 생성자에서 일반적으로 Application의 설정 을 구성
• 서비스와 응용 프로그램의 요청 파이프라인(Middleware)
- 추가 서비스를 구성하는 ConfigureServices 확장 메서드 정의 – 선택 사항
=> 추가한 서비스는 Application 전체에 걸쳐 사용 가능.
- 요청 파이프라인(Middleware)를 구성하는 Configure 메서드 포함
8. 서비스
• 호스트 초기화 시 구성되거나, ConfigureServices 를 통해 추가 구성
• Application에서 공통적으로 사용하기 위함
•
DI(Dependency Injection)을 통해 사용 가능
• 세 가지(Singleton, Scoped, Transient) 생애 주기(lifetime)이 존재
- Singleton : 요청 시 최초 생성, 이후 요청 시 동일 인스턴스 사용
- Scoped : 요청당 생성 – Per Client(HTTP) Request
- Transient : 요청마다 생성
9. 미들웨어
• 여러 미들웨어를 조합하여 요청 파이프라인을 구성
• 각 미들웨어는 요청에 대해 비동기 로직을 수행하고 다음 미들웨어 호출
12. HealthCheck
• 프로덕션 환경에서 HealthCheck 가 가지는 의미
-> 빌드, 배포, 운영 등의 관점.
• 하나의 어플리케이션에 대한 HealthCheck 시 제약 및 고려사항이 반드시 존재
1) 인프라에 대한 제어 및 체크가 가능한가 (네트워크, 저장소, CDN….)
2) 관리하는 인스턴스에 대한 제어 및 체크가 가능한가
3) 호스팅 환경에 대한 제어 및 체크가 가능한가(IIS, Nginx, Apache….)
4) 다른 서비스 들 간의 의존(영향도)이 존재하는가
13. Ex) Azure Monitoring 서비스에서 고려하고 있는 대표적인 사항들
• 응답 코드의 유효성 검사
• 200 (OK) 상태 코드를 반환하더라도 오류를 검색하기 위해 응답의 내용을 검사
• 네트워크 대기 시간과 어플리케이션이 요청을 실행하는 데 걸린 시간의 조합
• CDN과 같은 어플리케이션을 벗어나 위치하는 리소스 또는 서비스의 검사
• SSL 인증서의 만료 검사
• 애플리케이션의 URL에 대한 DNS 조회의 응답 시간 측정
• DNS 조회가 반환한 URL의 유효성 검사
14. Environment
• 인프라에 대한 것은 기본적으로 관리 중(관제)
• 다수의 인스턴스에 대한 (Windows Server, Linux) 체크 필요
• 호스팅 환경에 대한 체크 필요.
• 타 서비스들에 대한 체크가 반드시 필요.
15. 필요한 기능
• 다수의 인스턴스, 호스팅 환경에 대한 체크
• 연계 시스템 및 인증 환경 등에 대한 체크 -> Custom API
• 솔루션에 대한 체크
• 알림 -> WebHook을 통한 관리자 메일, 문자 등 연계
17. - .Net Core 2.2 이하
https://www.nuget.org/packages/Microsoft.AspNetCore.Diagnostics.HealthChecks
• HealthCheck에 대한 결과가 Endpoint로 노출.
• 어떤 것들에 대한 HealthCheck를 할 것인지를 사전 정의
• HealthCheck 서비스를 등록하고, 미들웨어를 호출하여 사용.
18. • Sql Server, MySql, Oracle, Sqlite, RavenDB, Postgres, EventStore, MongoDB
• Azure Service Bus: EventHub, Queue and Topics, Azure Storage: Blob, Queue and Table
• Azure Key Vault, Azure DocumentDb
• Amazon DynamoDb, Amazon S3
• Kafka, Identity Server, RabbitMQ, Elasticsearch, Redis
• Consul, Hangfire, SignalR
• Kubernetes
• System: Disk Storage, Private Memory, Virtual Memory, Process, Windows Service
• Network: Ftp, SFtp, Dns, Tcp port, Smtp, Imap
• Uri: single uri and uri groups
등등….
19. • 대시보드를 위한 HealthChecks.UI
• 응답 개체에 대한 deserialization 등을 지원하는
• 기본적으로 SQLite를 사용하여 상태 변화를 저장(변경 가능)
• 제공하는 패키지 이외의, Customize한 패키지 작성 후, DI를 통해 사용 가능
• Configuration에 오케스트레이션 컨테이너 및 인스턴스 들에 대한 선언 가능
• 간단한 WebHook 연계