LogstorageでAWSの全体構成を可視化する

2015.06.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

(2015/6/8更新)インフォサイエンスさんから要望事項についてレスを頂けたので、追記しています。
使用しているAPIがマニュアルに記載されておりましたので、そちらも併せて記載しています。

森永です。

AWS Configという相当使えるサービスがあります。
が、認知度が結構低くてしょぼんとしてます。(re:Inventの時一番テンション上がった新サービスだったので…)

AWS構成を可視化できるサービスなのですが、文字ベースなのでいまいち可視化しきれません。
そのため、図を使って可視化出来るツールがパートナーさんから幾つか出ております。
今回はConfig公開当初から気になっていた、インフォサイエンスさんのLogstorage for AWSを試させて頂きました。
(AWS Summitの時ブースを出されていたのでこれ幸いとブログ記事化を頼みに行ったところ快く許諾頂きました。)

Logstorage自体はAWSのためだけに作られたものではなく、ログを管理するためのツールです。
その一つのバージョンとしてAWSに特化したLogstorage for AWSがあります。
今回使うConfig連携パッケージ以外にも、CloudTrailやCloudWatch Logsとの連携パッケージも用意されています。

ためしてみた

試用版申し込み

1ヶ月間どなたでもお試し出来るようです。
AMIでの試用版が提供されているようなのでそちらを申し込みました。
参考のメール文面を埋めるだけです。10分位で申し込みは出来ます。

AMIから起動

しばらくしたらAMIの情報とテンポラリライセンスが送信されてくるので、AMIから起動してみます。
試用版で用意されているのは、

  • Windows Server 2008 R2
  • RedHat Enterprise Linux 6.6

のOSです。好きな方で試しましょう。今回はRHELでいきます。

基本的にAMIからEC2をたてるだけなので特に説明はしません。
ただし、LogstorageからAWSのAPIを叩ける必要があるので、ひとまずAdmin権限を持ったIAM Roleを設定しておきましょう。
(何の権限が最低限必要なのかは要検証)

logst02

Webコンソールへアクセス

試用版AMIには既にLogstorageがインストールされているので、「http://EC2のIPアドレス:8080」にアクセスしてみます。
セキュリティグループで8080番を開けておきましょう。

アクセスできるとライセンスキーを入力する画面になるので、メールで送付されたテンポラリライセンスを入力します。

logst03

認証が完了すると、ログイン画面が表示されます。
管理ユーザ:admin / 初期パスワード:admin でログインします。

logst04

入れました!
ここから各種レポートを作成するようです。

logst06

Config設定

Configを使用してAWSの構成を可視化するツールなので、ConfigがOFFっていては使えません。
ConfigがONになっていることを確認しましょう。
使ったことがないという方は、こちらこちらをご覧になり、設定下さい。

logst05

この際、SNSの通知も忘れずONにしておきましょう。
この後、トピックのサブスクリプション設定も行います。

logst07

SQSの設定

LogstorageではConfigからの通知をSQSに貯めて処理しているようです。
一度に大量の構成変更がなされても大丈夫デスね。

SQSの画面から[Create New Queue]を選択して、名前だけ設定します。
ひとまず他はデフォルトで構いません。

logst08

Queueが出来たら、送信できるようPermissionを設定します。

logst09

EverybadyにSendMessageをAllowしましょう。(ルー語)

logst10

SQSの設定は終わりですが、この後の設定でSQSのURLとARNが必要になるので、ついでにメモをしておきます。
[Dtails]タブから確認することが出来ます。

logst12

SNSサブスクリプション設定

続いては、先ほど作ったSQSにConfigからの通知が飛ぶようにSNSのサブスクリプションを設定します。
[Create Subscription]をクリックし新しいサブスクリプションを作成します。

logst11

[Protocol]で[Amazon SQS]を選択し、[Endpoint]に先ほどメモしたSQSのARNを入力します。
ここで、Emailでサブスクリプションを作成すると、構成変更が起こる度にメールが飛んできます。
絶対に構築しないリージョン(Tokyo以外)などに設定しておくとリージョンミス等を防げるかもしれません。

logst13

サーバでの設定

SSHでEC2へログインして設定を行います。
基本的にSQSのURLだけ設定すれば大丈夫です。
試用版AMIのインストールパスは/usr/local/logstorage/awsですが、自分でインストールされた方は、それに合わせて変更して下さい。

