성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>SCOM 2012 - ASP.NET 모니터링 방법</h1> <p> <br /> 지금까지 앞의 3단계를 정상적으로 진행했다면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > System Center 2012 Operations Manager 설치 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1424'>http://www.sysnet.pe.kr/2/0/1424</a> SCOM 2012 환경 구성 - 관리 대상 추가 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1426'>http://www.sysnet.pe.kr/2/0/1426</a> SCOM 2012 환경 구성 - Management Packs ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1428'>http://www.sysnet.pe.kr/2/0/1428</a> </pre> <br /> 닷넷 웹 애플리케이션 모니터링은 "<a target='tab' href='http://www.sysnet.pe.kr/2/0/1428'>SCOM 2012 환경 구성 - Management Packs</a>" 글의 마지막에 설명한 대로 "발견된 웹 애플리케이션"에 대해서만 APM(Application Performance Monitoring) 설정이 가능합니다.<br /> <br /> 자, 그럼 해당 웹 애플리케이션들에 대해 APM 설정을 진행해 볼까요? ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 이를 위해 "Authoring" 노드의 "Management Pack Templates" / ".NET Applicaiton Performance Monitoring"의 컨텍스트 메뉴를 눌러 "Add Monitoring Wizard..."를 선택합니다.<br /> <br /> <img alt='scom_2012_netmon_1.png' src='/SysWebRes/bbs/scom_2012_netmon_1.png' /><br /> <br /> 마법사가 시작되면 ".NET Application Performance Monitoring" 항목으로 진행하고,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_2.png' src='/SysWebRes/bbs/scom_2012_netmon_2.png' /><br /> <br /> 이름은 임의로 지정한 후 "Default Management Pack"을 선택,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_3.png' src='/SysWebRes/bbs/scom_2012_netmon_3.png' /><br /> <br /> 다음 화면에서는 에이전트에 의해 발견된 웹 애플리케이션 중에서 APM을 적용할 것을 선택합니다. <br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_4.png' src='/SysWebRes/bbs/scom_2012_netmon_4.png' /><br /> <br /> 이제부터는 APM과 관련된 옵션을 선택할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_5.png' src='/SysWebRes/bbs/scom_2012_netmon_5.png' /><br /> <br /> 각각의 의미는 다음과 같습니다.<br /> <br /> <ul> <li>Turn on performance event alerts: 성능 이벤트 알림</li> <li>Turn on exception event alerts: 예외에 대한 알림</li> <li>Performance event threshold(ms): 성능 이벤트 알림의 기준이 되는 응답 시간 설정, 예를 들어 이 값을 4000으로 바꾸면 aspx 웹 페이지를 처리하는 데 4초 이상 걸린 요청에 대해서만 성능 이벤트로 알림.</li> <li>Enable additional configuration options for server-side and client-side monitoring: 다른 APM에서는 RUM(Realtime User Management) 등으로 알려진 기능으로, 웹 브라우저 사용자 입장에서 네트워크 시간까지 고려한 모니터링 기능을 활성화</li> </ul> <br /> 여기서는 테스트를 위해 "Performance event threshold(ms)" 값만 4초(4000ms)로 변경하고, "Client-side monitoring" 기능을 켜고 진행합니다. 그다음 뜨는 Server-Side Customization은 기본 값으로 넘어가고, "Client-Side Configuration"에서는 threshold 값만 조정하고 넘어갑니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_6.png' src='/SysWebRes/bbs/scom_2012_netmon_6.png' /><br /> <br /> 다음은 Client-Side 모니터링 기능을 활성화 시킬 웹 애플리케이션을 지정할 수 있는데요. "Excluded Pages"를 통해 해당 기능을 넣지 않을 aspx 웹 페이지를 지정하는 것이 가능합니다. (여기서는 예외 페이지를 설정하지 않고 그냥 진행하겠습니다.)<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_7.png' src='/SysWebRes/bbs/scom_2012_netmon_7.png' /><br /> <br /> 마지막으로, 설정 사항에 대한 요약 화면이 나옵니다. IIS가 재시작한다는 정도의 메시지만 유념하면 되겠지요.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_8.png' src='/SysWebRes/bbs/scom_2012_netmon_8.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> 활성화 시키고 나면, 대상 웹 애플리케이션 에이전트가 설치된 컴퓨터에 몇 가지 변화가 생깁니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "System Center Management APM" NT 서비스 시작 레지스트리 추가 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W3SVC COR_PROFILER={AD5651A8-B5C8-46ca-A11B-E82AEC2B8E78} Cor_Enable_Profiling=1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WAS COR_PROFILER={AD5651A8-B5C8-46ca-A11B-E82AEC2B8E78} Cor_Enable_Profiling=1 </pre> <br /> {AD5651A8-B5C8-46ca-A11B-E82AEC2B8E78}의 InprocServer32를 가보면, "C:\Program Files\System Center Operations Manager\Agent\APMDOTNETAgent\V7.0.9538.0\StubProfiler64.dll" 모듈이 연결된 것을 볼 수 있는데요. 이것은 .NET Profiler입니다.<br /> <br /> 그 외에, Client-Side 모니터링을 추가한 경우, 대상 웹 애플리케이션에 대해 다음과 같은 하위 웹 애플리케이션이 추가됩니다.<br /> <br /> <img alt='scom_2012_netmon_9.png' src='/SysWebRes/bbs/scom_2012_netmon_9.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> APM 기능을 추가한 후, IIS reset이 필요합니다. 물론, 해당 컴퓨터에 원격 접속을 해서 직접 실행하는 것도 가능하지만 SCOM 관리 콘솔에서도 할 수 있습니다.<br /> <br /> "Monitoring" / "Windows Computers"로 가보면 다음과 같이 경고가 뜬 것을 볼 수 있고,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_iis_reset_1.png' src='/SysWebRes/bbs/scom_iis_reset_1.png' /><br /> <br /> 경고 아이콘을 두 번 클릭하면 다음과 같이 "Health Explorer" 창이 뜨면서, 원인을 설명하는 패널에 가면 IIS Reset을 실행해 주는 링크를 누를 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_iis_reset_2.png' src='/SysWebRes/bbs/scom_iis_reset_2.png' /><br /> <br /> 이렇게 누르고 다시 수십 초 ~ 수 분이 지나면 경고가 없어집니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> iisreset까지 되었으면 이제 좀 가지고 놀아볼까요? ^^<br /> <br /> 우선, 의도적으로 오류를 내기 위해 DB 서버를 잠시 중단시키고 웹 페이지를 방문해 보았습니다. 그러면, "Monitoring"의 "Application Monitoring" / ".NET Monitoring" 안에 다음과 같이 우리가 설정했던 "Test APM - Production"에 대한 "Active Alerts"로 예외가 발생한 사실을 통보 받을 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_10.png' src='/SysWebRes/bbs/scom_2012_netmon_10.png' /><br /> <br /> 그런데, 통보가 그다지 빠르게 되지 않습니다. 역시 수십 초 ~ 수 분까지 기다려야 할 수 있습니다.<br /> <br /> 좀 더 자세한 오류 내용을 살펴보려면 우측 하단의 "http://.../AppDiagnostics/...." 링크를 눌러야 합니다. 즉, Operations Manager의 웹 콘솔로 넘어가는데요. 어쨌든, 다음과 같은 화면이 제공됩니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_11.png' src='/SysWebRes/bbs/scom_2012_netmon_11.png' /><br /> <br /> ASP.NET에서 예외가 발생한 경우, 기존에도 이벤트 로그에 자세한 콜 스택을 보여주는 항목이 생성되는데요. 보시는 바와 같이 일반적인 예외 메시지의 콜스택보다 더 자세한 정보를 보여줍니다. 즉, 콜 스택마다 실행되는 메소드의 인자까지도 보여주기 때문에 SQL 쿼리가 인자로 전달된 경우 이를 확인할 수 있습니다.<br /> <br /> 다음은 일부러 Thread.Sleep과 함께 간단한 SQL 쿼리와 WaitFor 문을 실행하는 것을 포함해 이전에 설정해 두었던 Threshold 4초 제한을 넘도록 해보았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > protected void Page_Load(object sender, EventArgs e) { string txt = Request.QueryString["delay"]; if (string.IsNullOrEmpty(txt) == false) { int nDelay = Int32.Parse(txt); Thread.Sleep(nDelay * 1000); } // Petshop의 쿼리문 실행하는 코드 WebUtility.GetProductName("test"); // 일부러 넣은 WaitFor Delay using (SqlConnection connection = new SqlConnection()) { connection.ConnectionString = ConfigurationManager.ConnectionStrings["SQLProfileConnString"].ConnectionString; connection.Open(); SqlCommand command = new SqlCommand(); command.Parameters.Add(new SqlParameter("@Name", "test")); command.Connection = connection; command.CommandText = "WAITFOR DELAY '00:00:05'"; command.ExecuteNonQuery(); connection.Close(); } } </pre> <br /> 그 결과는 다음과 같습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_13.png' src='/SysWebRes/bbs/scom_2012_netmon_13.png' /><br /> <br /> 보시는 것처럼, SQL 실행의 경우 시간이 짧게 실행된 것은 "Execution Tree View"에 나타나지 않는 것을 볼 수 있습니다. 뭐, 이 정도는 괜찮습니다. 어차피 관심있는 것은 실행시간이 오래 걸린 쿼리일 테니까요. 모든 것을 테스트한 것은 아니지만 WCF, DB 쿼리 정도에 대해서 프로파일링을 자동으로 해주고, (Sleep같은) 다른 사유에 대해서는 알 수 없습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 버그인지, 원래 이렇게 동작하도록 되어 있는 것인지는 알 수 없으나 SCOM 콘솔의 "Monitoring" / "Application Monitoring" / ".NET Monitoring" 하위에서는 이런 모니터링 결과가 잘 반영되지 않습니다. 대신 "http://localhost/AppDiagnostics" 페이지를 방문하면 "Events" 탭을 통해 확인할 수 있습니다. <br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='scom_2012_netmon_14.png' src='/SysWebRes/bbs/scom_2012_netmon_14.png' /><br /> <br /> 위의 화면에서도 그런 현상이 나타나는데요. SCOM 콘솔에서는 1개의 항목만 있지만, "http://localhost/AppDiagnostics"에서는 66개의 항목이 있는 것을 볼 수 있습니다. (처음에 이것 때문에 고생했습니다. SCOM 콘솔 화면만으로 테스트를 하는데 모니터링이 잘 안되어 확인할 수가 없었던 것입니다.)<br /> <br /> 그러니, 여러분들도 SCOM 콘솔을 믿기보다는 "http://localhost/AppDiagnostics"를 처음부터 확인하시는 것이 좋습니다. ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1390
(왼쪽의 숫자를 입력해야 합니다.)