EventSource
ãã¬ãŒã¹ïŒããšãã°https://github.com/aspnet/Security/issues/1518ãªã©ïŒã«é¢ããŠè€æ°ã®ãªããžããªã§@anurseã«ãã£ãŠéãããåé¡ãçºçããŠããŸãããå®éã®ã¢ã¯ãã£ããã£ã¯ãŸã ãããŸããã MVCã®ã©ãã«ãEventSourceã®çè·¡ã¯ãããŸããã
ç§ã¯æè¿ãæ°ããActivity
ãã®ã§DiagnosticSource
ãã¬ãŒã¹ãæ¶è²»ããã³ãŒããããããæžããŠããã®ã§ãåããªããžããªãDiagnosticSource
ãµããŒããè¿œå ããããšãæåŸ
ããŠããŸããã
ãäºãããµããŒãããé·æçãªèšç»ã¯ãããŸããïŒ åœŒãã¯åãããšãããŠããããã§ãã æããã«ãWindowsã§ã¯EventSource
ãETWã«æžã蟌ã¿ãŸãããLinuxã§ã¯é²è¡äžã ãšæããŸããïŒ
ä»»æã®ã¬ã€ãã³ã¹ãããã ããã°å¹žãã§ãã
@ rynowak-å ±æã§ããããã«é¢ããã¬ã€ãã³ã¹ã¯ãããŸããïŒ
ç§ã¯å éšã§äœåºŠãç¹°ãè¿ããããã€ãã®ç°¡åãªèãã§ãããå€éšã«ã€ããŠã¯ããããããŸãã...
EventSourceã®äœ¿çšã¯ãLTTNGãETWãªã©ã®ã¢ãŠãããã»ã¹ãã®ã³ã°ã¡ã«ããºã ã®äœ¿çšãæå³ãããšæ³å®ããŸãã EventSourceã¯ãå¿ å®åºŠã®äœãæ å ±ãå«ãããã€ãã®ããŒã¿ãã€ã³ããèµ·åããŠåŸã§ç¢ºèªããããçš®ã®çµ±èšãŸãã¯èŠçŽã«ã³ã³ãã€ã«ããå Žåã«æé©ã§ãã EventSourceã®äžè¬çãªäœ¿çšæ³ã¯ãã€ãã³ãããã¡ã€ã«ïŒETWïŒã«ãã€ããããããã䜿çšããŠäºåŸåæãè¡ãããšã§ãããããå¿ å®åºŠãäœããšèšããŸãã PerfViewã®ãããªEventSourceããã®ããŒã¿ãèŠãããŒã«ã¯ãããã€ãã®ã€ãã³ãïŒJITãGCïŒã«é¢ããç¹å¥ãªç¥èãæã£ãŠããŸãããäœæããã€ãã³ãã«ã€ããŠã¯ãäžè¬çãªãã¥ãŒã衚瀺ããŸãã ããŒã¿ã®äžè¬çãªãã¥ãŒãŸãã¯èŠçŽ/è¡šã衚瀺ããããšã¯ããã¹ãŠåçŽãªã¿ã€ãã§ããããæ©èœããŸãã ãã¡ãããå°çšã®ããŒã«ãäœæããããšãã§ããŸãããäžè¬çãªã±ãŒã¹ã¯ãPerfViewã®ãããªãã®ã䜿çšããããšã§ãã
次ã®å£°æã¯æçœã«æããŸãããããã«ã€ããŠèšåããçç±ã¯ããã«æããã«ãªãããšãé¡ã£ãŠããŸãã EventSourceã䜿çšãããšãçºçããã€ãã³ãã®è§£éãäºåã«æ±ºå®ãããŸãã èšé²ãããã¹ãŠã®ããŒã¿ã¯ã³ã³ããŒãã³ãã®äœæè ã«ãã£ãŠæå®ãããéåžžã¯ã€ãã³ãåã«é¢é£ä»ããããåºå®ã®æå³ãæã¡ãŸãã EventSourceã䜿çšãããšãã4096ãã€ãã®ããŒã¿ãèªã¿åãããã5.6msã§ãã¡ã€ã«ãããŒãããããªã©ãšããèšãããŸãã ãããã®å°ããªäºå®ã®èšè¿°ã¯ãããã¡ã€ã«I / Oã®å®è¡ã«è²»ãããã150ããªç§ãã®ãããªèŠçŽã«ãŸãšããããå€ãå€ã®å Žåã¯å ·äœçã«æãäžãããããããšãã§ããŸãã
DiagnosticSourceã®äœ¿çšã¯ãããŒã¿ãæå³ã®ãããã²ããã«æœåºããããã©ã°ã€ã³ããŸãã¯å¥ã®ãã®ã³ã°ã·ã¹ãã ã«ãã£ãŠã€ã³ããã»ã¹ã§è¡ãããŠãããšæ³å®ããŸãã DiagnosticSourceã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã®å®å šãªã³ã³ããã¹ãããªã¹ããŒã«æž¡ãããã®ãªã¹ããŒãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãžã®ã¢ã¯ã»ã¹ã«åºã¥ããŠç¬èªã®è§£éãè¿œå ããå Žåã«æé©ã§ãã DiagnosticSourceã«ã¯ããã€ãã£ãã®ãã°åœ¢åŒããããŸããããŸããããŒã¿ãã€ã³ãã®äžè¬çãªç解ããããŸããïŒéåžžã¯åçŽãªã¿ã€ãã§ã¯ãªãããïŒããŠãŒã¶ãŒãèŠãããã®ãäœæããã«ã¯ãè¿œå ã®ã·ã¹ãã ãå¿ èŠã§ãã
DiagnosticSourceã€ãã³ãã¯ååãåŸåããããããªã¯ãšã¹ããåŠçããããšããŠããŸããããããã«ãŠã§ã¢ã«ãã£ãŠã¹ããŒãããäŸå€ããã£ããããŸããããªã©ãšè¡šç€ºãããŸãã ãããã¯ãŸã äºå®ã®è¡šæã§ãããç¯å²ã¯ã¯ããã«å€§ããã§ãã ããŒã«ã¯è±å¯ãªã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ã§ãããããã³ã³ããã¹ãã«å¿ããŠæå³ã®ããæ å ±ãèªç±ã«ãã£ããã£ã§ããŸãã æçµçã«ãApplication Insightsãªã©ã®ããŒã«ã«ãã£ãŠãã£ããã£ãããäžé£ã®æ å ±ã¯ãASP.NETããŒã ã«ãã£ãŠå®çŸ©ãããŸããã ç§ãã¡ã¯åœŒãã«ç§ãã¡ãæã£ãŠãããã¹ãŠã®ã³ã³ããã¹ããæäŸãã圌ããéèŠã ãšæããã®ããã£ããã£ããŸãã
ããªããžãä»ããŠDiagnosticSourceããŒã¿ãEventSourceã«ãã€ãããããšãã§ããŸãã ç§ã¯å人çã«ãããè¡ã£ãŠããŸããããå Žæã«ãã£ãŠã¯å¿ èŠãªèšºæã³ãŒãã®éã2åã«ãªãã®ãé¿ããã€ããã®ããã§ãã https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22ãã¹ãŠã®ã§DiagnosticSourceã䜿çšãããšã¯æããŸããEventSourceãšåãå Žæã ããã掻çšããæŠç¥ãã©ã®ããã«æ©èœãããã¯ããããŸããããè©Šããããšã¯ãããŸããã
ç§ãã¡ã«ãšã£ãŠããã®é åã¯æ°åå€æŽãããŸããã ããã§ã¯ãGlimpseãšã®ææºããå§ããæçµçã«ApplicationInsightsãšã®ææºãéå§ããŸããã ãã®éçšã§ã蚺æãœãŒã¹ã®äžã«ä»ã®ããã€ãã®ãã®ãæ§ç¯ãããŸãããããããã®ä»ã®ããŒã«ã®çŸåšã®ã¹ããŒã¿ã¹ã¯ããããŸããã
EventSourceãDiagnosticSourceã«é¢ãããã倧ããªæŠç¥ã«ã€ããŠè©±ãããšã¯ã§ããŸããããç§ãããããã©ã®ããã«èããŠãããããããŠããŒã ã®ã»ãšãã©ãç§ãã¡ã®ã¢ãããŒããã©ã®ããã«èŠãŠãããã«ã€ããŠã¯çããããšãã§ããŸãã EventSourceã®ä»£ãããšããŠDiagnosticSourceãäœæããŸããã§ããã ç§ã®èãã§ã¯ãããã¯ç°ãªãæ¶è²»è ãšäžé£ã®ã·ããªãªã«åœ¹ç«ã¡ãŸãã
蚺æãœãŒã¹ã€ãã³ããè¿œå ããŠãå€ãã®äŸ¡å€ãè¿œå ããããšèããŸãã ãããã®ããã€ãã¯ãä»ã®èª°ãã蚺æãæ§ç¯ããããã®æ¡åŒµæ§ã®ãããªãã®ã§ãããããéåžžã«é·ãéã®ããé²ã¿ãŸãã ãã¹ãã£ã³ã°ã«ã¯ãããã3ã5ã®èšºæãœãŒã¹ãã€ã³ãããããMVCã«ã¯10ã«è¿ããšæããŸããçŸåšè¿œè·¡ããŠããå Žæãä»ã«ãããã©ããã¯ããããŸããã 誰ããçã®ããŒãºãæã£ãŠãããªããç§ãã¡ã¯ãããæ€èšããŸãã
ã€ãã³ããœãŒã¹ã®æ§ç¯ãè¡ã£ãŠããŸãã ããã¯ããã£ãŒã«ããµããŒããšã³ãžãã¢ã粟éããŠããããšã§ãããéåžžããã€ã¯ããœããã®ããŒã ã®ããã©ãŒãã³ã¹åæã®éèŠãªéšåã§ãã ããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒããªãããã«æ®ããã空çœã解決ããããšããŠããŸãã .NETããŒã ã¯ãé©åãªä»£æ¿ãšããŠEventCountersïŒEventSourceã®äžã«æ§ç¯ïŒãäœæããããã«åãçµãã§ããŸãã ASP.NETããŒã ãEventSourceã«ããã«æè³ããã®ãé ããäž»ãªçç±ã¯ããã°ããã®éãWindows以å€ã®æŠç¥ãã©ããªãããæ確ã§ãªãã£ãããã§ãã EventSourceã* nixãã©ãããã©ãŒã ã§äœ¿çšãããªãå Žåã¯ãå°æ¥ãå¥ã®ãã®ãäœæããããšãé¿ãããã£ãã®ã§ãã ããã¯çä»ããããŸããã
ããã«è¯ãããã¥ã¡ã³ãããããŸãïŒ https ïŒ
ãŸããããã¯ããªããäž¡æ¹ãŸãã¯ã©ã¡ãããè¡ãããšãã§ããããã«èãããŸãã ç§ã¯ããªããåãçµãã§ããããšã«ããŸã粟éããŠããªãã®ã§ã以äžã¯ããã€ãã®äžè¬çãªã¢ããã€ã¹ã§ãã
ãŸããããªãã®æ¶è²»è ã誰ã§ããããèããŠãã ããã ããã¯ããªãã®ããã§ããïŒ ïŒperfïŒããã¯ã¢ããªã±ãŒã·ã§ã³éçºè åãã§ããïŒ ïŒãããã°ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°ïŒããã¯ããŒã«ã®äœæè åãã§ããïŒ ããŒã«ã¯äºåŸåæã§ããããããšãã¢ããªå ã§å®è¡ãããŠããŸããïŒ
次ã«ãèšæž¬ããäºå®ã®å Žæã®æ°ãšãæå³ããããšæãããŒã¿ã®çš®é¡ã«ã€ããŠèããŸãã æ¶è²»è ã¯ãã®ããŒã¿ãã©ã®ããã«ç解ãã解éããŸããïŒ åã ã®ããŒã¿ãã€ã³ãã¯æå³ããããŸããããããšãããŒã¿ãéçŽããå¿ èŠããããŸããïŒ
é·æéæŽæ°ãããŠããªãããã£ã¹ã«ãã·ã§ã³ãã®åé¡ã¯å®æçã«ã¯ããŒãºããŸãã
ãäžäŸ¿ããããããŠç³ãèš³ããããŸããã ããã§ãåé¡ãçºçããå Žåã¯ãæŽæ°ãããæ å ±ã䜿çšããŠæ°ããåé¡ããã°ã«èšé²ããŠãã ããã調æ»ããããŸãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯å éšã§äœåºŠãç¹°ãè¿ããããã€ãã®ç°¡åãªèãã§ãããå€éšã«ã€ããŠã¯ããããããŸãã...
EventSource
EventSourceã®äœ¿çšã¯ãLTTNGãETWãªã©ã®ã¢ãŠãããã»ã¹ãã®ã³ã°ã¡ã«ããºã ã®äœ¿çšãæå³ãããšæ³å®ããŸãã EventSourceã¯ãå¿ å®åºŠã®äœãæ å ±ãå«ãããã€ãã®ããŒã¿ãã€ã³ããèµ·åããŠåŸã§ç¢ºèªããããçš®ã®çµ±èšãŸãã¯èŠçŽã«ã³ã³ãã€ã«ããå Žåã«æé©ã§ãã EventSourceã®äžè¬çãªäœ¿çšæ³ã¯ãã€ãã³ãããã¡ã€ã«ïŒETWïŒã«ãã€ããããããã䜿çšããŠäºåŸåæãè¡ãããšã§ãããããå¿ å®åºŠãäœããšèšããŸãã PerfViewã®ãããªEventSourceããã®ããŒã¿ãèŠãããŒã«ã¯ãããã€ãã®ã€ãã³ãïŒJITãGCïŒã«é¢ããç¹å¥ãªç¥èãæã£ãŠããŸãããäœæããã€ãã³ãã«ã€ããŠã¯ãäžè¬çãªãã¥ãŒã衚瀺ããŸãã ããŒã¿ã®äžè¬çãªãã¥ãŒãŸãã¯èŠçŽ/è¡šã衚瀺ããããšã¯ããã¹ãŠåçŽãªã¿ã€ãã§ããããæ©èœããŸãã ãã¡ãããå°çšã®ããŒã«ãäœæããããšãã§ããŸãããäžè¬çãªã±ãŒã¹ã¯ãPerfViewã®ãããªãã®ã䜿çšããããšã§ãã
次ã®å£°æã¯æçœã«æããŸãããããã«ã€ããŠèšåããçç±ã¯ããã«æããã«ãªãããšãé¡ã£ãŠããŸãã EventSourceã䜿çšãããšãçºçããã€ãã³ãã®è§£éãäºåã«æ±ºå®ãããŸãã èšé²ãããã¹ãŠã®ããŒã¿ã¯ã³ã³ããŒãã³ãã®äœæè ã«ãã£ãŠæå®ãããéåžžã¯ã€ãã³ãåã«é¢é£ä»ããããåºå®ã®æå³ãæã¡ãŸãã EventSourceã䜿çšãããšãã4096ãã€ãã®ããŒã¿ãèªã¿åãããã5.6msã§ãã¡ã€ã«ãããŒãããããªã©ãšããèšãããŸãã ãããã®å°ããªäºå®ã®èšè¿°ã¯ãããã¡ã€ã«I / Oã®å®è¡ã«è²»ãããã150ããªç§ãã®ãããªèŠçŽã«ãŸãšããããå€ãå€ã®å Žåã¯å ·äœçã«æãäžãããããããšãã§ããŸãã
DiagnosticSource
DiagnosticSourceã®äœ¿çšã¯ãããŒã¿ãæå³ã®ãããã²ããã«æœåºããããã©ã°ã€ã³ããŸãã¯å¥ã®ãã®ã³ã°ã·ã¹ãã ã«ãã£ãŠã€ã³ããã»ã¹ã§è¡ãããŠãããšæ³å®ããŸãã DiagnosticSourceã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã®å®å šãªã³ã³ããã¹ãããªã¹ããŒã«æž¡ãããã®ãªã¹ããŒãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãžã®ã¢ã¯ã»ã¹ã«åºã¥ããŠç¬èªã®è§£éãè¿œå ããå Žåã«æé©ã§ãã DiagnosticSourceã«ã¯ããã€ãã£ãã®ãã°åœ¢åŒããããŸããããŸããããŒã¿ãã€ã³ãã®äžè¬çãªç解ããããŸããïŒéåžžã¯åçŽãªã¿ã€ãã§ã¯ãªãããïŒããŠãŒã¶ãŒãèŠãããã®ãäœæããã«ã¯ãè¿œå ã®ã·ã¹ãã ãå¿ èŠã§ãã
DiagnosticSourceã€ãã³ãã¯ååãåŸåããããããªã¯ãšã¹ããåŠçããããšããŠããŸããããããã«ãŠã§ã¢ã«ãã£ãŠã¹ããŒãããäŸå€ããã£ããããŸããããªã©ãšè¡šç€ºãããŸãã ãããã¯ãŸã äºå®ã®è¡šæã§ãããç¯å²ã¯ã¯ããã«å€§ããã§ãã ããŒã«ã¯è±å¯ãªã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ã§ãããããã³ã³ããã¹ãã«å¿ããŠæå³ã®ããæ å ±ãèªç±ã«ãã£ããã£ã§ããŸãã æçµçã«ãApplication Insightsãªã©ã®ããŒã«ã«ãã£ãŠãã£ããã£ãããäžé£ã®æ å ±ã¯ãASP.NETããŒã ã«ãã£ãŠå®çŸ©ãããŸããã ç§ãã¡ã¯åœŒãã«ç§ãã¡ãæã£ãŠãããã¹ãŠã®ã³ã³ããã¹ããæäŸãã圌ããéèŠã ãšæããã®ããã£ããã£ããŸãã
ããªããžãä»ããŠDiagnosticSourceããŒã¿ãEventSourceã«ãã€ãããããšãã§ããŸãã ç§ã¯å人çã«ãããè¡ã£ãŠããŸããããå Žæã«ãã£ãŠã¯å¿ èŠãªèšºæã³ãŒãã®éã2åã«ãªãã®ãé¿ããã€ããã®ããã§ãã https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/DiagnosticSourceEventSource.cs#L22ãã¹ãŠã®ã§DiagnosticSourceã䜿çšãããšã¯æããŸããEventSourceãšåãå Žæã ããã掻çšããæŠç¥ãã©ã®ããã«æ©èœãããã¯ããããŸããããè©Šããããšã¯ãããŸããã
ç§ãã¡ã«ãšã£ãŠããã®é åã¯æ°åå€æŽãããŸããã ããã§ã¯ãGlimpseãšã®ææºããå§ããæçµçã«ApplicationInsightsãšã®ææºãéå§ããŸããã ãã®éçšã§ã蚺æãœãŒã¹ã®äžã«ä»ã®ããã€ãã®ãã®ãæ§ç¯ãããŸãããããããã®ä»ã®ããŒã«ã®çŸåšã®ã¹ããŒã¿ã¹ã¯ããããŸããã
ç§ãã¡ã®èšç»
EventSourceãDiagnosticSourceã«é¢ãããã倧ããªæŠç¥ã«ã€ããŠè©±ãããšã¯ã§ããŸããããç§ãããããã©ã®ããã«èããŠãããããããŠããŒã ã®ã»ãšãã©ãç§ãã¡ã®ã¢ãããŒããã©ã®ããã«èŠãŠãããã«ã€ããŠã¯çããããšãã§ããŸãã EventSourceã®ä»£ãããšããŠDiagnosticSourceãäœæããŸããã§ããã ç§ã®èãã§ã¯ãããã¯ç°ãªãæ¶è²»è ãšäžé£ã®ã·ããªãªã«åœ¹ç«ã¡ãŸãã
蚺æãœãŒã¹ã€ãã³ããè¿œå ããŠãå€ãã®äŸ¡å€ãè¿œå ããããšèããŸãã ãããã®ããã€ãã¯ãä»ã®èª°ãã蚺æãæ§ç¯ããããã®æ¡åŒµæ§ã®ãããªãã®ã§ãããããéåžžã«é·ãéã®ããé²ã¿ãŸãã ãã¹ãã£ã³ã°ã«ã¯ãããã3ã5ã®èšºæãœãŒã¹ãã€ã³ãããããMVCã«ã¯10ã«è¿ããšæããŸããçŸåšè¿œè·¡ããŠããå Žæãä»ã«ãããã©ããã¯ããããŸããã 誰ããçã®ããŒãºãæã£ãŠãããªããç§ãã¡ã¯ãããæ€èšããŸãã
ã€ãã³ããœãŒã¹ã®æ§ç¯ãè¡ã£ãŠããŸãã ããã¯ããã£ãŒã«ããµããŒããšã³ãžãã¢ã粟éããŠããããšã§ãããéåžžããã€ã¯ããœããã®ããŒã ã®ããã©ãŒãã³ã¹åæã®éèŠãªéšåã§ãã ããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒããªãããã«æ®ããã空çœã解決ããããšããŠããŸãã .NETããŒã ã¯ãé©åãªä»£æ¿ãšããŠEventCountersïŒEventSourceã®äžã«æ§ç¯ïŒãäœæããããã«åãçµãã§ããŸãã ASP.NETããŒã ãEventSourceã«ããã«æè³ããã®ãé ããäž»ãªçç±ã¯ããã°ããã®éãWindows以å€ã®æŠç¥ãã©ããªãããæ確ã§ãªãã£ãããã§ãã EventSourceã* nixãã©ãããã©ãŒã ã§äœ¿çšãããªãå Žåã¯ãå°æ¥ãå¥ã®ãã®ãäœæããããšãé¿ãããã£ãã®ã§ãã ããã¯çä»ããããŸããã
ããã«è¯ãããã¥ã¡ã³ãããããŸãïŒ https ïŒ
ããªãã®ããã«
ãŸããããã¯ããªããäž¡æ¹ãŸãã¯ã©ã¡ãããè¡ãããšãã§ããããã«èãããŸãã ç§ã¯ããªããåãçµãã§ããããšã«ããŸã粟éããŠããªãã®ã§ã以äžã¯ããã€ãã®äžè¬çãªã¢ããã€ã¹ã§ãã
ãŸããããªãã®æ¶è²»è ã誰ã§ããããèããŠãã ããã ããã¯ããªãã®ããã§ããïŒ ïŒperfïŒããã¯ã¢ããªã±ãŒã·ã§ã³éçºè åãã§ããïŒ ïŒãããã°ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°ïŒããã¯ããŒã«ã®äœæè åãã§ããïŒ ããŒã«ã¯äºåŸåæã§ããããããšãã¢ããªå ã§å®è¡ãããŠããŸããïŒ
次ã«ãèšæž¬ããäºå®ã®å Žæã®æ°ãšãæå³ããããšæãããŒã¿ã®çš®é¡ã«ã€ããŠèããŸãã æ¶è²»è ã¯ãã®ããŒã¿ãã©ã®ããã«ç解ãã解éããŸããïŒ åã ã®ããŒã¿ãã€ã³ãã¯æå³ããããŸããããããšãããŒã¿ãéçŽããå¿ èŠããããŸããïŒ