You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

어플리케이션에서 생성하는 정보를 분석하고,모니터링 하기 위해서 다음과 같은 방법을 가장 많이 사용합니다.

  • 로그를 적재한다. ( Nlog,Log4j등등 모듈)
  • 로그를 통합한다. ( 엘라서틱 로그 스태쉬)
  • 로그를 데시보드화하고 분석한다 ( 키바나등 )


하지만, 너무나 큰 대용량 처리횟수에대해 실시간성으로 모니터링을 하고 싶다고 하면

Matrix를 활용 합니다.  시간별 CPU변화량,네트워크 변화량 등에 일반적으로 사용되고 있으며

매초마다 로그를 기록하는 방식이아닌 변화량을 특정주기로 폴링을 할수 있습니다.


로컬 피씨하나가, 초당 만 TPS에 이상 발생하는 이벤트를 실시간 모니터링을 해야할경우 어떻게할지 고민을 해봅시다.

로깅을 활용하는방법으로는 불가능 해보입니다.  로그는 파일에 기록하는것이며 초당 만 TPS에 해당하는 이벤트를 처리할수 없습니다.


실시간 이벤트 처리를  카운팅을 위해,싱글노드에서 액터의 메시지 전송 능력을 하번 살펴 보겠습니다.

링크 : https://akka.io/

초당 5천만 메시지를 커버 할수 있으며, 실시간 모니터링 객체로 사용하기 충분한 스펙을 가지고 있습니다.


액터 모니터링 시스템 탑재하기

using Akka.Actor;
using Akka.Monitoring;
using Akka.Monitoring.ApplicationInsights;
using Akka.Monitoring.PerformanceCounters;
using Akka.Monitoring.Prometheus;

switch (appConfig.MonitorTool)
{
    case "win":
        var win = ActorMonitoringExtension.RegisterMonitor(actorSystem,
            new ActorPerformanceCountersMonitor(
                new CustomMetrics
                {
                    Counters = { "akka.custom.metric1", "akkacore.message" },
                    Gauges = { "akka.messageboxsize" },
                    Timers = { "akka.handlertime" }
                }));
        break;
    case "azure":
        var azure = ActorMonitoringExtension.RegisterMonitor(actorSystem, new ActorAppInsightsMonitor(appConfig.MonitorToolApiKey));
        break;
    case "prometheus": 
        // prometheusMonotor 를 사용하기위해서, MerticServer를 켠다...(수집형 모니터)
        // http://localhost:10250/metrics
        metricServer = new MetricServer(10250);
        metricServer.Start();
        var prometheus = ActorMonitoringExtension.RegisterMonitor(actorSystem, new ActorPrometheusMonitor(actorSystem));
        break;
}

대표적인 매트릭스 기반 모니터링 시스템인, 윈도우 성능 프로파일러 / 애져 AppInsight / Promethes  3가지 모두 연동가능합니다.

  • 윈도우 성능 프로파일러 : 로컬에서 극단적인 퍼포먼스 검증시 활용( 물론 개발장비가 윈도우여야함)
  • Azure AppinSight : 성능 프로파일을 Azure 클라우드 데시보드로 통합하고자 할때
  • Phomethes : 오픈 진영의 성능 프로파일러 데시보드와 연동을 할때 ( Grafana , DataDog등과 연동이 가능해집니다.)


이벤트 발생

// 사용부 : 10만 이벤트 발생
for (int i = 0; i < 100000; i++)
    MonitorActor.Tell(value);

// 구현부 : 액터에 모니터링 카운팅 탑재
ReceiveAsync<string>(async msg =>
{
    int auto_delay = random.Next(1, 100);  //1 이벤트를 임의로 지연 ( 특정 도메인기능 수행 )
    await Task.Delay(auto_delay);
    Context.IncrementCounter("akka.custom.metric1");  // 1단위로 증가
    Context.IncrementCounter("akka.custom.metric2",100); // 특정 단위로 증가(만약 100개 벌크 처리받았다고 하면 100카운팅 증가를 한번에할수 있습니다.)
});

특정 네임스페이스("akka.custom.metri1") 에 해당하는 카운팅을 1이벤트 단위로 증가 시킬수 있습니다.


카운팅 측정및 모니터링하기

윈도우 성능 카운터 추가

여기서는 윈도우 성능 모니터링을 사용하였으며, 매트릭스 기반 성능 모니터링은 

수집대상에대한 네임스페이스부분이, 이벤트가 발생하였다고하면  자동으로 추가가됩니다. 

성능 매트릭이 로깅에비해 장점은, 로그의 경우 최초 설계이후 로그 형식을 변경하기가 어렵지만 

성능 카운팅의 경우 성능대상의 네임스페이스가 이벤트 발생시점 결정할수 있음으로 카운팅 관점에서 유연하고 효율적입니다.


클라우드 기반의 매트릭스 기반 솔류션을 사용한다고 해도 ,성능 매트릭스에대한  기본 컨셉은 동일합니다.

애져에서 매트릭 추가하기

이 모듈은 Azure AppInsight 에서도 수집되는것을 검증하였습니다.



모니터링을 위해 도메인 기능이 포함된, 기존 코드를 액터 모델로 전환할 필요가 없으며 

액터는 대용량 처리 메시지를 충분히 커버함으로 실시간  측정및/모니터링 용도로 액터를 활용할수 있습니다.


측정하기

윈도우 성능 프러파일러


검증항목 : 100만 메시지징이 유실없이, 5000 Tps를 이상을 유지하는것 검증


Azure ApplicationInsight



참고링크:






  • No labels