ݺߣ

ݺߣShare a Scribd company logo
Sarc Summit Summer 2016
by sarc.io
June 11
삵
Trace End-User
Request
조동진
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
예기치 않은 오류가 발생하였습니다.
관리자에게 연락하시기 바랍니다.
E-mail : admin@sarc.com
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
단일 아키텍처의 경우
WASWEB
다중 아키텍처의 경우
WEB
WEB
WEB
WEB
WAS
WAS
WAS
WAS
WEB
WEB
WEB
WEB
WAS
WAS
WAS
WAS
proxy
proxy
proxy
proxy
1 + 1
M + N L + M + N
로그분석
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
효율적인 로그분석
방법
문제 발생 시점의 의미 있는 정보를 기초로 로그분석의 범위를 최소화해야 한다.
WEB
WEB
WEB
WEB
WAS
WAS
WAS
WAS
proxy
proxy
proxy
proxy
의미 있는 정보들
§ IP
§ User-Agent
§ User Id
§ Time
§ Cookie
§ HTTP Header
- Session Cookie
- Persistent Cookie
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
육하원칙 (5W1H)
WASWEB
1. Cookie 정보 전송 2. WEB 위치정보 추가 3. Cookie/WEB /WAS정보 기록
4. WAS 위치정보 추가5. WEB 위치정보 추가
6. Cookie/WEB/WAS 위치정보 기록
§ Who è Cookie
§ When è Header (Date)
§ Where è Header (임의로 생성)
§ What è Header (URI)
§ How è Header (request method, response code)
§ Why
적용방법
효율적인 로그분석
HTTP Header에 필요한 정보를 담아 server/client에 전송하고 로깅한다.
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Access Log - apache
combined 로그 형식
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"" combined
§ %h : 클라이언트(원격 호스트)의 IP 주소
§ %l : 클라이언트의 RFC 1413 신원
§ %u : 문서를 요청한 사용자의 userid
§ %t : The time that the request was received.
§ "%r“ : 클라이언트의 요청줄
§ %>s : 서버가 클라이언트에게 보내는 상태코드
§ %b : 응답 헤더를 제외한 클라이언트에게 보내는 내용의 크기
§ "%{Referer}i“ : 클라이언트가 참조했다고 서버에게 알린 사이트
§ "%{User-agent}i“ : 클라이언트 브라우저가 자신에 대해 알리는 식별정보
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Access Log - apache
127.0.0.1 - - [10/Oct/2000:13:55:36 +0900] "GET /apache_pb.gif
HTTP/1.1" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08
[en] (Win98; I ;Nav)"
combined 로그 내용
who when how what
who
who
where
how
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Who - cookie
Cookie 생성 – Servlet Filter
String sarc_id = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals( "sarc_id" ) ) {
sarc_id = cookies[i].getValue();
break;
}
}
}
if ( sarc_id == null ) {
sarc_id = makeUniqueSarcId(); // make unique cookie value
Cookie c = new Cookie( "sarc_id", sarc_id );
c.setMaxAge( 365 * 24 * 3600 );
c.setPath( "/" );
response.addCookie(c);
}
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Who - cookie
Cookie 생성 및 로깅
WASWEB
Set-cookie Set-cookie
cookie cookie
cookie cookie
Logging
Logging
Logging
Logging
Generate Cookie1
2
3
테스트 결과
Cookie:
JSESSIONID=3048957BA022C125E3780F75B
DBCDFD1
Set-Cookie:
sarc_id=1465276960295; Expires=Tue, 07-
Jun-2017 05:23:40 GMT; Path=/
Cookie:
JSESSIONID=3048957BA022C125E3780F75B
DBCDFD1; sarc_id=1465276960295
1
2
Request Header Response Header
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Where – HTTP Header
HTTP Header
request header를 통해 사용자 요청 경로를 WAS(App.)에 전달할 수 있고, response
header를 통해 사용자 응답 경로를 client(Browser)에 전달할 수 있으며, 이 두 정보를
이용하여 사용자 요청/응답에 대한 경로 추적이 가능하다.
WEB1
WEB2
WEB3
WEB4
WAS1
WAS2
WAS3
WAS4
Proxy3
WEB2
WAS4
Req. Header
Proxy3
WEB2
WAS4
Res. Header
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Where – HTTP Header
Apache
RequestHeader append web_loc WEB2
Header append web_loc WEB2
- RequestHeader 지시어와 Header 지시어를 이용하여 요청/응답의 경로를 HTTP
header에 포함시킬 수 있다.
- mod_headers
- 주서버설정(server config)과 가상호스트(virtual host)에 설정이 가능하다.
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Where – HTTP Header
Tomcat & Application
-Dwas_loc=WAS4
- -D 옵션을 사용하여 WAS 인스턴스의 정보를 system properties에 지정할 수 있다.
String sarc_loc = System.getProperty( “was_loc" );
response.setHeader( “was_loc", was_loc );
- system properties값을 Response Header에 설정한다.
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Logging - Apache
Apache Log Format
%...{Foobar}C : 서버가 수신한 요청에서 Foobar 쿠키의 내용
%...{Foobar}o : 응답에서 Foobar: 헤더의 내용
%...{Foobar}i : 서버가 수신한 요청에서 Foobar: 헤더의 내용
LogFormat "%h %{sarc_id}C %{web_loc}o %{was_loc}o %t "%r" %>s %b" sarc
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Logging - Apache
Web Browser Header
Access Log
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Logging - Application
Key Factor
§ Transaction Unique Key
§ Cookie or unique id
§ Time
§ WEB location info
§ WAS location info
§ Debugging logs
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
사용자 정보 얻기
확장자 .har 파일로 저장 가능
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
사용자 정보 보기
https://ericduran.github.io/chromeHAR/
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
사용자 정보 보기
Sarc Summit Summer 2016
by sarc.io
Trace End-User Request삵
Q&A

More Related Content

Trace End-User Request (조동진)

  • 1. Sarc Summit Summer 2016 by sarc.io June 11 삵 Trace End-User Request 조동진
  • 2. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵
  • 3. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 예기치 않은 오류가 발생하였습니다. 관리자에게 연락하시기 바랍니다. E-mail : admin@sarc.com
  • 4. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 단일 아키텍처의 경우 WASWEB 다중 아키텍처의 경우 WEB WEB WEB WEB WAS WAS WAS WAS WEB WEB WEB WEB WAS WAS WAS WAS proxy proxy proxy proxy 1 + 1 M + N L + M + N 로그분석
  • 5. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 효율적인 로그분석 방법 문제 발생 시점의 의미 있는 정보를 기초로 로그분석의 범위를 최소화해야 한다. WEB WEB WEB WEB WAS WAS WAS WAS proxy proxy proxy proxy 의미 있는 정보들 § IP § User-Agent § User Id § Time § Cookie § HTTP Header - Session Cookie - Persistent Cookie
  • 6. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 육하원칙 (5W1H) WASWEB 1. Cookie 정보 전송 2. WEB 위치정보 추가 3. Cookie/WEB /WAS정보 기록 4. WAS 위치정보 추가5. WEB 위치정보 추가 6. Cookie/WEB/WAS 위치정보 기록 § Who è Cookie § When è Header (Date) § Where è Header (임의로 생성) § What è Header (URI) § How è Header (request method, response code) § Why 적용방법 효율적인 로그분석 HTTP Header에 필요한 정보를 담아 server/client에 전송하고 로깅한다.
  • 7. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Access Log - apache combined 로그 형식 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"" combined § %h : 클라이언트(원격 호스트)의 IP 주소 § %l : 클라이언트의 RFC 1413 신원 § %u : 문서를 요청한 사용자의 userid § %t : The time that the request was received. § "%r“ : 클라이언트의 요청줄 § %>s : 서버가 클라이언트에게 보내는 상태코드 § %b : 응답 헤더를 제외한 클라이언트에게 보내는 내용의 크기 § "%{Referer}i“ : 클라이언트가 참조했다고 서버에게 알린 사이트 § "%{User-agent}i“ : 클라이언트 브라우저가 자신에 대해 알리는 식별정보
  • 8. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Access Log - apache 127.0.0.1 - - [10/Oct/2000:13:55:36 +0900] "GET /apache_pb.gif HTTP/1.1" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" combined 로그 내용 who when how what who who where how
  • 9. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Who - cookie Cookie 생성 – Servlet Filter String sarc_id = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals( "sarc_id" ) ) { sarc_id = cookies[i].getValue(); break; } } } if ( sarc_id == null ) { sarc_id = makeUniqueSarcId(); // make unique cookie value Cookie c = new Cookie( "sarc_id", sarc_id ); c.setMaxAge( 365 * 24 * 3600 ); c.setPath( "/" ); response.addCookie(c); }
  • 10. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Who - cookie Cookie 생성 및 로깅 WASWEB Set-cookie Set-cookie cookie cookie cookie cookie Logging Logging Logging Logging Generate Cookie1 2 3 테스트 결과 Cookie: JSESSIONID=3048957BA022C125E3780F75B DBCDFD1 Set-Cookie: sarc_id=1465276960295; Expires=Tue, 07- Jun-2017 05:23:40 GMT; Path=/ Cookie: JSESSIONID=3048957BA022C125E3780F75B DBCDFD1; sarc_id=1465276960295 1 2 Request Header Response Header
  • 11. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Where – HTTP Header HTTP Header request header를 통해 사용자 요청 경로를 WAS(App.)에 전달할 수 있고, response header를 통해 사용자 응답 경로를 client(Browser)에 전달할 수 있으며, 이 두 정보를 이용하여 사용자 요청/응답에 대한 경로 추적이 가능하다. WEB1 WEB2 WEB3 WEB4 WAS1 WAS2 WAS3 WAS4 Proxy3 WEB2 WAS4 Req. Header Proxy3 WEB2 WAS4 Res. Header
  • 12. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Where – HTTP Header Apache RequestHeader append web_loc WEB2 Header append web_loc WEB2 - RequestHeader 지시어와 Header 지시어를 이용하여 요청/응답의 경로를 HTTP header에 포함시킬 수 있다. - mod_headers - 주서버설정(server config)과 가상호스트(virtual host)에 설정이 가능하다.
  • 13. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Where – HTTP Header Tomcat & Application -Dwas_loc=WAS4 - -D 옵션을 사용하여 WAS 인스턴스의 정보를 system properties에 지정할 수 있다. String sarc_loc = System.getProperty( “was_loc" ); response.setHeader( “was_loc", was_loc ); - system properties값을 Response Header에 설정한다.
  • 14. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Logging - Apache Apache Log Format %...{Foobar}C : 서버가 수신한 요청에서 Foobar 쿠키의 내용 %...{Foobar}o : 응답에서 Foobar: 헤더의 내용 %...{Foobar}i : 서버가 수신한 요청에서 Foobar: 헤더의 내용 LogFormat "%h %{sarc_id}C %{web_loc}o %{was_loc}o %t "%r" %>s %b" sarc
  • 15. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Logging - Apache Web Browser Header Access Log
  • 16. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Logging - Application Key Factor § Transaction Unique Key § Cookie or unique id § Time § WEB location info § WAS location info § Debugging logs
  • 17. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 사용자 정보 얻기 확장자 .har 파일로 저장 가능
  • 18. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 사용자 정보 보기 https://ericduran.github.io/chromeHAR/
  • 19. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 사용자 정보 보기
  • 20. Sarc Summit Summer 2016 by sarc.io Trace End-User Request삵 Q&A