μŠ€ν”„λ§ λͺ¨λ‹ˆν„°λ§ (앑츄에이터, λ§ˆμ΄ν¬λ‘œλ―Έν„°, λ©”νŠΈλ¦­, ν”„λ‘œλ©”ν…Œμš°μŠ€, κ·ΈλΌνŒŒλ‚˜)

2023. 5. 16. 09:56γ†μΈν”„λŸ°/μŠ€ν”„λ§ λΆ€νŠΈ - 핡심 원리와 ν™œμš©

728x90

 

μŠ€ν”„λ§ Actuator Endpoint (health, info, logger, httpexchanges) (tistory.com)

 

μŠ€ν”„λ§ Actuator Endpoint (health, info, logger, httpexchanges)

μŠ€ν”„λ§λΆ€νŠΈ Actuator (tistory.com) μŠ€ν”„λ§λΆ€νŠΈ Actuator 1️⃣ Spring Actuator μ‹€λ¬΄μ—μ„œλŠ” κ°œλ°œμ„ ν•œλ‹€ ν•˜λ©΄ μš”κ΅¬μ‚¬ν•­λŒ€λ‘œ κ°œλ°œμ„ ν•˜λŠ” 것을 λ„˜μ–΄μ„œ λ§Œλ“  μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ μžˆλŠ”μ§€ μ—†λŠ”μ§€ λͺ¨λ‹ˆν„°λ§ν•˜κ³  μ§€ν‘œ

hyejin.tistory.com

μ €λ²ˆ κΈ€μ—μ„œ μŠ€ν”„λ§μ΄ μ œκ³΅ν•˜λŠ” 앑츄에이터에 λŒ€ν•΄μ„œ μ•Œμ•„λ΄€λ‹€. 

ActuatorλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•΄μ„œ λͺ¨λ‹ˆν„°λ§ 및 관리할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€. 

μŠ€ν”„λ§μ€ 여기에 λ”ν•΄μ„œ λ§ˆμ΄ν¬λ‘œλ―Έν„°, ν”„λ‘œλ©”ν…Œμš°μŠ€, κ·ΈλΌνŒŒλ‚˜μ™€ 같은 졜근 μœ ν–‰ν•˜λŠ” λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œκ³Όλ„ 맀우 μ‰½κ²Œ 연동할 수 μžˆλ„λ‘ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. 

 

 

 

1️⃣ λ§ˆμ΄ν¬λ‘œλ―Έν„° 

μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜λ©΄μ„œ μž₯애에 λŒ€μ‘ν•˜κΈ° μœ„ν•΄μ„œ λͺ¨λ‹ˆν„°λ§μ„ ν•΄μ•Όν•˜λŠ”λ°, 

이λ₯Ό 돕기 μœ„ν•΄ λ‹€μ–‘ν•œ λͺ¨λ‹ˆν„°λ§νˆ΄μ΄ μ‘΄μž¬ν•œλ‹€. λͺ¨λ‹ˆν„°λ§ νˆ΄μ—κ²Œ μ‹œμŠ€ν…œμ˜ λ‹€μ–‘ν•œ 정보λ₯Ό 전달해주면 λœλ‹€. 

(근데 μ΄λ•Œ 이 λͺ¨λ‹ˆν„°λ§ 툴이 잘 μž‘λ™ν•˜λ €λ©΄ μ‹œμŠ€ν…œμ˜ λ‹€μ–‘ν•œ 정보듀을 ν•΄λ‹Ήν•˜λŠ” 각각의 λͺ¨λ‹ˆν„°λ§ νˆ΄μ— λ§žμΆ°μ„œ 보내야 ν•œλ‹€.) 

 

μ²˜μŒμ—λŠ” cpu, jvm, jdbc λ“±μ˜ 정보λ₯Ό JMX νˆ΄μ— μ „λ‹¬ν•œλ‹€κ³  ν•˜λ©΄ 이 정보듀을 JMX λͺ¨λ‹ˆν„°λ§ νˆ΄μ—μ„œ μ •ν•œ ν˜•μ‹μ— λ§žμΆ°μ„œ μΈ‘μ •ν•˜κ³  전달해쀬닀. 

