ãžã£ãŒããªã³ã°ã¯ãå£ãããšãã«ã®ã¿èšæ¶ããããã®ã®1ã€ã§ãããããŠãããã¯ãŸã£ããæ¹å€ã§ã¯ãããŸãããéèŠãªã®ã¯ã䞞倪ã¯ããèªäœã§ã¯å²ãããªããšããããšã§ãããããã¯ãããã°ã©ã ãäœã§ãããïŒãŸãã¯å®è¡ããŠãããïŒã«ã€ããŠã®æŽå¯ãæäŸããç§ãã¡ã«ãéã皌ããã®ãå®è¡ãç¶ããã®ã«åœ¹ç«ã¡ãŸããå°èŠæš¡ïŒãŸãã¯éçºäžïŒã§ã¯ãã¡ãã»ãŒãžã衚瀺ããã ãã§å¿ èŠãªæ å ±ãååŸã§ããŸãã
stdout..ããããã忣ã·ã¹ãã ã«ã¢ã¯ã»ã¹ãããšããã«ããããã®ã¡ãã»ãŒãžãéçŽããŠäžå€®ãªããžããªã«éä¿¡ããå¿
èŠããããŸããäžå€®ãªããžããªã§ã¯ãæå€§ã®ã¡ãªãããåŸãããŸããããã»ã¹ãšããŒã«ã«ã¹ãã¬ãŒãžãäžæçãªKubernetesã®ãããªãã©ãããã©ãŒã ã§ã³ã³ãããæ±ã£ãŠããå Žåããã®å¿
èŠæ§ã¯ããã«éèŠã§ãã
ãã°ãåŠçããããã®äœ¿ãæ £ããã¢ãããŒã
ã³ã³ããã®åæãšTwelve-Factorãããã§ã¹ãã®å ¬é以æ¥ãã³ã³ããã«ãã£ãŠçæããããã°ã®åŠçã«ã¯ãç¹å®ã®äžè¬çãªãã¿ãŒã³ã圢æãããŠããŸãã
stdoutãŸãã¯ãžã®åºåã¡ãã»ãŒãžãåŠçããŸãstderrã-
containerdïŒDockerïŒæšæºã¹ããªãŒã ãã³ã³ããå€ã®ãã¡ã€ã«ã«ãªãã€ã¬ã¯ãããŸãã - ãããŠå°Ÿãã©ã¯ãŒããã°ã¯ããããã®ãã¡ã€ã«ãèªã¿èŸŒãïŒããªãã¡ãããããæåŸã®è¡ãååŸïŒããããŒã¿ããŒã¹ã«ããŒã¿ãéä¿¡ããŸãã
人æ°ã®ãããã°ãã©ã¯ãŒããŒfluentdã¯ãCNCFãããžã§ã¯ãïŒã³ã³ããåãªã©ïŒã§ããæéã®çµéãšãšãã«ããã°ã®èªã¿åãã倿ã転éãããã³ã€ã³ããã¯ã¹äœæã®äºå®äžã®æšæºã«ãªããŸãããCloud LoggingïŒä»¥åã®StackdriverïŒãæ¥ç¶ãããGKEã§Kubernetesã¯ã©ã¹ã¿ãŒãäœæãããšãã»ãŒåããã¿ãŒã³ãåŸãããŸãããGoogleã®æµæ¢ãªããªãšãŒã·ã§ã³ããããŸãããªã©ãŒã¯ïŒèšäºã®èè ãåããŠããäŒç€Ÿ-çŽTranslãïŒ ãçŸããã®ã¯ãã®ãã¿ãŒã³ã§ããã
4幎åã«GKEãšããŠæåã«ãµãŒãã¹ãK8ã«ç§»è¡ãå§ããŸããããããŠããµãŒãã¹ãšããŠã®ãã®ã³ã°ãè¶ ãããšãããã®ãã¿ãŒã³ã«åŸããããŒã¯è² è·ã§1ç§ããã15ã2äžè¡ãåŠçã§ããç¬èªã®ãã°éçŽã·ã¹ãã ãäœæããŸããã
ãã®ã¢ãããŒããããŸãæ©èœããçç±ãšã12ãã¡ã¯ã¿ãŒã®ååããã°ãæšæºã¹ããªãŒã ã«åºåããããšãçŽæ¥æšå¥šããçç±ããããŸããå®éã®ãšãããã¢ããªã±ãŒã·ã§ã³ã¯ãã°ã«ãŒãã£ã³ã°ã«ã€ããŠå¿é ããå¿ èŠããªããéçºäžãŸãã¯æ¬çªç°å¢ã§ã³ã³ãããç°¡åã«ãç£èŠå¯èœãïŒç£èŠå¯èœæ§ã«ã€ããŠèª¬æããŠããŸãïŒã«ããŸãããŸãããã®ã³ã°ã·ã¹ãã ãå°ç¡ãã«ãªã£ãå Žåãå°ãªããšããã°ãã¯ã©ã¹ã¿ãŒããŒãã®ãã¹ããã£ã¹ã¯ã«æ®ãå¯èœæ§ããããŸãã
ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ãããŒãªã³ã°ãã°ãCPU䜿çšçã®ç¹ã§æ¯èŒçé«äŸ¡ã«ãªãããšã§ãããã®ã³ã°ã·ã¹ãã ã®æ¬¡ã®æé©åäžã«ãfluentdãæ¬çªç°å¢ã§CPUèŠæ±ã®ã¯ã©ãŒã¿å šäœã®1/8ãæ¶è²»ããããšã倿ããåŸãããã«æ³šæãæãå§ããŸããã
- ããã¯äžéšã¯ã©ã¹ã¿ãŒããããžã«ãããã®ã§ããfluentdã¯ããŒã«ã«ãã¡ã€ã«ã調æŽããããã«åããŒãã§ãã¹ãããïŒK8sèšèªã®DaemonSetãªã©ïŒãã¯ã¢ããã³ã¢ããŒããããããã°ãåŠçããããã«ã³ã¢ã®50ïŒ ãäºçŽããå¿ èŠããããŸãã
- ãªãœãŒã¹ã®å¥ã®éšåã¯ã¯ãŒãåŠçã«è²»ããããŠããããããfluentdã«å²ãåœãŠãŠããŸãã確ãã«ã誰ãé£èªåããããã°ãšã³ããªãã¯ãªãŒã³ã¢ããããæ©äŒãéãã§ããããïŒ
- æ®ãã¯inotifywaitã«éããããã£ã¹ã¯äžã®ãã¡ã€ã«ãç£èŠããèªã¿åããåŠçãã远跡ããŸãã
ãã¹ãŠã®è²»çšãã©ãããããç¥ãããã£ãã®ã§ããfluentdã«ãã°ãéä¿¡ããæ¹æ³ã¯ä»ã«ããããŸããããšãã°ãforward-portã䜿çšã§ããŸãïŒããã¯
forwardãsource-ãCaãPereviãã®ã¿ã€ãã®äœ¿çšã«é¢ãããã®ã§ãïŒãå®ããªãã§ããããïŒ
å®ç¿
ããŒãªã³ã°ã䜿çšããŠãã°è¡ããã§ããããã³ã¹ããåé¢ããããã«ãå°ããªãã¹ããããããŸãšããŸãããæ¬¡ã®ã³ã³ããŒãã³ããå«ãŸããŠããŸãã
- ã¡ãã»ãŒãžã®é »åºŠãšãµã€ãºãæ§æå¯èœãªç¹å®ã®æ°ã®ãã°ã©ã€ã¿ãŒãäœæããããã®Pythonããã°ã©ã ã
- å®è¡äžã®dockercomposeã®ãã¡ã€ã«ïŒ
- ãã°ã®åŠçã«å ªèœã§ã
- æµæ¢ãªã³ã³ãããç£èŠããããã®cAdvisorã
- cAdvisorã¡ããªãã¯ãåéããããã®Prometheusã
- Prometheusã§ã®ããŒã¿èŠèŠåã®ããã®Grafanaã
ãã®å³ã«é¢ããæ³šèšïŒ
- ãã°ã©ã€ã¿ãŒã¯ãçµ±äžãããJSON圢åŒïŒcontainerdã䜿çšïŒã§ã¡ãã»ãŒãžãçæãããã¡ã€ã«ã«æžã蟌ãããæµæ¢ãªè»¢éããŒãã«è»¢éããããšãã§ããŸãã
- ãã¡ã€ã«ã«æžã蟌ããšãã¯ãã¯ã©ã¹ã䜿çš
RotatingFileHandlerããŠã¯ã©ã¹ã¿ãŒã®ç¶æ ãããé©åã«ã·ãã¥ã¬ãŒãããŸãã - Fluentdã¯ããã¹ãŠã®ã¬ã³ãŒãããã¹ããŒãã
nullãéåžžã®åŒãåŠçããããã¬ã³ãŒãã®ã¿ã°ããã§ãã¯ãããããªãããã«æ§æãããŠããŸãããããã£ãŠã圌ã®äž»ãªä»äºã¯ãã°è¡ãååŸããããšã§ãã - , Prometheus cAdvisor, fluentd.
æ¯èŒã®ããã®ãã©ã¡ãŒã¿ã®éžæã¯ãããªã䞻芳çã«å®è¡ãããŸãããã¯ã©ã¹ã¿ããããŒãã«ãã£ãŠçæããããã°ã®éãèŠç©ããããã®å¥ã®ãŠãŒãã£ãªãã£ãäœæããŸãããåœç¶ã®ããšãªãããããã¯å€§ããç°ãªããŸãã1ç§ãããæ°åè¡ããæãããžãŒãªããŒãã®500è¡ä»¥äžãŸã§ã§ãã
ããã¯å¥ã®åé¡ã®åå ã§ããDaemonSetã䜿çšããå Žåã¯ãã¯ã©ã¹ã¿ãŒå ã§æãããžãŒãªããŒããåŠçããããã«fluentdãæ§æããå¿ èŠããããŸããååãšããŠãã¡ã€ã³ã®ãã°ãžã§ãã¬ãŒã¿ã«é©åãªã©ãã«ãå²ãåœãŠããœãããªéèŠªåæ§ã«ãŒã«ã䜿çšããŠããããåçã«åæ£ããããšã§ãäžåè¡¡ãåé¿ã§ããŸãããããã¯ãã®èšäºã®ç¯å²ãè¶ ããŠããŸããåœåããã°ã®ãé ä¿¡ãã®ããŸããŸãªã¡ã«ããºã ãæ¯èŒããããšãèšç»ããŠããŸãã1ã10åã®ãã°ã©ã€ã¿ãŒã䜿çšããŠãæ¯ç§500/1000è¡ã®è² è·ã§ã
詊éšçµæ
åæã®ãã¹ãã§ã¯ããã°ãã¡ã€ã«ã®æ°ã«é¢ä¿ãªãã1ç§ãããã®è¡æ°ãããŒãªã³ã°ã®CPU䜿çšçã®äž»ãªåå ã§ããããšã瀺ãããŸããã以äžã®2ã€ã®ã°ã©ãã¯ã1ã€ã®ãã°ã©ã€ã¿ãŒãš10ããã®1000 p / sã§ã®è² è·ãæ¯èŒããŠããŸããã»ãŒåãã§ããããšã
ããããŸããå°ããªéžè±ïŒå¯Ÿå¿ããã°ã©ããããã«å«ããŸããã§ããããç§ã®ãã·ã³ã§ã¯ã10åã®ãã°ããã»ã¹ã倿ããŸããã 1ç§ããã100è¡ãæžã蟌ããšã1ç§ããã1000è¡ãæžã蟌ãåäžã®ããã»ã¹ãããç·ã¹ã«ãŒããããé«ããªããŸããããã¯ç§ã®ã³ãŒãã®è©³çްãåå ã§ããå¯èœæ§ããããŸã-ç§ã¯ãã®åé¡ãæå³çã«æãäžããŸããã§ããã
ãããã«ãããéããŠãããã°ãã¡ã€ã«ã®æ°ãéèŠãªèŠçŽ ã«ãªããšäºæ³ããŸããããå®éã«ã¯çµæã«åœ±é¿ãäžããªãããšãããããŸããããã1ã€ã®ãã®ãããªéèŠã§ãªã倿°ã¯ãæååã®é·ãã§ããäžèšã®ãã¹ãã§ã¯ã100æåã®æšæºæååé·ã䜿çšããŸããã10åé·ãè¡ã§å®è¡ããŸãããããã¹ãäžã®ããã»ããµã®è² è·ïŒãã¹ãŠã®å Žåã§180ç§ïŒã«ç®ç«ã£ã圱é¿ã¯ãããŸããã§ããã
äžèšãèæ ®ããŠã1ã€ã®ããã»ã¹ãå éšã®éçã«éããŠããããã2人ã®ã©ã€ã¿ãŒããã¹ãããããšã«ããŸãããäžæ¹ã§ããã以äžã®ããã»ã¹ãå¿ èŠãããŸããã§ãããæ¯ç§500è¡ãš1000è¡ã§ãã¹ããè¡ããŸãããæ¬¡ã®äžé£ã®ã°ã©ãã¯ãããŒãªã³ã°ãã¡ã€ã«ãšãã©ã¯ãŒãããŒãã®äž¡æ¹ã®çµæã瀺ããŠããŸãã
çµè«
1é±éã®éã«ãç§ã¯ãããã®ãã¹ããããŸããŸãªæ¹æ³ã§å®è¡ãã2ã€ã®éèŠãªçµè«ã«è³ããŸããã
- ãã©ã¯ãŒããœã±ããã䜿çšããæ¹æ³ã¯ãåããµã€ãºã®ãã°ãã¡ã€ã«ããè¡ãèªã¿åãããããäžè²«ããŠ30ã50ïŒ å°ãªãåŠçèœåãæ¶è²»ããŸããïŒèгå¯ãããéãã®å°ãªããšãäžéšã«ã€ããŠïŒèãããã1ã€ã®èª¬æã¯ãã¡ãã»ãŒãžããã¯å ã®ããŒã¿ãã·ãªã¢ã«åããããšã«ãããã®ã§ãã - fluentd. fluentd , messagepack. , Python- forward-, . , : , fluentd, .
- , CPU , . tailing', forward-. , (1000 writer' 10 writer'), forward-:
ãããã®çµæã¯ããã¹ãŠã®ãã°ããã¡ã€ã«ã§ã¯ãªããœã±ããã«æžã蟌ãå¿ èŠãããããšãæå³ããŸããïŒæããã«ãããã¯ããã»ã©åçŽã§ã¯ãããŸãã...
ãã°ãåéããæ¹æ³ãç°¡åã«å€æŽã§ããã°ãæ¢åã®åé¡ã®ã»ãšãã©ã¯åé¡ã§ã¯ãããŸããããã°
stdoutãåºåãããšãéçºäžã®ã³ã³ããã®ç£èŠãšæäœãã¯ããã«ç°¡åã«ãªããŸããã³ã³ããã¹ãã«å¿ããŠãäž¡æ¹ã®æ¹æ³ã§ãã°ãåºåãããšãè€éãã倧å¹
ã«å¢å ããŸããåæ§ã«ãéçºäžã«ãã°ãã¬ã³ããªã³ã°ããããã«fluentdãæ§æãããšïŒããšãã°ãåºåãã©ã°ã€ã³ã䜿çšããŠstdoutïŒããã°ãå¢å ããŸãã
ããããããããã®çµæã®ããå®éçãªè§£éã¯ãããŒããæ¡å€§ããããšãæšå¥šããã§ãããã..ã fluentdã¯ãæãããžãŒãªïŒæããã€ãºã®å€ãïŒããŒãã§åäœããããã«æ§æããå¿ èŠããããããããŒãã®æ°ãæžããã®ãè«ççã§ããã¡ã€ã³ã®ãã°ãžã§ãã¬ãŒã¿ãŒãåçã«åæ£ããéèŠªåæ§ã¡ã«ããºã ãšçµã¿åããããšãåªããæŠç¥ã«ãªããŸããæ®å¿µãªãããããŒãã®ãµã€ãºå€æŽã«ã¯ããã®ã³ã°ã·ã¹ãã ã®ããŒãºãã¯ããã«è¶ ããå€ãã®ãã¥ã¢ã³ã¹ãšãã¬ãŒããªããå«ãŸããŸãã
èŠæš¡ãæããã«éèŠã§ã..ãå°èŠæš¡ã§ã¯ãäžäŸ¿ããšè¿œå ãããè€éãã¯ããããéçŸå®çã§ããããã«ãéåžžãããå·®ãè¿«ã£ãåé¡ããããŸããå§ããã°ããã§ããšã³ãžãã¢ãªã³ã°ããã»ã¹ããããã¬ãã·ã¥ãã€ã³ããã®åããæ¶ããŠããªãå Žåã¯ãéçºè ãå§åããããšãªãããœã±ããæ¹åŒã䜿çšããããšã§ããã°åœ¢åŒãäºåã«æšæºåããã³ã¹ããåæžã§ããŸãã
å€§èŠæš¡ãªãããžã§ã¯ãã§äœæ¥ãã人ã«ãšã£ãŠããã®èšäºã®çµè«ã¯äžé©åã§ããGoogleã®ãããªäŒæ¥ã¯ãïŒç§ã®ãã®ãšæ¯èŒããŠïŒã¯ããã«åŸ¹åºçã§ç¥èéçŽçãªåé¡ã®åæãè¡ã£ãŠããããã§ãããã®èŠæš¡ã§ã¯ãæããã«ãç¬èªã®ã¯ã©ã¹ã¿ãŒãå±éããŠããããã®ã³ã°ãã€ãã©ã€ã³ã䜿çšããŠå¿ èŠãªããšãå®è¡ã§ããŸãïŒã€ãŸããäž¡æ¹ã®ã¢ãããŒããå©çšã§ããŸãïŒã
çµè«ãšããŠãããã€ãã®è³ªåãäºæ³ããäºåã«åçãããŠãã ããããŸããããã®èšäºã¯æ¬åœã«æµæ¢ã§ã¯ãããŸãããïŒãããŠãããã¯äžè¬çã«ã¯ãã«ããã¹ãšäœã®é¢ä¿ãããã®ã§ããããïŒã..ããã®è³ªåã®äž¡åŽãžã®çãã¯ãããŸããããããããã§ãã
- ç§ã®äžè¬çãªçè§£ãšçµéšã§ã¯ããã®ããŒã«ã¯ããã£ã¹ã¯I / Oãå€ãç¶æ³ã§Linuxã§ãã¡ã€ã«ãããŒãªã³ã°ãããšãã«ããçºçããŸããLogstashã®ãããªå¥ã®ãã°ãã©ã¯ãŒããŒã§ãã¹ããè¡ã£ãããšã¯ãããŸããããçµæã確èªããã®ã¯è峿·±ãããšã§ãã
- Kubernetes, CPU, , . , , . , Kubernetes, tailing' Kubernetes-as-a-Service.
æåŸã«ãå¥ã®æ¶è²»å¯èœãªãªãœãŒã¹ã§ããã¡ã¢ãªã«ã€ããŠå°ã説æããŸããæåã¯ããããèšäºã«å«ããã€ããã§ãããç¹å¥ã«çšæãããããã·ã¥ããŒãã«ãfluentdã®ã¡ã¢ãªäœ¿çšéã衚瀺ãããŸããããããçµå±ããã®èŠçŽ ã¯éèŠã§ã¯ãªãããšã倿ããŸããããã¹ãçµæã«ãããšã䜿çšãããã¡ã¢ãªã®æå€§éã¯85 MBãè¶ ãããåã ã®ãã¹ãéã®å·®ã10MBãè¶ ããããšã¯ãã£ãã«ãããŸããããã®ããªãäœãã¡ã¢ãªæ¶è²»ã¯ãæããã«ããããã¡ãªã³ã°ãããåºåãã©ã°ã€ã³ã䜿çšããŠããªããšããäºå®ã«ãããã®ã§ããããã«éèŠãªããšã«ãäž¡æ¹ã®æ¹æ³ã§ã»ãŒåãã§ããããšã倿ããŸããããããŠãèšäºã¯ãã§ã«ããªã¥ãŒã ããããããŠããŸãã...
ãã詳现ãªãã¹ããè¡ãããå Žåã¯ã調ã¹ãããšãã§ãããã³ãŒããŒãããã£ãšããããããããšã«æ³šæããŠãã ãããããšãã°ãfluentdãã»ãšãã©ã®æéãè²»ãããŠããããã»ããµã®ç¶æ ãšã·ã¹ãã åŒã³åºããèŠã€ããããšãã§ããŸããããããè¡ãã«ã¯ãé©åãªã©ãããŒãäœæããå¿ èŠããããŸãã
翻蚳è ããã®PS
ç§ãã¡ã®ããã°ãèªãã§ãã ããïŒ