> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# xpath를 이용한 이벤트 로그 필터링
- URL: https://www.popit.kr/event-log-filtering-with-xpath/
- Published: 2018-03-04T13:46:48.000Z
- Updated: 2018-03-04T23:45:35.000Z
- Author: 강 명훈
- Tags: #팁, xml, xpath

강의하다 보면 공개하기 껄끄러운 정보가 포함된 이벤트 로그를 사용해야 할 때가 있는데, 윈도우 이벤트 로그는 텍스트가 아니라서 편집도 안 되고, 시스템 해킹이라도 하지 않는 이상 건드릴 방법이 없어서 난감해진다. 원하는 정보만 골라서 쏙 빼버릴 수는 없을까?

![1](https://www.popit.kr/content/images/wp/2018/03/1.png)

로그 필터링 기능을 이용해보자. 그러나 기본 제공되는 기능은 헤더 영역에 대한 필터링만 가능하기 때문에 데이터 영역, 즉 주요 메시지에 대한 필터링이 어렵다.

![2](https://www.popit.kr/content/images/wp/2018/03/2-600x575.png)

이벤트 로그 헤더

![3](https://www.popit.kr/content/images/wp/2018/03/3-568x600.png)

이벤트 로그 데이터

'누가, 어디서, 무엇을' 했는지 등의 정보를 필터링 하려면 XML 구조 검색을 가능하게 해주는 [XPath](https://ko.wikipedia.org/wiki/XPath?ref=popit.kr) 쿼리문을 작성해야 한다.

![4](https://www.popit.kr/content/images/wp/2018/03/4-600x382.png)

쿼리문 추가 전

다음은 '로그온에 실패(EventID=4625)한 특정 사용자'만을 검색해주는 XPath 쿼리문.

![5](https://www.popit.kr/content/images/wp/2018/03/5-600x452.png)

쿼리문 추가 후

표현식은 트리 구조를 이루는 상하위노드의 경로와 검색하려는 최종 노드의 값을 입력하는 방식. 이때 노드 이름은 대소문자를 구분, 값은 구분하지 않으며, 상하위노드 트리를 \[\]로 감싸줘야 한다.

**\*\[System/EventID=4625\]**

**\*\[상위노드/하위노드=노드값\]**

그리고 '속성'이 존재하는 노드를 검색할 때는 '@'로 노드와 속성을 구분한 후, 해당 속성과 이름을 별도의 \[\]로 감싸줘야 한다. **\*\[EventData/Data\[@Name='TargetUserName'\]='속성값'\]**

**\*\[상위노드/하위노드\[@노드속성='속성이름'\]='속성값'\]**

참고로 표현식은 반드시 '\*'로 시작해야 하는데, 조건과 일치하는 결과를 모두 가져오라는 의미인 듯. 이제 원래 목적대로 전체 로그에서 원하는 정보를 제외시켜 보자. 방법은 간단하다. 부정(!=) 연산자를 이용하면 됨.

![6](https://www.popit.kr/content/images/wp/2018/03/6-600x452.png)

이후엔 필터링 결과를 다른 이름으로 저장하면 끝.

![7](https://www.popit.kr/content/images/wp/2018/03/7-600x350.png)

XPath 최신 버전 2.0은 정규표현식까지 지원하지만, 윈도우 이벤트 로그는 XPath 1.0을 제한적으로 지원하기 때문에 와일드카드 검색도 안 된다(..) 그래도 이거라도 되는 게 어디냐 싶음. 2.0도 어서 지원해줬음 좋겠다.