근데 쀑간에 λͺ¨λ‹ˆν„°λ§ νˆ΄μ„ 기쑴에 μ‚¬μš©ν•˜λ˜ JMXμ—μ„œ 졜근 많이 μ‚¬μš©ν•œλ‹€λŠ” ν”„λ‘œλ©”ν…Œμš°μŠ€λ‘œ λ³€κ²½ν•˜κΈ°λ‘œ κ²°μ •ν–ˆλ‹€κ³  ν•œλ‹€λ©΄...

이 λ³€κ²½ν•˜κΈ°λ‘œν•œ λͺ¨λ‹ˆν„°λ§ νˆ΄μ— λ§žλ„λ‘ λ‹€μ‹œ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•œλ‹€. 

-> μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ λ§ˆμ΄ν¬λ‘œλ―Έν„° Micrometer λΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆλ‹€. 

 

 

λ§ˆμ΄ν¬λ‘œλ―Έν„°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ©”νŠΈλ¦­ νŒŒμ‚¬λ“œ 라고도 λΆˆλ¦¬λŠ”λ°, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”νŠΈλ¦­(μΈ‘μ • μ§€ν‘œ)λ₯Ό λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ μ •ν•œ ν‘œμ€€ λ°©λ²•μœΌλ‘œ λͺ¨μ•„μ„œ μ œκ³΅ν•œλ‹€. -> λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ 좔상화λ₯Ό ν†΅ν•΄μ„œ κ΅¬ν˜„μ²΄λ₯Ό μ‰½κ²Œ λ³€κ²½ν•  수 μžˆλ„λ‘ 도와쀀닀. 

 

λ”°λΌμ„œ κ°œλ°œμžλŠ” λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ μ •ν•œ ν‘œμ€€ λ°©λ²•μœΌλ‘œ λ©”νŠΈλ¦­(μΈ‘μ • μ§€ν‘œ)λ₯Ό μ „λ‹¬ν•˜λ©΄ λœλ‹€. 그리고 μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” λͺ¨λ‹ˆν„°λ§ νˆ΄μ— λ§žλŠ” κ΅¬ν˜„μ²΄λ₯Ό μ„ νƒν•˜λ©΄ λœλ‹€. (μ΄ν›„μ—λŠ” λͺ¨λ‹ˆν„°λ§ 툴이 λ³€κ²½λ˜μ–΄λ„ ν•΄λ‹Ή κ΅¬ν˜„μ²΄λ§Œ λ³€κ²½ν•΄μ£Όλ©΄ λœλ‹€.) 

 

 

 

2️⃣ λ©”νŠΈλ¦­ 

κ°œλ°œμžλŠ” λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ μ •ν•œ ν‘œμ€€ λ°©λ²•μœΌλ‘œ CPU, JVM, λ“±μ˜ 수 λ§Žμ€ μΈ‘μ • μ§€ν‘œλ“€ 직접 μˆ˜μ§‘ν•΄μ„œ λ“±λ‘ν•˜λ©΄ λ˜λŠ”λ° 

λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ λ©”νŠΈλ¦­ μˆ˜μ§‘ κΈ°λŠ₯도 이미 λ§Œλ“€μ–΄μ„œ μ œκ³΅ν•΄μ€€λ‹€. 

그리고 μŠ€ν”„λ§ λΆ€νŠΈ 앑츄에이터가 λ§ˆμ΄ν¬λ‘œλ―Έν„°κ°€ μ œκ³΅ν•˜λŠ” μ§€ν‘œ μˆ˜μ§‘μ„ @AutoConfiguration 을 톡해 μžλ™μœΌλ‘œ 등둝해주고 있기 λ•Œλ¬Έμ— μŠ€ν”„λ§ λΆ€νŠΈ 앑츄에이터λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”νŠΈλ¦­ μ§€ν‘œλ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

http://localhost:8080/actuator/metrics 

앑츄에이터가 μ œκ³΅ν•˜λŠ” metrics μ•€λ“œν¬μΈνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ 기본으둜 μ œκ³΅ν•˜λŠ” λ©”νŠΈλ¦­λ“€μ„ 확인할 수 μžˆλ‹€. 

 

 

