XEN Server RRD Collecting for .NET

Xen 서버를 사설로 구축하고 클라우드로 제대로 활용하기 위해서 가장 필요한 부분은 바로 성능 수집이라 할 수 있다.

성능값을 통해 서버의 모니터링을 한다거나,  성능이 부족하면 더 서버를 자동적으로 생성하는 개발을 진행할 수 있기 때문이다.

특히 XenCenter에서 제공하지 않는 Auto scaling을 직접 구현할 수 있다는 점은 큰 메리트가 될 수 있다.

이 기능을 개발 하기 위해서는 먼저 Xen 서버는 개발자를 위해 SDK를 이용해야 하는데, 성능과 관련된 값은 SDK를 이용하여 가져오지 못한다.

Xen을 개발한 Citrix성능 카운터에 대해서는 RRD를 이용해 RRD XML 파일을 파싱하여 데이터를 추출해야 하는데, Java 관련한 개발 방법은

http://jansipke.nl/getting-cpu-memory-disk-and-network-metrics-from-xenserver/ 를 참고하여 개발이 가능하지만 .NET 관련 내용은 찾을 수 없었다.

필자도 여러 고민 끝에 .NET에서 RRD 데이터를 가져오는 작업을 성공 하였는데,  Java와 .Net의 HTTP 요청의 가장 큰 차이점은 Authorization Header이다.

아래 구분은 Java의 호출 구분이다.
[codesyntax lang=”csharp”]

URL url = new URL(“http://” + host.getAddress(connection) + “/rrd_updates?start=” + (System.currentTimeMillis() / 1000 – TIME_WINDOW));
URLConnection urlConnection = url.openConnection();
String encoding = new BASE64Encoder().encode((USERNAME + “:” + PASSWORD).getBytes());
urlConnection.setRequestProperty (“Authorization”, “Basic ” + encoding);

[/codesyntax]

위 encoding  부분과 Authorization을 .Net 구조에 맞게 아래와 같이 수정하면 정상적으로 Xen 서버에서 성능 RRD 데이터를 가져올 수 있다.

[codesyntax lang=”csharp”]

string authInfo = username + “:” + password; authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers[“Authorization”] = “Basic ” + authInfo;

[/codesyntax]

가져온 데이터를 XML로 파싱하여 원하는 값을 추출하여 사용하시면 된다.

xenscaling

 

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.