EventSource
์ถ์ (์ : https://github.com/aspnet/Security/issues/1518)๊ณผ ๊ด๋ จํ์ฌ ์ฌ๋ฌ ์ ์ฅ์ ์์
์ต๊ทผ์ ์๋ก์ด Activity
DiagnosticSource
์ถ์ ์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๋ง์ด ์์ฑ ํ์ผ๋ฏ๋ก ๋์ผํ repos๊ฐ DiagnosticSource
์ง์์ ์ถ๊ฐํ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์ต๋๋ค.
์๋ก๋ฅผ ์ง์ํ ์ฅ๊ธฐ ๊ณํ์ด ์์ต๋๊น? ๊ทธ๋ค์ ๊ฐ์ ์ผ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ถ๋ช
ํ Windows์์๋ EventSource
๋ ETW์ ์ฐ๋ ๋ฐ๋ฉด Linux์์๋ in-proc์ด๋ผ๊ณ ์๊ฐํฉ๋๊น?
๋ชจ๋ ์ง์นจ์ ๋ง์ด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
@rynowak- ์ฐ๋ฆฌ๊ฐ ๊ณต์ ํ ์์๋ ์ง์นจ์ด ์์ต๋๊น?
๋ด๋ถ์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต ํ ๋ช ๊ฐ์ง ๋น ๋ฅธ ์๊ฐ์ด์ง๋ง ์ธ๋ถ ์ ์ผ๋ก๋ ํ์คํ์ง ์์ต๋๋ค.
EventSource์ ๋ชจ๋ ์ฌ์ฉ์ LTTNG ๋๋ ETW์ ๊ฐ์ ํ๋ก์ธ์ค ์ธ ๋ก๊น ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉ์ ์๋ฏธํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. EventSource๋ ๋์ค์ ๋ณผ ์ถฉ์ค๋๊ฐ ๋ฎ์ ์ผ๋ถ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์คํํ๊ณ ์ด๋ค ์ข ๋ฅ์ ํต๊ณ ๋๋ ์์ฝ์ผ๋ก ์ปดํ์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋ ํฐ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. EventSource์ ์ผ๋ฐ์ ์ธ ์ฉ๋๋ ์ด๋ฒคํธ๋ฅผ ํ์ผ (ETW)๋ก ํ์ดํ ํ ๋ค์ ์ฌํ ๋ถ์์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ถฉ์ค๋๊ฐ ๋ฎ์ต๋๋ค. PerfView์ ๊ฐ์ EventSource์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๋๊ตฌ๋ ์ผ๋ถ ์ด๋ฒคํธ (JIT, GC)์ ๋ํ ํน๋ณํ ์ง์์ ๊ฐ์ง๊ณ ์์ง๋ง ์์ฑํ๋ ์ด๋ฒคํธ์ ๋ํด์๋ ์ผ๋ฐ๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ์ผ๋ฐ๋ณด๊ธฐ ๋๋ ๋ฐ์ดํฐ ์์ฝ / ํ๋ฅผ ํ์ํ๋ ๊ฒ์ ๋ชจ๋ ๋จ์ํ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ์๋ํฉ๋๋ค. ๋ฌผ๋ก ํน์ ๋๊ตฌ๋ฅผ ๋ง๋ค ์ ์์ง๋ง ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ PerfView์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๋ค์ ์ง์ ์ ๋ถ๋ช ํด ๋ณด์ผ ๊ฒ์ด์ง๋ง ๊ทธ๊ฒ์ ์ธ๊ธํ๋ ์ด์ ๋ ๊ณง ๋ถ๋ช ํด์ง ๊ฒ์ ๋๋ค. EventSource๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ํด์์ด ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ฉ๋๋ค. ๊ธฐ๋กํ๋ ค๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๊ตฌ์ฑ ์์ ์์ฑ์๊ฐ ์ง์ ํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฒคํธ ์ด๋ฆ๊ณผ ๊ด๋ จ๋ ๊ณ ์ ๋ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค. EventSource๋ฅผ ์ฌ์ฉํ๋ฉด "4096 ๋ฐ์ดํธ ๋ฐ์ดํฐ ์ฝ๊ธฐ"๋๋ "5.6ms ๋ด์๋ก๋ ๋ ํ์ผ"๊ณผ ๊ฐ์ ๋ง์ ์์ฃผํฉ๋๋ค. ์ด ์์ ์ฌ์ค ์ง์ ์ "ํ์ผ ์ ์ถ๋ ฅ์ ์ํํ๋ ๋ฐ 150ms ์์"์ ๊ฐ์ ์์ฝ์ผ๋ก ์ปดํ์ผํ๊ฑฐ๋ ํน์ด ์น์ธ ๊ฒฝ์ฐ ๊ตฌ์ฒด์ ์ผ๋ก ๋๋ฆด ํ ์ ์์ต๋๋ค.
DiagnosticSource์ ๋ชจ๋ ์ฌ์ฉ์ด 'ํ๋ฌ๊ทธ์ธ'๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ์๋ ๋ฉ์ด๋ฆฌ๋ก ์ถ์ถ ํ ๋ค๋ฅธ ๋ก๊น ์์คํ ์ ์ํด ํ๋ก์ธ์ค ๋ด์์ ์ํ๋๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. DiagnosticSource๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์ ์ฒด ์ปจํ ์คํธ ๋ฅผ ๋ฆฌ์ค๋์๊ฒ ์ ๋ฌํ๊ณ ํด๋น ๋ฆฌ์ค๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒด ํด์์ ์ถ๊ฐ ํ ๋ ์ ์ฉํฉ๋๋ค. ๋ํ DiagnosticSource์๋ ๊ธฐ๋ณธ ๋ก๊น ํ์์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ดํด๋ ์์ต๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๋จ์ํ ์ ํ์ด ์๋๊ธฐ ๋๋ฌธ์). ์ฌ์ฉ์๊ฐ๋ณด๊ณ ์ถ์ ๊ฒ์ ์์ฑํ๋ ค๋ฉด ์ถ๊ฐ ์์คํ ์ด ํ์ํฉ๋๋ค.
DiagnosticSource ์ด๋ฒคํธ๋ ๋ ๋ฉ์ด๋ฆฌ ์ ธ์ "์์ฒญ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค."๋๋ "๋ฏธ๋ค์จ์ด์์ ๋ฐ์ํ ์์ธ๋ฅผ ํฌ์ฐฉํ์ต๋๋ค"์ ๊ฐ์ ๋ด์ฉ์ ๋งํฉ๋๋ค. ์ด๊ฒ๋ค์ ์ฌ์ ํ โโ์ฌ์ค์ ์ง์ ์ด์ง๋ง ๋ฒ์๋ ํจ์ฌ ๋ ํฝ๋๋ค. ๋๊ตฌ๋ ํ๋ถํ ์ปจํ ์คํธ์ ์ก์ธ์ค ํ ์ ์์ผ๋ฏ๋ก ์ปจํ ์คํธ์ ๋ฐ๋ผ ์๋ฏธ์๋ ์ ๋ณด๋ฅผ ์์ ๋กญ๊ฒ ์บก์ฒ ํ ์ ์์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก Application Insights์ ๊ฐ์ ๋๊ตฌ๋ก ์บก์ฒ ํ ์ ๋ณด ์งํฉ์ ASP.NET ํ์์ ์ ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์๊ฒ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ๋ชจ๋ ๋งฅ๋ฝ์ ์ ๊ณตํ๊ณ ๊ทธ๋ค์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ํฌ์ฐฉํฉ๋๋ค.
๋ธ๋ฆฌ์ง๋ฅผ ํตํด DiagnosticSource ๋ฐ์ดํฐ๋ฅผ EventSource๋ก ํ์ดํ ํ ์๋ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก์ด ์์ ์ ์ํ ํ ๊ฒ์ ์๋์ง๋ง ์ผ๋ถ ์ฅ์์์ ํ์ํ ์ง๋จ ์ฝ๋์ ์์ ๋ ๋ฐฐ๋ก ๋๋ฆฌ์ง ์์ผ๋ ค ๊ณ ํฉ๋๋ค. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22 ๋๋ ๋น์ ์ด DiagnosticSource๋ฅผ ๋ชจ๋ EventSource์ ๋์ผํ ์ฅ์. ๋๋ ์ด๊ฒ์ ํ์ฉํ๋ ์ ๋ต์ด ์ด๋ป๊ฒ ์งํ ๋ ์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ์ด ์์ญ์ ๋ช ๋ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฌ๊ธฐ์์ Glimpse์ ํํธ๋ ๊ด๊ณ๋ฅผ ๋งบ๊ธฐ ์์ํ๊ณ ๊ฒฐ๊ตญ Application Insights์ ํํธ๋ ๊ด๊ณ๋ฅผ ๋งบ์์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ์ง๋จ ์์ค ์์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒ๋ค์ด ๊ตฌ์ถ๋์์ง๋ง ํ์ฌ ๋ค๋ฅธ ๋๊ตฌ์ ์ํ๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
EventSource ๋๋ DiagnosticSource์ ๋ํ ๋ ํฐ ์ ๋ต์ ๋ํด ๋งํ ์๋ ์์ง๋ง ์ ๊ฐ ์๊ฐํ๋ ๋ฐฉ์๊ณผ ๋๋ถ๋ถ์ ํ์ด ์ฐ๋ฆฌ์ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ๋ณด๋์ง ๋๋ต ํ ์ ์์ต๋๋ค. EventSource์ ๋์ฒด๋ฌผ๋ก DiagnosticSource๋ฅผ ๋ง๋ค์ง ์์์ต๋๋ค. ์ ์๊ฐ์๋ ๋ค๋ฅธ ์๋น์์ ์๋๋ฆฌ์ค ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ง์ ๊ฐ์น๋ฅผ ์ถ๊ฐ ํ ๊ฒ์ผ๋ก ์๊ฐ๋๋ ๊ณณ์ ์ง๋จ ์์ค ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ค ์ค ์ผ๋ถ๋ ๋ค๋ฅธ ์ฌ๋ ์ด ์ง๋จ์ ๊ตฌ์ถ ํ ์์๋ ํ์ฅ ์ฑ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ๋ง ๋จผ ๊ธธ์๊ฐ๋๋ค. ํธ์คํ ์๋ 3 ~ 5 ๊ฐ์ ์ง๋จ ์์ค ํฌ์ธํธ๊ฐ ์๊ณ MVC๋ 10 ๊ฐ์ ๊ฐ๊น์ ์ง ๊ฒ์ ๋๋ค. ํ์ฌ ์ถ์ ์ค์ธ ์ฅ์๊ฐ ๋ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ง์ ์ผ๋ก ํ์ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
์ด๋ฒคํธ ์์ค๋ฅผ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ์ด๋ ํ์ฅ ์ง์ ์์ง๋์ด๊ฐ ์ โโ์๊ณ ์๋ ๊ฒ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก Microsoft ํ์ ์ฑ๋ฅ ๋ถ์์์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ฑ๋ฅ ์นด์ดํฐ ๋ถ์ฌ๋ก ์ธํ ๊ณต๋ฐฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. .NET ํ์ EventCounters (EventSource ์์ ๋น๋ ๋จ)๋ฅผ ์ ์ ํ ๋์ฒดํ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ASP.NET ํ์ด EventSource์ ๋ ๋ง์ ํฌ์๋ฅผํ๋ ๊ฒ์ด ์ง์ฐ๋๋ ์ฃผ๋ ์ด์ ๋ ๋น Windows์ ๋ํ ์ ๋ต์ด ํ๋์ ๋ช ํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฐ๋ฆฌ๋ EventSource๋ * nix์์ ์คํฌ๋ฆฝํธ ํ๋ซํผ์ ๋ ์ ์์ต๋๋ค ๊ฒฝ์ฐ ๋ฏธ๋์ ๋ค๋ฅธ ์ถ๊ฐ์ ์ธ ์ผ์ ๊ตฌ์ถํ์ง ์๋๋กํ๊ณ ์ถ์๋ค. ๊ทธ๊ฒ์ ํด๊ฒฐ๋์์ต๋๋ค.
์ฌ๊ธฐ์ ์ข์ ๋ฌธ์๊ฐ ์์ต๋๋ค : https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md#instrumenting -with-diagnosticsourcediagnosticlistener ์ด ๋ถ์ผ์ ์ ๋ต์ ์ฑ ์์ง๊ณ ์์ต๋๋ค.
์, ๋ ๋ค ๋๋ ๋ ๋ค ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋น์ ์ด ๋ฌด์์ํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์กฐ์ธ์ ๋๋ค.
๋จผ์ ์๋น์๊ฐ ๋๊ตฌ์ธ์ง ์๊ฐํ์ญ์์ค. ๋น์ ์์ํ ๊ฒ์ ๋๊น? (perf) ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ฅผ์ํ ๊ฒ์ ๋๊น? (๋๋ฒ๊น ๋ฐ ๋ฌธ์ ํด๊ฒฐ) ๋๊ตฌ ์์ฑ์๋ฅผ์ํ ๊ฒ์ ๋๊น? ๋๊ตฌ๊ฐ ์ฌํ ๋ถ์ ๋๋ ์ฑ ๋ด๋ถ์์ ์คํ๋๊ณ ์์ต๋๊น?
๋์งธ, ๊ณ์ธก ํ ์ฅ์์ ์์ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ์ ๋ํด ์๊ฐํด๋ณด์ญ์์ค. ์๋น์๋์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ดํดํ๊ณ ํด์ํฉ๋๊น? ๊ฐ๋ณ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์๋ฏธ๊ฐ ์์ต๋๊น? ์๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํด์ผํฉ๋๊น?
์ฅ๊ธฐ๊ฐ ์ ๋ฐ์ดํธ๋์ง ์์ 'ํ ๋ก '์ด์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ง๊ฐํฉ๋๋ค.
๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ ๋ ์ ๋ณด๋ก ์ ๋ฌธ์ ๋ฅผ ๊ธฐ๋กํด ์ฃผ์๋ฉด ์กฐ์ฌํ๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด๋ถ์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต ํ ๋ช ๊ฐ์ง ๋น ๋ฅธ ์๊ฐ์ด์ง๋ง ์ธ๋ถ ์ ์ผ๋ก๋ ํ์คํ์ง ์์ต๋๋ค.
EventSource
EventSource์ ๋ชจ๋ ์ฌ์ฉ์ LTTNG ๋๋ ETW์ ๊ฐ์ ํ๋ก์ธ์ค ์ธ ๋ก๊น ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉ์ ์๋ฏธํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. EventSource๋ ๋์ค์ ๋ณผ ์ถฉ์ค๋๊ฐ ๋ฎ์ ์ผ๋ถ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์คํํ๊ณ ์ด๋ค ์ข ๋ฅ์ ํต๊ณ ๋๋ ์์ฝ์ผ๋ก ์ปดํ์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋ ํฐ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. EventSource์ ์ผ๋ฐ์ ์ธ ์ฉ๋๋ ์ด๋ฒคํธ๋ฅผ ํ์ผ (ETW)๋ก ํ์ดํ ํ ๋ค์ ์ฌํ ๋ถ์์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ถฉ์ค๋๊ฐ ๋ฎ์ต๋๋ค. PerfView์ ๊ฐ์ EventSource์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๋๊ตฌ๋ ์ผ๋ถ ์ด๋ฒคํธ (JIT, GC)์ ๋ํ ํน๋ณํ ์ง์์ ๊ฐ์ง๊ณ ์์ง๋ง ์์ฑํ๋ ์ด๋ฒคํธ์ ๋ํด์๋ ์ผ๋ฐ๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ์ผ๋ฐ๋ณด๊ธฐ ๋๋ ๋ฐ์ดํฐ ์์ฝ / ํ๋ฅผ ํ์ํ๋ ๊ฒ์ ๋ชจ๋ ๋จ์ํ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ์๋ํฉ๋๋ค. ๋ฌผ๋ก ํน์ ๋๊ตฌ๋ฅผ ๋ง๋ค ์ ์์ง๋ง ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ PerfView์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๋ค์ ์ง์ ์ ๋ถ๋ช ํด ๋ณด์ผ ๊ฒ์ด์ง๋ง ๊ทธ๊ฒ์ ์ธ๊ธํ๋ ์ด์ ๋ ๊ณง ๋ถ๋ช ํด์ง ๊ฒ์ ๋๋ค. EventSource๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ํด์์ด ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ฉ๋๋ค. ๊ธฐ๋กํ๋ ค๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๊ตฌ์ฑ ์์ ์์ฑ์๊ฐ ์ง์ ํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฒคํธ ์ด๋ฆ๊ณผ ๊ด๋ จ๋ ๊ณ ์ ๋ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค. EventSource๋ฅผ ์ฌ์ฉํ๋ฉด "4096 ๋ฐ์ดํธ ๋ฐ์ดํฐ ์ฝ๊ธฐ"๋๋ "5.6ms ๋ด์๋ก๋ ๋ ํ์ผ"๊ณผ ๊ฐ์ ๋ง์ ์์ฃผํฉ๋๋ค. ์ด ์์ ์ฌ์ค ์ง์ ์ "ํ์ผ ์ ์ถ๋ ฅ์ ์ํํ๋ ๋ฐ 150ms ์์"์ ๊ฐ์ ์์ฝ์ผ๋ก ์ปดํ์ผํ๊ฑฐ๋ ํน์ด ์น์ธ ๊ฒฝ์ฐ ๊ตฌ์ฒด์ ์ผ๋ก ๋๋ฆด ํ ์ ์์ต๋๋ค.
DiagnosticSource
DiagnosticSource์ ๋ชจ๋ ์ฌ์ฉ์ด 'ํ๋ฌ๊ทธ์ธ'๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ์๋ ๋ฉ์ด๋ฆฌ๋ก ์ถ์ถ ํ ๋ค๋ฅธ ๋ก๊น ์์คํ ์ ์ํด ํ๋ก์ธ์ค ๋ด์์ ์ํ๋๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. DiagnosticSource๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์ ์ฒด ์ปจํ ์คํธ ๋ฅผ ๋ฆฌ์ค๋์๊ฒ ์ ๋ฌํ๊ณ ํด๋น ๋ฆฌ์ค๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒด ํด์์ ์ถ๊ฐ ํ ๋ ์ ์ฉํฉ๋๋ค. ๋ํ DiagnosticSource์๋ ๊ธฐ๋ณธ ๋ก๊น ํ์์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ดํด๋ ์์ต๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๋จ์ํ ์ ํ์ด ์๋๊ธฐ ๋๋ฌธ์). ์ฌ์ฉ์๊ฐ๋ณด๊ณ ์ถ์ ๊ฒ์ ์์ฑํ๋ ค๋ฉด ์ถ๊ฐ ์์คํ ์ด ํ์ํฉ๋๋ค.
DiagnosticSource ์ด๋ฒคํธ๋ ๋ ๋ฉ์ด๋ฆฌ ์ ธ์ "์์ฒญ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค."๋๋ "๋ฏธ๋ค์จ์ด์์ ๋ฐ์ํ ์์ธ๋ฅผ ํฌ์ฐฉํ์ต๋๋ค"์ ๊ฐ์ ๋ด์ฉ์ ๋งํฉ๋๋ค. ์ด๊ฒ๋ค์ ์ฌ์ ํ โโ์ฌ์ค์ ์ง์ ์ด์ง๋ง ๋ฒ์๋ ํจ์ฌ ๋ ํฝ๋๋ค. ๋๊ตฌ๋ ํ๋ถํ ์ปจํ ์คํธ์ ์ก์ธ์ค ํ ์ ์์ผ๋ฏ๋ก ์ปจํ ์คํธ์ ๋ฐ๋ผ ์๋ฏธ์๋ ์ ๋ณด๋ฅผ ์์ ๋กญ๊ฒ ์บก์ฒ ํ ์ ์์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก Application Insights์ ๊ฐ์ ๋๊ตฌ๋ก ์บก์ฒ ํ ์ ๋ณด ์งํฉ์ ASP.NET ํ์์ ์ ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์๊ฒ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ๋ชจ๋ ๋งฅ๋ฝ์ ์ ๊ณตํ๊ณ ๊ทธ๋ค์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ํฌ์ฐฉํฉ๋๋ค.
๋ธ๋ฆฌ์ง๋ฅผ ํตํด DiagnosticSource ๋ฐ์ดํฐ๋ฅผ EventSource๋ก ํ์ดํ ํ ์๋ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก์ด ์์ ์ ์ํ ํ ๊ฒ์ ์๋์ง๋ง ์ผ๋ถ ์ฅ์์์ ํ์ํ ์ง๋จ ์ฝ๋์ ์์ ๋ ๋ฐฐ๋ก ๋๋ฆฌ์ง ์์ผ๋ ค ๊ณ ํฉ๋๋ค. https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22 ๋๋ ๋น์ ์ด DiagnosticSource๋ฅผ ๋ชจ๋ EventSource์ ๋์ผํ ์ฅ์. ๋๋ ์ด๊ฒ์ ํ์ฉํ๋ ์ ๋ต์ด ์ด๋ป๊ฒ ์งํ ๋ ์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ์ด ์์ญ์ ๋ช ๋ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฌ๊ธฐ์์ Glimpse์ ํํธ๋ ๊ด๊ณ๋ฅผ ๋งบ๊ธฐ ์์ํ๊ณ ๊ฒฐ๊ตญ Application Insights์ ํํธ๋ ๊ด๊ณ๋ฅผ ๋งบ์์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ์ง๋จ ์์ค ์์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒ๋ค์ด ๊ตฌ์ถ๋์์ง๋ง ํ์ฌ ๋ค๋ฅธ ๋๊ตฌ์ ์ํ๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ์ ๊ณํ
EventSource ๋๋ DiagnosticSource์ ๋ํ ๋ ํฐ ์ ๋ต์ ๋ํด ๋งํ ์๋ ์์ง๋ง ์ ๊ฐ ์๊ฐํ๋ ๋ฐฉ์๊ณผ ๋๋ถ๋ถ์ ํ์ด ์ฐ๋ฆฌ์ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ๋ณด๋์ง ๋๋ต ํ ์ ์์ต๋๋ค. EventSource์ ๋์ฒด๋ฌผ๋ก DiagnosticSource๋ฅผ ๋ง๋ค์ง ์์์ต๋๋ค. ์ ์๊ฐ์๋ ๋ค๋ฅธ ์๋น์์ ์๋๋ฆฌ์ค ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ง์ ๊ฐ์น๋ฅผ ์ถ๊ฐ ํ ๊ฒ์ผ๋ก ์๊ฐ๋๋ ๊ณณ์ ์ง๋จ ์์ค ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ค ์ค ์ผ๋ถ๋ ๋ค๋ฅธ ์ฌ๋ ์ด ์ง๋จ์ ๊ตฌ์ถ ํ ์์๋ ํ์ฅ ์ฑ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ๋ง ๋จผ ๊ธธ์๊ฐ๋๋ค. ํธ์คํ ์๋ 3 ~ 5 ๊ฐ์ ์ง๋จ ์์ค ํฌ์ธํธ๊ฐ ์๊ณ MVC๋ 10 ๊ฐ์ ๊ฐ๊น์ ์ง ๊ฒ์ ๋๋ค. ํ์ฌ ์ถ์ ์ค์ธ ์ฅ์๊ฐ ๋ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ง์ ์ผ๋ก ํ์ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
์ด๋ฒคํธ ์์ค๋ฅผ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ์ด๋ ํ์ฅ ์ง์ ์์ง๋์ด๊ฐ ์ โโ์๊ณ ์๋ ๊ฒ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก Microsoft ํ์ ์ฑ๋ฅ ๋ถ์์์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ฑ๋ฅ ์นด์ดํฐ ๋ถ์ฌ๋ก ์ธํ ๊ณต๋ฐฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. .NET ํ์ EventCounters (EventSource ์์ ๋น๋ ๋จ)๋ฅผ ์ ์ ํ ๋์ฒดํ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ASP.NET ํ์ด EventSource์ ๋ ๋ง์ ํฌ์๋ฅผํ๋ ๊ฒ์ด ์ง์ฐ๋๋ ์ฃผ๋ ์ด์ ๋ ๋น Windows์ ๋ํ ์ ๋ต์ด ํ๋์ ๋ช ํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฐ๋ฆฌ๋ EventSource๋ * nix์์ ์คํฌ๋ฆฝํธ ํ๋ซํผ์ ๋ ์ ์์ต๋๋ค ๊ฒฝ์ฐ ๋ฏธ๋์ ๋ค๋ฅธ ์ถ๊ฐ์ ์ธ ์ผ์ ๊ตฌ์ถํ์ง ์๋๋กํ๊ณ ์ถ์๋ค. ๊ทธ๊ฒ์ ํด๊ฒฐ๋์์ต๋๋ค.
์ฌ๊ธฐ์ ์ข์ ๋ฌธ์๊ฐ ์์ต๋๋ค : https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md#instrumenting -with-diagnosticsourcediagnosticlistener ์ด ๋ถ์ผ์ ์ ๋ต์ ์ฑ ์์ง๊ณ ์์ต๋๋ค.
๋น์ ์ ์ํด
์, ๋ ๋ค ๋๋ ๋ ๋ค ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋น์ ์ด ๋ฌด์์ํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์กฐ์ธ์ ๋๋ค.
๋จผ์ ์๋น์๊ฐ ๋๊ตฌ์ธ์ง ์๊ฐํ์ญ์์ค. ๋น์ ์์ํ ๊ฒ์ ๋๊น? (perf) ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ฅผ์ํ ๊ฒ์ ๋๊น? (๋๋ฒ๊น ๋ฐ ๋ฌธ์ ํด๊ฒฐ) ๋๊ตฌ ์์ฑ์๋ฅผ์ํ ๊ฒ์ ๋๊น? ๋๊ตฌ๊ฐ ์ฌํ ๋ถ์ ๋๋ ์ฑ ๋ด๋ถ์์ ์คํ๋๊ณ ์์ต๋๊น?
๋์งธ, ๊ณ์ธก ํ ์ฅ์์ ์์ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ์ ๋ํด ์๊ฐํด๋ณด์ญ์์ค. ์๋น์๋์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ดํดํ๊ณ ํด์ํฉ๋๊น? ๊ฐ๋ณ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์๋ฏธ๊ฐ ์์ต๋๊น? ์๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํด์ผํฉ๋๊น?