http://localhost:8080/actuator/metrics/system.cpu.count

μ΄λŸ°μ‹μœΌλ‘œ ν•˜λ©΄ μ’€ 더 μžμ„Ένžˆ λ©”νŠΈλ¦­μ„ 확인할 수 μžˆλ‹€. 

 

 

* Tag ν•„ν„° 

http://localhost:8080/actuator/metrics/jv m.memory.used?tag=area:heap

μ΄λŸ°μ‹μœΌλ‘œ tag=KEY:VALUE  ν˜•μ‹μ„ μ‚¬μš©ν•˜λ©΄ 정보λ₯Ό ν•„ν„°λ§ν•΄μ„œ μ‘°νšŒν•  수 μžˆλ‹€. 

 

http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/log&tag=status:200

-> uriκ°€ /log μ΄λ©΄μ„œ status λŠ” 200인 http μš”μ²­ 쑰회 

 

 

 

3️⃣ λ©”νŠΈλ¦­ μ’…λ₯˜ 

λ§ˆμ΄ν¬λ‘œλ―Έν„°μ™€ 앑츄에이터가 기본으둜 μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ λ©”νŠΈλ¦­μ΄ μžˆλ‹€. 

 

* JVM λ©”νŠΈλ¦­ 

λ©”λͺ¨λ¦¬ 및 버퍼 ν’€ μ„ΈλΆ€ 정보, 가비지 μˆ˜μ§‘ κ΄€λ ¨ 톡계, μŠ€λ ˆλ“œ ν™œμš©, λ‘œλ“œ 및 μ–Έλ‘œλ“œλœ 클래슀 수, JVM 버전 정보, JIT 컴파일 μ‹œκ°„ λ“±... 

 

 

* μ‹œμŠ€ν…œ λ©”νŠΈλ¦­ 

system, process, disk λ“±μœΌλ‘œ μ‹œμž‘ν•˜κ³  CPU μ§€ν‘œ, 파일 λ””μŠ€ν¬λ¦½ν„° λ©”νŠΈλ¦­, 가동 μ‹œκ°„ λ©”νŠΈλ¦­, μ‚¬μš© κ°€λŠ₯ν•œ λ””μŠ€ν¬ 곡간 등을 확인할 수 μžˆλ‹€. 

 

 

* μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ λ©”νŠΈλ¦­ 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œκ°„ λ©”νŠΈλ¦­λ„ μ œκ³΅ν•œλ‹€. 

 

application.started.time : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹œμž‘ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ (ApplicationStatedEvent 둜 μΈ‘μ •) 

application.ready.time: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μš”μ²­μ„ μ²˜λ¦¬ν•  μ€€λΉ„κ°€ λ˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ (ApplicationReadyEvent 둜 μΈ‘μ •) 

 

ApplicationStatedEvent : μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ™„μ „νžˆ μ‹€ν–‰λœ μƒνƒœ 

ApplicationReadyEvent  : μ»€λ§¨λ“œ 라인 λŸ¬λ„ˆκ°€ μ‹€ν–‰λœ 이후에 호좜

 

 

* μŠ€ν”„λ§ MVC λ©”νŠΈλ¦­ 

μŠ€ν”„λ§ MVC μ»¨νŠΈλ‘€λŸ¬κ°€ μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  μš”μ²­μ— λŒ€ν•΄μ„œ 닀룬닀. 

그리고 tag λ₯Ό μ‚¬μš©ν•΄μ„œ μžμ„Ένžˆ μ‘°νšŒν•  수 μžˆλ‹€. 

uri : μš”μ²­ URI 

method : GET, POST 같은 HTTP λ©”μ„œλ“œ 

status : 200, 400, 500 같은 HTTP Status μ½”λ“œ 

exception: μ˜ˆμ™Έ 

outcome : μƒνƒœμ½”λ“œλ₯Ό 그룹으둜 λͺ¨μ•„μ„œ 확인 1xx: INFORMATION, 2xx: SUCCESS, 3xx: REDIRECTION, 4xx : CLIENT_ERROR, 5xx: SERVER_ERROR

 

