Page History
Info |
---|
어플리케이션에서 생성하는 정보를 분석하고,모니터링 하기 위해서 다음과 같은 방법을 가장 많이 사용합니다.
하지만, 너무나 큰 대용량 처리횟수에대해 실시간성으로 모니터링을 하고 싶다고 하면 Matrix를 활용 합니다. 시간별 CPU변화량,네트워크 변화량 등에 일반적으로 사용되고 있으며 매 이벤트마다 로그를 기록하는 방식이아니고, 증분의 값을 주기적인 시간에 측정함으로 대용량 실시간 카운팅을 측정하는데 효율적입니다. |
대용량 처리 이벤트 방법 선택
자체 큐시스템을 가지고 있는 액터의 스펙을 살펴보겠습니다.
...
Matrix 집계를 일정시간에 수행 하고 Matrix서버에 보고 등 부가적인 기능을 직접 구현해야합니다.
액터 모니터링 시스템 탑재하기
Code Block | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
// 사용부 : 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
윈도우 성능 프로파일러가 주로 단일장비 스케일업을 위해 튜닝할때 사용된다라고 하면
...