
- TOP
- ã¿ã°äžèЧ
- Nginx
Nginx
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³

æè¡ããã°
ãããªãã¹ãã£ã³ã°ã¯ã¹ãã¬ãŒãžã倧éã«å¿
èŠãšããããžãã¹ã§ãããã«HD 1080p è§£ååºŠã®æ ç»ãçŽ 100 äžæ¬æ±ãäžçšåºŠã®äºæ¥è
ã§ããçŽ 10 ãã¿ãã€ãïŒPBïŒã®ã¹ãã¬ãŒãžãå¿
èŠã«ãªããŸãã Amazon Simple Storage Service ã¯ãã¹ã±ãŒã©ããªãã£ãããã©ãŒãã³ã¹ããããŠã³ã¹ãå¹çã®é¢ã§é·å¹Žã®å®çžŸããããŸãããšã¯ãããç¶ç¶ç㪠FinOps ãã©ã¯ãã£ã¹ãé©çšããããšã§ãã³ã¹ãå¹çãé«ããã¯ã©ãŠãã®ã³ã¹ãã¢ãã«ããåŸãããããžãã¹äŸ¡å€ãæå€§åããããšãã§ããŸãã ãã®ããã°ã§ã¯ããããªãã¹ãã£ã³ã°ã®ã客æ§ã Amazon S3 ã®ã³ã¹ãã 70% åæžããã®ã« AWS ãã©ã®ããã«åœ¹ç«ã£ããã説æããŠããŸãããã®ææã¯ãAWS ã®ãã€ãã£ãããŒã«ã掻çšããŠäœçŸäžãã®åç»ãã¡ã€ã«ã®ã©ã€ããµã€ã¯ã«ãçè§£ãããã®åŸãJust-in-Timeã®åç»ãã¹ãã£ã³ã°ãã©ãããã©ãŒã ã®ã¢ãŒããã¯ãã£ã埮調æŽããããšã§éæãããŸããã AWS Cost and Usage Reports ã䜿çšããŠåé¡ã®èŠæš¡ãç¹å®ãã ããžãã¹ã®æé·ã«äŒŽããã客æ§ã¯ Amazon S3 ã®ã³ã¹ããçå®ã«å¢å ããŠããããšã«æ°ã¥ããŸãããS3 ã³ã¹ãã¯ã€ã³ãã©ç·ã³ã¹ãã® 40% ãå ããŠããŸãããã³ã¹ãã®å
šäœåãææ¡ããã«ã¯ãéåžžã AWS Cost Explorer ããå§ããã®ãæé©ã§ãããã ããAmazon S3 ã®ã³ã¹ãã¯ãã¹ãã¬ãŒãžã¯ã©ã¹ãã¢ã¯ã»ã¹ãã¿ãŒã³ãªã©ãããŸããŸãªèŠå ã®åœ±é¿ãåããå¯èœæ§ãããããã AWS Cost and Usage Reports ïŒCURïŒã䜿çšããŠãã詳现ãªåæãè¡ãå¿
èŠããããŸãã AWS ããã°ã Analyze Amazon S3 storage costs using AWS Cost and Usage Reports, Amazon S3 Inventory, and Amazon Athena ãã§èª¬æãããŠããã¢ãããŒãã«åŸããAWS 㯠Amazon S3 ã®ç·ã³ã¹ããæ¬¡ã®ã°ã©ãã®ããã« 4 ã€ã®äž»èŠãªæ§æèŠçŽ ã«è©³ããåé¡ããŸããã å³1: AWS Cost and Usage Reports ã®ããŒã¿ããçæãããS3ã®ã³ã¹ãå
èš³ ã客æ§ã¯ãS3 StandardãS3 Standard Infrequent AccessãS3 Glacier Instant RetrievalïŒGIRïŒã® 3 ã€ã® Amazon S3 ã¹ãã¬ãŒãžã¯ã©ã¹ã䜿çšããŠããŸãããäžèŠãããšãããS3 ã®ã³ã¹ãã®å€§éšåïŒ88ïŒ
ïŒã¯ GIR ã«ãããã®ã§ãããå
·äœçã«ã¯ãGET APIïŒ33.7ïŒ
ïŒãš RetrievalïŒ28.6ïŒ
ïŒã®ã³ã¹ãã¯ãäžè¬çãªäœ¿çšãã¿ãŒã³ãšæ¯èŒããŠç°åžžã«é«ãããã§ãïŒæ³šïŒGlacier Instant Retrieval ã¯ã©ã¹ã®å ŽåãS3 GET ãš Retrieval ã®ã³ã¹ã㯠S3 ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ãããã³ã«çºçããŸãïŒã S3 GIR ã¯ãã»ãšãã©ã¢ã¯ã»ã¹ãããªãããããªç§åäœã§ååŸããå¿
èŠãããé·æã«ãããããŒã¿ãã察象ãšããŠããããã倧éã®ååŸæäœã¯ãæå³ããã¢ãŒããã¯ãã£èšèšãšãã©ãããã©ãŒã ã®å®éã®ã¢ã¯ã»ã¹ãã¿ãŒã³ãšã®éã«äžäžèŽãããããšã瀺ããŠããŸããã ã¢ãŒããã¯ãã£ãšæœåšçãªåé¡ãçè§£ãã ã客æ§ã®ã¯ãŒã¯ããŒãã¯ãäžçäžã®äŒæ¥é¡§å®¢åãã®ã»ãŒã«ã¹ããã³ããŒã±ãã£ã³ã°ãããªããã¹ããã SaaS ãã©ãããã©ãŒã ã§ããã»ãšãã©ã®åç»ã¯å°äººæ°ã®èŠèŽè
ãèŠèŽããããšãæ³å®ããŠãããããã客æ§ã¯ Just-in-Time ProcessingïŒJITPïŒã¢ãŒããã¯ãã£ãæ¡çšããŸããããã®ã¢ãããŒãã«ãããèŠæ±ãããå Žåã«ã®ã¿ãããªã»ã°ã¡ã³ããç¹å®ã®åœ¢åŒã«ãã©ã³ã¹ã³ãŒãããåããããªã®è€æ°ã®ã¬ã³ãã£ã·ã§ã³ïŒè𳿳šïŒåäžã®ãªãªãžãã«åç»ãç°ãªãè§£å床ããããã¬ãŒãããã©ãŒããããã³ãŒããã¯ãªã©ã«å€æããããªãšãŒã·ã§ã³ã®ããšïŒãä¿åããå¿
èŠããªããªããããã¹ãã¬ãŒãžã³ã¹ããåæžã§ããŸãã å³2ïŒJust-in-Time ProcessingïŒJITPïŒã¢ãŒããã¯ã㣠ã³ã¹ããããã«æé©åããããã«ãã客æ§ã¯ãåç»ãã¡ã€ã«ã 30 æ¥çµéããŠã¢ã¯ã»ã¹ãããå¯èœæ§ãå°ãªããªã£ãæç¹ã§ãèªåçã« S3 GIR ã¹ãã¬ãŒãžã¯ã©ã¹ã«ç§»è¡ãã Amazon S3 ã©ã€ããµã€ã¯ã«èšå® ïŒããã«ã¯ããããã®ã³ã¹ããããããŸãããMB ãµã€ãºã®ãªããžã§ã¯ãã§ã¯ãããããã§ãïŒãå®è£
ããŸããããããã®ãã¡ã€ã«ãäŒæ¢ç¶æ
ã®ãŸãŸã§ããéããS3 GIR 㯠S3 Standard ãšæ¯èŒããŠã¹ãã¬ãŒãžã³ã¹ããæå€§ 80% åæžã§ãããšããèãã§ããã ãã ããGIR ã«ä¿åãããŠãããã¡ã€ã«ã«äºæããã¢ã¯ã»ã¹ãããå ŽåãRetrieval ãš GET ãªã¯ãšã¹ãã®è¿œå æéãçºçããŸãïŒ Amazon S3 ã®æéããŒãž ã«è©³è¿°ãããŠããŸãïŒã1TB ã®ãããªããŒã¿ã GIR ã«ä¿åããã«ã¯ 1 ãæãããçŽ 4 ãã«ïŒS3 Standard ã§ã¯ 21 ãã«ïŒããããŸãããåãããŒã¿ã GIR ããäžåºŠååŸããå ŽåãRetrieval ãš GET ã®ã³ã¹ãã¯åèšã§çŽ 30 ãã«ã«ãªããæå³ããç¯çŽé¡ã¯ããã«çžæ®ºãããŸãã å³3ïŒS3 GIR å
ã®ãã¡ã€ã«ãååŸãããšãã®ã³ã¹ããžã®åœ±é¿ ãã®çµæãã³ã¹ãæé©åã®åãçµã¿ã¯ã次㮠2 ã€ã®éèŠãªåãã«çããããšã«çŠç¹ãåœãŠãŸããã GIR ã«ä¿åãããŠãããããªãã¡ã€ã«ã®äžã«ãäŸç¶ãšã㊠GET ã Retrieval ã®ã¢ã¯ãã£ããã£ãé«ããã®ãå€ãããªããïŒ ããããã§ããã°ããããã广çã«ç¹å®ããŠå¯ŸåŠããã«ã¯ã©ãããã°ãããïŒ S3 Access Logging ã¯ãèšå€§ãªããŒã¿ã®äžããåé¡ã®ãã¡ã€ã«ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸã GET ãªã¯ãšã¹ããš Retrieval ãªã¯ãšã¹ãã®åºæãå®éåããããã«ãã客æ§ã¯ãã±ããã«å¯ŸããŠè¡ããããã¹ãŠã®ãªã¯ãšã¹ãã®è©³çްãªèšé²ãæäŸãã Amazon S3 Access Logging ã«ç®ãåããŸãããäžåºŠæå¹ã«ãããšãS3 ã¯èšå®ããã¿ãŒã²ãããã±ããã«ãã°ãã¡ã€ã«ãèªåçã«æžã蟌ã¿ãŸãã S3 ã¢ã¯ã»ã¹ãã°ãåæããæè¯ã®æ¹æ³ã¯ã Amazon Athena ã§ã¯ãšãªãå®è¡ããããšã§ãã Amazon S3 ã®ããã¥ã¡ã³ãã®æé ã«åŸã£ãŠããã°ããŒã¿ã衚ãããŒã¿ããŒã¹ãšããŒãã«ãäœæã§ããŸãã ããšãã°ã次㮠SQL ã¯ãšãªã¯ãããŒã¿ããŒã¹ãšããŒãã«ã®ååã s3_access_logs_dbãšmybucket_logs ã§ãããšä»®å®ããŠãæãã¢ã¯ã»ã¹æ°ã®å€ã S3 ãªããžã§ã¯ãã®äžäœ 10 ä»¶ãè¿ããŸãã SELECT COUNT(*) AS access_count, key AS file_name FROM s3_access_logs_db.mybucket_logs WHERE operation = 'REST.GET.OBJECT' AND httpstatus = '200' GROUP BY key ORDER BY access_count DESC LIMIT 10; JSON ãã®çµæãã»ãã®æ°æéã§ãå€ãã®ãããªãã¡ã€ã«ã«äœååãã¢ã¯ã»ã¹ãããããšãããããŸãããããã¯äºæ³ãã¯ããã«è¶
ããé »åºŠã§ãã ãããªãåæã«ãããGIR å±€ã®ãã¹ãŠã® GET ããã³ Retrieval ã¢ã¯ãã£ããã£ã®ã»ãŒååããå
šäœã®ããäžéšïŒçŽ 0.1%ïŒãäž»ã«ãµã€ãºã®å€§ãããã¡ã€ã«ãå ããŠããããšã確èªãããŸããããããã®ãã¡ã€ã«ã«ã€ããŠã¯ãS3 Glacier Instant RetrievalïŒGIRïŒã«ä¿åããããšã¯ãã³ã¹ãã®èгç¹ããã¯éå¹ççã§ãããããŒã ã¯ãããã S3 Intelligent-Tiering ã«ç§»è¡ããããšãè©äŸ¡ããŸãããã³ã¹ãã¢ããªã³ã°ã§ã¯ã Intelligent-Tiering ã§ã¯åãåºãæéããããããGET API ã®ã³ã¹ãã GIR ãšæ¯ã¹ãŠ 25 åã® 1 ã§ããããã倧å¹
ãªç¯çŽãå¯èœã§ããããšã瀺ãããŸãããããšãã°ã次ã®äžäœ 3 ã€ã®ã¢ã¯ã»ã¹ãã¡ã€ã«ã§ã¯ã90% 以äžã®ç¯çŽãå¯èœã§ãã ãããã®æŽå¯ãããšã«ãããŒã ã¯æãã¢ã¯ãã£ã㪠60,000 ã®ãªããžã§ã¯ãïŒåèš 1,000 äžæ¬ã®åç»ã®çŽ 0.6%ïŒã«ãã©ã°ãä»ããS3 Intelligent-Tiering ã«ååé¡ããŸããããã®å€æŽã¯æå³ãããšããã«æ©èœããGIR ã® Retrieval ãš GET ã®ã³ã¹ãã 50% åæžããŸããã é »ç¹ã«ã¢ã¯ã»ã¹ããããã¡ã€ã«ã S3 Intelligent-Tiering ã«ååé¡ãããšããã«ç¯çŽã§ããŸãããããã¹ãŠã®åç»ãåãã¢ã¯ã»ã¹ãã¿ãŒã³ã«åŸãããã§ã¯ãªãããšãæµ®ã圫ãã«ãªããŸããããã®æŽå¯ã¯ãè€æ°ã® S3 ã¹ãã¬ãŒãžã¯ã©ã¹ãæŠç¥çã«äœ¿çšããããšã«ãããããå
æ¬çãªæé©åãžã®éãéããŸããã è€æ°ã®S3ã¹ãã¬ãŒãžã¯ã©ã¹ã掻çšããŠã¢ãŒããã¯ãã£ãæé©åãã Just-in-Time ã®ããã±ãŒãžç°å¢ã§ã¯ãçæ¶¯ã«ãããã¹ãã¬ãŒãžã³ã¹ãã¯ã¢ã¯ã»ã¹ãã¿ãŒã³ãã€ãŸãåãããªããã®ã©ã€ããµã€ã¯ã«å
šäœã§ã©ããããã®é »åºŠã§èŠèŽããããã«å€§ããäŸåããŸãã ããŒã ããããã®ãã³ã°ããŒã«ïŒè𳿳šïŒããã§ã®ããã³ã°ããŒã«ããšã¯ãã¢ã¯ã»ã¹é »åºŠã®ååžã«ãããŠãè¶
é«é »åºŠã¢ã¯ã»ã¹ã®ãã¡ã€ã«çŸ€ãé€ããåŸããäŸç¶ãšããŠçžå¯Ÿçã«é«ãã¢ã¯ã»ã¹ãç¶ããŠãããã¡ã€ã«çŸ€ãæãïŒã®ãé »ç¹ã«ã¢ã¯ã»ã¹ãããããã¡ã€ã«ãåæãããšããããããã¯äž»ã«æç¢ºãªç¹åŸŽãæã€ããŒã±ãã£ã³ã°ãããªã§ããããšãããããŸããã ããé«ãè§£å床ïŒ1080p ãŸã㯠4KïŒãšããé·ãå°ºã®ãããçŽ 100 åã®ãµã€ãºããã èŠèŽãããå¯èœæ§ãçŽ 100 åé«ã å
šãªããžã§ã¯ãã® 10% ã ããæé 31 åä»¶ã® GET ãªã¯ãšã¹ãã®çŽ 99ïŒ
ãå ããŠãã ã³ã¹ããæé©åããã«ã¯ããããã®ãã©ãã£ãã¯ã®å€ãåç»ã¯ã¢ããããŒãæã« S3 Intelligent-Tiering ã«ä¿åããæ®ãã®åç»ã¯åŒãç¶ã S3 Standard ã䜿çšãã30 æ¥éã®ã©ã€ããµã€ã¯ã«ããªã·ãŒã§ S3 Glacier Instant RetrievalïŒGIRïŒ ã«ç§»è¡ããå¿
èŠããããŸãã 幞ããªããšã«ããã®æ¹åãå®è£
ããã®ã«å¿
èŠãªã®ã¯æ°è¡ã®ã³ãŒãã ãã§ããããããã€ããããšãGET ãªã¯ãšã¹ãã®é㯠GIR ãã Intelligent-Tiering ã«åŸã
ã«ã·ããããS3 å
šäœã®ã³ã¹ãã¯çå®ã«äžãããŸããã å³4ïŒS3 Intelligent-Tiering ãæ¡çšããåŸã® GET ãªã¯ãšã¹ãïŒGIRã¯ã©ã¹ïŒã¯æžå°åŸå ã¹ãã¬ãŒãžã¯ã©ã¹ãæé©åããåŸã次ã®åãã¯ç°¡åã§ãããS3 GET ãªã¯ãšã¹ãã®ç·æ°ãæžãããŠãããã«ã³ã¹ããåæžã§ããã§ããããïŒ Just-in-Time pipeline ã®æ®ãã®éšåããã¥ãŒãã³ã°ãã ããã«çããããã«ãããŒã 㯠Just-in-TimeïŒJITïŒãããªåŠçãã€ãã©ã€ã³ã®ä»ã®éšåãç¹ã«ã³ã³ãã³ãé
ä¿¡ã¬ã€ã€ãŒïŒ Amazon CloudFront ïŒãš NginxããŒã¹ã®ããã±ãŒãžã³ã°ã¬ã€ã€ãŒ ã調ã¹ãŸããã æéãšãªãã¢ã€ãã¢ã¯ç°¡åã§ããïŒ CDN ã¬ã€ã€ãŒïŒCloudFront ã®ãã£ãã·ã¥ãã¹ãæžãããNginxããŒã¹ã®ããã±ãŒãžã³ã°ã¬ã€ã€ãŒãžãã©ãŒã«ããã¯ããããªã¯ãšã¹ããæžãã ããã±ãŒãžå±€ïŒåãããªã»ã°ã¡ã³ããæ§ç¯ããã®ã«å¿
èŠãªãã§ããã®æ°ãæå°éã«æãã å³5ïŒGET ãªã¯ãšã¹ãã³ã¹ãã®æŠç® CloudFront ãš Nginxã®ã¬ã€ã€ãŒãåæãããšãããæé©åã®æ©äŒãå®éã«èŠã€ãããŸããã CloudFront ã®æé©åïŒAmazon CloudWatch ã®ã¡ããªã¯ã¹ãåæãããšãããCloudFront ã®ã°ããŒãã«ãã£ãã·ã¥ãããçã¯ããã 65ïŒ
ã§ãç¹å®ã®å°åã§ã¯ 40ïŒ
ã«äœäžããŠããŸããã ç¹ã«ããã©ãŒãã³ã¹ã®äœãå°åã«çŠç¹ãåœãŠãŠ CloudFront ãã£ã¹ããªãã¥ãŒã·ã§ã³æ§æã調æŽãããšããããããçã¯çŽ 90ïŒ
ã«å¢å ããŸããããã®æ¹åã ãã§ããS3 GET ãš Retrieval ãªã¯ãšã¹ããçŽ 50% åæžããŸããã NginxããŒã¹ã®ããã±ãŒãžã³ã°ã¬ã€ã€ãŒã®æé©å: CloudFront ã§ãã£ãã·ã¥ãã¹ãçºçãããã³ã«ãã·ã¹ãã ã¯ãããã§ã¹ããã¡ã€ã«ãšè€æ°ã® 6 ç§éã®ã»ã°ã¡ã³ããã¡ã€ã«ãåçæããŸãããã¬ã€ã€ãŒã¯ãããã®ãã¡ã€ã«ãããŒã«ã«ã«ãã£ãã·ã¥ããªãã£ããããå¿
èŠãªããŒã¿ãååŸããããã«è€æ°ã® S3 GET ç¯å²ãªã¯ãšã¹ããçºè¡ããŸããã S3 GET ãªã¯ãšã¹ãã®ãã€ãç¯å²ãµã€ãº ã 256 KB ãã 2 MB ã«å¢ããããšã§ãããŒã ã¯å¹³åã»ã°ã¡ã³ãã®æ§ç¯ã«å¿
èŠãª GET ã®æ°ã 7.05 ãã 1.04 ã«æžãããå
šäœã§ 85% åæžããŸããã ãããã®ãã€ãã©ã€ã³ã®æé©åã«ãããS3 GET ãªã¯ãšã¹ãã 90ïŒ
åæžãããããã«æ¯äŸããŠååŸãšãªã¯ãšã¹ãã®ã³ã¹ããäžãããã³ã¹ãæé©åã®æçµæ®µéãå®äºããŸããã çµæã®ãŸãšããšéèŠãªãã€ã³ã ããŒã ã¯ãAWS Cost and Usage Reports ãš Amazon S3 Access Logging ããåŸãæŽå¯ãããšã«ãã客æ§ã Amazon S3 ã®6 æ¡ã®å¹Žéè«æ±é¡ãçŽ 70% åæžã§ããããã«æ¯æŽããŸããããããã®ç¯çŽã¯ãCloudFront ãã£ãã·ã¥ã®ãã¥ãŒãã³ã°ããã³ã°ããŒã«ã³ã³ãã³ããžã® S3 Intelligent-Tiering ã®æŽ»çšãå¹çåäžã®ããã® S3 GET ç¯å²ãµã€ãºã®èª¿æŽãªã©ãã¯ãŒã¯ããŒãã¢ãŒããã¯ãã£ãæé©åããããšã«ãã£ãŠéæãããŸããã ã¯ã©ãŠããã€ãã£ãïŒãã¯ã©ãŠãã§çãŸãããïŒäŒæ¥ã¯ããªã³ããã³ãã®ã¯ã©ãŠãäŸ¡æ Œèšå®ãšæè»ãªã¹ã±ãŒãªã³ã°ã«ããã䞊å€ããä¿ææ§ã享åããŠããŸãããããã®ããžãã¹ãæ¥éã«æé·ããã«ã€ããŠãæç¶å¯èœãªäºæ¥æ¡å€§ã«ã¯ã³ã¹ãã®æé©åãéèŠã«ãªããŸããAWS ã¯ãäœçŸäžãã®ã客æ§ãšã®ååãããæã广çãªã³ã¹ãæé©åã¯ãå€ãã®å Žåãã¢ãŒããã¯ãã£ã®ãã¥ãŒãã³ã°ãã€ãŸãå¹ççã«æ¡åŒµããå¿
èŠãªå Žåã«ã®ã¿ãªãœãŒã¹ã䜿çšããã·ã¹ãã ãèšèšããããšã«ããããšãåŠã³ãŸããã èªç€Ÿã®ã³ã¹ãèŠå ãçè§£ããã«ã¯ããŸã AWS ã® ãã€ãã£ãã³ã¹ã管çããŒã« ã䜿ã£ãŠå¯èŠåããŠãã ãããããå
æ¬çãªãµããŒããå¿
èŠãªå Žåã¯ã AWS Cloud Financial Management ããŒã ã«äŸé ŒããŠãã¯ãŒã¯ããŒãã«åãããã³ã¹ãæé©åæŠç¥ãçå®ããããšãã§ããŸãã 翻蚳ã¯ãã¯ãã«ã«ã¢ã«ãŠã³ããããŒãžã£ãŒã®å é å± æ å·±ãæ
åœããŸãããåæã¯ ãã¡ã ã§ãã Cedric Hu ã·ãã¢ã»ãœãªã¥ãŒã·ã§ã³ã»ã¢ãŒããã¯ããšããŠãã»ããªãã¯ã»ããŒã¯ ISV ãšææºããŠã¯ã©ãŠãã®è€éããä¹ãè¶ããŠããŸãã圌ã¯ã峿 Œãªã³ã¹ã管çãç¶æããªãããã¹ã±ãŒã©ãã«ã§é©æ°çãªãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããããšãå°éãšããŠããŸããããã«ãããã客æ§ã¯æè¡çåè¶æ§ãæãªãããšãªãæå€§ã® ROI ãéæã§ããŸãã
ã¯ããã« ããã«ã¡ã¯ããµã€ãªã¹ãã¯ãããžãŒã®å°æ²Œ ä¿æ²»ã§ãã ãçå±ã¯ããããããŸãã¯å®éã«ãªãã¶ãŒãããªãã£ãŒïŒå¯èŠ³æž¬æ§ïŒãšãããã®ãåãããŠäœéšããŠã¿ãããã æ¬èšäºã¯ããããªæ¹ã
ã«åããŠãã·ã¹ãã éçšã«äžå¯æ¬ ãªãªãã¶ãŒãããªãã£ãŒã®åºç€ãæãåãããªããåŠç¿ã§ãããå®è·µçãªå
¥éã¬ã€ããšããŠçšæããŸããã Grafana OSS LGTM ã¹ã¿ãã¯ã䜿ã£ãŠãã¡ããªãã¯ã»ãã°ã»ãã¬ãŒã¹ã»ãããã¡ã€ã«ãå
æ¬çã«å¯èŠåããç°å¢ãç¡æã§äœéšã§ãããã³ãºãªã³ãæäŸããŸãã æ¬ãã³ãºãªã³ã§ã¯ã以äžã®ãªãŒãã³ãœãŒã¹ã»ãããã¯ãã®ã¿ã§æ§æãããç°å¢ã§ã³ã³ããã䜿ã£ãŠäžæ¬ã§ç«ã¡äžããWeb ã¢ããªã±ãŒã·ã§ã³ããå®éã«ããŒã¿ãåéã»å¯èŠåããæµããäœéšããŠããã ããŸãã Grafana: å¯èŠåããã·ã¥ããŒã Mimir / Loki / Tempo: ã¡ããªã¯ã¹ããã°ããã¬ãŒã¹ã®ããã¯ãšã³ã Pyroscope / Faro / Alloy: ãããã¡ã€ãªã³ã°ãããã³ããšã³ãç£èŠãããŒã¿åé OpenTelemetry CollectorïŒãã¬ã¡ããªãŒããŒã¿ã®äžç¶ã»åŠçãã€ãã©ã€ã³ ãªããæ¬èšäºã¯ãã©ã®ãããªèŠ³æž¬ãã§ããã®ãããäœéšããã ãããšãäž»ç®çãšããŠããŸãããã®ãããGrafana OSS LGTM Stack ã®ç°å¢æ§ç¯æé ãã®ãã®ã®è©³çŽ°è§£èª¬ã¯å²æããŠãããããŸãã¯åãããŠã¿ããããšããæ¹ã«æé©ã§ããããç°å¢æ§ç¯ã®è£åŽã«èå³ãæã£ãŠããã ããå Žåã¯ããã² GitHub ãªããžããªã®èšå®ãã¡ã€ã«ãè§£æããŠã¿ãŠãã ããã æ§ææŠèŠ æ¬ãã³ãºãªã³ã®åäœæ€èšŒãè¡ã£ãç°å¢ïŒããŒãžã§ã³ïŒã¯ä»¥äžã®éãã§ãã èšäºã§ã¯ Windows 11 äžã® WSL 2 (Ubuntu) ã§èµ·åããæµãã§èšèŒããŠããŸãããDocker ãåäœããç°å¢ã§ããã°ä»ã® OS ã§ã宿œå¯èœã§ãã Windows 11 Professional WSL 2.5.9.0 Ubuntu 24.04.3 LTS Docker Engine 28.5.1 Grafana 12.3.2 Windows (WSL) 以å€ã®OSããå©çšã®æ¹ããæ¡ä»¶ãæºãããŠããã°ä»¥äžã®æé ãããã³ãºãªã³ãé²ããããŸãã Ubuntu (Linux) ç°å¢ã®æ¹: WSL ã®æ§ç¯ã¯äžèŠã§ãã®ã§ãã Docker Engine ç°å¢ã®æ§ç¯ ã ç« ããéå§ããŠãã ããã macOS ç°å¢ã®æ¹: Docker Desktop for Mac ãªã©ã§ã³ã³ããå®è¡ç°å¢ãæºåæžã¿ã§ããã°ãã GitHub ãããã³ãºãªã³çšã®ãªããžããªååŸ ã ç« ããéå§ããŠãã ããã ãã³ãºãªã³ãæ§æããç°å¢ã¯ä»¥äžã®éãã§ãã ãªãã¶ãŒãããªãã£ãŒãæ§æãã Grafana LGTM Stack ãš OpenTelemetry Collectorãããã³èŠ³æž¬å¯Ÿè±¡ã® Web ã¢ããªã±ãŒã·ã§ã³ã¯ããããã³ã³ããã§æ§ç¯ããŸãã Web ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã®ç«å ŽãšããŠæäœããGrafana ãéçšæ
åœã®ç«å ŽãšããŠæäœããŠããŒã«ãã¬ã€ã³ã°ããªããé²ããŸãã Web ã¢ããªã±ãŒã·ã§ã³ãš Grafana LGTM Stack éã§ãã¡ããªã¯ã¹ããã°ãããã³ãã¬ãŒã¹ã¯ OpenTelemetry Collector ãä»ãããããã¡ã€ã«ãš Real-time User Monitoring (RUM) 㯠Alloy ãä»ããŠé£æºããŸãã Web ã¢ããªã±ãŒã·ã§ã³ãã OpenTelemetry Collector ãä»ããŠé£æºããããŒã¿ãšéåºå
ã¯ä»¥äžã®éãã§ãã ã¡ããªã¯ã¹ïŒ Micrometer (Prometheus 圢åŒ) ã¡ããªã¯ã¹ïŒMicrometer (OpenTelemetry 圢åŒ) ã¡ããªã¯ã¹ïŒ Node Exporter ãã°ïŒ OpenTelemetry ãã¬ãŒã¹ïŒOpenTelemetry Web ã¢ããªã±ãŒã·ã§ã³ãã Alloy ãä»ããŠé£æºããããŒã¿ãšéåºå
ã¯ä»¥äžã®éãã§ãã ãããã¡ã€ã«ïŒ Pyroscope Java Agent RUMïŒ Faro Web SDK from CDN æ±çšç㪠OpenTelemetry Collector ã§ã Grafana LGTM Stack ã«é£æºã§ããããšã衚ãããã®ã§ãã§ããéã OpenTelemetry Collector ãä»ãã飿ºã§æ§æããŠããŸãã ãªãã¶ãŒãããªãã£ãŒã® Grafana LGTM Stack ã¯ãGrafanaãMimirãLokiãTempoãPyroscopeãFaroãããã³ Alloy ã§æ§æããŸãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ Grafana ãæ
ããŸãã MimirãLokiãTempoãããã³ Pyroscope ã¯ãããããã®å段㫠Nginx ã§æ§ç¯ããããŒããã©ã³ãµãŒãé
眮ããŸãã MimirãLokiãããã³ Tempo ã¯ãããããã®åŸæ®µã« MinIO ã§æ§ç¯ããæ°žç¶ã¹ãã¬ãŒãžãæ§æããŸãã Tempo ã®æ§æã«ãããäž»ãªèæ
®äºé
ã¯ä»¥äžã®éãã§ãã OpenTelemetry Collector ããéä¿¡ãããŠãããã¬ãŒã¹ãåãåãããŒãçªå·ïŒ4318ïŒãšãGrafana ã§è¡šç€ºã®ããã«ååŸããããŒãçªå·ïŒ80ïŒãç°ãªããããããããã®ããŒããã©ã³ãµãŒãæ§æããŸãã Grafana ã§ãµãŒãã¹ã°ã©ãã衚瀺ããããã«ãTempo ã®ã¡ããªã¯ã¹ãžã§ãã¬ãŒã¿ãŒã§ãã¬ãŒã¹ããã¡ããªã¯ã¹ãçæã Mimir ãžéä¿¡ããŸãã ã¡ããªã¯ã¹ãžã§ãã¬ãŒã¿ãŒãå§ããšãã Tempo ã®å
éšæ§é ã®ã¢ãŒããã¯ãã£ãŒã«ã€ããŠã¯ã Tempo architecture | Grafana Tempo documentation ããåç
§ããŠãã ããã Alloy ã¯ãããã¡ã€ã«ãš RUM ã®äžç¶ã®ã¿ãæ
ã£ãŠããŸããæ¬ãã³ãºãªã³ã§ã¯ãæ±çšç㪠OpenTelemetry Collector ã§ã Grafana LGTM Stack ã«é£æºã§ããããšã衚ãããã®ã§ããããŠãããã¡ã€ã«ãš RUM ã®ã¿ã®æ±ãã«éå®ããŠããŸãã 芳枬察象㮠Web ã¢ããªã±ãŒã·ã§ã³ã¯ãWebUIãWebAPIãããã³ MySQL ã§æ§æããŸãã WebUI ãš WebAPI ã®æ§æã«ãããäž»ãªèæ
®äºé
ã¯ä»¥äžã®éãã§ãã Spring Boot ã§å®è£
ããã¢ããªã±ãŒã·ã§ã³ã§æ§æããŸãã ã¡ããªã¯ã¹ããã°ããã¬ãŒã¹ãããã³ãããã¡ã€ã«ã¯ãèªåèšè£
ã§åéããŠããã®ã§ãããžãã¹ããžãã¯ã«æåèšè£
ã®ããžãã¯ã¯äžåå®è£
ããŠããŸããã ç°åžžæ€ç¥ã®ã¢ã©ãŒãã¯ãã¢ã©ãŒãã¡ãŒã«ã®éç¥å
ããã³ãºãªã³ç°å¢å
ã§å®çµããããã«ãSMTP ãµãŒããŒãšåä¿¡ããã¡ãŒã«ãé²èЧã§ãã Web ã¡ãŒã«ãæèŒãã MailDev ã³ã³ãããå©çšããŸãã ç°å¢æ§ç¯ãåçš®èšå®ã«äœ¿çšããããããã®ãã¡ã€ã«ã¯ã以äžã® GitHub ãªããžããªã§å
¬éããŠããŸãã Toshiharu-Konuma-sti/hands-on-grafana ïŒæ¬ãã³ãºãªã³ã§äœ¿ãã¡ã€ã³ã®ãªããžããªã§ãã $ tree ~/handson/hands-on-grafana/ hands-on-grafana/ |-- container/ âŠâŠ ãç°å¢æ§ç¯ãç« ã§ã³ã³ããã®äœæã§äœ¿ãçŽ æ | |-- docker-compose.yml | : | `-- webapp/ âŠâŠ èŠ³æž¬å¯Ÿè±¡ãšãªã Web ã¢ããªã±ãŒã·ã§ã³ãæ§æãããªããžããªãåç
§ãããµãã¢ãžã¥ãŒã« Toshiharu-Konuma-sti/hands-on-rollingdice-webapp ïŒèŠ³æž¬å¯Ÿè±¡ãšãªã Web ã¢ããªã±ãŒã·ã§ã³ã®ãªããžããªã§ããã³ãºãªã³ã®ãªããžããªãããµãã¢ãžã¥ãŒã«ã§åç
§ãããŠããã®ã§ãæå³çã« Clone ããå¿
èŠã¯ãããŸããã $ tree ~/handson/hands-on-webapp-rolling-dice/ hands-on-webapp-rolling-dice/ : |-- mysql âŠâŠ Web äžå±€ã¢ãŒããã¯ãã£ã®ããŒã¿å±€ã«è©²åœããããŒã¿ããŒã¹ãæ§æããçŽ æ | |-- config | | `-- my.cnf | `-- init | `-- init.sql | |-- webapi âŠâŠ Web äžå±€ã¢ãŒããã¯ãã£ã®ãã¬ãŒã³ããŒã·ã§ã³å±€ã«è©²åœããããã³ããšã³ããµãŒããŒãæ§æããçŽ æ | |-- build.gradle | : | `-- webui âŠâŠ Web äžå±€ã¢ãŒããã¯ãã£ã®ã¢ããªã±ãŒã·ã§ã³å±€ã«è©²åœãã API ãµãŒããŒãæ§æããçŽ æ |-- build.gradle : ç°å¢æ§ç¯ WSL ç°å¢ã®æ§ç¯ Windows PC ã®å Žåã«ã¯ã ä»¥äžæé ãåèã« WSL ãš Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒUbuntuïŒç°å¢ãçšæããŸãã åæç°å¢æ§ç¯: WSL ç°å¢ on Windows Docker Engine ç°å¢ã®æ§ç¯ ã³ã³ããç°å¢ã䜿ããããä»¥äžæé ãåèã« Ubuntu ãž Docker Engine ç°å¢ãçšæããŸãã åæç°å¢æ§ç¯: Docker Engine on Ubuntu GitHub ãããã³ãºãªã³çšã®ãªããžããªååŸ ãã³ãºãªã³ãé²ããããã®ç°å¢æ§ç¯çšã®èšå®ãã¡ã€ã«ãã¹ã¯ãªãããå«ãã ãªããžããªã GitHub ããããŠã³ããŒãããŠååŸããŸãã æ¬ç« ã§ã¯ã¿ãŒããã«ãçšããŠãã³ãºãªã³ã®ãã©ã«ãé åãäœæããŠäœæ¥ã宿œããŸãã $ mkdir -p ~/handson/ $ cd ~/handson/ ã $ git clone ãã³ãã³ãã§æ¬ãã³ãºãªã³çšã®ãªããžããªãååŸããŸãã $ git clone https://github.com/Toshiharu-Konuma-sti/hands-on-grafana.git $ cd hands-on-grafana/ ã³ã³ããæ§ç¯ã¹ã¯ãªããã®å®è¡ æ¬ç« ã§ã¯ã¿ãŒããã«ãçšããŠä»¥äžã®ãã£ã¬ã¯ããªã§äœæ¥ã宿œããŸãã $ cd ~/handson/hands-on-grafana/container/ ã³ã³ããæ§ç¯çšã«çšæããŠããã¹ã¯ãªãããå®è¡ããŠããªãã¶ãŒãããªãã£ãŒç°å¢ã®åçš®ã³ã³ãããæ§ç¯ããŸããååã¯ã€ã¡ãŒãžã®ããŠã³ããŒããšäœæã«æéãããããŸãã®ã§ãã³ã³ãœãŒã«ã®è¡šç€ºãèŠå®ãã€ã€ãåŠçãå®äºãããŸã§ãã°ãããåŸ
ã¡ãã ããã $ ./CREATE_CONTAINER.sh ã³ã³ãããæ§ç¯ãããŠãã info ãªãã·ã§ã³ãä»ããŠã¹ã¯ãªãããå®è¡ãããšããã³ãºãªã³ã«å¿
èŠãªã¢ããªã±ãŒã·ã§ã³ã® URL ãªã©ã衚瀺ããããšãã§ããŸãã $ ./CREATE_CONTAINER.sh info /************************************************************ * Information: * - Access to Grafana Web ui tools with the URL below. * - Grafana: http://localhost:3000 * - dashboard(Prometheus): https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ * - dashboard(OpenTelemetry): https://grafana.com/grafana/dashboards/20352-opentelemetry-jvm-micrometer/ * - dashboard(Node Exporter): https://grafana.com/grafana/dashboards/1860-node-exporter-full/ : Grafana ã³ã³ããã皌åããã®ã§ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ããŸãã http://localhost:3000 Web ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã皌åããã®ã§ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ããŸãã http://localhost:8081/ Web ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã©ããã¯ã以äžã®ã³ãã³ãã§ã¢ããªã±ãŒã·ã§ã³ãã°ã確èªãããSpringãã®ããŽãåºåãããŠããã Web ã¢ããªã±ãŒã·ã§ã³ãå©çšã§ããç¶æ
ã®ç®å®ã«ãªããŸããã docker logs ãã«ç¶ãã³ãã³ãæ«å°Ÿã¯ãwebapp-webuiããwebapp-webapiãã®ããããã®ã³ã³ãããæå®ããŠç¢ºèªããŸãã $ docker logs webapp-webui > Task :bootRun . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.3) 2025-04-17T14:36:32.114Z INFO 412 --- [webui-app-yml] [ restartedMain] ... 2025-04-17T14:36:34.926Z INFO 412 --- [webui-app-yml] [ restartedMain] ,,, 2025-04-17T14:36:35.048Z INFO 412 --- [webui-app-yml] [ restartedMain] ... 2025-04-17T14:36:35.895Z INFO 412 --- [webui-app-yml] [ restartedMain] ... 2025-04-17T14:36:37.925Z INFO 412 --- [webui-app-yml] [ restartedMain] ... 2025-04-17T14:36:41.572Z INFO 412 --- [webui-app-yml] [nio-8081-exec-1] ... ãªããã³ã³ããæ§ç¯ã¹ã¯ãªããã§å®è¡ããå
容ã¯ä»¥äžãåç
§ããŠãã ããã ã³ã³ããæ§ç¯ã¹ã¯ãªããã®è§£èª¬ Web ã¢ããªã±ãŒã·ã§ã³ã®èª¬æ ãªãã¶ãŒãããªãã£ãŒã®å®æŒã«ç§»ãåã«ã芳枬察象ãšãªã Web ã¢ããªã±ãŒã·ã§ã³ã®ç»é¢æ§æãšæ©èœã説æããŸãã Web ããŒãžããã®ãªã¯ãšã¹ãããšã«ãµã€ã³ããæ¯ããçµæãšå±¥æŽã衚瀺ããŸãã ãRoll a diceãã¡ãã¥ãŒã«ã¯ãåçŽã«ãµã€ã³ããæ¯ã以å€ã«ãããã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ç·Žç¿çšã«ç¹æ®ãªæåããããªã³ã¯ãçšæããŠããŸãã Roll normally: ç¹å¥ãªåŠçãè¡ãããéåžžéããµã€ã³ããæ¯ããŸãã Sleep n sec at API: ãµã€ã³ããæ¯ãåã«ãåŠçæéãæå³çã«å»¶ã°ãããã«æå®ç§éã¹ãªãŒãããŸãã Loop n sec at API: ãµã€ã³ããæ¯ãåã«ãã·ã¹ãã ãžè² è·ãæããããã«æå®ç§éã«ãŒãããŸãã Trigger 5xx error at API: ãµãŒããŒåŽã§æå³çã«äŸå€ãçºçãããHTTP ã¹ããŒã¿ã¹ 500 ãšã©ãŒãèµ·ããããµã€ã³ããæ¯ãã®ãäžæããŸãã Force specific value: ãµã€ã³ãã®åºç®ããæå®ããå€ã§åŒ·å¶çã«åºå®ããŸãã RUM Simulation at Browser: RUM é¢é£ã®åäœç¢ºèªãè¡ããŸãã Trigger JS error at Browser: ãµãŒããŒãžã®ãªã¯ãšã¹ãã¯è¡ããããã©ãŠã¶ïŒããã³ããšã³ãïŒåŽã§ JavaScript ã®äŸå€ãæå³çã«çºçãããŸãã Fetch API: Normal: ç»é¢é·ç§»ãè¡ãããJavaScript (Fetch API) ããéåæéä¿¡ã§ ãµã€ã³ããæ¯ã WebAPI ãå®è¡ããŸãã Fetch API: Sleep 2 sec: 2ç§éã®ã¹ãªãŒããæç€ºããéåæéä¿¡ãå®è¡ããŸãã 芳枬察象ãšãªã Web ã¢ããªã±ãŒã·ã§ã³ã®ã·ãŒã±ã³ã¹ãšã³ã³ããŒãã³ã仿§ã説æããŸãã Web ã¢ããªã±ãŒã·ã§ã³ã¯ãWebUIãWebAPIãããã³ Database ã®ïŒã€ã®ã³ã³ããŒãã³ãã§æ§æããŸããWebUI ãš WebAPI 㯠Spring Boot ã®ãã¬ãŒã ã¯ãŒã¯ã§å®è£
ããDatabase 㯠MySQL ãå©çšããŸãã åã³ã³ããŒãã³ãã®ä»æ§ïŒ WebUIïŒWebUI ãã WebAPI ãžä»¥äž2ã€ã® API ãã³ãŒã«ããŠç»é¢è¡šç€ºãè¡ããŸãã WebAPI ã®ã/api/v1/dicesãã POST ã§ã³ãŒã«ããŠãµã€ã³ããæ¯ããŸãã WebAPI ã®ã/api/v1/dicesãã GET ã§ã³ãŒã«ããŠãµã€ã³ãåºç®ã®äžèЧãååŸããŸãã WebAPIïŒä»¥äž2ã€ã® API ãæã¡ãŸãã POST: /api/v1/dices ãµã€ã³ããæ¯ããåºç®ã Database ã«ä¿åããŸããWebAPI ãåŒã³åºãéã«ããã©ã¡ãŒã¿ãä»äžããããšã§èŠ³æž¬åãã®æ©èœãå®è¡ããŸãã sleep ãã©ã¡ãŒã¿ãä»äžãããšãæå®ç§éã¹ãªãŒããè¡ããŸãã loop ãã©ã¡ãŒã¿ãä»äžãããšãæå®ç§éã«ãŒãããã«ãŒãæ¯ã«ãã¡ã€ã«ãéããŠ1è¡èªããã£ã¹ã¯ã¢ã¯ã»ã¹ã®åŠçãè¡ããŸãã error ãã©ã¡ãŒã¿ã« true ãä»äžãããšããµã€ã³ããæ¯ããã«åŠçãäžæããHTTP ã¹ããŒã¿ã¹ã³ãŒã 500 ãšã©ãŒã§ API ãã¬ã¹ãã³ã¹ããŸãã GET: /api/v1/dices Database ãããµã€ã³ãåºç®ã®å
šå±¥æŽããæ¯ã£ãæ¥æã®éé ã§ååŸããŸãã Database ãµã€ã³ãã®åºç®ãæ¥æãããã³ã·ãŒã±ã³ã¹çªå·ã®ãã£ãŒã«ãã§æ§æããããŒãã«ãä¿æããŸãã ãªãã¶ãŒãããªãã£ãŒã®å®æŒ ã¡ããªã¯ã¹é²èЧ (Mimir) 芳枬察象㮠Web ã¢ããªã±ãŒã·ã§ã³ïŒMicrometer å®è£
ïŒãããã³ Node Exporter ããåéãããã¡ããªã¯ã¹ããMimir ãžãšéä¿¡ãããŠããŸãããŸã㯠Grafana ã®ããã·ã¥ããŒãã䜿ã£ãŠããããã®ã¡ããªã¯ã¹ãå¯èŠåããŠã¿ãŸãããã Grafana å
¬åŒãµã€ãã§ã¯ãããŒã¿ãœãŒã¹ãçšéã«åãããæ°å€ãã®ããã·ã¥ããŒããã³ãã¬ãŒããå
¬éãããŠããŸããä»åã¯ãã®äžãããMicrometer (Prometheus 圢åŒ) ã®ã¡ããªã¯ã¹ã衚瀺ããã®ã«é©ããã JVM (Micrometer) | Grafana Labs ããå©çšããŠãã¡ããªã¯ã¹ãçºããããããã«ããŠã¿ãŸãã å·Šãã€ã³ã®ã¡ãã¥ãŒãããDashboardããéžæã㊠Dashboards ç»é¢ã衚瀺ããç»é¢å³åŽã®ãNewããã¿ã³ãã¯ãªãã¯ãããšè¡šç€ºãããã¡ãã¥ãŒãããImportããéžã³ãŸãã ç»é¢äžå€®ã®ããã¹ãããã¯ã¹ã«ã€ã³ããŒããããJVM (Micrometer)ãããã·ã¥ããŒããã³ãã¬ãŒãã® URL ãå
¥åããLoadããã¿ã³ãã¯ãªãã¯ããŸãã ããã·ã¥ããŒããã³ãã¬ãŒãã® URLïŒ https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ ã€ã³ããŒãããããã·ã¥ããŒãã®èšå®ç»é¢ã衚瀺ïŒããã·ã¥ããŒãã«ããèšå®å
容ã¯ç°ãªãïŒãããã®ã§ãæ¬ãã³ãã¬ãŒãã§ã¯ããŒã¿ãœãŒã¹ãšãªã Prometheus ãéžæããŠãImportããã¿ã³ãã¯ãªãã¯ããŸãã Prometheus é
ç®ïŒãMimir for Metricsã ããã·ã¥ããŒãã衚瀺ãããŸãããããã§ Web ã¢ããªã±ãŒã·ã§ã³ããéä¿¡ãããã¡ããªã¯ã¹æ
å ±ã確èªã§ããŸãã ãªããGrafana ã Web ã¢ããªã±ãŒã·ã§ã³ãèµ·åããçŽåŸã®å Žåãããã©ã«ãã®è¡šç€ºæéïŒLast 24 hoursïŒã§ã¯ããŒã¿å¹
ãå°ããããŠã°ã©ãã衚瀺ãããªãããšããããŸãããã®å Žåã¯ãç»é¢å³äžã®æéèšå®ããLast 15 minutesããªã©ã«å€æŽãã衚瀺æéãçããŠã¿ãŠãã ããã æ¬ãã³ãºãªã³ã® Grafana ã§ã¡ããªã¯ã¹ã衚瀺ã§ããããã·ã¥ããŒããã³ãã¬ãŒããšãèšå®ç»é¢ã§èšå®ããå€ã玹ä»ããŸãããªããå
¬åŒãµã€ãã«ã¯ç޹ä»ãããã³ãã¬ãŒã以å€ã«ãæ§ã
ãªãã³ãã¬ãŒãã玹ä»ãããŠããã®ã§ãæ€çŽ¢ããŠãèªåã«åã£ããã³ãã¬ãŒããæ¢ããŠã¿ãŠãã ããã JVM (Micrometer) | Grafana Labs Micrometer (Prometheus 圢åŒ) ã®ã¡ããªã¯ã¹ã衚瀺ããŸãã Prometheus é
ç®ïŒãMimir for Metricsã OpenTelemetry JVM Micrometer | Grafana Labs Micrometer (OpenTelemetry 圢åŒ) ã®ã¡ããªã¯ã¹ã衚瀺ããŸãã Mimir é
ç®ïŒãMimir for Metricsã Loki é
ç®ïŒãLokiã Node Exporter Full | Grafana Labs Node Exporter ã®ã¡ããªã¯ã¹ã衚瀺ããŸãã Mimir é
ç®ïŒãMimir for Metricsã ãã°é²èЧ (Loki) Web ã¢ããªã±ãŒã·ã§ã³ãåºåãããã°ã Loki ã§åéã»éçŽããŠããŸããããã«ãããåãµãŒããŒãã³ã³ãããžåå¥ã«ãã°ã€ã³ããããšãªããGrafana ã®ç»é¢äžã ãã§ãã°ã®æ€çŽ¢ã»é²èЧãå®çµããŸãã ããã§ã¯ãå®éã« Web ã¢ããªã±ãŒã·ã§ã³ãæäœãããã®æåã«åãããŠãªã¢ã«ã¿ã€ã ã«ãã°ãåºåãããæ§åã確èªããŠã¿ãŸãããã å·Šãã€ã³ã®ã¡ãã¥ãŒãExploreããéžæã㊠Explore ç»é¢ã衚瀺ããããŒã¿ãœãŒã¹ã®ããããããŠã³ãããLokiããéžã³ãLabel browserããã¿ã³ãã¯ãªãã¯ããŸãã Label browser ç»é¢ã«ãŠãæ€çŽ¢å¯Ÿè±¡ã®ã©ãã«ãšããŠãservice_nameããå€ãšããŠãwebapp-webuiãã®é çªã§éžæããŠãããShow logsããã¿ã³ãã¯ãªãã¯ããããšã§ãwebapp-webui ã³ã³ããã®ã¢ããªã±ãŒã·ã§ã³ãã°ã衚瀺ã§ããŸãã å€ãšããŠãwebapp-webapiããéžæããã°ãwebapp-webapi ã³ã³ããã®ã¢ããªã±ãŒã·ã§ã³ãã°è¡šç€ºãæå®ã§ããŸãã éè²ãRun queryããã¿ã³å³ç«¯ã®äžç¢å°ãã¯ãªãã¯ãããšè¡šç€ºãããªããŒãééäžèЧããã5sããéžæããããšã§ããã°è¡šç€ºã5ç§ééã§èªåçã«ãªããŒããããããããªã¢ã«ã¿ã€ã ã§ãã°ã確èªããããšãã§ããŸãã ãã°ããªã¢ã«ã¿ã€ã ã«è¡šç€ºããããšã確èªãããã®ã§ããŠãŒã¶ãŒã®ç«å Žã§ Web ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ããŠãµã€ã³ããæ¯ããŸãã http://localhost:8081/ åã³éçšæ
åœã®ç«å Žã§ Grafana ã«æ»ããšãµã€ã³ããæ¯ã£ããã°ã衚瀺ãããŠããŠããã°ãçºããŠã¿ããšå
ã»ã© Web ã¢ããªã±ãŒã·ã§ã³ã§è¡šç€ºãããŠãããµã€ã³ãã®åºç®ãšåãå€ã瀺ãã¡ãã»ãŒãžãååšããããšã確èªã§ããã¯ãã§ãã ãã°ããäžã€ã¡ãã»ãŒãžãéžãã§ã¯ãªãã¯ãããšå±é衚瀺ãã詳现æ
å ±ã確èªã§ããŸãã ã+ Operationsãã䜿ãããšã§ãã°ã®è¡šç€ºãçµã蟌ãããšãã§ããŸãã ããäœ¿ãæ€çŽ¢æå®ãäŸç€ºããŸãã ã+ Operations > Label filters > Label filter expressionãïŒã©ãã«ãæŒç®åãå€ã®çµã¿åããã§æ€çŽ¢ããŸããïŒäŸïŒãdetected_level = errorãã¯ããšã©ãŒã¬ãã«ã§çµã蟌ãããšãæå³ããŸãïŒ ã+ Operations > Line filters > Line containsãïŒå€§æåãšå°æåãåºå¥ããå®å
šäžèŽã§æååæ€çŽ¢ããŸãã ã+ Operations > Line filters > Line contains case insensitiveãïŒå€§æåãšå°æåãåºå¥ããæååæ€çŽ¢ããŸãã ãã°ãããã¬ãŒã¹é²èЧ (Loki to Tempo) ã¢ããªã±ãŒã·ã§ã³ãã°ã®ç¢ºèªãã§ããããæ¬¡ã¯ãã°ãšãã¬ãŒã¹ã®é£æºæ©èœãäœéšããŠã¿ãŸãããã ãã°äžèЧããä»»æã®äžè¡ãéžæããããããçŽä»ããŠãããã¬ãŒã¹æ
å ±ãžãžã£ã³ãããŸãã ãã¬ãŒã¹ãé²èЧããããšã§ããŠãŒã¶ãŒã®ãªã¯ãšã¹ãããã¬ã¹ãã³ã¹ã«è³ããŸã§ã®äžé£ã®åŠçãããŒããååŠçããšã®æèŠæéããŠã©ãŒã¿ãŒãã©ãŒã«åœ¢åŒã§èŠèŠçã«ææ¡ã§ããŸãããããããã®åŠçã§ãã©ã®ãããæéãããã£ãŠãããããäžç®çç¶ã«ãªãæ§åã確èªããŠãã ããã ãã°è¡šç€ºã®äžããæ°ã«ãªããã°ãéžã³ãŸãã éžãã ãã°ãã¯ãªãã¯ããŠè©³çްæ
å ±ã衚瀺ããŸãã 詳现æ
å ±ãäžã«ã¹ã¯ããŒã«ãããšãLinksãã®ã»ã¯ã·ã§ã³ã«ïŒéããŠããå Žåã¯ã¯ãªãã¯ããŠå±éãããšïŒãTempoããžã®é£æºãã¿ã³ãããã®ã§ãã¯ãªãã¯ããããšã§è©²åœãã°ã®ãã¬ãŒã¹ãç»é¢ãã¹ããªããããŠå³ååã«è¡šç€ºãããŸãã å
ãã衚瀺ãããŠããç»é¢å·Šååã®ãã°è¡šç€ºåŽã§ãå³äžéšã«ããäžç¹ãªãŒããŒãã¯ãªãã¯ãããšè¡šç€ºãããCloseãã¡ãã¥ãŒãã¯ãªãã¯ãããšãã¬ãŒã¹ãå
šé¢è¡šç€ºã«ãªããŸãã Web ã¢ããªã±ãŒã·ã§ã³ã®1ãªã¯ãšã¹ãã§ãWebUI ãã WebAPIããã㊠WebAPI ããããŒã¿ããŒã¹ãžé£æºããŠå®è¡ãããäžé£ã®åŠçãããŒãšãåãããŒã§æãã£ãåŠçæéã確èªããããšãã§ããŸãã 衚瀺ãããã¬ãŒã¹ãšã¢ããªã±ãŒã·ã§ã³ä»æ§ã§èª¬æããã·ãŒã±ã³ã¹å³ãæ¯èŒãããšãå®éã«å®è¡ãããåŠçãããŒãã·ãŒã±ã³ã¹ä»æ§ãšäžèŽããŠããããšã確èªã§ããŸãã å¥ã®ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹äºäŸãšããŠãWeb ã¢ããªã±ãŒã·ã§ã³ååèµ·åæã®1åç®ã«ãµã€ã³ããæ¯ã£ãéã®ãã¬ãŒã¹ãšã2åç®ä»¥éã®ãã¬ãŒã¹ãæ¯ã¹ãŠã¿ãŸããããã°ã©ã ååèµ·åæã«ã¯ããªããžã§ã¯ãã®çæãå€éšãªãœãŒã¹ã®æ¥ç¶æºåãªã©ã§åŠçã®ãªãŒããŒããããé«ãåŠçæéãæãããšäžè¬çã«èšãããŠããŸãããå®éã«ãã¬ãŒã¹ãæ¯ã¹ãŠã¿ããšãã®äºå®ã確èªããããšãã§ããŸãã å床ãã¬ãŒã¹æ©èœã®èª¬æã«æ»ããŸããã ããããã®ãã¬ãŒã¹ãã¯ãªãã¯ããŠè©³çްæ
å ±ãå±éãããšãLog for this spanããã¿ã³ã衚瀺ãããã¯ãªãã¯ãããšãã¬ãŒã¹ãããã°ãžã®è¡šç€ºãå¯èœã§ãã ãŸããç»é¢äžéšã«ãããService Graphãã¿ããã¯ãªãã¯ããããšã§ãNode Graphãã衚瀺ãããåã³ã³ããŒãã³ãéã§çããéä¿¡ã®é¢ä¿æ§ã確èªã§ããŸãã æ¬ãã³ãºãªã³ã§ã¯ user ã webapp-webui ã ãã§ã¯ãªããwebapp-webui ãš webapp-webapi ã®äž¡æ¹ã«ãã¢ã¯ã»ã¹ãçããŠããã®ã¯ãOpenTelemetry Collector ã Prometheusãããã³ã«ã§äž¡æ¹ã®ã³ã³ããŒãã³ããžå®æçã«ã¡ããªã¯ã¹ãååŸããã¢ã¯ã»ã¹ãçºçããŠããããããã user ããã®ã¢ã¯ã»ã¹ãšããŠèªèãããŠããããã§ãã ã¡ããªã¯ã¹ãããã¬ãŒã¹é²èЧ (Mimir to Tempo) ç¶ããŠãã¡ããªã¯ã¹ïŒæ°å€ã®å€åïŒãããã¬ãŒã¹ïŒè©³çްãªåŠçãããŒïŒãžã®é£æºã確èªããŸãã Web ã¢ããªã±ãŒã·ã§ã³ããéä¿¡ããã MicrometerïŒPrometheus 圢åŒïŒã®ã¡ããªã¯ã¹ãç¹ã« HTTP ãªã¯ãšã¹ãã®ããã©ãŒãã³ã¹ã瀺ã http_server_requests_seconds_bucket ãªã©ã«ã¯ãExemplar ãšåŒã°ããæ©èœã«ãã£ãŠ Trace ID ãçŽä»ããããŠããŸãã Grafana ã®ã°ã©ãããã«äžã«è¡šç€ºããã ExemplarïŒç¹ãã²ã圢ã®ããŒã¯ïŒãã¯ãªãã¯ããããšã§ããã®æç¹ã®å
·äœçãªãªã¯ãšã¹ãã®ãã¬ãŒã¹ãžçŽæ¥ãžã£ã³ãããããšãã§ããŸããã°ã©ãã§ãé
ãããšæããç®æã®è£åŽãå³åº§ã«ç¹å®ã§ãã䟿å©ããäœéšããŠã¿ãŸãããã Explore ã§ããŒã¿ãœãŒã¹ã«ãMimir for MetricsããéžæãããCodeãå
¥åã¢ãŒãã«åãæ¿ããŠããäžã«æ²èŒãã Prom QL ã¯ãšãªãŒãå
¥åããŸããã¯ãšãªãŒãå
¥åãããããExemplarãã¹ã€ããããªã³ã«ããŠãRun Queryããã¿ã³ãã¯ãªãã¯ãããšãExemplar ãæå¹ãšãªã£ãã¡ããªã¯ã¹ã®ã°ã©ãã衚瀺ãããŸãã å
¥åãã Prom QL ã¯ãšãªãŒã¯ä»¥äžã®éãã§ãã histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket[$__rate_interval])) by (le)) ä»åºŠã¯ãŠãŒã¶ãŒã®ç«å Žã§ Web ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ããŸããGrafana ã§ã¡ããªã¯ã¹ã®ã°ã©ãå€åãåãããããããã«ãããããWeb ã¢ããªã±ãŒã·ã§ã³ã®ãRoll a diceãã¡ãã¥ãŒã§ãã2. Sleep 05 sec at APIãããã4. Sleep 30 sec at APIããŸã§ãäžããé çªã«ãäžã€ã¯ãªãã¯ãããå°ãééã眮ããŠããæ¬¡ãã¯ãªãã¯ããŠãç¹°ãè¿ããŠãµã€ã³ããæ¯ã£ãŠã¿ãŸãã ç¶ããŠéçšæ
åœã®ç«å Žã§ Grafana ã«æ»ããŸããã¡ããªã¯ã¹ã®ã°ã©ãã«å°äžå€§ã®3ã€ã®å±±ãçŸããŠããŸããExemplar ãæå¹ã«ããŠãããããããããã®å±±é ã®å·Šæšªã«ã¯ HTTP ãªã¯ãšã¹ãã瀺ãç¹ãååšããŠããŸãã æ°ã«ãªã HTTP ãªã¯ãšã¹ãã«å¯ŸããŠããŠã¹ãªãŒããŒãããšè©³çްæ
å ±ãæ²èŒããããŠã£ã³ããŠãçŸããTempo ãžé£æºã§ãããQuery with Tempoããã¿ã³ã衚瀺ãããŠããŸãã ãŠã£ã³ããŠå
ã®ãQuery with Tempoããã¿ã³ãã¯ãªãã¯ãããšã詳现衚瀺ããŠãããªã¯ãšã¹ãã®ãã¬ãŒã¹ãç»é¢å³ååã«è¡šç€ºããããšãã§ããã ãã°ãããã¬ãŒã¹é²èЧ (Loki to Tempo) ãç« ã§èª¬æããããã«ãã¬ãŒã¹ã§åæãè¡ãããšãå¯èœã§ãã ãããã¡ã€ã«ã§è§£æ (Pyroscope) ã¡ããªã¯ã¹ããã¬ãŒã¹ã§ãé
ãåŠçããèŠã€ãããšããŠããå
·äœçãªã³ãŒãã®ã©ãã«åå ãããããŸã§ã¯åãããªãããšããããŸããããã§ Pyroscope ãçšãããããã¡ã€ãªã³ã°ãè¡ããŸãã ããã§ã¯ãCPU 䜿çšçãã¡ã¢ãªå²ãåœãŠç¶æ³ãå¯èŠåããããã¬ãŒã ã°ã©ã (Flame Graph)ããå©çšããŠãã¢ããªã±ãŒã·ã§ã³ã®å
éšç¶æ
ãè§£æããŸãããªãœãŒã¹ãéå°ã«æ¶è²»ããŠãã颿°ãã¡ãœããããã³ãã€ã³ãã§ç¹å®ããæé ãäœéšããŠã¿ãŸãããã Explore ã«ãŠããŒã¿ãœãŒã¹ã«ãPyroscopeããéžæããçŽäžã®ããããããŠã³ãããªãœãŒã¹ãšããŠãprocess_cpu > cpuãã®é çªã§ CPU ã®å©çšæéãéžæããŸããããããããŠã³æšªã®ããã¹ãããã¯ã¹ã«ã {service_name="webapp-webapi"} ãã®æ¡ä»¶åŒãå
¥åããŠãRun Queryããã¿ã³ãã¯ãªãã¯ãããš WebAPI ã察象ãšãããããã¡ã€ã«ã衚瀺ãããŸãã å
¥åããæ¡ä»¶åŒã¯ä»¥äžã®éãã§ãã WebUI ã察象ãšããå Žåã«ã¯ã {service_name="webapp-webui"} ããå
¥åããŸãã WebAPI ã察象ãšããå Žåã«ã¯ã {service_name="webapp-webapi"} ããå
¥åããŸãã ãRun Queryããã¿ã³å³ãããã¯ãªãã¯ãäžèЧããã5sããéžæãããšã5ç§ééã§ãªããŒããããã®ã§ãªã¢ã«ã¿ã€ã ã§ãããã¡ã€ã«ã確èªã§ããŸãã ãããã¡ã€ã«è¡šç€ºã®å·Šäžã«ããããã¹ãããã¯ã¹ã§çµã蟌ã¿ãè¡ãããšãã§ããŸãã詊ãã«ãjavaãã§å
¥åããŠã¿ããšãJava èšèªã®ã¯ã©ã¹ãã¡ãœããããªãœãŒã¹ãå©çšããå€ã衚瀺ãããŸããã銎æã¿ãª Java æšæºã¯ã©ã¹åãã¡ãœããåãããã°ããããããªãœãŒã¹ãè²»ãããŠãããšèšãããšã衚ããŸãã ä»åºŠã¯ãjp/siosãã§çµã蟌ãã§ã¿ããšããã³ãºãªã³çšã«å®è£
ãã Web ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ããªãœãŒã¹ã«è²»ãããå€ã衚瀺ããããšãã§ããŸããå€ã確èªããŠä»ã®å€ããæããã§ãŠå€§ããã·ã³ãã«ãããå Žåã«ã¯ãããŒããŠã§ã¢ãªãœãŒã¹ãå æããŠå©çšããŠããå¯èœæ§ããããããããžãã¹ããžãã¯ã®å®è£
ãèŠçŽããŠé ãããšãæ€èšããŸãããã£ããã£ãŒããå®çžŸã§ã¯å€§ããªå€ã§ã¯ç¡ãã®ã§ãåé¡ãªããšèšã£ãŠããã§ãããã ãããã¡ã€ã«ã®åºç€çãªè¡šç€ºæ¹æ³ãåãããŸããã®ã§ããããã¡ã€ã«ã®æŽ»çšäºäŸã詊ããŠã¿ãŸãããŠãŒã¶ãŒã®ç«å Žã§ Web ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ããŠãã¡ãã¥ãŒã2. Sleep 5 sec at APIãããã4. Sleep 30 sec at APIããäžããé ã«ã¯ãªãã¯ããŠãWebAPI ã§æéãæããåŠçãå®è¡ããŠã¿ãŸãã éçšæ
åœã®ç«å Žã§ Grafana ã«æ»ãããããã¡ã€ã«ã確èªããŸãããªã¢ã«ã¿ã€ã æŽæ°ãããããŸãæ«ãçºããŸãããSleep åŠçã§ã¯ããã»ã© CPU ã䜿ã£ãŠããªãããã倧ããå€ãå€ãã£ãŠããªãããšã確èªã§ããã¯ãã§ãã å床ãŠãŒã¶ãŒã®ç«å Žã§ Web ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ããŠãä»åºŠã¯ã¡ãã¥ãŒã5. Loop 5 sec at APIãããã7. Loop 30 sec at APIããäžããé ã«ã¯ãªãã¯ããŠãWebAPI ã§æéãæããåŠçãå®è¡ããŠã¿ãŸãã éçšæ
åœã®ç«å Žã§ Grafana ã«æ»ãããããã¡ã€ã«ã確èªããŸããåŒãç¶ãããªã¢ã«ã¿ã€ã æŽæ°ãããããŸãæ«ãçºãããšãä»åºŠã¯ãmsïŒããªç§ïŒããããsïŒç§ïŒããžåäœãå€ãããå€ã倧ããå¢ããããã»ã¹ãååšããããšã確èªã§ããã¯ãã§ããããå°ã詳现ã«è¿«ã£ãŠã¿ãŸãããã 倧ããå€ãå¢ããããã»ã¹ãæœåºããŸãã jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.readFileïŒ47.5 s jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.lambda$loop$1ïŒ47.9 s jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl$$Lambda_.acceptïŒ47.9 s jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.loopïŒ47.9 s jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.rollDiceïŒ48.0 s jp/sios/apisl/handson/rollingdice/webapp/webapi/controller/WebApiController.rollDiceïŒ48.0 s WebAPI ã®ã·ãŒã±ã³ã¹å³ã«å€§ããå€ãå¢ããããã»ã¹ããããã³ã°ããŠã¿ããšãäžçªæ·±ãéå±€ã§ã³ãŒã«ããããWebApiServiceImpl.readFileããèŠå ã§ããããšãæ³åã§ããŸãã ãããã¡ã€ã«ç»é¢ã§ç€ºããšèµ€æ ã®äžè¡ã«çµã蟌ããããšã«ãªããŸãã å®éã«ãœãŒã¹ã³ãŒããèŠãŠã¿ããšãã«ãŒãåŠçã®äžã§ãéœåºŠãã¡ã€ã«ãéããŠèªã¿èŸŒã readFile ã¡ãœãããåŒã°ããŠããããšãåãããŸããããã«ãããã«ãŒãåæ°åã®ãã¡ã€ã«ã¢ã¯ã»ã¹ïŒïŒãã£ã¹ã¯ã¢ã¯ã»ã¹ïŒãçºçããããã«äŒŽã£ãŠ CPU ãªãœãŒã¹ãæ¶è²»ãããŠããããšãã³ãŒãã¬ãã«ã§ãè£ä»ããããŸãã webapp/webapi/src/main/java/jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.java : while (System.currentTimeMillis() < endTime) { line = this.readFile(FILE_PATH_IN_LOOP); : } : webapp/webapi/src/main/java/jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.java private String readFile(final String filePath) { String line = null; try (InputStream inputStream = new ClassPathResource(filePath).getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { LOGGER.debug("Successfully loaded a file."); line = reader.readLine(); : æ¹ããŠã·ãŒã±ã³ã¹å³ã§è§£æçµæãæŽçãããšãæå®æéå
ã«ãã£ã¹ã¯ã¢ã¯ã»ã¹åŠçãã«ãŒãã§é£ç¶å®è¡ããããããCPU å©çšæéãè¥å€§åããŠãããšèšããŸãã ä»åã¯ãããã¡ã€ã«ãçšããŠããã«ããã¯ãç¹å®ããæé ãåŠã¶ãæå³çãªå®è£
ãã®ããä¿®æ£ã¯è¡ããŸããããå®éã®éçšã³ãŒãã§ããã°ããã¡ã€ã«èªã¿èŸŒã¿ãã«ãŒãã®å€ã«åºãããããã¯ãã£ãã·ã¥ãå©çšããŠãã£ã¹ã¯ã¢ã¯ã»ã¹ãæžãããšãã£ãããã©ãŒãã³ã¹ã®ãã¥ãŒãã³ã°ãè¡ããšè¯ãã§ãããã ãªãªãžãã«ã®ããã·ã¥ããŒãäœæ ãããŸã§ã®æé ã§ã¯ãExplore ç»é¢ã䜿çšããŠããã®éœåºŠããŒã¿ãœãŒã¹ãã¯ãšãªãæå®ãããã¢ãããã¯ãªåæããè¡ã£ãŠããŸããã ãããå®éã®éçšã§ã¯ãéèŠãªææšãé »ç¹ã«ç¢ºèªãããã°ãåžžã«è¡šç€ºãããå®ç¹èŠ³æž¬ããããšãæ±ããããŸããããã§ãããèŠãæ€çŽ¢æ¡ä»¶ãã°ã©ããããã«ãšããŠä¿åãããã€ã§ãå³åº§ã«ã·ã¹ãã ã®ç¶æ
ãææ¡ã§ãããªãªãžãã«ã®ããã·ã¥ããŒããäœæããŠã¿ãŸãããã Explore ã§è¡šç€ºããŠããã¡ããªã¯ã¹ãããã·ã¥ããŒãåããããšããŸããã¡ããªã¯ã¹ã衚瀺ããŠããç¶æ
ã§ãç»é¢äžéšã«ãããAddããã¿ã³ãã¯ãªãã¯ãããšè¡šç€ºããã¡ãã¥ãŒãããAdd to dashboardããã¯ãªãã¯ããŸãã 衚瀺ããããAdd panel to dashboardããã€ã¢ãã°ã§ãOpen dashboardããã¿ã³ãã¯ãªãã¯ããŸãã å
ã»ã©ãŸã§ Explore ã§è¡šç€ºãŠããã¡ããªã¯ã¹ãããã«åããŠèŒã£ãæ°ããªããã·ã¥ããŒããçæãããŸããã ãã©ãŠã¶ã§æ°ããªã¿ããç«ã¡äžããŠã次ã«ããã·ã¥ããŒãã«èŒããããã°ã Explore ã§è¡šç€ºãããã¡ããªã¯ã¹åæ§ã«ãAdd > Add to dashboardããéžæããŠããã·ã¥ããŒãåããŸãã ã¡ããªã¯ã¹åæ§ã«ãExplore ã§è¡šç€ºãŠãããã°ãããã«åããŠèŒã£ãæ°ããªããã·ã¥ããŒããçæãããŸãããããã°ã®ããã«ãã¡ããªã¯ã¹ã®ããã·ã¥ããŒãã«ã³ããŒïŒããŒã¹ããããããããã«å³äžè§ã®äžç¹ãªãŒããŒãã¯ãªãã¯ããããšè¡šç€ºããã¡ãã¥ãŒãããMore⊠> Copyããã¯ãªãã¯ããŠããã°ã®ããã«ãã¯ãªããããŒãã«ã³ããŒããŸãã æåã«äœã£ãã¡ããªã¯ã¹ã®ããã·ã¥ããŒãã«æ»ãããAddããã¿ã³ã¯ãªãã¯ã§è¡šç€ºããã¡ãã¥ãŒãããPaste panelããã¯ãªãã¯ããŸãã ã¡ããªã¯ã¹ãšãã°ã®ããã«ãèŒã£ãããã·ã¥ããŒããåºæ¥äžãããŸããããã®ãããªæµãã§ãé »ç¹ã«ç¢ºèªãããé
ç®ããŸãšããç°¡æçãªãªãªãžãã«ããã·ã¥ããŒããäœæããããšãã§ããŸãã ãããŸã§ã®æé ãš Variables ã䜿ã£ãŠãµã³ãã«ãšããŠäœã£ãããã·ã¥ããŒããçšæããŠãããŸãã®ã§ãDashboards ç»é¢ãã確èªããŠã¿ãŠãã ããã ã¡ããªã¯ã¹ããã°ãããŒãã°ã©ãã®ããã«ãèŒã£ãããã·ã¥ããŒãã§ãServer Address ãã£ãŒã«ãã§ãwebapp-webuiããwebapp-webapiããéžæããããšã§è¡šç€ºãåãæ¿ããããšãã§ããŸãããEditããã¿ã³ã䜿ã£ãŠæ§æãä»çµã¿ã確èªããŠã¿ãŠãã ããã ããã³ããšã³ãã®ãŠãŒã¶ãŒäœéšèŠ³æž¬ (Faro) ãããŸã§ã®æé ã§ã¯ãµãŒããŒãµã€ãã®å
éšç¶æ
ã芳枬ããŠããŸãããããŠãŒã¶ãŒãå®éã«è§Šãããã©ãŠã¶äžïŒããã³ããšã³ãïŒã§ã®äœéšãåæ§ã«éèŠã§ãã æ¬ç°å¢ã«ã¯ Grafana Faro Web SDK ãçµã¿èŸŒãŸããŠãããå®éã®ãŠãŒã¶ãŒäœéšïŒReal User Monitoring: RUMïŒãå¯èŠåã§ããŸããããŒãžã®èªã¿èŸŒã¿é床ãªã©ã®ããã©ãŒãã³ã¹ææšïŒWeb VitalsïŒãããã©ãŠã¶ã§çºçãã JavaScript ãšã©ãŒããããŠãŠãŒã¶ãŒãå©çšããŠãããã©ãŠã¶ã®çš®é¡ã OS ãšãã£ãç°å¢ããšã®ã¢ã¯ã»ã¹åŸåã確èªããŠã¿ãŸãããã RUM ã®èŠ³æž¬çšã«ããã·ã¥ããŒããçšæããŠãããŸããããã·ã¥ããŒãäžèЧãããMy Real-time User MonitoringããéžæããŸãã ããã·ã¥ããŒãã«é·ç§»ãããšããŸãå§ãã«ãPerformanceãã®ããã«ã§ããã©ãŒãã³ã¹ã«é¢ããåçš®å€ã確èªã§ããŸãã 確èªã§ãã代衚çãªå€ã¯ä»¥äžã確èªãã ããã TTFB (Time to First Byte)ïŒãµãŒããŒã®å¿çåŸ
ã¡æéã§ãããã©ãŠã¶ããªã¯ãšã¹ããéã£ãŠãããæåã®ããŒã¿ãè¿ã£ãŠãããŸã§ã®æéãæããŸããïŒåç
§å
ïŒ Time to First Byte (TTFB) | Articles | web.dev ïŒ FCP (First Contentful Paint)ïŒãäœãã衚瀺ããããŸã§ã®æéãã§ããããã¹ããç»åãªã©ãããŒãžã®äžéšãåããŠæç»ãããæç¹ãæãããã®å€ã«ã¯ TTFB ã®æéãå«ã¿ãŸããïŒåç
§å
ïŒ First Contentful Paint (FCP) | Articles | web.dev ïŒ LCP (Largest Contentful Paint)ïŒãã¡ã€ã³ã³ã³ãã³ãã衚瀺ããããŸã§ã®æéãã§ãããã®ããŒãžã§æã倧ããªç»åãããã¹ããããã¯ã衚瀺ãããæç¹ãæãããã®å€ã«ã¯ TTFB ã FCP ã®æéããã¹ãŠå«ãã ããŒã¿ã«ã¿ã€ã ã§ããïŒ Largest Contentful Paint (LCP) | Articles | web.dev ïŒ CLS (Cumulative Layout Shift)ïŒãèŠèŠçãªãºã¬ã®éãã§ããç»åã®é
å»¶èªã¿èŸŒã¿ãªã©ã§ã¬ã€ã¢ãŠããã¬ã¯ããšãºã¬ã床åãã瀺ããŸããæ°å€ãäœãã»ã©ãç»é¢ãå®å®ããŠããŸããïŒåç
§å
ïŒ Cumulative Layout Shift (CLS) | Articles | web.dev ïŒ FID (First Input Delay)ïŒãæäœå¯èœã«ãªããŸã§ã®é
å»¶ãã§ãããŠãŒã¶ãŒããã¿ã³ãã¯ãªãã¯ããŠããããã©ãŠã¶ãå®éã«ãã®åŠçãéå§ã§ãããŸã§ã®åŸ
æ©æéãæããŸããïŒåç
§å
ïŒ First Input Delay (FID) | Articles | web.dev ïŒ æ¬¡ã«ãMetaãã®ããã«ã§ã¯ã©ã€ã¢ã³ãã®OSããã©ãŠã¶ãªã©ã®ã¡ã¿æ
å ±ã確èªã§ããŸãã æ¬¡ã«ãExceptionsãã®ããã«ã§ã¯ã©ã€ã¢ã³ããµã€ãã§çºçããäŸå€ïŒãšã©ãŒïŒã«é¢ããåçš®å€ãåç
§ããããã«ãWeb ã¢ããªã±ãŒã·ã§ã³ã§äŸå€ãçºçãããŸãããã©ãŠã¶ã®æ€èšŒãŠã£ã³ããŠïŒããããããŒããŒã«ïŒã衚瀺ããŠããç¶æ
ã§ãWeb ã¢ããªã±ãŒã·ã§ã³ã® Roll a dice ã¡ãã¥ãŒããã10. RUM Simulation at Browser > Trigger JS errorãã®ãªã³ã¯ãã¯ãªãã¯ãããšãç»é¢äžå€®ã«ãšã©ãŒçºçãç¥ãããã¡ãã»ãŒãžïŒããŒã¹ãéç¥ïŒãäžç¬è¡šç€ºãããè£åŽã§ã¯äŸå€ãçºçããããšãæ€èšŒãŠã£ã³ããŠã§ã確èªã§ããã¯ãã§ãã ããã·ã¥ããŒãã«æ»ããExceptionsãã®ããã«ã§äŸå€ã®çºçä»¶æ°ãäŸå€æã«åºåãããã¡ãã»ãŒãžãªã©ã確èªã§ããŸãã æ¬¡ã«ãEventsãã®ããã«ã§ãŠãŒã¶ãŒæäœãã©ã€ããµã€ã¯ã«ã®å€åãçºçããåæ°ãåç
§ã§ããŸãã æ¬¡ã«ãFaro logãã®ããã«ã§ãããŸã§ã®éèšã®å
ãšãªã£ãŠããå®éã®ãã°ã確èªã§ããŸãã ã¢ã©ãŒããããšã©ãŒåå ã®æ¢çŽ¢ (Alerting) å®éã®éçšçŸå Žã«ãããŠã24æé365æ¥ãã£ãšããã·ã¥ããŒããç£èŠãç¶ããããšã¯çŸå®çã§ã¯ãããŸãããã·ã¹ãã å
ã§ç°åžžãçºçããéã«ã¯ãèªåçã«éç¥ãåãåãä»çµã¿ãå¿
èŠã§ãã ã¢ã©ãŒããèšå®ããããšã§ãç£èŠã®è² è·ãäžãã€ã€ããã©ãã«çºçæã®åå察å¿ãããã«è¿
éåã§ãããã確èªããŠã¿ãŸãããã æ¬ã»ã¯ã·ã§ã³ã§ã¯ãAlerting ãå©çšãã以äžã®ã€ã³ã·ãã³ã察å¿ãããŒãäœéšããŸãã Web ã¢ããªã±ãŒã·ã§ã³ã®ãã° (Loki) ãç£èŠãããERRORãã¬ãã«ã®ãã°åºåãæ€ç¥ããã éçšæ
åœè
ãžå³åº§ã«ã¢ã©ãŒãã¡ãŒã«ãéä¿¡ããã ã¡ãŒã«ã®ãªã³ã¯ãã Grafana ãžé·ç§»ããåè¿°ã®ãã°ããã¬ãŒã¹æ©èœã掻çšããŠåå ãç¹å®ããã ã¢ã©ãŒãã£ã³ã°ãæ©èœãããã«ã¯ãã¢ã©ãŒãã®éç¥å
ãå®çŸ©ãã Contact points ãšãç£èŠæ¡ä»¶ãå®çŸ©ãã Alert rules ã®èšå®ãå¿
èŠãšãªããŸããããŸãå§ãã« Contact points ã®å®çŸ©ãã説æããŸãã å·Šãã€ã³ã®ã¡ãã¥ãŒãããContact pointsããéžæãã衚瀺ããã Contact points ç»é¢ã«ã¯2ã€ã®éç¥å
ãç»é²ãããŠããŸãã1ã€ç®ã®ãgrafana-default-emailã㯠Grafana ãããã©ã«ãã§ç»é²ããŠããéç¥å
ã§ã2ã€ç®ã®ãHands-on Receive E-mailãããã³ãºãªã³çšã«çšæããéç¥å
ã§ãã ãHands-on Receive E-mailãã®èšå®å
容ã¯ä»¥äžã®éãã§ãã Name: éç¥å
å®çŸ©ã®åç§°ãšããŠãHands-on Receive E-mailããå
¥åããŠããŸãã Integration: ãã³ãºãªã³ã§ã¯ã¡ãŒã«ã§éç¥ãããããEmailããéžæããŠããŸãã Address: éç¥å
ã®ã¡ãŒã«ã¢ãã¬ã¹ã« MailDev ã³ã³ããã§åä¿¡ã§ãããtarget-address@test.comããå
¥åããŠããŸãã Test: Test ãã¿ã³ãã¯ãªãã¯ããããšã§ãAddressãã®å®å
ãžãã¹ãã¡ãŒã«ãéä¿¡ããŸãã ç¶ã㊠Alert rules ã§å®çŸ©ããŠããç£èŠæ¡ä»¶ã説æããŸãã å·Šãã€ã³ã®ã¡ãã¥ãŒãããAlert rulesããéžæãã衚瀺ããã Alert rules ç»é¢ã§ãHands-on Training > Eval Interval – 10sããã©ã«ãå
ã«ç»é²ãããŠãããError level – WebUI logãã該åœããŸãã ãError level – WebUI logãã®èšå®å
容ã¯ä»¥äžã®éãã§ãã 1. Enter alert rule name: Name: ç£èŠæ¡ä»¶ã®åç§°ãšããŠãError level – WebUI logããå
¥åããŠããŸãã 2. Define query and alert condition: ã¢ã©ãŒããçºåããç£èŠæ¡ä»¶ãå®çŸ©ããŸãã æ¡ä»¶A: ããŒã¿ãœãŒã¹: ãLokiããéžæããŠããŸãã Options: 第1æ¡ä»¶: ãwebapp-webuiãããéåºããããã°ãç£èŠå¯Ÿè±¡ã«ããŸãã 第2æ¡ä»¶: ãšã©ãŒã¬ãã«ã®ãã°ãæå³ããããdetected_levelãã©ãã«ã«å€§æåå°æååãããerrorãã®å€ãæã£ããã°ãæœåºããŸãã 第3æ¡ä»¶: éå»1åéã®ãã°ãç£èŠå¯Ÿè±¡ãšããŸãã 第4æ¡ä»¶: 第1ïœ3æ¡ä»¶ã«è©²åœãããã°ã察象ã«ïŒ ãmessageãã©ãã«ã®ïŒä»¶æ°ãã«ãŠã³ãããŸãã æ¡ä»¶C: æ¡ä»¶Aã0ä»¶ãè¶
éïŒïŒ1件以äžååšïŒããå Žåã«ã¢ã©ãŒãå€å®ãšããŸãã 3. Add folder and labels: Folder: ãHands-on Trainingããã©ã«ããéžæããŠããŸãã 4. Set evaluation behavior: Evaluation group and interval: ç£èŠæ¡ä»¶ã®è©äŸ¡ééããEval Interval – 10sãåç§°ã§10ç§ééã§è©äŸ¡ããŸãã Pending period: ç£èŠæ¡ä»¶ã1ä»¶ã§ãäžèŽãããå³ã¢ã©ãŒãã«ãããã®ã§ãNoneããèšå®ããŠããŸãã 5. Configure notifications: Contact point: ã¢ã©ãŒãã®éä¿¡å
ã«ãHands-on Receive E-mailããèšå®ããŠããŸãã 宿Œã«å
¥ãåã«ãContact Points ã§éä¿¡ããã¡ãŒã«ãåä¿¡ãã MailDev ããã©ãŠã¶ã§ã¢ã¯ã»ã¹ããŸããæ¢ã«ã[FIRING:1] DatasourceNoData ïœããªã©ã®ä»¶åã®ã¢ã©ãŒãã¡ãŒã«ãæ°éå±ããŠããŸããããã¯ã³ã³ããèµ·åæã® Web ã¢ããªã±ãŒã·ã§ã³ããŸã èµ·åããŠããªãæäžã®ç£èŠãæŸã£ãçµæãªã®ã§ãã³ã³ãããæ§ç¯ããæé垯ä»è¿ã®ã¢ã©ãŒãã¡ãŒã«ã¯ç¡èŠããŠãã ããã http://localhost:1080 ãããããæ¬æ Œçãªã¢ã©ãŒãã®å®æŒã§ããŠãŒã¶ãŒã®ç«å Žãšã㊠Web ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãããRoll normallyããã¯ãªãã¯ããŠãµã€ã³ããæ¯ããŸãã ãã®ç¶æ³ã§éçšæ
åœãšã㊠MailDev ã«ã¢ã¯ã»ã¹ããæ«ãçµéããŠãã¢ã©ãŒãã¡ãŒã«ãå±ããªãããšã確èªããŸãã åã³ãŠãŒã¶ãŒã®ç«å Žãšã㊠Web ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãããTrigger 5xx error at APIããªã³ã¯ãã¯ãªãã¯ã㊠Web ã¢ããªã±ãŒã·ã§ã³ã§ãšã©ãŒãçºçããç¶æ³ã«ããŸãã éçšæ
åœãšã㊠MailDev ã確èªãããšãWeb ã¢ããªã±ãŒã·ã§ã³ã§ãšã©ãŒçºçããçŽ1å以å
ã«ä»¶åããFIRINGããšæžãããã¢ã©ãŒãã¡ãŒã«ãå±ããŸãããããé害çºçã®éç¥ã§ããã¡ãŒã«æ¬æå
ã®ãView alertããã¿ã³ãã¯ãªãã¯ããGrafana ã®ã¢ã©ãŒã詳现ç»é¢ã«é·ç§»ããŸãã ãšã©ãŒçºçãã1å以å
ã« Grafana ãžé·ç§»ã§ãããšãç»é¢äžéšã«ãFiringãïŒçºå ±äžïŒã®ç¶æ
ã瀺ãã©ãã«ã衚瀺ãããŠããŸããïŒé·ç§»ã«1åãè¶
ããŠã©ãã«è¡šç€ºãè§£é€ãããŠãããšããŠãå±¥æŽã¯æ®ã£ãŠããã®ã§ããã®ãŸãŸé²ããŸããïŒç»é¢äžã®ãView in Exploreããã¯ãªãã¯ã㊠Explore ã«é·ç§»ããšã©ãŒã®åå 調æ»ãéå§ããŸãã ç»é¢äžéšã®ãLogs sampleãé åã§ç£èŠã«åŒã£æãã£ããšã©ãŒãã°ã確èªããŸããããšã©ãŒçºçãã1åãè¶
ããŠãšã©ãŒãã°ã衚瀺ãããŠããªãå Žåã¯ãç»é¢äžå€®ã®ãCount over timeãããRang=1mããããRang=5mããªã©ã«ã¬ã³ãžãæ¡å€§ããŠãšã©ãŒãã°ã衚瀺ãããŸãããã°ã確èªã§ãããããã°è¡šç€ºã®å³äžã«ãããOpen logs in split viewããã¿ã³ãã¯ãªãã¯ãããšç»é¢ãã¹ããªããããŠå³ååã«ãã°ã衚瀺ãããŸãã å·Šååã®ãã°è¡šç€ºã¯ã¢ã©ãŒãã£ã³ã°ããé·ç§»çŽåŸã® Explore ã§æ©èœãå¶éãããŠãããããå·Šååã®ãã°ãéããTempoããžã®é£æºãã¿ã³ã衚瀺ãããå³ååã®ãã°è¡šç€ºãå
šç»é¢è¡šç€ºã«ããŸãã ãã°ãã¯ãªãã¯ããŠç»é¢å³åŽã«è©³çްæ
å ±ãå±éããäžåŽãžã¹ã¯ããŒã«ãããšãTempoããã¿ã³ãçŸããŸãããããã¯ãªãã¯ããŠãã¬ãŒã¹ã«é·ç§»ããŸãã ãã¬ãŒã¹ã衚瀺ããããš1ã€ç®ã® WebUI ãã WebAPI ãžã®åŒã³åºãã«ãããŠãWebAPI åŽã§ãšã©ãŒãçºçããŠããããšãäžç®ã§åãããŸãã ãã¬ãŒã¹ã®äžãããšã©ãŒã®çºçæºãšæããã WebAPI ã®ã¹ãã³ãã¯ãªãã¯ããåºçŸããããã«å
ã®ãLogs for this spanããã¯ãªãã¯ããŸãã ç»é¢å³ååããã¬ãŒã¹è¡šç€ºããããLogs for this spanããã¯ãªãã¯ããã¹ãã³ã«é¢é£ãããã°ã ãã«ãã£ã«ã¿ãªã³ã°ããã WebAPI ã®ãã°ã«åãæ¿ãããŸãã ãã°ã泚èŠããŠãããšææããã«ãªããããªã¡ãã»ãŒãžãèŠã€ãããŸãã ãã°ã«èšé²ãããŠããã¡ãã»ãŒãžãšãœãŒã¹ã³ãŒãã察æ¯ãããšãäŸå€ãçºçããŠããç®æãèŠã€ããããããã¢ã©ãŒãã®åå ã§ããããšãææ¡ã§ããŸãã webapp/webapi/src/main/java/jp/sios/apisl/handson/rollingdice/webapp/webapi/service/WebApiServiceImpl.java private void error(final Optional<Boolean> optError) { UtilEnvInfo.logStartClassMethod(); if (optError.isPresent() && optError.get()) { LOGGER.error( "!!! Intentional exception triggered: '{}' !!!", "HandsOnException"); throw new HandsOnException("Intentional error triggered by request parameter."); } } å®éã®éçšã§ã¯ãææ¡ããåå ã«å¯ŸããŠæ¹ä¿®ãªã©ã§å¿æ¥åŠçœ®ãæä¹
察å¿ãè¡ãããšã§äºæ
å®äºãšãªããŸãããä»åã¯ãã¢ãšããŠæå³çã«ãšã©ãŒãçºçãããŠããã®ã§ã該åœç®æã¯ä¿®æ£ããã«ãä»åŸã¯åãæäœãããªããšèšãèªãã§äºæ
å®äºã®æ±ããšããŸãã ãšã©ãŒçºçãã5åãçµéãããšãMailDev ã«ãšã©ãŒçºçãè§£æ¶ãããããšã瀺ããRESOLVEDãã¡ãŒã«ãå±ããŠããããšã確èªã§ããã®ã§ãããã§ãšã©ãŒæ¢çŽ¢ã®äžé£ã®æµããçµäºãšãªããŸãã 以äžã§ããªãã¶ãŒãããªãã£ãŒã®å®æŒã¯ãã¹ãŠçµäºã§ãããç²ãæ§ã§ããïŒ ã¡ããªã¯ã¹ã®å¯èŠåããã¢ã©ãŒããèµ·ç¹ãšãããã©ãã«ã·ã¥ãŒãã£ã³ã°ãŸã§ãäœéšããããšã§ããªãã¶ãŒãããªãã£ãŒãå®éã®éçšã§ã©ã圹ç«ã€ã®ãããã®ãæè§ŠãããæŽãã§ããã ãããªã幞ãã§ãã ç°å¢ã®ã¯ãªãŒã³ã¢ãã ãªãã¶ãŒãããªãã£ãŒã®å®çŸãäžéãçµãã£ããããããŸã§ã«å©çšããç°å¢ãã¯ãªãŒã³ã¢ããããŠãã³ãºãªã³ãçµäºããŸãã ã³ã³ããåé€ã¹ã¯ãªããã®å®è¡ ã¿ãŒããã«ãçšããŠã以äžã®ãã£ã¬ã¯ããªãžç§»åããŸãã $ cd ~/handson/hands-on-grafana/container/ ç°å¢æ§ç¯æã«ã䜿çšããã¹ã¯ãªããã« down ãªãã·ã§ã³ãæå®ããŠå®è¡ããŠããªãã¶ãŒãããªãã£ãŒç°å¢ã®åçš®ã³ã³ããã忢ã»åé€ããŸãã $ ./CREATE_CONTAINER.sh down ã¹ã¯ãªããã®å®è¡ãçµãã£ããã list ãªãã·ã§ã³ãä»ããŠã¹ã¯ãªãããå®è¡ããèµ·åããŠããã³ã³ãããååšããªãïŒäžèЧã«è¡šç€ºãããªãïŒããšã確èªããŸãã $ ./CREATE_CONTAINER.sh list ### START: Show a list of container ########## CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 以äžã§ç°å¢ã®ã¯ãªãŒã³ã¢ããã¯å®äºã§ãããç²ãæ§ã§ããã ç¶ã Appendix ã§ã¯ããã®ãã³ãºãªã³ç°å¢ãè£ã§æ¯ããŠããèšå®ãã¡ã€ã«ãã¹ã¯ãªããã«ã€ããŠè§£èª¬ããŸãããã©ããã£ãŠãã®ç°å¢ãäœã£ãã®ã詳ããç¥ãããïŒããšããæ¹ã¯ããã²ãã®ãŸãŸã芧ãã ããã Appendix ãã³ãºãªã³ç°å¢ã®æ§ç¯ãèšå®æé ã§å©çšããŠããåçš®ã¹ã¯ãªãããèšå®ãã¡ã€ã«ã®å®è£
å
容ã«ã€ããŠè§£èª¬ããŸãã ã³ã³ããæ§ç¯ã¹ã¯ãªããã®è§£èª¬ ã ã³ã³ããæ§ç¯ã¹ã¯ãªããã®å®è¡ ãç« ã§äœ¿çšããã CREATE_CONTAINER.sh ãã¹ã¯ãªããã®åŠçå
容ã«ã€ããŠè§£èª¬ããŸãã ã³ã³ããã®æ§ç¯ æ¬ãã³ãºãªã³çšã®ãªããžããªã¯ãå¥ãªããžããªã Toshiharu-Konuma-sti/hands-on-rollingdice-webapp ãã§ç®¡çãããŠãã Web ã¢ããªã±ãŒã·ã§ã³ãåç
§ãããµãã¢ãžã¥ãŒã«ãå«ãã§ããã®ã§ããµãã¢ãžã¥ãŒã«é
äžã®ãœãŒã¹ã³ãŒããææ°çã§ååŸããŸãã $ git submodule update --init $ git submodule update --remote webapp çšæãããdocker-compose.ymlããšãdocker-compose-webapp.ïœ.ymlãã®ã³ã³ããå®çŸ©ãã¡ã€ã«ã§äžæ°ã«ã³ã³ãããæ§ç¯ããŸãã $ docker-compose \ -f docker-compose.yml \ -f docker-compose-webapp.base.yml \ -f docker-compose-webapp.mode.grafana.yml \ up -d -V --remove-orphans Creating network "intra-net" with driver "bridge" Creating network "hands-net" with driver "bridge" Creating grafana ... done : Creating webapi ... done ã³ã³ããæ§ç¯ã«å©çšããŠããã³ã³ããå®çŸ©ãã¡ã€ã«ã®å
容ã¯ä»¥äžãåç
§ããŠãã ããã ãªãã¶ãŒãããªãã£ãŒç°å¢ã®æ§æãã¡ã€ã«è§£èª¬ docker-compose.yml ãããã¯ã·ã§ã³ç°å¢ã®æ§æãã¡ã€ã«è§£èª¬ docker-compose-webapp.base.yml docker-compose-webapp.mode.grafana.yml ãªãã¶ãŒãããªãã£ãŒç°å¢ã®æ§æãã¡ã€ã«è§£èª¬ ãªãã¶ãŒãããªãã£ãŒç°å¢ã®ã³ã³ãããæ§ç¯ããåçš®ãã¡ã€ã«ã«ã€ããŠèª¬æããŸãã ã³ã³ããå®çŸ©ïŒdocker-composeïŒ ãªãã¶ãŒãããªãã£ãŒç°å¢ã®ã³ã³ãããæ§ç¯ãããdocker-compose.ymlããšç°å¢å€æ°ãã¡ã€ã«ã§ãã docker-compose.yml ãx-healthcheck-minioãããŒãã§ã¯ãMinIO ã«å¯ŸããŠå®æœãããã«ã¹ãã§ãã¯åŠçãšããŠã9000çªããŒãã TCP æ¥ç¶ã§ãããã©ããã®ç¢ºèªãå®è£
ããŠããŸãã ãgrafanaãã³ã³ããã®ç¹èšäºé
ã¯ä»¥äžã®éãã§ãã ãenvironmentãããŒãã®ãGF_SMTP_HOSTãã«ãŠãã¢ã©ãŒãéç¥ã§ã¡ãŒã«éä¿¡ããéã® SMTP ãµãŒããŒãæå®ããŸãã .env ãMINIO_ROOT_PASSWORDãã«ãŠãMinIO ã«ã¢ã¯ã»ã¹ããã³ã³ãããæ¥ç¶æã«å¿
èŠãšãªããã¹ã¯ãŒããæå®ããŸãã Grafana èšå®ãã¡ã€ã« ããŒã¿ãœãŒã¹ã®å®çŸ©ãã¡ã€ã«ã§ãã datasources.yaml ã¡ããªã¯ã¹è¡šç€ºçšã«ãMimir for MetricsãããŒã¿ãœãŒã¹ããã°è¡šç€ºçšã«ãLokiãããŒã¿ãœãŒã¹ããã¬ãŒã¹è¡šç€ºçšã«ãTempoããšãMimir for Traceãã®ããŒã¿ãœãŒã¹ãçšæããŠããŸãã ããã·ã¥ããŒãã®å®çŸ©ãã¡ã€ã«ã§ãã dashboards.yaml ãMy Explore CollectionããMy Real-time User Monitoringãã®2ã€ã®ããã·ã¥ããŒããèªèãããããã«å®çŸ©ããŠããŸãã my-explore-collection.json ãMy Explore Collectionãããã·ã¥ããŒãã®å®çŸ©ãã¡ã€ã«ã§ãExemplar ãæå¹ã«ããã¡ããªã¯ã¹ããã°ãããŒãã°ã©ããããã³ CPU å©çšæéãšã¡ã¢ãªå²åœãŠéã®ãããã¡ã€ã«ã確èªããããšãã§ããŸãã é
眮äœçœ®ã瀺ããgridPosãããŒãã®èãæ¹ã¯ä»¥äžã®éãã§ãã ãxãã¯æšªå¹
ã衚ããç»é¢æšªå¹
å
šäœãä»®æ³çãª24ãããã¯ã§èããŸãã ãyããšãhãã®é¢ä¿ã¯ã瞊ã«AâBâCãšããŒãã䞊ãã§ããå Žåãæåã®ããŒãã¯ã0ãããå§ãŸããy+hããæ¬¡ã«ç¶ãããŒãã®ãyãã«ãªãããã AããAïŒy=0, h=2ãã®å Žåãæ¬¡ã«ç¶ãBã¯ãBïŒy=2, h=3ãããã®æ¬¡ã«ç¶ãCã¯ãCïŒy=5, h=4ããšãªããŸãã my-real-time-user-monitoring.json ãMy Real-time User Monitoringãããã·ã¥ããŒãã®å®çŸ©ãã¡ã€ã«ã§ãFaro ããéä¿¡ãããŠãã RUM ã確èªããããšãã§ããŸãã ã¢ã©ãŒãã®å®çŸ©ãã¡ã€ã«ã§ãã contact-points.yaml ã ã¢ã©ãŒããããšã©ãŒåå ã®æ¢çŽ¢ (Alerting) ãç« ã§èª¬æããŠãã Contact points ãå®çŸ©ããŠãããã¡ã€ã«ã§ãã alert-rules.yaml ã ã¢ã©ãŒããããšã©ãŒåå ã®æ¢çŽ¢ (Alerting) ãç« ã§èª¬æããŠãã Alert rules ãå®çŸ©ããŠãããã¡ã€ã«ã§ãã Mimir èšå®ãã¡ã€ã« Mimir ã«é©çšããèšå®ãã¡ã€ã«ã§ãã mimir.yaml ãcommon.storage.backendããšãcommon.storage.s3ãããŒãã§ãã¹ãã¬ãŒãžã« S3ïŒå®éã«ã¯äºæã¹ãã¬ãŒãžã® MinIOïŒãæå®ããŸãã Loki èšå®ãã¡ã€ã« Loki ã«é©çšããèšå®ãã¡ã€ã«ã§ãã loki.yaml ãcommon.storage.s3ãããŒãã§ãã¹ãã¬ãŒãžã« MinIO ãæå®ããŸãã Tempo èšå®ãã¡ã€ã« Tempo ã«é©çšããèšå®ãã¡ã€ã«ã§ãã tempo.yaml ãmetrics_generatorãããŒãã§ããµãŒãã¹ã°ã©ãã®æç»çšã«ãã¬ãŒã¹ããã¡ããªã¯ã¹ã®çæãšãçæãããã¡ããªã¯ã¹ã®éä¿¡å
ãæå®ããŸãã ãstorage.trace.backendããšãstorage.trace.s3ãããŒãã§ãã¹ãã¬ãŒãžã« MinIO ãæå®ããŸãã Alloy èšå®ãã¡ã€ã« Alloy ã«é©çšããèšå®ãã¡ã€ã«ã§ãã config.alloy ãpyroscope.receive_httpãããŒãã§ Pyroscope ããéä¿¡ãããŠããããŒã¿ã®åä¿¡ããŒããšããpyroscope.writeãããŒãã§éä¿¡å
ãµãŒããŒãæå®ããŸãã ãfaro.receiverãããŒãã§ Faro ããéä¿¡ãããŠããããŒã¿ã®åä¿¡ããŒããšããfaro.receiver.outputãããŒãã§éä¿¡å
ãå®çŸ©ããããŒããæå®ããŸããéä¿¡å
ãšããŠæå®ããããloki.writããšãotelcol.exporter.otlpãããŒãã§éä¿¡å
ã®ãµãŒããŒã¢ãã¬ã¹ãæå®ããŸãã ããŒããã©ã³ãµãŒèšå®ãã¡ã€ã« MimirãLokiãPyroscope ã®å段ã«é
眮ããããŒããã©ã³ãµãŒã® Nginx ã«é©çšããèšå®ãã¡ã€ã«ã§ãã nginx-mimir.conf nginx-loki.conf nginx-pyroscope.conf Tempo ã®å段ã«é
眮ããããŒããã©ã³ãµãŒã® Nginx ã«é©çšããèšå®ãã¡ã€ã«ã§ãã nginx-tempo-otlp.conf nginx-tempo-view.conf Tempo ã§ã¯ãOpneTelemetry Collector ãããã¬ãŒã¹ãéãããŠããããŒãçªå·ïŒ4318ïŒãšãGrafana ãã衚瀺çšã«ã¢ã¯ã»ã¹ããŠããããŒãçªå·ïŒ80ïŒãç°ãªã£ãŠãããããããããã®ããŒããã©ã³ãµãŒã建ãŠãŠããŸãã OpenTelemetry Collector èšå®ãã¡ã€ã« OpenTelemetry Collector ã³ã³ããã«é©çšããèšå®ãã¡ã€ã«ã§ãã otel-collector-config.yaml ãreceivers.otlp.protocols.httpãããŒãã§ãWeb ã¢ããªã±ãŒã·ã§ã³ãã OpenTelemetry 圢åŒã®ã¡ããªã¯ã¹ã HTTP ã§åä¿¡ã§ããããã«æå®ããŸãã ãreceivers.prometheus.config.scrape_configsãããŒãã®ãjob_name: “webapp”ãèšå®ã§ãOpenTelemetry Collector ã³ã³ãããã Web ã¢ããªã±ãŒã·ã§ã³ãž Prometheus 圢åŒã§ã¡ããªã¯ã¹ãååŸããããã«æå®ããŸãã ãreceivers.mysqlãããŒãã§ãMySQL ãµãŒããŒããã¡ããªã¯ã¹ãååŸããããã«æå®ããŸãã ãããã¯ã·ã§ã³ç°å¢ã®æ§æãã¡ã€ã«è§£èª¬ ãããã¯ã·ã§ã³ç°å¢ã®ã³ã³ãããæ§ç¯ããåçš®ãã¡ã€ã«ã«ã€ããŠèª¬æããŸãã ã³ã³ããå®çŸ©ïŒdocker-composeïŒ ã¢ããªã±ãŒã·ã§ã³ãæ§æããåã³ã³ãããæ§ç¯ãããdocker-compose-webapp.mode.grafana.ymlããã¡ã€ã«ã§ãã docker-compose-webapp.mode.grafana.yml ãwebapp-webuiããšãwebapp-webapiãã³ã³ãããèµ·åããéã«å®è¡ããã³ãã³ããæå®ãããcommandãããŒãã§ã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ã Pyroscope ã®èªåèšè£
ã§ãããã¡ã€ãªã³ã°ããããã®ã§ãWeb ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«ã ./gradlew bootRun ãã¯äœ¿ããã«ã java -javaagent:pyroscope.jar ãã³ãã³ãã䜿ã該åœã®ã©ã€ãã©ãªãããŒãããªããèµ·åããŸãã ãŸãšã å®éã«æãåãããŠãã°ãã¡ããªã¯ã¹ã远ãããšã§ãããªãã¶ãŒãããªãã£ãŒïŒå¯èŠ³æž¬æ§ïŒããšããèšèã®è§£å床ããã£ãšäžãã£ãã®ã§ã¯ãªãã§ããããïŒ è€éãªçè«ãåŠã¶ããšã倧åã§ãããããããŠå®éã®ç»é¢ã§ã·ã¹ãã ã®æåãèŠãäœéšããããDevOps å®è·µãžã®ç¬¬äžæ©ã ãšèããŠãããä»åã®äœéšãéããŠããæå€ãšèªåã§ãæ§ç¯ã§ãããã ãããã®æ©èœã¯ä»ã®çŸå Žã§ã䜿ãããã ããšãå°ãã§ã身è¿ã«æããŠããã ãããªãæ¬æã§ãã ãªããæ¬èšäºã§ç޹ä»ãã OSS çã®æŽ»çšã¯ãã¡ããã®ããšãéçšè² è·ã軜æžãããå Žåã«ã¯ Grafana Cloud ãéžæè¢ã«å
¥ããããšãå¯èœã§ããããŸã㯠OSS ã§å°ããå§ããŠãèŠæš¡ã倧ãããªã£ãã Cloud ãžããšãã£ãæè»ãªäœ¿ãåããæ€èšããã ããŸãã ãã®ãã¢ç°å¢ã§ã®äœéšãåã£æãã«ããã²æ¬¡ã¯çæ§èªèº«ã®ã¢ããªã±ãŒã·ã§ã³ãã€ã³ãã©ç°å¢ã§ãããã®ãèŠããåãã«ææŠããã¢ãããŒã·ã§ã³ã«ç¹ããã°å¹žãã§ãã ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post Grafana OSS LGTM ã¹ã¿ãã¯ã§äœéšããããªãã¶ãŒãããªãã£ãŒå
¥éã first appeared on SIOS Tech Lab .
ã¿ãªãããããã«ã¡ã¯ããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã®è¥¿æã§ãã ä»é±ã é±åAWS ããå±ãããŸãã ãããªãã§ããã AWS Builder Center ã¯ãåãã§ããïŒãã³ãºãªã³ã¯ãŒã¯ã·ã§ããã§çæ AI ããµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ãå®è·µããããã³ãŒãäŸããã¥ãŒããªã¢ã«ã§å
·äœçãªå®è£
æ¹æ³ãåŠãã ããAWS Heroes ã Community Buildersãšç¹ãã£ãŠç¥èŠãå
±æããããããã«ãAWS 補åããŒã ãžã®ãã£ãŒãããã¯ãæ©èœææ¡ãã§ããŸããæè¡èšäºããŠãŒã¶ãŒã°ã«ãŒããå®è·µçãªã©ããŸã§ããã«ããŒã«å¿
èŠãªãªãœãŒã¹ãäžç®æã«éçŽãããŠãããããã AWS Builder Center ã§ãïŒä»é±ã®é±å AWS ã§æ°ã«ãªã£ããããã¯ãããã°ãBuilder Center ã§ãããªãç¥èã®æ·±æãããããã§ããïŒ ããã§ã¯ãå
é±ã®äž»ãªã¢ããããŒãã«ã€ããŠæ¯ãè¿ã£ãŠãããŸãããã 2026幎2æ16æ¥é±ã®äž»èŠãªã¢ããããŒã 2/16(æ) Amazon EC2 ããã¹ãä»®æ³åããµããŒã Amazon EC2 ã§ãã¹ãä»®æ³åããµããŒããããEC2 ã€ã³ã¹ã¿ã³ã¹å
ã«æŽã«ä»®æ³ç°å¢ãäœæã§ããããã«ãªããŸãããåŸæ¥ã¯ãã¢ã¡ã¿ã«ã€ã³ã¹ã¿ã³ã¹ã§ãããã¹ãä»®æ³ãã·ã³ãäœæã§ããŸããã§ããããéåžžã® EC2 ã€ã³ã¹ã¿ã³ã¹äžã§ã KVM ã Hyper-V ãå®è¡å¯èœã«ãªããŸããã¢ãã€ã«ã¢ããªã®ãšãã¥ã¬ãŒã¿ãŒå®è¡ãèªåè»ã®è»èŒã·ã¹ãã ã·ãã¥ã¬ãŒã·ã§ã³ãWindows ç°å¢ã§ã® Linux å®è¡ãªã©ãããæè»ãªä»®æ³ç°å¢æ§ç¯ãå¯èœã§ãã AWS Backup ã AWS äžã® SAP HANA ã«å¯Ÿãã PrivateLink ãµããŒããçºè¡š AWS Backup ã SAP HANA ã·ã¹ãã åãã« AWS PrivateLink ããµããŒãéå§ããŸããããããŸã§ SAP HANA ã®ã¢ããªã±ãŒã·ã§ã³é信㯠PrivateLink ã䜿ã£ãŠãã©ã€ããŒããããã¯ãŒã¯çµç±ã«ã§ããŸããããããã¯ã¢ããéä¿¡ã¯ãããªãã¯ãšã³ããã€ã³ããçµç±ããå¿
èŠããããŸãããä»åã®ã¢ããããŒãã§ãããã¯ã¢ãããã©ãã£ãã¯ããã©ã€ããŒããããã¯ãŒã¯çµç±ã§ã«ãŒãã£ã³ã°ã§ããããã«ãªããã€ã³ã¿ãŒããããçµç±ããªãå®å
šã«ãã©ã€ããŒããªéä¿¡ãå®çŸããŸããéèãå»çãæ¿åºæ©é¢ãªã©èŠå¶ã®å³ããæ¥çã§ã¯ HIPAA ã PCI DSS ãªã©ã®ã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã§ãã©ã€ããŒãéä¿¡ãæ±ããããããšãå€ãããã®ã¢ããããŒãã«ãããšã³ãããŒãšã³ãã§ãã©ã€ããŒããªããŒã¿ä¿è·æŠç¥ãå®è£
ã§ããŸãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã Amazon DocumentDB 5.0 ã§ã®é·æãµããŒã (LTS) ã®çºè¡š Amazon DocumentDB 5.0 ã§é·æãµããŒã (LTS) ã®æäŸãéå§ãããŸãããLTS çã§ã¯ããŒã¿ããŒã¹ã®ã¢ããã°ã¬ãŒãé »åºŠãšã¡ã³ããã³ã¹è² è·ã倧å¹
ã«è»œæžã§ããŸããæ°æ©èœã®è¿œå ã¯è¡ãããéèŠãªå®å®æ§ãšã»ãã¥ãªãã£ãããã®ã¿ãé©çšãããããæ¬çªç°å¢ã§ã®å®å®éçšãéèŠããäŒæ¥ã«ãšã£ãŠçæ³çãªéžæè¢ã§ãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã Amazon Aurora ãä¿åæã®ãµãŒããŒãµã€ãæå·åããµããŒã Amazon Aurora ã§æ°ããäœæããããŒã¿ããŒã¹ã¯ã©ã¹ã¿ãŒã«å¯ŸããŠãããã©ã«ãã§æå·åãèªåé©çšãããããã«ãªããŸããããããŸã§æåã§èšå®ãå¿
èŠã ã£ãæå·åããä»åŸã¯æ°èŠäœææã«èªåã§æå¹ã«ãªããŸããAWS ã管çããæå·åããŒã䜿çšãããããã³ã¹ããããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯ãããŸãããã»ãã¥ãªãã£èšå®ã®æéãçãã€ã€ãããŒã¿ä¿è·ã匷åã§ããã®ãã¡ãªããã§ãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã AWS Glue 5.1 ã 18 ã®è¿œå ãªãŒãžã§ã³ã§å©çšå¯èœã« AWS Glue 5.1 ãæ°ãã«å€§éªãªãŒãžã§ã³ãå«ã 18 ã®ãªãŒãžã§ã³ã§å©çšå¯èœã«ãªããŸãããAWS Glue ã¯ãµãŒããŒã¬ã¹ãªããŒã¿çµ±åãµãŒãã¹ã§ãè€æ°ã®ããŒã¿ãœãŒã¹ããããŒã¿ãçºèŠã»æºåã»ç§»åã»çµ±åã§ããŸããAWS Glue 5.1 ã§ã¯ Apache Spark 3.5.6 ã Python 3.11 ãžã®å¯Ÿå¿ã«ããæ§èœãšã»ãã¥ãªãã£ãåäžãããããŸã§èªã¿åãå°çšã ã£ã Lake Formation ã®ã¢ã¯ã»ã¹å¶åŸ¡ãæžãèŸŒã¿æäœã«ã察å¿ããŠããŸãã 2/17(ç«) Claude Sonnet 4.6 ã Amazon Bedrock ã§å©çšå¯èœã« Amazon Bedrock ã§ Claude Sonnet 4.6 ãå©çšå¯èœã«ãªããŸããããã®ã¢ãã«ã¯åŸæ¥ã® Claude Sonnet 4.5 ãã倧å¹
ã«ã¢ããã°ã¬ãŒããããã³ãŒãã£ã³ã°ããšãŒãžã§ã³ãæ©èœãããžãã¹æ¥åã«ãããŠåªç§ãªæ§èœãçºæ®ããŸããäŒæ¥ã§ã¯è¡šèšç®äœæãã³ã³ãã©ã€ã¢ã³ã¹ç¢ºèªãããŒã¿èŠçŽãªã©ã®å°éçãªæ¥åã«æŽ»çšã§ããé«å質ãªçµæãå¹ççã«åŸãããŸãã詳现㯠ãã¡ãã®ãªãªãŒã¹èšäºããåç
§ãã ããã Amazon Connect ã§ãšãŒãžã§ã³ãã®äŒæç³è«ããã©ããã¹ã±ãžã¥ãŒã«ã«å«ãŸããããã«ãªããŸãã Amazon Connect ã§ãšãŒãžã§ã³ãã®äŒæç³è«ããã©ããã¹ã±ãžã¥ãŒã«ã«å«ãŸããããã«ãªããŸããããããŸã§ã¯ãç¹å®ã®æ¥ã«ãšãŒãžã§ã³ããã¹ã±ãžã¥ãŒã«ãããŠããªãçç±ã確èªããã®ã«ãå¥ã®äŒæã¹ã±ãžã¥ãŒã«ã確èªããŠå調æŽããå¿
èŠããããŸããããã®ã¢ããããŒãã«ãããäŸãã°æ¥æã®ã¹ã±ãžã¥ãŒã«äœææã«ãæ®æ®µæãéã§åããšãŒãžã§ã³ããæåã®é±ã«ããªãçç±ãäŒæååŸã ãšããã«å€æããŸããã¹ã±ãžã¥ãŒã«ç®¡çè
ã¯å
¬éåã«ã«ãã¬ããžäžè¶³ãçŽ æ©ãç¹å®ã調æŽã§ãããããããå¹ççãªéçšãå¯èœã«ãªããŸãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã Amazon Aurora MySQL 3.12 (MySQL 8.0.44 äºæ) ãäžè¬æäŸéå§ Amazon Aurora MySQL ã®ææ°ããŒãžã§ã³ 3.12 ãæäŸéå§ãããŸãããMySQL 8.0.44 ã«å¯Ÿå¿ããã»ãã¥ãªãã£åŒ·åããã°ä¿®æ£ã«å ããå¯çšæ§ãåäžããŠããŸããæ¢åã®ããŒã¿ããŒã¹ããæåã¢ããã°ã¬ãŒããŸãã¯èªåæŽæ°èšå®ãå¯èœã§ãããŠã³ã¿ã€ã ãæå°éã«æããªããææ°æ©èœãå©çšã§ããŸããé«ãããã©ãŒãã³ã¹ãšå®å®æ§ãæ±ããã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãå
šãŠã® Aurora MySQL 察å¿ãªãŒãžã§ã³ã§å©çšå¯èœã§ãã 2/18(æ°Ž) Amazon OpenSearch Service ã Graviton4 (c8gãm8gãr8g) ã€ã³ã¹ã¿ã³ã¹ã®ãµããŒããæ¡åŒµ Amazon OpenSearch Service ã§ææ°ã® Graviton4 ããŒã¹ EC2 ã€ã³ã¹ã¿ã³ã¹ (c8g, m8g, r8g, r8gd) ã®ãµããŒããæ¡åŒµãããŸãããGraviton4 ã¯åŸæ¥ã® Graviton3 ãšæ¯ã¹ãп倧 30% ã®ããã©ãŒãã³ã¹åäžãå®çŸããã³ã³ãã¥ãŒãéçŽåãæ±çšãã¡ã¢ãªéçŽåã¯ãŒã¯ããŒãã§æé«ã®äŸ¡æ Œæ§èœæ¯ãæäŸããŸãã倧éªãªãŒãžã§ã³ãªã© 12 ã®æ°ãããªãŒãžã§ã³ã§ãå©çšå¯èœãšãªããããå¹
åºãå°åã§ã³ã¹ãå¹çã®é«ãæ€çŽ¢ã»åæåŠçãå¯èœã«ãªããŸãã詳现㯠ãã¡ãã® Blog èšäºããåç
§ãã ããã Amazon Aurora DSQL ã Kiro powers ãš AI ãšãŒãžã§ã³ãã¹ãã«ãšçµ±å Amazon Aurora DSQL ã Kiro powers ãš AI ãšãŒãžã§ã³ãã¹ãã«ãšçµ±åããAI ãšãŒãžã§ã³ãã®æ¯æŽã§ããŒã¿ããŒã¹ã¢ããªã±ãŒã·ã§ã³éçºã倧å¹
ã«å¹çåãããŸããããããŸã§æåã§è¡ã£ãŠããã¹ããŒãèšèšãæ§èœæé©åã AI ããµããŒãããéçºè
ã¯äºåç¥èããªããŠãå®å¿ã㊠Aurora DSQL ãæŽ»çšã§ããŸããKiro IDE ã§ã¯ã³ã¯ãªãã¯ã€ã³ã¹ããŒã«ã§ããClaude ã Cursor ãªã©äž»èŠãª AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã§å©çšå¯èœã§ãã AWS Certificate Manager ãæ°ããã¬ã€ãã©ã€ã³ã«æºæ ãããããããã©ã«ãã®èšŒææžæå¹æéãççž® AWS Certificate Manager (ACM) ã§ãããªãã¯èšŒææžã®æå¹æéã 395 æ¥ãã 198 æ¥ã«ççž®ãããŸããããã㯠2026 幎ã®ã»ãã¥ãªãã£æšæºåŒ·åã«å
ç«ã€å¯Ÿå¿ã§ãèšŒææžã®æŽæ°é »åºŠãäžããããšã§ã»ãã¥ãªãã£ãåäžããŸããæ¢åèšŒææžã¯ãã®ãŸãŸå©çšã§ããèªåæŽæ°ãç¶ç¶ããããã远å äœæ¥ã¯äžèŠã§ããããã«ããšã¯ã¹ããŒãå¯èœèšŒææžã®äŸ¡æ ŒãçŽåé¡ã«äžãã (15 ãã«â7 ãã«)ãã³ã¹ãåæžã«ãã€ãªãããŸãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã 2/19(æš) Amazon EC2 M8i-flex ã€ã³ã¹ã¿ã³ã¹ãæ±äº¬ãªãŒãžã§ã³ã§å©çšå¯èœã« Amazon EC2 M8i-flex ã€ã³ã¹ã¿ã³ã¹ãæ±äº¬ããœãŠã«ãã·ã³ã¬ããŒã«ããã¬ãŒã·ã¢ããã©ã³ã¯ãã«ããã«ããäžå€®ãªãŒãžã§ã³ã§å©çšéå§ãããŸãããIntel Xeon 6 ããã»ããµãæèŒããåŸæ¥ã® M7i-flex ãšæ¯èŒã㊠15% ã®ã³ã¹ãããã©ãŒãã³ã¹åäžãš 2.5 åã®ã¡ã¢ãªåž¯åå¹
ãå®çŸããŸããPostgreSQL ã§ 30%ãNGINX ã§ 60%ãAI 深局åŠç¿ã§ 40% ã®æ§èœåäžãæåŸ
ã§ããWeb ã¢ããªã±ãŒã·ã§ã³ããã€ã¯ããµãŒãã¹ã«æé©ã§ãã詳现㯠ãã¡ãã® Blog èšäºããåç
§ãã ããã Amazon EC2 G7e ã€ã³ã¹ã¿ã³ã¹ãæ±äº¬ãªãŒãžã§ã³ã§å©çšå¯èœã« Amazon EC2 G7e ã€ã³ã¹ã¿ã³ã¹ãæ±äº¬ãªãŒãžã§ã³ã§å©çšéå§ãšãªããŸãããNVIDIA RTX PRO 6000 Blackwell Server Edition GPU ãæèŒããåŸæ¥ã® G6e ãšæ¯èŒããŠæå€§ 2.3 åã®æšè«æ§èœãå®çŸããŸããå€§èŠæš¡èšèªã¢ãã« (LLM) ãçæ AI ã¢ãã«ã®å±éã«æé©ã§ãæå€§ 8 GPU ãš GPU ããã 96 GB ã®ã¡ã¢ãªãæäŸããŸããã°ã©ãã£ãã¯ã¹åŠçãš AI åŠçã®äž¡æ¹ãå¿
èŠãªç©ºéã³ã³ãã¥ãŒãã£ã³ã°ã¯ãŒã¯ããŒãã§æé«ã®ããã©ãŒãã³ã¹ãçºæ®ãããã«ãã¢ãŒãã« AI ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãããå¹ççã«ãªããŸãã 2/20(é) Amazon RDS for Oracle ã 2026 幎 1 æãªãªãŒã¹æŽæ°ãš Spatial ããããã³ãã«ããµããŒã Amazon RDS for Oracle ã 2026 幎 1 æã®ãªãªãŒã¹ã¢ããããŒã (RU) ã«å¯Ÿå¿ããŸãããOracle Database 19c ãš 21c åãã®ã»ãã¥ãªãã£ä¿®æ£ãå«ãŸããŠãããããŒã¿ããŒã¹ã®å®å
šæ§ãåäžããŸãããŸã 19c åãã«ã¯ Spatial Patch Bundle ãæäŸãããå°ç空éããŒã¿ãæ±ã Oracle Spatial æ©èœã®ããã©ãŒãã³ã¹ãšä¿¡é Œæ§ãæ¹åãããŸããã¡ã³ããã³ã¹æéäžã®èªåã¢ããã°ã¬ãŒããèšå®ã§ããéçšè² è·ã®è»œæžãå¯èœã§ãã詳现㯠ãã¡ãã®ããã¥ã¡ã³ãããåç
§ãã ããã 2 æãããšïŒé±éã§ãïŒãã®ãŸãŸã ãã ãæãããªããšããã§ããïŒ ããã§ã¯ããŸãæ¥é±ïŒ èè
ã«ã€ã㊠西æ å¿ å·±(Tadami Nishimura) / @tdmnishi AWS Japan ã®ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããšããŠãå°å£²ã»æ¶è²»è²¡æ¥çš®ã®ã客æ§ãæ
åœããŠããŸããããŒã¿ã¬ããã³ã¹ã®èгç¹ãããã客æ§ãããŒã¿æŽ»çšã广çã«è¡ãããããªãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãªã©ãå€ãè¡ã£ãŠããŸãã奜ããªãµãŒãã¹ã¯ Amazon Aurora ãš Amazon DataZone ã§ããè¶£å³ã¯çãã¬ã§ãèªå®
ã«åŸæ©ïŒåã®ãã¬ãŒãã³ã°ã«ãŒã ãæ§ç¯ããŠãæ¥ã
å±ãã§ããŸãã
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã








