Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

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

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


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

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

매 이벤트마다 로그를 기록하는 방식이아니고, 증분의 값을 주기적인 시간에 측정함으로 

대용량 실시간 카운팅을 측정하는데 효율적입니다.

대용량 처리 이벤트 방법 선택

자체 큐시스템을 가지고 있는 액터의 스펙을 살펴보겠습니다.

...

네트워크로 확장을 하더라도, 액터는 Netty에 기반한 네트워크 프로토콜을 사용함으로 단일서버 1000 10000 tps의 성능을 낼수 있습니다.

Netty 참고 성능표 : https://github.com/ronenhamias/netty-perf-testing/wiki/Netty-3-Throughput-test


단순하게 모니터링 집계용도 설계라고 하면, 액터 객체를 사용할 필요는 없으나  비동기 병렬처리 프로그래밍 ( 공유객체 카운팅 증가에 따른 락처리)

Matrix 집계를 일정시간에 수행 하고 Matrix서버에 보고 등  부가적인 기능을 직접 구현해야합니다.

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

Code Block
themeEmacs
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;
}

...