http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/log&tag=status:200

 

 

* λ°μ΄ν„°μ†ŒμŠ€ λ©”νŠΈλ¦­

DataSource, 컀λ„₯μ…˜ 풀에 κ΄€ν•œ λ©”νŠΈλ¦­μ„ 확인할 수 μžˆλ‹€. 

μ΅œλŒ€ 컀λ„₯μ…˜, μ΅œμ†Œ 컀λ„₯μ…˜, ν™œμ„± 컀λ„₯μ…˜, λŒ€κΈ° 컀λ„₯μ…˜ 수 등을 확인할 수 μžˆλ‹€. 

히카리 컀λ„₯μ…˜ 풀을 μ‚¬μš©ν•˜λ©΄ hikaricp λ₯Ό 톡해 히카리 컀λ„₯μ…˜ ν’€μ˜ μžμ„Έν•œ λ©”νŠΈλ¦­μ„ 확인할 수 μžˆλ‹€. 

 

 

* 둜그 λ©”νŠΈλ¦­ 

logback λ‘œκ·Έμ— λŒ€ν•œ λ©”νŠΈλ¦­μ„ 확인할 수 있고, trace, debug, info, warn, error 각각의 둜그 λ ˆλ²¨μ— λ”°λ₯Έ 둜그 수λ₯Ό 확인할 수 μžˆλ‹€. 

 

 

* ν†°μΊ£ λ©”νŠΈλ¦­ β­

ν†°μΊ£ λ©”νŠΈλ¦­μ„ λͺ¨λ‘ μ‚¬μš©ν•˜λ €λ©΄ application.yml에 μ˜΅μ…˜μ„ ν‚€λ©΄ μ΅œλŒ€ μ“°λ ˆλ“œ, μ‚¬μš© μ“°λ ˆλ“œ 수λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ λ©”νŠΈλ¦­μ„ 확인할 수 μžˆλ‹€. 

server:
  tomcat:
    mbeanregistry:
      enabled: true

 

 

* μ‚¬μš©μž μ •μ˜ λ©”νŠΈλ¦­ 

νšŒμ›κ°€μž… 수, μ£Όλ¬Έ 수.. λ“± μ‚¬μš©μžκ°€ 직접 λ©”νŠΈλ¦­μ„ μ •μ˜ν•  수 도 μžˆλ‹€. 

 

 

* 기타 λ©”νŠΈλ¦­

HTTP ν΄λΌμ΄μ–ΈνŠΈ λ©”νŠΈλ¦­, μΊμ‹œ λ©”νŠΈλ¦­, μž‘μ—… μ‹€ν–‰κ³Ό μŠ€μΌ€μ€„ λ©”νŠΈλ¦­, μŠ€ν”„λ§ 데이터 리포지토리 λ©”νŠΈλ¦­, λͺ½κ³ DB λ©”νŠΈλ¦­, λ ˆλ””μŠ€ λ©”νŠΈλ¦­ λ“± .. 

 

 

 

4️⃣ ν”„λ‘œλ©”ν…Œμš°μŠ€ 

ν”„λ‘œλ©”ν…Œμš°μŠ€λŠ” λ©”νŠΈλ¦­ μˆ˜μ§‘, μ‹œκ°ν™”, μ•Œλ¦Ό, μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬ κΈ°λŠ₯을 λͺ¨λ‘ μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œμ΄λ‹€. 

https://prometheus.io/docs/introduction/overview/

 

ν”„λ‘œλ©”ν…Œμš°μŠ€λŠ” μ‹œκ³„μ—΄μ„ μ €μž₯ν•˜λŠ” 인메λͺ¨λ¦¬ λ°μ΄ν„°λ² μ΄μŠ€μ΄μž λͺ¨λ‹ˆν„°λ§ 및 경보 μ‹œμŠ€ν…œμœΌλ‘œ 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•œ λ©”νŠΈλ¦­μ€ μˆœκ°„ μˆœκ°„λ§Œ ν™•μΈν•˜λŠ” 것이기 λ•Œλ¬Έμ— κ³Όκ±° 이λ ₯κΉŒμ§€ ν•¨κ»˜ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”νŠΈλ¦­μ„ λ³΄κ΄€ν•˜λŠ” DBκ°€ ν•„μš”ν•˜λ‹€. 그리고 μ΄λ ‡κ²Œ ν•˜λ €λ©΄ μ–΄λ””μ„ κ°€ 계속 λ©”νŠΈλ¦­μ„ μˆ˜μ§‘ν•˜κ³  DB에 μ €μž₯ν•΄μ•Ό ν•˜λŠ”λ° 이런 역할을 ν”„λ‘œλ©”ν…Œμš°μŠ€κ°€ λ‹΄λ‹Ήν•œλ‹€. 

 

 

 

