Versions Compared

Key

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

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

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


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

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

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

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

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

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

...

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

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

Code Block
themeEmacs
using Akka.Monitoring;
using Akka.Monitoring.ApplicationInsights;
using Akka.Monitoring.Datadog;
using Akka.Monitoring.PerformanceCounters;
using Akka.Monitoring.Prometheus;

var MonitorTool = Environment.GetEnvironmentVariable("MonitorTool");
var MonitorToolCon = Environment.GetEnvironmentVariable("MonitorToolCon");

switch (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.MonitorToolCon));
		break;
	case "prometheus":
		// prometheusMonotor 를 사용하기위해서, MerticServer를 켠다...(수집형 모니터,Agent탑재)
		// http://localhost:10250/metrics  - 여기서 제공되는 metrics의 포맺과 호환되는 여러종류의 데시보드들과 연동하여 시각화가능합니다.
		metricServer = new MetricServer(10250);
		metricServer.Start();
		var prometheus = ActorMonitoringExtension.RegisterMonitor(actorSystem, new ActorPrometheusMonitor(actorSystem));
		break;
	case "datadog":
		var statsdConfig = new StatsdConfig
		{
			StatsdServerName = MonitorToolCon
		};
		var dataDog = ActorMonitoringExtension.
			RegisterMonitor(actorSystem, new ActorDatadogMonitor(statsdConfig));
		break;
}

...

기존 액터 시스템에 모니터링 툴을 탑재함으로, 모든 구현된 기존 액터 객체(모니터링 액터)들은 모니터링 기능을 탑재하게 됩니다.

카운팅 이벤트 발생

Code Block
themeEmacs
// 사용부 : 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카운팅 증가를 한번에할수 있습니다.)
});

...

카운팅 보고가 API단위로 이루어지고 보고 시점을 직접해야하는 경우라고하면 유용할수 있습니다.

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

윈도우 성능 카운터 추가

이벤트가 한번이라도 발생하면 AKKA라는 수집대상 그룹이 추가됩니다.

...

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

애져에서 매트릭 추가하기

각 객체(액터)가 가진 성능을 분리하여 측정가능합니다.

...

Info

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

액터는 대용량 처리 메시지를 충분히 커버함으로 실시간  측정및/모니터링 용도로 액터를 기존코드에 간단하게 추가할수 있습니다.

MonitorActor.Tell(value);  와같이 이벤트가 발생하는 시점에서 단순하게 Tell을 하는것만으로 고성능 비동기 처리가 가능하기 때문입니다.

데시보드로 측정하기

윈도우 성능 프러파일러

표: 시간별로 메시지처리가 증가함에따라 CPU변화량을 같이 비교할수 있습니다. (메시징 배율 0.0001,10000을곱하면 메시지수) 

표:TPS와 유실이 없는지 실시간으로 확인이 가능합니다.


Azure ApplicationInsight

표 : 분산처리된 실시간 메시징의 합계를 구하기

Data Dog



윈도우 성능 프로파일러가 주로 단일장비 스케일업을 위해 튜닝할때 사용된다라고 하면

...