Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

codt-2022-yappli

 codt-2022-yappli

Avatar for Masahito Mochizuki

Masahito Mochizuki

June 27, 2022
Tweet

More Decks by Masahito Mochizuki

Other Decks in Technology

Transcript

  1. 利甚者芖点での倖圢監芖をしたいが・・・ • ブラりザリプレむ圢匏の倖圢監芖❎ ◩ 自分アプリなんで ◩ Appium版の倖圢監芖欲しいなヌチラッ • Ping圢匏の倖圢監芖❎ ◩

    障害を握り぀ぶしおいるケヌス ◩ 200だけどレスポンス内に「衚瀺/利甚できたせん」ケヌス ◩ 歎史的経緯でむンフラ経路が様々ALB→EC2→Aurora、CloudFront→S3、 NLB→Fargate→SQLite等 ◩ コア機胜に絞っおもヘルスチェックをそれぞれ甚意するのは倧倉 課題1障害の緊急性にふさわしいレベルで通知されなかった
  2. var assert = require('assert'); var request = require('request'); var options

    = { uri: 'https://apiserver/api/show/123456', form: { contents_id: 'xxx' }, headers: { "User-Agent": "I am Android.", }, json: true }; request.post(options, function(error, response, body){ assert.equal(response.statusCode, 200); if (body.indexOf("䜿えるクヌポン :あなただけのクヌポン ") > -1) { console.log("OK"); } else { console.log("リトラむ"); request.post(options, function(error, retry_response, retry_body){ assert.equal(retry_response.statusCode, 200); assert(retry_body.indexOf("䜿えるクヌポン :あなただけのクヌポン ") > -1); }); } }); 課題1障害の緊急性にふさわしいレベルで通知されなかった requestを自由に加工 assertで独自の条件刀定 条件分岐など自由に制埡 ナヌザヌ操䜜をそのたた シナリオずしお実装 ダプリのために甚意しおく れた機胜では・・・
  3. 課題2障害が発生したサヌバヌからアラヌトが通知されなかった 通知党般を芋盎しお必芁なものが圓たり前に飛ぶ状態 そしお通知チャンネルを拡匵 監芖サヌビス #error #サヌビスA #ディスク容量䞍足 #warn #info #サヌビスB

    #サヌビスC #SSL蚌明曞期限 切れ #脅嚁・セキュリティ 埓来の総合的な通知 (New)サヌビス毎の通知 (New)特定アクションが 必芁ずなる通知 珟圚構築䞭
  4. • 埓来の総合的な通知 ◩ サヌビス党䜓の健党性を俯瞰する ◩ 障害レベルごずに状況を把握する ◩ #errorではオンコヌルに盎結しお迅速察応する • サヌビス毎の通知

    ◩ どの系統で障害・倉化が起きおいるか把握する ◩ 即時のアクションが䞍芁な通知も積極的に流しお䞭長期的な倉化を捉える ◩ 課題3の解決ず連動埌述 • 特定アクションが必芁ずなる通知 ◩ ディスク容量が䞀定割合を超えたサヌバ、期限が近づいおいる SSL蚌明曞、脅嚁・セキュリティ系 の通知など、埌続アクションが明確に決たっおいるものを把握する ◩ Slackスタンプで実斜状況を可芖化する将来的にはチケット化など 課題2障害が発生したサヌバヌからアラヌトが通知されなかった
  5. • 倧きく分類するず2皮類の基盀がある ◩ PHP on EC2旧系統 ◩ Go on Fargate新系統

    • 埐々に新系統に寄せおいるが旧系統も珟圹 • 他にも色々なむンフラがあっお耇雑に関連し合っおいる ◩ Lambdaをベヌスずした配信基盀 ◩ Aurora、SQLite、Elasticsearch、DynamoDB、Redisなど䟝存サヌビス ◩ embulkをベヌスずしたETL基盀 ◩ 倖郚APIず連携するケヌス • 旧系統はロギングが匱い 課題4障害の状況把握・原因調査に時間がかかる
  6. 課題4障害の状況把握・原因調査に時間がかかる サヌビスA(旧系 çµ±) サヌビスC(旧系 çµ±) サヌビスB(新系 çµ±) デヌタベヌ スA 通垞のアクセス量

    通垞のアクセス量 通垞のアクセス量 異垞なアクセス量 異垞なアクセス量 サヌビスC目線では、色々なずころから利甚される汎 甚的なAPIを、サヌビスAから倧量にコヌルされおい るずころたでは分かる サヌビスA目線では、色々なずころで サヌビスCをコヌルしおいるずころたで は分かるが、このタむミングで激増し た芁因が分からないログ等で目がし い情報もない
  7. 課題4障害の状況把握・原因調査に時間がかかる サヌビスA (旧系統) サヌビスC (旧系統) サヌビスB (新系統) デヌタベヌ スA ある芁因で特定テヌブルが長時間

    ロック 解陀埅ちのSQLがたくさん滞留 サヌビスCが特定レスポンスを返华 DBコネクションが枯枇気味 サヌビスAが前述の䞍具合でルヌプ DBコネクションがさらに枯枇気味 以䞋略
  8. プロセス毎のスタックトレヌスを䞀定呚期で取埗 受け入れ可胜な状態のプロセス数を集蚈 ログ出力監芖サヌビス連携 ç•°åžž(受け入れ可胜なプロセス0)通知 監芖サヌビスでログをパヌス パヌスしたログを集蚈しおメトリクス化 先ほどのダッシュボヌドで可芖化 異垞だけでなく枛少傟向も通知できるように 課題5事前に予兆があったが気づけなかった 以前あるサヌビスでお詊し実斜しお

    いたが、IaCしおなかったのでその 埌なんだかんだで消えおた 䞊蚘実斜IaCに加えお、監芖サヌ ビス偎でパヌス・メトリクス化するこ ずで柔軟に可芖化・通知などで利甚 できるように たた他サヌビスにも展開できた
  9. 改善埌 • 障害の緊急性にふさわしいレベルで通知されなかった • 障害発生したサヌバヌからアラヌトが通知されなかった • 特定ロヌルの゚ンゞニアしか察凊できない障害があった • 障害の状況把握・原因調査に時間がかかる •

    事前に予兆があったが気づけなかった 👍ナヌザヌシナリオを暡したScripted API監芖で即時察応 👍サヌビス・アクション毎のチャンネルで適切な通知 👍サヌビス毎のSlackチャンネルに察応ドキュメント 👍ずりあえずAPM、萜ち着いお党䜓を俯瞰しよう 👍ダッシュボヌドやメトリクス化で倉化に気づく
  10. • 党おの系統にAPMを導入しサヌビス党䜓を俯瞰できる分散トレヌシング基盀 • バック゚ンドだけではなく、フロント゚ンドやiOS/Androidのモバむル、セキュリティな ども監芖 • 実際のデヌタを基準ずしたSLI/SLO管理 • ステヌゞング環境に監芖を入れお、定期的なQAプロセスに合わせお、監芖サヌビ ス芖点でも倉化に気づける

    • ゚ンゞニアの開発環境にも監芖を入れお、自身が加えたプログラム倉曎に察しお、 QA前の゚ラヌレヌト倉化やパフォヌマンス芳点での気づき提䟛 • 本番同等の監芖を入れた怜蚌環境で、サヌバヌが死んだ時やデヌタベヌスが詰 たった時など再珟し、アラヌトから埩旧たでの蚓緎・行動確認をしたい 劄想しおいた未来
  11. • ただただダプリは倉化が激しいフェヌズ 実際に利甚されたデヌタ量に応じお課金されるため無駄がない ◩ 幎間契玄したものの途䞭から䞍芁になるケヌス ◩ 怜蚌などでほんの䞀時だけ䜿いたいケヌス ◩ スパむク時に䞀時的にむンフラを増匷するケヌス ◩

    䜙裕を芋お倚めにホストを甚意しおいるケヌス • 䞀時的な利甚超過に察する柔軟な察応 • 先の玹介の通り今埌ダプリでは重芁性が高たるSynthetics倖圢監芖 ◩ 皮類・頻床・ロケヌションがコストに圱響しない • NRQL(SQLラむクなク゚リ)で耇雑な条件でも可芖化・アラヌト • 迅速な日本語サポヌト、オンボヌディングの手厚さ ◩ ナヌザヌグルヌプの掻発さ、掻甚事䟋も充実 Goodなポむント👍
  12. • GoのAPMがもっず䜿いやすくなるずGood👍 ◩ 蚈枬したい単䜍でTransaction/Segmentの挿入が必芁 ◩ redigoのむンテグレヌションがなかった ◩ nrmysqlでク゚リが自動蚘録されない それぞれ有志のOSSやワヌクアラりンドが公開されおいたりする •

    Alertの条件がもっず分かりやすくなるずGood👍 ◩ ログをベヌスにしたAlertが条件を満たしおも通知されなかった ◩ Fine-tune advanced signal settingsのStereaming methodをEvent timerに すべきだったデフォルトがEvent flow 日本語ブログで现かく説明されおいたりする 改善しおほしいポむント🙏