5️⃣ κ·ΈλΌνŒŒλ‚˜

κ·ΈλΌνŒŒλ‚˜λŠ” μ‹œκ³„μ—΄ 데이터λ₯Ό ν‘œμ‹œν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ λ„κ΅¬λ‘œ μ‹œκ°ν™”, 탐색, κ²½κ³  섀정을 ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 데이터λ₯Ό 이해할 수 μžˆλŠ” λŒ€μ‹œλ³΄λ“œ 집합을 μ œκ³΅ν•œλ‹€. 

 

ν”„λ‘œλ©”ν…Œμš°μŠ€κ°€ DB라고 ν•œλ‹€λ©΄ 이 DB에 μžˆλŠ” 데이터λ₯Ό λΆˆλŸ¬μ„œ μ‚¬μš©μžκ°€ 보기 νŽΈν•˜κ²Œ λ³΄μ—¬μ£ΌλŠ” λŒ€μ‹œλ³΄λ“œκ°€ ν•„μš”ν•œλ° μ΄λ•Œ κ·ΈλΌνŒŒλ‚˜λŠ” 맀우 μœ μ—°ν•˜κ²Œ 데이터λ₯Ό λ³΄μ—¬μ£ΌλŠ” νˆ΄μ΄λ‹€. 

 

κ·ΈλΌνŒŒλ‚˜λŠ” 수 λ§Žμ€ κ·Έλž˜ν”„λ₯Ό μ œκ³΅ν•˜κ³ , ν”„λ‘œλ©”ν…Œμš°μŠ€λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ 데이터 μ†ŒμŠ€λ₯Ό μ§€μ›ν•œλ‹€. 

 

 

 

 

6️⃣ μŠ€ν”„λ§ λΆ€νŠΈ 앑츄에이터, ν”„λ‘œλ©”ν…Œμš°μŠ€, κ·ΈλΌνŒŒλ‚˜ 

- λ¨Όμ € μŠ€ν”„λ§ λΆ€νŠΈ 앑츄에이터와 λ§ˆμ΄ν¬λ‘œλ―Έν„°λ₯Ό μ‚¬μš©ν•΄ 수 λ§Žμ€ λ©”νŠΈλ¦­μ„ μžλ™μœΌλ‘œ μƒμ„±ν•œλ‹€. 

-> κ·Έ λ‹€μŒ ν”„λ‘œλ©”ν…Œμš°μŠ€λŠ” λ§Œλ“€μ–΄μ§„ λ©”νŠΈλ¦­μ„ μ§€μ†μ μœΌλ‘œ μˆ˜μ§‘ν•œλ‹€. 

-> ν”„λ‘œλ©”ν…Œμš°μŠ€λŠ” μˆ˜μ§‘ν•œ λ©”νŠΈλ¦­μ„ λ‚΄λΆ€ DB에 μ €μž₯ν•œλ‹€.

-> μ‚¬μš©μžλŠ” κ·ΈλΌνŒŒλ‚˜ λŒ€μ‹œλ³΄λ“œλ₯Ό 톡해 κ·Έλž˜ν”„λ‘œ νŽΈλ¦¬ν•˜κ²Œ λ©”νŠΈλ¦­μ„ μ‘°νšŒν•œλ‹€. (λ©”νŠΈλ¦­ μ‘°νšŒλŠ” ν”„λ‘œλ©”ν…Œμš°μŠ€λ₯Ό ν†΅ν•΄μ„œ μ‘°νšŒν•œλ‹€.) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90