あれですね、Windows10のanniversary updateで
bash使えるようになったんですね。
bash on ubuntu on windows
あーなんか触ってみたいなと思ったのですが、
うちのマシン、Windows7と8.1からあげてないんですね。
あの何度も何度も「Updateしようよー」って言われてて
もう最後の方は、意地でもあげないもんね、という気分になり
結果上げてないんですね。
でもbash触りたいから、10にしようかと思って調べたら
当然何度も何度も周知されているように有料で、まあ分かっていたけど少しだけ、
少しだけ気持ちが沈みました。
猛アタックされて、なんだか面倒だなと邪険にしてたあの子が
そういえば最近見かけなくなって、どうしんたんだろって思ったら、
彼氏が出来たらしい、と人づてに聞いたときの
「本来味わう権利すらないにもかかわらず、味わう、自分の半径8センチくらいの範囲の喪失感」
の支配下におかれるあの感覚ににてますね。よく分からないですか?僕も分からないです。
さて、AWSのモニタリングに関しては、同じくAWSのサービスとして提供されているCloudwatchがありますね。
OSにログインできるようなサービスであれば、zabbix等の監視サービスを投入することで
割とリッチなメトリクスが簡単に取れますがFullmanagedServiceのモニタリングや
AutoScaling等のサービスとの連携(トリガ)として利用することができることを考えた場合、
(インターフェイスやデータ保持期間は置いておいて)やはりCloudwatch(API)の使い勝手がよいのではないかと思います。
一行で、たくさんのものを置いておくことにしましたが、実際に運用すると、
「おいてきた部分が、やはり、おいてきてはいけなかった部分」だと気づくのも世の常で、
「後ほど検討します」は「まずは安定運用を目指します」になり「ようやく安定したのに、ここでこのような構成変更はリスキーです」に3段活用する季節を何度もすごしてきた
ぼくとしては、やはり何とかしたいと感じるわけです。
で、本題に戻りますと、以下2点をできるだけ、楽に、それっぽく実現したいということなのです。
1.データ保持期限を延ばしたい
2.WebUIをもっとさくっとかこよく見たい
で今回見ていくのは、grafanaです
そうですね、それっぽいですね。
でもgrafanaだけだと、「2.WebUIをもっとさくっとかこよく見たい」
しか実現できない(というか僕が実現する方法を知らない)ので、そこは別ポストで紹介します。
じゃあ作ってみたいとおもいます
1.環境
AMI:Red Hat Enterprise Linux 7.2 (HVM), SSD Volume Type - ami-0dd8f963 OS:Linux 3.10.0-327.el7.x86_64 x86_64 x86_64 GNU/Linux こんな感じで作りたい: client -> ELB -> grafana -> cloudwatchAPICall ->nat ->cloudwatch 他: ・subnetはPublic,Privateを準備済み ・NAT、IGWも準備済みでそれぞれのsubnetのDefaultGWになってる ・GrafanaのサーバはPrivateSubnetに立てる ・踏み台にGIPを付けてそこからSSHで入る
2. GrafanaServerの作成
2.1 EC2起動
上記環境で書いたAMIからEC2を起動しますが、その前に
以下のpolicyを保持したでIAMRole(信頼されたエンティティ:ec2.amazonaws.com)
を作っておき、起動時にアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*" ], "Effect": "Allow", "Resource": "*" } ] }
2.2 install
何パターンかありますが、勿論一番楽な以下を選択します
公式のinstall手順を参考に進めて行きます。
sudo yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.x86_64.rpm -y
ビックリするくらい、何事もなくインストールが完了します。
2.3 起動と自動起動の設定
Install時にinitScriptも一緒に配置されていそうですが
個人的に未だにsystemdに苦手意識があるため、systemdの方で操作します。
sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server.service sudo systemctl status grafana-server
3.ELBからつなげる
3.1 Grafanaは待ち受けているか
grafanaはdefaultがport:3000でListenするらしく
netstatで確認すると確かに待ち受けてる
$ netstat -an | grep 3000 tcp6 0 0 :::3000 :::* LISTEN $
conf(/etc/grafana/grafana.ini)も触りたいところだけど
動くところを見ないと、テンションが続かないので
まずは全体の通信を通してしまいます
3.2 ELBを作ろう
ELBはPublicSubnetに立てて、tcp80(HTTPだとプロトコルレイヤが違って怒られます)で待ちうけ、
裏に居るGrafanaのTCP3000に対してリクエストを投げます。
なんと言葉だけで説明を終了しようとしています。
3.3 つなげてみる
ELB(External)を作るとEndpoint用のDNSレコードが払い出されるので
配下のインスタンスが「Active」になったら早速つなげてみます
はい来た!
初期IDとPassはいずれもadminです。
Password変更は以下のようにGlobalUsersの所から行えます。
editを選んで、passwordをupdate。
4. Grafanaのデータソースを設定する
Grafanaがモニタリング状況の描画に利用するデータソースを定義します。
データソースは以下の部分で行いますが、
以下のような形で設定します。
Name=データソースを識別する名前です。好きなものを付けましょう type=cloudwatch credentialprofilename=なし ※1 Default Region=ap-northeast-1 Custom Metrics NameSpace=なし ※2 Assume Role ARN=なし※3
※1
grafanaサーバ上にあるAWSのクレデンシャルファイルの「プロファイル名※ここ大事」を指定します。クレデンシャルファイルはgrafanaServerサービスを起動しているユーザ[grafana]のhomeに配置する必要があります。
今回の手順だと/usr/share/grafanaがgrafanaのhomeになるので、そこに.awsディレクトリを作成し、credencialsというファイル名でファイルを作成しaccessKey,secretKeyを記載します。
今回、定義なしなのは、EC2にあらかじめIAMロールを付与しておいたから、そちらの権限でまかなえている印象です。
※2
カスタムメトリクスを取得した場合はここで名前空間(AWS/EC2のような形式)の定義が必要なようです(未検証)
※3
サラッとしていますが、サーバ上のAWSクレデンシャルファイルを参照するパターンは以前若干苦戦して設定しております。
またIAMのロールをサードパーティーから利用できるようにするには、なんだかドキュメントから上手くID周りを見つけられませんでした。
なので結果的にEC2にIAMRoleを付けている、という状態になっています。
では、グラフを作成しましょう。
左上のGrafanaマークからDashBoardを選択し、Newぽいのを選びます
若干操作に慣れが必要なのですが、以下のような形で、
Panel Data Source=cloudwatchにして、描画したいメトリックを選択していきます。
以下は、Grafanaへの通信を待ち受けてるELBのメトリクスを描画したものです。(ELBはTCPで作ってしまっているので、HTTP周りのメトリクスがとれないので、かなり寂しい感じですが)
こんな感じで、どんどん描画対象のメトリクスを追加して行きます。
センスの無さに震えが止まりませんが、今日はここまでにします。
次回は「データ保持期間を延命させるには?」について書いて見たいと思います。
こちらからはいじょうです。