# 서버 모니터링

여기서 사용한 '서버 모니터링'의 의미는 '원활한 서비스 운영을 위해 서버의 상태를 유심히 관찰하는 것'을 의미한다. 그리고 관찰해야하는 각각의 항목들은 서비스 운영을 위한 서버의 건강한 상태와 직결되는 것들이다.

회사에서는 프로메테우스, 그라파나, 스프링부트 등을 사용해서 성능 모니터링을 했었는데, 여기서 정리하고자 하는 것은 어떤 툴들을 이용해서 서버 모니터링을 할 수 있다는 것이 아니라 근본적으로 서버의 상태에 어떤 요소들이 영향을 주는지, 왜 영향을 주는 지에 관해서 정리하고자 한다.

어떤 툴들이 무엇을 볼 수 있고, 어떻게 활용하는게 좋은지를 아는 것은 위 문단에서 설명한 것들을 확실하게 이해한 다음이어야 하는 것 같다.

아래의 항목들 각각을 두고 왜 해당 항목이 서버에 영향을 주는지, 왜 이런 항목들을 관찰해야 하는지, 원리는 무엇인지 등을 정리한다.

> 성능 모니터링은 서버의 안정성과 효율성을 유지하기 위해 매우 중요한 과정입니다. 다음은 주요하게 체크해야 할 항목들과 이유, 그리고 예방을 위한 모니터링 대상을 요약한 것입니다.
>
> 1. **CPU 사용량:**
>    * 이유: 과도한 CPU 사용량은 서버의 응답성과 성능에 영향을 미칠 수 있습니다.
>    * 예방: 비동기 처리, 캐싱, 병렬처리 등을 통해 CPU 부하를 분산시키는 방법을 사용할 수 있습니다.
> 2. **메모리 사용량:**
>    * 이유: 메모리 부족으로 인해 서버가 느려지거나 충돌할 수 있습니다.
>    * 예방: 메모리 누수를 방지하고, 적절한 메모리 관리 전략을 수립합니다.
> 3. **스레드 관리:**
>    * 이유: 과도한 스레드 사용 또는 연결 누수로 인해 서버가 응답하지 않을 수 있습니다.
>    * 예방: 스레드 풀 관리, 커넥션 풀 관리 등을 통해 스레드와 연결을 효율적으로 관리합니다.
> 4. **데이터베이스 상태:**
>    * 이유: 데이터베이스 부하나 병목 현상은 전체 서비스에 영향을 미칠 수 있습니다.
>    * 예방: 인덱스 최적화, 쿼리 튜닝, 캐싱을 통해 데이터베이스 부하를 줄이고 성능을 향상시킵니다.
> 5. **네트워크 지연 및 대역폭:**
>    * 이유: 네트워크 지연이나 대역폭 부족은 서버 응답 시간을 증가시키거나 중단시킬 수 있습니다.
>    * 예방: 네트워크 대역폭 증설, CDN 사용 등으로 네트워크 성능을 향상시키고 병목 현상을 예방합니다.
> 6. **자원 활용률:**
>    * 이유: 디스크, I/O 등의 자원이 부족할 경우 서버 성능이 저하될 수 있습니다.
>    * 예방: 자원 활용률을 모니터링하고 필요 시 자원을 확장합니다.
> 7. **로그 및 오류 메시지:**
>    * 이유: 로그와 오류 메시지를 분석하여 서버 문제를 빠르게 감지하고 대응할 수 있습니다.
>    * 예방: 로그 레벨을 설정하고 중요한 오류 메시지를 모니터링하여 대응합니다.
> 8. **응답 시간 및 지연:**
>    * 이유: 사용자 경험을 유지하기 위해 서버의 응답 시간과 지연을 모니터링해야 합니다.
>    * 예방: 응답 시간을 측정하고, 성능 개선을 위한 조치를 취합니다.
>
> 이외에도 모니터링 도구를 사용하여 서버의 성능과 상태를 실시간으로 모니터링하고 필요한 대응을 취하는 것이 좋습니다. 성능 모니터링을 통해 서버의 안정성을 유지하고 사용자 경험을 향상시키는 데 도움이 될 것입니다.