$ sudo vi /usr/local/logstorage/aws/collector/conf/awsconfigcollector.properties
sqsUrl = https://sqs.ap-northeast-1.amazonaws.com/************/awsconfig
outputDirectory = /usr/local/logstorage/aws/collector/output/
outputFileNamePrefix = awsconfighistory
outputFileEncoding = UTF-8

設定ができたら、収集モジュールを起動します。
そのまま起動すると権限がないと怒られましたので、/usr/local/logstorage/aws以下のオーナーをec2-userに変更しておきます。

$ cd /usr/local/logstorage
$ sudo chown -R ec2-user:ec2-user aws
$ cd aws/collector/bin
$ sudo ./awsconfigcollector.sh
[INFO ] [main] - Start collecting AWS Config histories.
[INFO ] [main] - Getting config histories from https://sqs.ap-northeast-1.amazonaws.com/425106460401/awsconfig
[INFO ] [main] - 1 config histories collected.
[INFO ] [main] - Finish collecting.

成功したようです。

レポートの手動出力

ようやく準備が出来ました!早速レポートを出力してみましょう!
LogstorageのWebコンソール左にあるメニューから[レポート]->[レポート作成条件]とたどります。

logst14

更に下の階層にガンガン潜っていきます。
[[テンプレート] Logstorage for AWS ]->[Config]->[Configスナップショット]とたどった先が目的地です。
csvとpdfでの出力が出来るようですが、私は図になったAWSの構成を見たいので、pdf一択です。

logst15

色々と設定できますが、試用版のAMIでは基本的な設定は既に済んでいるようなので、[実行]ボタンを押します。
見てわかるようにスケジューリングして定期的にレポートを作成なんてことも出来るようです。

logst16

実行したら結果は[レポート作成履歴]で確認できます。

logst17

ステータスが完了になるまで待つと、[ファイル名]のセルにレポートをダウンロードするためのリンクが出来ます!DL!

出力結果

logst19

うおー!!!しゅごい!!!!
空っぽなVPCが物悲しさを醸し出してる!!!(私の検証環境ですが、直前にいらないリソースを消すよう指令が来たためです。)
雲(Internet)からIGWへのつながりや、IGWに繋がるSubnet(Public)、繋がらないSubnet(Private)が一目瞭然に分かります。
解像度を下げているので見えづらいかとは思いますが、各SubnetのCIDRブロックの値や、EIPのアドレス、EC2のインスタンスタイプなども記載されています。EBSに紐づくSnapshotまでも関連性を確認することが出来ます。

これを使えば肥大化したシステムだと見えづらい全体像が一発でわかりますね!AWSちゃんが丸裸!!

要望

触ってみていくつか要望が出たので技術的に可能かは考慮せず記載しておきます。←

  • SSHログイン無しでWEBコンソールから全て設定したい(SQSのURL設定など) *1
  • 現状リージョン単位でしかレポートを出せないが、VPCなどでフィルタリングして出したい *2
  • IAM Roleに必要な最低限の権限をしりたい(マニュアルを読みこめばいけそう)

マニュアルに記載されておりました。面目ないです。

Logstorage for AWSで使用するAPI

AWS SDK for Javaの以下のAPIを利用しているようです。

クラス メソッド
com.amazonaws.services.sqs.AmazonSQSClient ReceiveMessage
com.amazonaws.services.sqs.AmazonSQSClient DeleteMessageBatch
com.amazonaws.services.config.AmazonConfigClient DescribeDeliveryChannels
com.amazonaws.services.config.AmazonConfigClient DeliverConfigSnapshot
com.amazonaws.services.config.AmazonConfigClient DescribeDeliveryChannelStatus
com.amazonaws.services.s3.AmazonS3Client ListObject
com.amazonaws.services.s3.AmazonS3Client GetObject
com.amazonaws.services.s3.transfer.TransferManager Download
com.amazonaws.services.logs.AWSLogsClient DescribeLogStreams
com.amazonaws.services.logs.AWSLogsClient DescribeLogGroups
com.amazonaws.services.logs.AWSLogsClient GetLogEvents

まとめ

今回はAWS Configで収集した情報を図として可視化するツールとしてLogstorageを試してみました。
AMIで提供されると基本的な設定が既に終わっているので非常に簡単に始めることが出来ました。
お話を聞いたところ、もっと細かい単位でレポートを出せるようにするとのことなので、楽しみです。 他にもいろいろな機能が搭載されていますので、色々と試してみようと思います。

参考文献

脚注

  1. 今夏リリース予定の「統合管理コンソール」から設定できるようになる予定だそうです。
  2. 7月頃のリリースでVPC毎の出力に対応予定とのことです。