- å§ããŸãããã䟿å©ãªãã®ã³ã°ãšãã¢ããªã±ãŒã·ã§ã³ãšãã®ã©ã€ããµã€ã¯ã«ã䜿ããããããããã«å±éã§ãããã®ã³ã°ã«é¢ããã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠèª¬æããŸãã
ç§ãã¡ã¯äœãããŸããïŒå°ããªã¢ããªã±ãŒã·ã§ã³ãã€ãŸãã¹ã¿ãŒãã¢ãããæ§ç¯ããŸããæ¬¡ã«ãåºæ¬çãªãã®ã³ã°ãå®è£ ããŸããããã¯ã¬ããŒãã®ããäžéšã§ãããPythonãããã«æäŸãããã®ã§ãããããŠæå€§ã®éšåã¯ããããã°ãããŒã«ã¢ãŠããããã³ãããã解決ããããã®ããŒã«ã®éã«çºçããå žåçãªåé¡ãåæããããšã§ãã
å°ããªå 責äºé ïŒãã³ããã±ãŒã«ãªã©ã®åèªã䜿çšããŸãã説æãããŠãã ãããããã³ãã«ãã¯ããããyandexã¹ã©ã³ã°ã§ãããAPIãhttpãgRPC APIããŸãã¯APUããåã®ãã®ä»ã®æåã®çµã¿åããã瀺ããŸããããã±ãŒã«ãã¯ãç§ãã©ãããããã§éçºãããšãã§ããç§ãã³ã³ãããŒã«ããŠããªããã¹ãŠã®èšèã«ã€ããŠè©±ããããã§ãã
æžåºã¢ããªã±ãŒã·ã§ã³
ã¯ãããŸããããç§ãã¡ã®ã¹ã¿ãŒãã¢ããã¯æžåºã§ãããã®ã¢ããªã±ãŒã·ã§ã³ã®äž»ãªæ©èœã¯ãæ¬ã販ââ売ããããšã§ãããããç§ãã¡ãããããããšã®ãã¹ãŠã§ããããããå°ãè©°ããŸããã¢ããªã±ãŒã·ã§ã³ã¯Flaskã§äœæãããŸãããã¹ãŠã®ã³ãŒãã¹ããããããã¹ãŠã®ããŒã«ã¯æ±çšã§ãããPythonããæœè±¡åãããŠãããããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããŸããããããç§ãã¡ã®è©±ã§ã¯ãããã¯ãã©ã¹ã³ã«ãªããŸãã
ãã£ã©ã¯ã¿ãŒïŒç§ãéçºè ããããŒãžã£ãŒããããŠç§ã®ææã®ååãšã©ã¹ããå¶ç¶ã®äžèŽã§ãã
æ§é ã«ã€ããŠå°ãã話ããŸããããããã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã¢ããªã±ãŒã·ã§ã³ã§ããæåã®ãµãŒãã¹ã¯Booksã§ããããã¯ãæ¬ã®ã¡ã¿ããŒã¿ãåããæ¬ã®ã¹ãã¬ãŒãžã§ãã PostgreSQLããŒã¿ããŒã¹ã䜿çšããŠããŸãã 2çªç®ã®ãã€ã¯ããµãŒãã¹ã¯ããŠãŒã¶ãŒã®æ³šæã«é¢ããã¡ã¿ããŒã¿ãæ ŒçŽããé ä¿¡ãã€ã¯ããµãŒãã¹ã§ãããã£ããããã¯ããã£ããããã®ããã¯ãšã³ãã§ããããã³ããšã³ãã¯ãããŸãããã¬ããŒãã§ã¯å¿ èŠãããŸãããå é£ã¯ãæ¬ãµãŒãã¹ãšé éãµãŒãã¹ããã®èŠæ±ãããŒã¿ãéçŽããŸãã
ãããã®ãµãŒãã¹ã®ãã³ãã«ã§ããAPIBooksã®ã³ãŒããç°¡åã«ç޹ä»ããŸãããã®ãã³ãã«ã¯ãããŒã¿ããŒã¹ããããŒã¿ãååŸããŠã·ãªã¢ã«åããJSONã«å€æããŠè¿ããŸãã
ããã«é²ãã§ã¿ãŸããããé éãµãŒãã¹ããã³ãã«ã¯ãŸã£ããåãã§ããããŒã¿ããŒã¹ããããŒã¿ãååŸããã·ãªã¢ã«åããŠéä¿¡ããŸãã
ãããŠæåŸã®ããã¯ãã£ããããããã§ããã³ãŒããå°ãç°ãªããŸãããã£ãããããã³ãã«ã¯ãé ä¿¡ãµãŒãã¹ãšããã¯ãµãŒãã¹ããã®èŠæ±ããŒã¿ãåŠçããå¿çãéçŽããŠããŠãŒã¶ãŒã«æ³šæãæž¡ããŸãããã¹ãŠãã¢ããªã±ãŒã·ã§ã³ã®æ§é ãããã«çè§£ããŸããã
ã¢ããªã±ãŒã·ã§ã³ã§ã®åºæ¬çãªãã®ã³ã°
ããã§ã¯ãç§ãã¡ãèŠãåºæ¬çãªãã®ã³ã°ã«ã€ããŠè©±ããŸããããçšèªããå§ããŸãããã
Pythonã¯ç§ãã¡ã«äœãäžããŸããïŒ 4ã€ã®åºæ¬çãªäž»èŠãšã³ãã£ãã£ïŒ
-Loggerãã³ãŒãã«ãã°ã€ã³ããããã®ãšã³ããªãã€ã³ããããçš®ã®ãã¬ãŒã䜿çšããlogging.INFOãèšè¿°ããŸããããã ãã§ããããªãã®ã³ãŒãã¯ãã¡ãã»ãŒãžãã©ãã«è¡ããæ¬¡ã«äœãèµ·ãã£ãã®ãã«ã€ããŠäœãç¥ããŸããã Handlerãšã³ãã£ãã£ã¯ãã§ã«ãããæ åœããŠããŸãã
-ãã³ãã©ãŒã¯ã¡ãã»ãŒãžãåŠçããéä¿¡å ãæ±ºå®ããŸããæšæºåºåããã¡ã€ã«ããŸãã¯ä»ã®äººã®ã¡ãŒã«ã§ãã
-ãã£ã«ã¿ãŒã¯ã2ã€ã®è£å©ãšã³ãã£ãã£ã®1ã€ã§ãããã°ããã¡ãã»ãŒãžãåé€ããŸãããã1ã€ã®äžè¬çãªäœ¿çšäŸã¯ãããŒã¿ã®è©°ã蟌ã¿ã§ããããšãã°ãæçš¿ã«å±æ§ã远å ããå¿ èŠããããŸãããã£ã«ã¿ã¯ããã«ã圹ç«ã¡ãŸãã
--Formatterã¯ãã¡ãã»ãŒãžãç®çã®åœ¢åŒã«ããŸãã
ããã§çšèªãçµäºããŸãããåºæ¬ã¯ã©ã¹ã䜿çšããŠãPythonã§çŽæ¥ãã®ã³ã°ã«æ»ãããšã¯ãããŸããããã ããããã¯3ã€ã®ãµãŒãã¹ãã¹ãŠã«å±éãããã¢ããªã±ãŒã·ã§ã³ã®æ§æäŸã§ããç§ãã¡ã«ãšã£ãŠ2ã€ã®äž»èŠãªéèŠãªãããã¯ããããŸãïŒãã©ãŒããã¿ãŒãšãã³ãã©ãŒã§ãããã©ãŒããã¿ãŒã®å Žåãã¡ãã»ãŒãžãã©ã®ããã«è¡šç€ºããããã«ã€ããŠã®ãã³ãã¬ãŒãã§ããäŸãããã«ãããŸãã
ãã³ãã©ãŒã§ã¯ãlogging.StreamHandlerã䜿çšãããŠããããšãããããŸããã€ãŸãããã¹ãŠã®ãã°ãæšæºåºåã«ãã³ãããŸãã以äžã§ããããã§å®äºã§ãã
åé¡1.ãã°ãæ£åšããŠãã
åé¡ã«ç§»ããŸãããŸããæåã®åé¡ã¯ããã°ãæ£åšããŠããããšã§ãã
å°ãã³ã³ããã¹ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããã£ã³ãã£ãŒã¯ãã§ã«æºåãã§ããŠããŸããç§ãã¡ã¯ããã§ãéã皌ãããšãã§ããŸããçŸåšãæ¬çªç°å¢ã«å±éããŠããŸãããã¡ãããè€æ°ã®ãµãŒããŒããããŸããæ§ãããªèŠç©ããã«ãããšãæãè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããµãŒãã¹ããšã«çŽ3ã4å°ã®è»ãå¿ èŠã§ãã
ããŠã質åã§ãããããŒãžã£ãŒãé§ãå¯ã£ãŠããŠããããã§å£ãããå©ããŠïŒããšå°ããŸããããªãã¯èµ°ã£ãŠããããã¹ãŠãããªãã®ããã«èšé²ãããŸããããã¯çŽ æŽãããã§ããããªãã¯æåã®ã¿ã€ãã©ã€ã¿ãŒã«è¡ããŸããèŠãŠãã ãã-ããªãã®èŠæ±ã®ããã«ããã«ã¯äœããããŸããã 2å°ç®ã®è»ã«è¡ããŸã-äœããããŸãããçã ãããã¯æªãã§ããããã¯ã©ãã«ãããŠè§£æ±ºãããªããã°ãªããŸããã
èŠããçµæã圢åŒåããŠã¿ãŸãããããã°ã1ãæã«ãŸãšããããããã¯åçŽãªèŠä»¶ã§ããå°ãã¯ãŒã«ãªã®ã¯ããã°ãæ€çŽ¢ããããšããããšã§ããã€ãŸããã¯ããããã¯1ã€ã®å Žæã«ããããªããã³ã°ããæ¹æ³ãç¥ã£ãŠããŸãããããã€ãã®ããŒã«ãåçŽãªã°ã©ã以å€ã®ã¯ãŒã«ãªæ©èœãããã°ã¯ãŒã«ã§ãã
ãããŠãç§ã¯æžããããããŸãããã³ãŒããæžãã®ã倧奜ããªãšã©ã¹ãã§ããç§ã¯ããã«ã€ããŠè©±ããŠããŸãããç§ã¯ããã«è£œåãäœããŸãããã€ãŸãã远å ã®ã³ãŒããæžãããŠã1ã€ãŸãã¯2ã€ã®ãã¡ã€ã«ãè¡ã§åŠçããã ãã§ãã
䜿çšã§ãããœãªã¥ãŒã·ã§ã³ã¯Elasticsearchã§ãããããäžããŠã¿ãŸãããã Elasticsearchã®å©ç¹ã¯äœã§ããïŒããã¯ãã°æ€çŽ¢ã€ã³ã¿ãŒãã§ã€ã¹ã§ããç®±ããåºããŠããã«ã€ã³ã¿ãŒãã§ãŒã¹ããããŸããããã¯ããªãã®ããã®ã³ã³ãœãŒã«ã§ã¯ãããŸããããå¯äžã®ä¿ç®¡å Žæã§ããã€ãŸããäž»ãªèŠä»¶ãæºãããŠããŸãããµãŒããŒã«è¡ãå¿ èŠã¯ãããŸããã
ç§ãã¡ã®å Žåãããã¯ããªãåçŽãªçµ±åã§ãããæè¿ã®ãªãªãŒã¹ã§ã¯ãElasticsearchã«ã¯ã»ãšãã©ã®çµ±åãæ åœããæ°ãããšãŒãžã§ã³ãããããŸãã圌ãã¯ããã§åœŒãèªèº«ã®çµ±åãèŠãŸããããšãŠããã£ããããç§ã¯ä»¥åã«è¬æŒãæžããåãããã«ç°¡åã«filebeatã䜿çšããŸããããã°ã®å Žåã¯ç°¡åã§ãã
Elasticsearchã«ã€ããŠå°ãã宣äŒããããããŸããããå€ãã®è¿œå æ©èœããããŸããããšãã°ããã°ãããã®ã¯ãç®±ããåºããŠããã«ãã«ããã¹ãã®ãã°æ€çŽ¢ãè¡ãããšã§ãããšãŠããã£ãããã§ãããä»ã®ãšããããããã®å©ç¹ã¯ç§ãã¡ã«ãšã£ãŠååã§ããåºå®ããŸãã
ãŸãããã°ãElasticsearchã«éä¿¡ãããšãŒãžã§ã³ãããããã€ããå¿ èŠããããŸãã Elasticsearchã«ã¢ã«ãŠã³ããç»é²ããŠãããdocker-composeã«è¿œå ããŸãã docker-composeããªãå Žåã¯ããã³ãã«ãŸãã¯ã·ã¹ãã ã§ã¬ã€ãºã§ããŸãããã®å Žåãæ¬¡ã®ã³ãŒããããã¯ã远å ãããdocker-composeã«çµ±åãããŸããããã§ããµãŒãã¹ãæ§æãããŸããããããŠãvolumesãããã¯ã«filebeat.ymlæ§æãã¡ã€ã«ã衚瀺ãããŸãã
filebeat.ymlã®äŸã次ã«ç€ºããŸããããã§ã¯ãè¿ãã§å転ããŠããããã«ãŒã³ã³ããã®ãã°ã®èªåæ€çŽ¢ãèšå®ããŸããããããã®ãã°ã®éžæã¯ã«ã¹ã¿ãã€ãºãããŠããŸããæ¡ä»¶ã«ãã£ãŠãã³ã³ããã«ã©ãã«ãèšå®ããŠãã³ã°ã¢ããããããšãã§ããŸããããã«å¿ããŠããã°ã¯ç¹å®ã®ã³ã³ããããã®ã¿éä¿¡ãããŸããããã»ããµïŒadd_docker_metadataãããã¯ã¯åçŽã§ãã dockerã³ã³ããã¹ãã®ãã°ã«é¢ããããå°ãæ å ±ããã°ã«è¿œå ããŸãããªãã·ã§ã³ã§ããããã£ãããã§ãã
äœããããŸããïŒãããç§ãã¡ãæžãããã¹ãŠããã¹ãŠã®ã³ãŒãããšãŠãã¯ãŒã«ã§ããåæã«ããã¹ãŠã®ãã°ã1ãæã«ãŸãšããã€ã³ã¿ãŒãã§ã€ã¹ããããŸãããã°ãæ€çŽ¢ã§ããŸãããããæ€çŽ¢ããŒã§ãããããã¯é éãããŸãããŸããã©ã€ãã§ãªã³ã«ããŠãã¹ããªãŒã ãã€ã³ã¿ãŒãã§ã€ã¹ã®ãã°ã«é£ã¶ããã«ããããšãã§ããŸãã
ããã§ç§èªèº«ãå°ããã§ãããïŒãªããã©ããã£ãŠäœãã座å±ãããã®ã§ããïŒãã°æ€çŽ¢ãšã¯äœã§ãããããã§äœãã§ããŸããïŒ
ã¯ãããã®ã¢ãããŒãã®ç®±ããåºããŠãããã¹ããã°ãããå Žåãå°ããªã®ã£ã°ããããŸããããšãã°ãã¡ãã»ãŒãžïŒãŠãŒã¶ãŒãªã©ã®ããã¹ãã§ãªã¯ãšã¹ããèšå®ã§ããŸããããã«ãããusersãµãã¹ããªã³ã°ãæã€ãã¹ãŠã®ãã°ãåºåãããŸããã¢ã¹ã¿ãªã¹ã¯ãä»ã®ã»ãšãã©ã®unixã¯ã€ã«ãã«ãŒãã䜿çšã§ããŸããããããããã ãã§ã¯äžååãªããã§ããã§ããã ãæ©ãNginxã§ãŠã©ãŒã ã¢ããã§ããããã«ããã£ãšé£ããããããšæããŸãã
Elasticsearchããå°ãé¢ããŠãElasticsearchã§ã¯ãªããå¥ã®ã¢ãããŒãã§ãããå®è¡ããŠã¿ãŸããããæ§é ãã°ã«ã€ããŠèããŠã¿ãŸããããããã¯ãåãã°ãšã³ããªãåãªãããã¹ãè¡ã§ã¯ãªãããµãŒãããŒãã£ã·ã¹ãã ã®ãããããæ¢è£œã®ãªããžã§ã¯ããååŸããããã«ã·ãªã¢ã«åã§ãã屿§ãæã€ã·ãªã¢ã«åããããªããžã§ã¯ãã§ããå Žåã§ãã
ããã®å©ç¹ã¯äœã§ããïŒçµ±äžãããããŒã¿åœ¢åŒã§ããã¯ãããªããžã§ã¯ãã¯ç°ãªã屿§ãæã€ããšãã§ããŸãããå€éšã·ã¹ãã ã¯JSONãèªã¿åããããçš®ã®ãªããžã§ã¯ããåãåãããšãã§ããŸãã
ããçš®ã®ã¿ã€ãã³ã°ãããã«ãããä»ã®ã·ã¹ãã ãšã®çµ±åãç°¡çŽ åãããŸãããã·ãªã¢ã©ã€ã¶ãŒãäœæããå¿ èŠããããŸããããããŠããã·ãªã¢ã©ã€ã¶ãŒã ããå¥ã®ãã€ã³ãã§ããã¢ããªã±ãŒã·ã§ã³ã§ç¡äœæ³ãªããã¹ããæžãå¿ èŠã¯ãããŸãããäŸïŒããŠãŒã¶ãŒã¯ããã®ãããªIDã¹ãã·ã£ãªã¹ããããã®ãããªæ³šæã§æã£ãŠããŸãããããããŠãããã¯ãã¹ãŠæ¯åæžãå¿ èŠããããŸãã
æ°ã«ãªããŸããã ããªã¯ãšã¹ããå±ããŸããããšæžããããããã«ïŒããŸããŸãããŸããŸãããŸããŸãããéåžžã«ã·ã³ãã«ã§ãéåžžã«ITã¹ã¿ã€ã«ã
次ãžç§»ããŸããããåæããŸããããJSON圢åŒã§ãã°ã€ã³ããŸããããã¯åçŽãªåœ¢åŒã§ãã Elasticsearchã¯ããã«ãµããŒããããŸããfilebeatã¯ã·ãªã¢ã«åããŠãã¡ã€ãªã³ã°ã詊ã¿ãŸããããã»ã©é£ããããšã§ã¯ãããŸããããŸããèšå®ãã¡ã€ã«ãpythonjsonloggerã©ã€ãã©ãªããJSONFormatterãã©ãŒããã¿ãããã¯ã«è¿œå ããŸããããã«æ§æãä¿åããŸããããã¯ãã·ã¹ãã å ã®å¥ã®å Žæã§ããå¯èœæ§ããããŸããæ¬¡ã«ãformat屿§ã§ããªããžã§ã¯ãã«è¿œå ãã屿§ãæž¡ããŸãã
以äžã®ãããã¯ã¯ãfilebeat.ymlã«è¿œå ãããæ§æãããã¯ã§ããç®±ããåºããŠãJSONãã°ãè§£æããããã®filebeatã®ã€ã³ã¿ãŒãã§ãŒã¹ããããŸãããšãŠããã£ããããããããã¹ãŠã§ãããã®ããã«ä»ã«äœãæžãå¿ èŠã¯ãããŸããããããŠä»ãããªãã®ãã°ã¯ãªããžã§ã¯ãã®ããã«èŠããŸãã
Elasticsearchã§äœãååŸããŸãããïŒã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ããã°ãåå¥ã®å±æ§ãæã€ãªããžã§ã¯ãã«ãªã£ãŠããããšãããã«ããããŸããããã«ãããæ€çŽ¢ããã£ã«ã¿ãŒã®äœæãè€éãªã¯ãšãªã®å®è¡ãè¡ãããšãã§ããŸãã
ãŸãšããŸããããããã§ããã°ã«æ§é ãã§ããŸããããããã¯äœ¿ãããããã€ã³ããªãžã§ã³ããªã¯ãšãªãæžãããã«äœ¿çšã§ããŸãã Elasticsearchã¯ãããããã¹ãŠã®å±æ§ãè§£æããããããã®æ§é ãèªèããŠããŸãããŸããElasticsearchã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ããkibanaã§ã¯ãElasticsearchãæäŸããç¹æ®ãªã¯ãšãªèšèªã䜿çšããŠãã®ãããªãã°ããã£ã«ã¿ãªã³ã°ã§ããŸãã
ãããŠãããã¯ãããªã³ã°ãããç°¡åã§ããGrepã¯ããªãè€éã§ã¯ãŒã«ãªèšèªãæã£ãŠããŸããæžãã¹ãããšããããããããŸãããããã§ã¯å€ãã®ããšãç°¡åã«ãªããŸããããã§æŽçããŸããã
åé¡2.ãã¬ãŒã
次ã®åé¡ã¯ãã¬ãŒãã§ãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã§ã¯ããã€ã§ãã©ãã§ããã¬ãŒãããããŸãã
ããã«å°ãã³ã³ããã¹ãããããŸããç§ã¯ããªãã«è©±ãããŸããç§ãã¡ã®ãããžã§ã¯ãã®äž»äººå ¬ã§ãããããŒãžã£ãŒãç§ã«é§ãå¯ã£ãŠæ¥ãŠãããèšããŸããããŒãã£ãæã£ãŠãå©ããŠïŒã
ãŸã äœãç¥ããŸãããElasticsearchã®ãã°ã«ã¢ã¯ã»ã¹ããŸããããããå®éã«äœãèµ·ãã£ãã®ããã話ãããŸãããã
Erastãæ©èœã远å ããŸãããæ¬ã§ã¯ãäœè ã®IDã§ã¯ãªãã圌ã®ååãã€ã³ã¿ãŒãã§ã€ã¹ã«è¡šç€ºãããããã«ãªããŸããããšãŠããã£ããããåœŒã¯æ¬¡ã®ã³ãŒãã§ãããè¡ããŸãããå°ããªã³ãŒãã§ãè€éãªããšã¯äœããããŸãããäœãããŸããããªãå¯èœæ§ããããŸããïŒ
SQLAlchemyãä»ã®ORMã§ããããè¡ãããšã¯ã§ããªããšãèšç·Žãããç®ã§èšãããšãã§ããŸããã«ãŒãå ã®å°ããªãµãã¯ãšãªã§ããŒã¿ããŒã¹ã«ç§»åããªãããã«ãããªãã£ãã·ã¥ãªã©ãå®è¡ããå¿ èŠããããŸããäžå¿«ãªåé¡ããããªééãã¯å šç¶ã§ããªãããã§ãã
èšã£ãŠãããã©ãç§ã¯çµéšããããŸãããDjangoã䜿çšãããããžã§ã¯ãã«ã«ã¹ã¿ã ã®ããªãã£ãã·ã¥ãå®è£ ããŸããããã¹ãŠãäœå¹Žãã®éããŸããã£ããããæç¹ã§ãErastãšç§ã¯æ±ºããŸããïŒæä»£ã«é ããã«ã€ããŠãããŸããããDjangoãæŽæ°ããŠãã ãããåœç¶ãDjangoã¯ã«ã¹ã¿ã ãã£ãã·ã¥ã«ã€ããŠäœãç¥ãããã€ã³ã¿ãŒãã§ã€ã¹ã倿ŽãããŸãããããªã«ã·ã¥ã¯éãã«èœã¡ããããã¯ãã¹ãã§ã¯æ€åºãããŸããã§ãããåãåé¡ã§ãæãŸããã®ã¯ãã£ãšé£ããã£ãã§ãã
ã©ãããã®ïŒã©ãããã°åé¡ã®è§£æ±ºãæäŒãããšãã§ããŸããïŒ
ãã¬ãŒããèŠã€ããåé¡ã解決ãå§ããåã«ç§ãããããšãã話ãããŸãããã
ç§ãæåã«ããããšã¯Elasticsearchã«è¡ãããšã§ããç§ãã¡ã¯ãã§ã«ãããæã£ãŠããŸããããã¯å©ãã«ãªããŸãããµãŒããŒã®åšããèµ°ãå¿ èŠã¯ãããŸããããã£ããããã®ãã°ãæ¢ããŠããã°ã«ç§»åããŸããé·ãã¯ãšãªãèŠã€ãããŸãããç§ã¯ãããã©ãããããã§åçãããããæå¶ããŠããã®ã¯ãªãã£ã¹ã§ã¯ãªãããšã確èªããŸããæ¬ãé ãããŸãã
Booksã®ãã°ã«åºããããåé¡ã®ããã¯ãšãªãèŠã€ããŸãããå®éããã§ã«ããããããŸããã©ãããããã§ãåãããã«æ¬ãè€è£œããŸããéåžžã«è€éãªã³ãŒã-ç§ã¯äœãçè§£ããŠããŸããããããã°ãå§ããŠããŸããã¿ã€ãã³ã°ããšãã®ã¯ããªãé£ããã§ããã©ãããŠïŒ SQLAlchemyã§ãããå éšçã«æ±ºå®ããããšã¯éåžžã«å°é£ã§ããç§ã¯ã«ã¹ã¿ã ã¿ã€ã ãã¬ãŒãäœæããåé¡ãããŒã«ã©ã€ãºããŠä¿®æ£ããŸãã
ããã¯ç§ãå·ã€ããŸãããé£ãããäžå¿«ãç§ã¯æ³£ãããåé¡ãèŠã€ãããã®ããã»ã¹ãããéãããã䟿å©ã«ããããšæããŸãã
åé¡ã圢åŒåããŸããããç§ãã¡ã®ãã°ã¯ç¡é¢ä¿ãªã€ãã³ãã®ãã°ã§ãããããé床ãäœäžããŠãããã®ããã°ã§æ€çŽ¢ããããšã¯å°é£ã§ããå®è¡ãããã³ãŒãã®ãããã¯æ°ã瀺ãã«ã¹ã¿ã ã¿ã€ããŒãäœæããå¿ èŠããããŸããããã«ãå€éšã·ã¹ãã ã®ã¿ã€ãã³ã°ããã°ã«èšé²ããæ¹æ³ãæç¢ºã§ã¯ãããŸãããããšãã°ãORMããªã¯ãšã¹ãã©ã€ãã©ãªãªã©ã§ããã¿ã€ããŒãå éšãŸãã¯äœããã®ã©ãããŒã«åã蟌ãå¿ èŠããããŸãããå éšã§é床ãäœäžããçç±ã¯ããããŸãããè€éã
ç§ãèŠã€ããè¯ã解決çã¯ã€ãšãŒã¬ãŒã§ããããã¯opentracingãããã³ã«ã®å®è£ ãªã®ã§ããã¬ãŒã¹ãå®è£ ããŸãããã
ã€ãšãŒã¬ãŒã¯äœãäžããŸããïŒããã¯ãæ€çŽ¢ã¯ãšãªãåãããŠãŒã¶ãŒãã¬ã³ããªãŒãªã€ã³ã¿ãŒãã§ã€ã¹ã§ããé·ãã¯ãšãªããã£ã«ã¿ãªã³ã°ããããšããã¿ã°ã§ãã£ã«ã¿ãªã³ã°ããããšãã§ããŸãããªã¯ãšã¹ãã®æµããèŠèŠçã«è¡šçŸããããšãŠãçŸããåçã§ããå°ãåŸã§ãèŠãããŸãã
ã¿ã€ãã³ã°ã¯ç®±ããåºããŠãã°ã¢ãŠããããŸããããªãã¯åœŒããšäœãããå¿ èŠã¯ãããŸãããå®è¡ãããŠããã«ã¹ã¿ã ãããã¯ã®éã確èªããå¿ èŠãããå Žåã¯ãJaegerãæäŸããã¿ã€ããŒã§ã©ããã§ããŸãããšãŠãå¿«é©ã§ãã
ã€ã³ã¿ãŒãã§ã€ã¹ã§åé¡ãèŠã€ããŠãããã§ããŒã«ã©ã€ãºããããšãã©ã®ããã«å¯èœã§ãã£ãããèŠãŠã¿ãŸãããã Jaegerã€ã³ã¿ãŒãã§ãŒã¹ã«å ¥ããŸãããããç§ãã¡ã®ãªã¯ãšã¹ãã®æ§åã§ããã¢ã«ãŠã³ããŸãã¯ä»ã®ãµãŒãã¹ã®ãªã¯ãšã¹ããæ€çŽ¢ã§ããŸããé·ãã¯ãšãªã¯ããã«ãã£ã«ã¿ãªã³ã°ãããŸããç§ãã¡ã¯é·ããã®ã«èå³ãããããã°ããèŠã€ããã®ã¯éåžžã«å°é£ã§ããç§ãã¡ã¯åœŒãã®ãªã¹ããååŸããŸãã
ãã®ã¯ãšãªã«è©²åœãããšãSQLãµãã¯ãšãªã®å€§ããªè¶³ãããã衚瀺ãããŸããããããæéå ã«ã©ã®ããã«å®è¡ãããããã©ã®ã³ãŒããããã¯ãäœãæ åœããããæç¢ºã«ç¢ºèªã§ããŸãããšãŠããã£ããããããã«ãç§ãã¡ã®åé¡ã®æèã§ã¯ãããã¯ãã°å šäœã§ã¯ãããŸããã 2ã3æäžã«ã¹ã©ã€ããã倧ããªè¶³åžããŸã ãããŸãã Jaegerã§åé¡ãããªãè¿ éã«ããŒã«ã©ã€ãºããŸãããåé¡ã解決ããåŸãã€ãšãŒã¬ãŒãæäŸããã³ã³ããã¹ãã¯ç§ãã¡ã«äœãå©ããããšãã§ããŸããïŒ
Jaegerãã°ãããšãã°ãSQLã¯ãšãªïŒã©ã®ã¯ãšãªãç¹°ãè¿ãããŠãããã確èªã§ããŸãããšãŠãéããŠãã£ãããã
ç§ãã¡ã¯åé¡ã解決ããããã«ã€ãšãŒã¬ãŒã§ãã¹ãŠãé 調ã§ããããšã確èªããŸãããåãã¯ãšãªã§ããµãã¯ãšãªããªãããšã確èªããŸããã©ãããŠïŒåããªã¯ãšã¹ãããã§ãã¯ããã¿ã€ãã³ã°ã確èªãããšããŸããElasticsearchã§ãªã¯ãšã¹ããå®è¡ãããæéã調ã¹ãŸããæ¬¡ã«ãæéã確èªããŸãããã ããããã¯ãµãã¯ãšãªããªãã£ãããšãä¿èšŒãããã®ã§ã¯ãããŸããããããŠãããã§ç§ãã¡ã¯ãããèŠãããã£ãããã
ã€ãšãŒã¬ãŒãå®è£ ããŸããããå€ãã®ã³ãŒãã¯å¿ èŠãããŸããã Flaskã®opentracingã®äŸåé¢ä¿ã远å ããŸããæ¬¡ã«ãå®è¡ããŠããã³ãŒãã«ã€ããŠèª¬æããŸãã
ã³ãŒãã®æåã®ãããã¯ã¯ãJaegerã¯ã©ã€ã¢ã³ãã®ã»ããã¢ããã§ãã
次ã«ãFlaskãDjangoããŸãã¯çµ±åãããŠãããã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ãšã®çµ±åãèšå®ããŸãã
install_all_patchesã¯ã³ãŒãã®æåŸã®è¡ã§ãããæãè峿·±ããã®ã§ããMySQLãPostgresããªã¯ãšã¹ãã©ã€ãã©ãªãšããåãããããšã§ãã»ãšãã©ã®å€éšçµ±åã«ããããé©çšããŸããããããã¹ãŠã«ããããé©çšããŠãããããJaegerã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãSQLã䜿çšãããã¹ãŠã®ã¯ãšãªãšãå¿ èŠãªãµãŒãã¹ãã©ã®ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããããã«è¡šç€ºãããŸãããšãŠããã£ãããããããŠãããªãã¯å€ããæžãå¿ èŠã¯ãããŸããã§ãããinstall_all_patchesãäœæããŸãããéæ³ïŒ
äœããããŸããïŒããã§ããã°ããã€ãã³ããåéããå¿ èŠããªããªããŸãããç§ãèšã£ãããã«ããã°ã¯ç°ãªãã€ãã³ãã§ããã€ãšãŒã¬ãŒã§ã¯ãããã¯ããªãããã®æ§é ãèŠãäžã€ã®å€§ããªã€ãã³ãã§ããJaegerã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®ããã«ããã¯ãèŠã€ããããšãã§ããŸããé·ãã¯ãšãªãæ€çŽ¢ããã ãã§ãäœãåé¡ã«ãªã£ãŠããã®ããåæã§ããŸãã
åé¡3.ãšã©ãŒ
æåŸã®åé¡ã¯ãšã©ãŒã§ããã¯ããç§ã¯ç¡çŸã§ããã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒãåãé€ãã®ã¯æäŒããŸããããæ¬¡ã«äœãã§ãããã説æããŸãã
ç°å¢ã次ã®ããã«èšãããšãã§ããŸãããDanyaããšã©ãŒããã°ã«èšé²ããŠããŸãã500ä»¶ã®ã¢ã©ãŒãããããèšå®ããŸããããªãã§ãããïŒãã°ã«èšé²ãããã°ã«èšé²ãããã°ã«èšé²ããŠãããã°ããŸãã
ãã°ãããšã©ãŒã®éèŠæ§ãããããŸãããéèŠæ§ã¯äœã§ããïŒããã«ã1ã€ã®ã¯ãŒã«ãªãšã©ãŒãšãããŒã¿ããŒã¹ãžã®æ¥ç¶ã®ãšã©ãŒããããŸããããŒã¹ãããããããŸããããã®ééãã¯ããã»ã©éèŠã§ã¯ãªãããšãããã«ç¢ºèªããããšæããŸããæéããªãå Žåã¯ç¡èŠããŠãããéèŠãªééããä¿®æ£ããŠãã ããã
ãšã©ãŒçã¯ãããããããã°ããã®ã«åœ¹ç«ã€ã³ã³ããã¹ãã§ãããšã©ãŒã远跡ããæ¹æ³ã¯ïŒç¶ããŸãããã1ãæåã«ãã¹ããããŸããããä»åºŠã¯åã³è¡šç€ºãããŸããããã«è§£æ±ºçãèŠã€ããŠä¿®æ£ãããããªãªãŒã¹ã®1ã€ãšå€èŠ³ãæ¯èŒããããšæããŸãã
ãããè¯ãäŸã§ãã Jaegerãšã®çµ±åãèŠããšããAPIãå°ã倿ŽããŸãããã¢ããªã±ãŒã·ã§ã³ã®å¿çã®åœ¢åŒã倿ŽããŸããããã®ãšã©ãŒãçºçããŸããããããããªãç§ãããŒãæã£ãŠããããæ³šæãªããžã§ã¯ãã«ããããããã®ãã¯æç¢ºã§ã¯ãªããç§ãå©ãããã®ã¯äœããããŸãããåæ§ã«ãããã§ãšã©ãŒã確èªãããããåçŸããŠèªåã§ãã£ããããŸãã
æ©åšãå®è£ ããŸããããããã¯ãåæ§ã®åé¡ã解決ãããšã©ãŒã®ã³ã³ããã¹ããèŠã€ããã®ã«åœ¹ç«ã€ãã°ãã©ãã«ãŒã§ããæ©åšéçºè ã«ãã£ãŠç¶æãããŠããæšæºã©ã€ãã©ãªãå©çšããŠãã ããã 4è¡ã®ã³ãŒãã§ããããã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããŸãããã¹ãŠã
éäžã§äœãããŸãããïŒããã¯ããããžã§ã¯ãããšã«ã°ã«ãŒãåããŠãã©ããŒã§ãããšã©ãŒã®ããããã·ã¥ããŒãã§ãããšã©ãŒãã°ã®èšå€§ãªãããã¯ãã¹ã¯ãåäžã®é¡äŒŒãããã®ã«ã°ã«ãŒãåãããŸãããããã«é¢ããçµ±èšãæäŸãããŸãããŸããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãããã®ãšã©ãŒã«å¯ŸåŠããããšãã§ããŸãã
ç§ãã¡ã®äŸãèŠãŠã¿ãŸãããã KeyErrorã«é¥ãããšã©ãŒã®ã³ã³ããã¹ããorderãªããžã§ã¯ãã«å«ãŸããŠãããã®ãååšããªãã£ããã®ãããã«ããããŸãã Deliveryã¢ããªã±ãŒã·ã§ã³ãæ°ããããŒã¿æ§é ãæäŸããŠãããããšãããã«ããããŸãããã£ããããã¯åã«ããã®æºåãã§ããŠããŸããã
ç§ããªã¹ããããã®ä»¥å€ã«æ©åšã¯äœãäžããŸããïŒæ£åŒã«ããŸãããã
ããã¯ãããããæ¢ãããšãã§ãããšã©ãŒã¹ãã¢ã§ãããã®ããã®äŸ¿å©ãªããŒã«ããããŸãããšã©ãŒã®ã°ã«ãŒãåããããŸã-ãããžã§ã¯ãããšãé¡äŒŒæ§ããšã Sentryã¯ãããŸããŸãªãã©ãã«ãŒãšã®çµ±åãæäŸããŸããã€ãŸããééããç£èŠããããããåŠçããããšãã§ããŸããã¿ã¹ã¯ãã³ã³ããã¹ãã«è¿œå ããã ãã§ãããã ãã§ããããã¯éçºã«åœ¹ç«ã¡ãŸãã
ãšã©ãŒçµ±èšãç¹°ãè¿ããŸãããããã¯ãªãªãŒã¹ã®ããŒã«ã¢ãŠããšæ¯èŒããã®ã¯ç°¡åã§ããã»ã³ããªãŒã¯ããã§ããªããå©ããŸãããšã©ãŒã®æšªã§çºçããåæ§ã®ã€ãã³ããããšã©ãŒã®åå ãèŠã€ããŠçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
ãŸãšããŸããããã·ã³ãã«ã§ãããªããããŒãºãæºããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããããã¯ããªãããã®ã©ã€ããµã€ã¯ã«ã§ãããéçºãç¶æããã®ãå©ããŸããç§ãã¡ã¯äœãããŸãããïŒ 1ã€ã®ãªããžããªã«ãã°ãåéããŸãããããã¯ç§ãã¡ã«å¥ã®å Žæã§ããããæ¢ããªãæ©äŒãäžããŠãããŸãããããã«ããã°ãšãµãŒãããŒãã£ã®æ©èœã§ããããŒã«ã§æ€çŽ¢ã§ããããã«ãªããŸããã
çµ±åãã¬ãŒã¹ãããã§ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ãããŒãèŠèŠçã«ç£èŠã§ããŸãã
ãŸãããšã©ãŒãåŠçããããã®äŸ¿å©ãªããŒã«ã远å ããŸãããã©ããªã«é 匵ã£ãŠããã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŸããããããç§ãã¡ã¯ããããããéããããŠããè¯ãä¿®æ£ããŸãã
ä»ã«äœã远å ã§ããŸããïŒã¢ããªã±ãŒã·ã§ã³èªäœã®æºåãã§ããŠããããªã³ã¯ãããããããã©ã®ããã«è¡ããããã確èªã§ããŸãããã¹ãŠã®çµ±åã¯ããã§çºçããŸããããšãã°ãElasticsearchãŸãã¯ãã¬ãŒã¹ãšã®çµ±åãå ¥ã£ãŠèŠãŠãã ããã
ç§ãã«ããŒããæéããªãã£ãããäžã€ã®ã¯ãŒã«ãªããšã¯requests_idã§ãããã¬ãŒã¹ã§äœ¿çšãããtrace_idãšã»ãšãã©éãã¯ãããŸãããããããç§ãã¡ã¯requests_idã«è²¬ä»»ãããããããæãéèŠãªæ©èœã§ãããããŒãžã£ãŒã¯requests_idã§ããã«ç§ãã¡ã®ãšããã«æ¥ãããšãã§ããç§ãã¡ã¯åœŒãæ¢ãå¿ èŠã¯ãããŸãããç§ãã¡ã¯ããã«åé¡ã®è§£æ±ºãéå§ããŸãããšãŠããã£ãããã
ãŸããå®è£ ããããŒã«ã¯ãªãŒããŒãããã§ããããšãå¿ããªãã§ãã ããããããã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§å¯ŸåŠããå¿ èŠãããåé¡ã§ããç§ãã¡ã®ãã¹ãŠã®çµ±åãç¡æèã®ãã¡ã«å®è£ ããããªãã®çæŽ»ãæ¥œã«ããŠãããæå¶ã¢ããªã±ãŒã·ã§ã³ãã©ãããããèããããšã¯ã§ããŸããã
èŠãŠã¿ãªããããããªãã«åœ±é¿ãäžããªãã®ãªãããã£ããããããªãã¯ãã©ã¹ãåŸãã ãã§ããã¬ãŒãã®åé¡ã解決ããŸããããããå¿ããªãã§ãã ãããèããŠãããŠããããšãã