Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jaws20140117

752 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Jaws20140117

  1. 1. チャラチャッチャチャラッチャー でちょっと良いものができた話 Copyright © 2014 AGREX INC. 14年1月18日土曜日
  2. 2. まず、ごめんなさい Copyright © 2014 AGREX INC. 14年1月18日土曜日 2
  3. 3. まず、ごめんなさい 素晴らしいお話の数々の後では、 完全にお耳汚しですw Copyright © 2014 AGREX INC. 14年1月18日土曜日 2
  4. 4. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  5. 5. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  6. 6. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  7. 7. プロフィール てるい まさし 照井 将士 http://www.facebook.com/marcy.terui (株)アグレックス 札幌事業所 システム部 AWS Certified Solutions Architect 1987年 東京都大田区生まれ 1992年 札幌移住 2011年  (株)アグレックス入社 役職:下っ端・雑用係 好きなサービス AWSチームリーダーに クラスアップしました! ※注 現状1人チームだからリーダーなだけw Route53、CloudWatch、RDS(MySQL) Copyright © 2014 AGREX INC. 14年1月18日土曜日 3
  8. 8. とある問題がありました。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 4
  9. 9. とある問題がありました。 アカウントが増えてきて、 CloudWatchのアラート状況の 把握が難しくなってきた。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 4
  10. 10. とある問題がありました。 アカウントが増えてきて、 CloudWatchのアラート状況の 把握が難しくなってきた。 コンソールからは当然アカウント単位でしか見れない。 でも、データストアとか監視サーバの管理しなくて良いし、 アカウント単位で誰かに見せたくなったらIAMユーザ使ったりできて良い所も一杯あるから、 辞めてZabbixに集約とかっていうのも微妙なんですよね∼ Copyright © 2014 AGREX INC. 14年1月18日土曜日 4
  11. 11. ウチにはこんな子が居ます。 ウチの警子ちゃん http://www.isa-j.co.jp/keiko-10th/index[1].html Copyright © 2014 AGREX INC. 14年1月18日土曜日 5
  12. 12. ウチにはこんな子が居ます。 CloudWatchのアラームが上がると… ウチの警子ちゃん ピピピピ Copyright © 2014 AGREX INC. 14年1月18日土曜日 http://www.isa-j.co.jp/keiko-10th/index[1].html 5
  13. 13. ウチにはこんな子が居ます。 CloudWatchのアラームが上がると… ウチの警子ちゃん ピピピピ http://www.isa-j.co.jp/keiko-10th/index[1].html なんで鳴ってるの…? アラートメールどこ行った?? Copyright © 2014 AGREX INC. 14年1月18日土曜日 5
  14. 14. ということで クロスアカウントで、 アラーム状態を集約して見られる ダッシュボード的なものが欲しい! Copyright © 2014 AGREX INC. 14年1月18日土曜日 6
  15. 15. ということで 作ってみました。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 7
  16. 16. どんな感じで作った? こんな感じです。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 8
  17. 17. ミュージックスタート!古いって言わないでwww Copyright © 2014 AGREX INC. 14年1月18日土曜日 9
  18. 18. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' 左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  19. 19. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' (((((【右から】c(・ェ・c`)三(´っ・ェ・)っ((((((【左へ】受け流す∼♪  左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  20. 20. ミュージックスタート!古いって言わないでwww チャラチャッチャチャラッチャ∼♪                       ォ"               __,,,.. 、 `、                      チ,,     _,,..、"" ,,,ィェェォーン`''" 、 ヾ  ヽ、                     イ;;: :./~`''"    ̄ ̄ ¨ ¨`リ、"ヾ、  、 、  ヽ                     f;;::/            ミヾ  ヽ  、 、  .} .                    ∨ .::::...         ミ       、 、 ;'i .                     { ..:;::..         ミ゛       、 、', .}                    ,ァ'ー-、:{i:t,,..--'"`ヽ、`ヽ:::::`ヾ、      `  、', }                   '"''t--=ゞ、`ー三''" ̄`  `::::  |         、',. .|                     无エニ=/ ::(アエエ=-、_,.:::   |     y=、   .リ                     广;;''/  ::.`ー  ''"~   ::. |  チ''" ィ''ヾヽ  リ                     { .::/ .....::、     .......::::::: |  / , 、ヾ ノ /  ,'                     `、 ( ,zzュ,,リ:.   ....:::::::::  | / r' イ='./ /  ,'                      |,ィエェエta、 :::.  ..::::.    | .|::("'´゛./ ,/                     キ'"、__`ヾッ, ::       ~´;;;;`ーイ   ,'               ,,,..ィ==t、   `、¨`ー'"ア"::.. ..::::::    /;;;    :|  ,'              以zzt、;;;;`、  ヾ、,,,;:'"....;;;;;;..::::    /;;;;;     :| .,'              f三三~`,,`、}   |i |;;;ミ      ,,.イ;;;;;;;;;      :| ,'              〉==- 、三;/   {ヾt;;;ミ_,,,,,.ィツ;;;;;;;;;;;;;;;;       ツ_              /   `ヾナ   `ー====マ-''";;;;;;;;;;;;         ∨` i .           /    ./         リt;;;;;;;;; ::::         /  `t、            /     /.         / :i;;;;::....         /    / `、 .          /     /        ,. ィ"i  `、;;;::       ,.イ      /   ヽ、          /     /     ,. - '"   |   `、;:    ,. イ        /     `ー        /~\  ,... /,. - ' "      /-- .、  〉-r''"         /     ,. ィ''",,.. 、  `Y  |"          f:::::::::__/`ー-ナ--――-ァ   /,'   r'" ̄    `ヽ、!、 〉          {::::::ー''リ、;;;;チ`ー=ニ_::::::/  / ./   {,,.. =---''`ヽ、`}:: .{           ',::::::::::/~`、ヾ`ヽ,,::: /  / ,' 左 Copyright © 2014 AGREX INC. 14年1月18日土曜日 右 9
  21. 21. わかりましたか? すいません。 ちゃんと説明します。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 10
  22. 22. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11
  23. 23. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11
  24. 24. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 11 ②受け取った内容を軽く整形する
  25. 25. こんな感じです。 require dirname(__DIR__) . '/init.php'; use AwsCloudWatchCloudWatchClient; use DashBoardUtilPropaties; $data = array(); foreach (new DirectoryIterator(PROPATIES_DIR) as $fileInfo) { if($fileInfo->isDot()) continue; $prop = new Propaties(PROPATIES_DIR . "/" . $fileInfo->getFilename()); $cloudwatch = CloudWatchClient::factory(array( 'key' => $prop->get(PROPATIES_ACCESS_KEY), 'secret' => $prop->get(PROPATIES_SECRET_KEY), 'region' => AWS_REGION )); $model = $cloudwatch->describeAlarms(); $data[$prop->get(PROPATIES_SYSTEM_NAME)] = $model->get("MetricAlarms"); } ①AWS CloudWatch APIからデータもらう  ×アカウント数 $rows = ""; foreach ($data as $systemName => $alarms) { foreach ($alarms as $alarm) { $rows .= "['{$systemName}', '{$alarm['AlarmName']}', '{$alarm['AlarmDescription']}', '{$alarm['MetricName']}', '{$alarm['StateValue']}'],n"; } } $date = date("Y-m-d H:i:s"); $content = " <html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'></script> <script type='text/javascript'> google.load('visualization', '1', {packages:['table']}); google.setOnLoadCallback(drawTable); function drawTable() { var data = new google.visualization.DataTable(); data.addColumn('string', 'SystemName'); data.addColumn('string', 'AlarmName'); data.addColumn('string', 'AlarmDescription'); data.addColumn('string', 'MetricName'); data.addColumn('string', 'StateValue'); data.addRows([ {$rows} ]); var table = new google.visualization.Table(document.getElementById('table_div')); var formatter = new google.visualization.ColorFormat(); formatter.addRange('ALARM', 'INSUFFICIENT_DATA', 'white', 'red'); formatter.addRange('INSUFFICIENT_DATA', 'OK', 'white', 'orange'); formatter.addRange('OK', null, 'white', '#33ff33'); formatter.format(data, 4); table.draw(data, {allowHtml: true, showRowNumber: true}); } </script> </head> <body> <h1>{$date}時点</h1> ③Google Charts APIに投げる <div id='table_div'></div> </body> </html> "; echo $content; Copyright © 2014 AGREX INC. 14年1月18日土曜日 ②受け取った内容を軽く整形する 11
  26. 26. つまり Cloudwatch API (右) から Google Charts API (左) に 渡す(受け流す)だけ Copyright © 2014 AGREX INC. 14年1月18日土曜日 12
  27. 27. …で、こんなんできましたー Copyright © 2014 AGREX INC. 14年1月18日土曜日 13
  28. 28. …で、こんなんできましたー INSUFICIENT_DATAがオレンジ ALARMが赤になる 各ヘッダをクリックすると昇順降順の並べ替えができる Copyright © 2014 AGREX INC. 14年1月18日土曜日 13
  29. 29. 参考とまとめ Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  30. 30. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  31. 31. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  32. 32. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ ムーディ○山の現在 http://blog.livedoor.jp/aokichanyon444/archives/54385877.html Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  33. 33. 参考とまとめ AWS SDK for PHP(他にもJava、.NET、Ruby、Python、Node.jsとかあります) http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html Google Charts https://google-developers.appspot.com/chart/ ムーディ○山の現在 http://blog.livedoor.jp/aokichanyon444/archives/54385877.html 思わず歌っちゃうほど簡単に、 ちょっと良いものができました。 他にも、異なるAPI同士を 組み合わせることで、 手間無く良いものができたりする例は一杯ありそう。 Copyright © 2014 AGREX INC. 14年1月18日土曜日 14
  34. 34. ありがとうございました! Copyright © 2014 AGREX INC. 14年1月18日土曜日 15

×