Log Parser 는 명령줄 유틸리티로 아주 강력하고 다양한 로그를 파싱해 주는 도구이다. 이 Log Parser 는 앞서 소개했던 API 를 제공하는데 이 API를 닷넷에서 호출하여 만들도구가 Visual Log Parser 이다.
다운로드: http://en.serialcoder.net/logiciels/visual-logparser.aspx
제한사항 : 닷넷 프레임워크 2.0(Windows Update 를 통해서 설치가능) 및 명령행 Log Parser 가 사전에 설치되어 있어야 한다.
Log Parser 2.2 :http://www.microsoft.com/downloads/details.aspx?FamilyID=
890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en
물론, GUI 지원 툴을 사용한다고 해서 생산성이 높아지는 것은 아니다. 오히려 명령행 도구가 능숙한 관리자에게는 더 효과적인것이 일반적이다. 다만 이런 Visual 도구는 좀더 직관적인 인테페이스를 통해서 쉽게 접근할수 있다는 장점이 있다.
설치후 위와 같은 파일들이 설치되어 있다. 닷넷의 특성상 파일복사 만으로도 프로그램 실행이 가능하므로 설치파일이 아닌 위 파일을 다른곳에 그냥 복사해도 무리 없이 실행된다.
ICSharpCode.TextEditor 은 쿼리입력창 컴포넌트
Interop.MSUtil 은 LogParser Win32 컴포넌트를 RCW 래핑한 컴포넌트
Microsoft.Practies.* 는 MSDN 에서 제공하는 예제 컴포넌트
SandDock 는 GUI Window 지원 컴포넌트
Visual Log Parser 는 API 에서 제공하는 모든것을 지원한다. 쿼리문은 직접 타이핑을 하게 되어 있지만, 옵션값등은 마우스 조작을 통해서 적용이 가능하다.
1. 쿼리입력창
먼저 쿼리입력창을 보면, SQL Server 에서 제공하는 쿼리 분석기와 유사하다. 또한 Visual Studio 를 참조한듯 싶다. 물론, 쿼리문을 직접 타이핑을 해야 하는 점이 있기는 하나, 여러가지 템플릿을 사전에 만들어 놓는 다면 훨씬 작업이 쉬워질 것으로 생각된다.
추후 개발이 된다면, 여러가지 GUI 화면 옵션을 통해서 위와 같은 쿼리문을 자동으로 작성하는 기능이 추가되었으면 하는 바람이다. 이를테면, SQL Server 의 EM 도구에서 쿼리작성 도구를 통해서 쉽게 쿼리문을 만들수 있게 말이다.
이와 관련해서 한가지 단점이라면, 로그파일 선택이 되지 않고, 위 처럼 직접 지정을 해줘야 한다는 점도 있어 추후 개발/개선의 여지는 상당히 남아 있고 기대가 되는 점이기도 하다.
2. 결과 출력
쿼리 실행결과를 DataGrid 형태로 보여주나, 이 역시 csv 나 txt 파일로 Export 를 할수 있도록 지원한다.
3. 소스형식
명령행 도구에서 제공하는 소스 모두 가능하다. 물론, 명령행 도구의 버젼이 현재 2.2 버젼인데 이 도구의 버젼 업데이트에 따른 추가적인 데이터 원본이 추가된다면 이 역시 Visual LogParser 도 마이너 업데이트를 통해서 가능할 것으로 보인다.
위와 같은 소스형식별 쿼리 옵션을 GUI 상태에서 지정이 가능하도록 지원한다.
파라미터 값은, 데이터 원본 선택에 따라서 자동으로 옵션값 목록을 보여줘서 쉽게 설정을 할수가 있다.
다음은, 몇가지 예제쿼리 이다. 앞서 얘기한것처럼 필요한 쿼리문을 사전에 생성해 놓는다면 추후 이용하기 편리할 것이다.
– 이벤트로그 쿼리, 이벤트 소스별 이벤트 ID 의 각 % 점유율
SELECT SourceName,
EventID,
MUL(PROPCOUNT(*) ON (SourceName), 100.0) AS Percent
FROM System
GROUP BY SourceName, EventID
ORDER BY SourceName, Percent DESC
EventID,
MUL(PROPCOUNT(*) ON (SourceName), 100.0) AS Percent
FROM System
GROUP BY SourceName, EventID
ORDER BY SourceName, Percent DESC
– 파일시스템 쿼리, 이름별 갯수
SELECT STRLEN(Name) AS NameLen,
COUNT(*) AS Total
FROM C:\*.*
GROUP BY NameLen
ORDER BY Total
COUNT(*) AS Total
FROM C:\*.*
GROUP BY NameLen
ORDER BY Total
– 레지스트리 쿼리, HKLM 클래스의 최상위 5개 키
Select top 5 * from \HKLM
– IIS로그 쿼리
– 상태코드 400 이상인 페이지 조회
SELECT cs-uri-stem AS Url, sc-status AS Status, COUNT(*) AS Errors
FROM ex*.log
WHERE (sc-status >= 400)
GROUP BY Url, Status
ORDER BY Errors DESC
– win32 오류 페이지 조회
SELECT cs-uri-stem AS Url,
WIN32_ERROR_DESCRIPTION(sc-win32-status) AS Error, Count(*) AS Total
FROM ex*.log
WHERE (sc-win32-status > 0)
GROUP BY Url, Error
ORDER BY Total DESC
– 오류가 난 Asp 페이지 쿼리
SELECT EXTRACT_TOKEN(FullUri, 0, ‘|’) AS Uri,
EXTRACT_TOKEN(cs-uri-query, -1, ‘|’) AS ErrorMsg,
EXTRACT_TOKEN(cs-uri-query, 1, ‘|’) AS LineNo,
COUNT(*) AS Total
USING STRCAT( cs-uri-stem,
REPLACE_IF_NOT_NULL(cs-uri-query, STRCAT(‘?’, cs-uri-query))
) AS FullUri
FROM ex*.log
WHERE (sc-status = 500) AND (cs-uri-stem LIKE ‘%.asp’)
GROUP BY Uri, ErrorMsg, LineNo
ORDER BY Total DESC
SELECT cs-uri-stem AS Url, sc-status AS Status, COUNT(*) AS Errors
FROM ex*.log
WHERE (sc-status >= 400)
GROUP BY Url, Status
ORDER BY Errors DESC
– win32 오류 페이지 조회
SELECT cs-uri-stem AS Url,
WIN32_ERROR_DESCRIPTION(sc-win32-status) AS Error, Count(*) AS Total
FROM ex*.log
WHERE (sc-win32-status > 0)
GROUP BY Url, Error
ORDER BY Total DESC
– 오류가 난 Asp 페이지 쿼리
SELECT EXTRACT_TOKEN(FullUri, 0, ‘|’) AS Uri,
EXTRACT_TOKEN(cs-uri-query, -1, ‘|’) AS ErrorMsg,
EXTRACT_TOKEN(cs-uri-query, 1, ‘|’) AS LineNo,
COUNT(*) AS Total
USING STRCAT( cs-uri-stem,
REPLACE_IF_NOT_NULL(cs-uri-query, STRCAT(‘?’, cs-uri-query))
) AS FullUri
FROM ex*.log
WHERE (sc-status = 500) AND (cs-uri-stem LIKE ‘%.asp’)
GROUP BY Uri, ErrorMsg, LineNo
ORDER BY Total DESC
다운로드 : http://www.xinet.kr/visuallogparser.zip
출저 : http://isnull.kr/post773.html
위와 같은 Log Parser 도구를 이용할려면 기본적인 SQL 쿼리문의 구조를 알고 있어야 자유롭게 필요한 데이터를 추출할수 있을것이다. 물론 공개된 템플릿을 이용하거나 약간 수정해서 이용하는 것도 좋은 방법이겠다.