GrafanaでZabbix/CloudWatchのメトリクス監視を一元化する

f:id:cluex-developers:20170213113941p:plain

Grafanaかっこいいですよね。いつまでも見ていられそうです。

今回は統合監視ツールZabbixとAWSのCloudWatchメトリクス群を Grafanaで一元的に可視化して見れるようにしてみます。

今回の背景

CloudWatchやEC2のメトリクスを見るのに、 AWSにコンソールで入っていちいち確認するの面倒じゃないですか。 加えてサービスごとにAWSアカウントが分かれているとなると更に不便じゃないですか。

・よりリアルタイムなデータを見たいものはZabbixのメトリクスを使用したい

・ELBにアタッチされてるホストの数も見たい

・オートスケーリングどんな感じか見たい

インスタンス毎のメトリクスも見たい

・ついでにサービス全体でどれくらいの負荷がかかってるかも見たい

・なんなら複数のAWSのアカウントを跨いで見れると尚良い

 

・・・ということで全部grafanaに突っ込みました。

 

構成

今回のメインはzabbix-server、Grafana及びCloudWatchあたりになります。

構成はこんな感じです。

f:id:cluex-developers:20170213111236p:plain

Grafanaは標準でCloudWatchをサポートしていて、 Zabbixもプラグインを入れることでデータソースとして使用することが可能です。

ちなみにGrafanaで標準サポートされているデータソースがこちら

・CloudWatch

・Elasticsearch

・Graphite

・InfluxDB

・OpenTSDB

・Prometheus

Zabbixも標準でサポートしてくれると嬉しいです。

grafanaをインストールする

インストールはOSはUbuntuベースで話を進めていきます。

Ubuntu以外に関してのGrafanaのインストールは、詳しくはこちらをご覧ください。

Grafana - Installation

$ wget https://grafanarel.s3.amazonaws.com/builds/grafana_4.1.1-1484211277_amd64.deb
$ sudo dpkg -i grafana_4.1.1-1484211277_amd64.deb
$ sudo apt-get install grafana

   

grafanaにZabbixのプラグインをインストール

$ sudo grafana-cli plugins install alexanderzobnin-zabbix-app

GitHub - alexanderzobnin/grafana-zabbix: Zabbix plugin for Grafana dashboard

   

grafanaを起動

$ sudo service grafana-server start

 

Grafana自体にHTTPサーバーの機能も内臓されているので、これでGrafanaが立ち上がります。 デフォルトでは3000番ポートを使用するので、適宜リバースプロキシでnginxを前にかませるといいかと思います。そのままでも問題なく使えます。

 

では次にZabbixのデータを取り込んでいこうと思います。

Zabbix側でgrafana用のユーザーを作成

Zabbix側の手順としては

・grafana用のユーザーを作成する。

・grafana用ユーザーにREAD権限を付与。

といった流れになります。

 

ちなみにZabbix側でgrafanaユーザーに適切なパーミッションを与えていなかった結果、grafanaからAPI叩いてもデータが取れずに2時間ばかり無駄にしたのは私です。 パーミッションを与えてください。

 

Zabbixのパーミッションなどは本家にドキュメントがあります。

www.zabbix.com

grafanaでZabbixデータソースの設定

左上のロゴから、[Data Sources] → [Add data source]と辿っていきます。

設定はこんな感じです。

f:id:cluex-developers:20170213123526p:plain

 

Zabbixには標準でAPIが用意されているので

http://エンドポイント/zabbix/api_jsonrpc.php をURLのところに設定してあげます。

 

Zabbix API Detailsには先ほどZabbix側で作成したgrafana用ユーザーのUsernameとPasswordを設定してください。

今回は便宜上、Zabbix Serverが入っているEC2インスタンスにGrafanaも入れているのでVPCやSGなどは特に気にせず、GrafanaをプロキシとしてlocalhostでZabbixのエンドポイントを叩いています。

 

Zabbix用のダッシュボードを作成

ダッシュボードの作り方などはServerworksさんのこちらのブログが詳しいです。

blog.serverworks.co.jp

個人的な要件:EC2のメトリクス表示をオートスケーリングに対応させたい

Grafanaでダッシュボード作ったのはいいものの、 オートスケーリングでインスタンスが増減するたびにグラフの設定し直すのとかめちゃめちゃ面倒ですよね。

そもそもオートスケーリングしなくてもインスタンス多いとグラフ作るのが面倒。

でも1つのパネルで全インスタンスのCPU利用率とか表示させたい。

解決策:正規表現でフィルタリングができる。

f:id:cluex-developers:20170213111421p:plain

文字が黄色くなっている箇所ですが、Host名でフィルタをかけて、ホスト名がマッチするサーバー群のメトリクスを一発で表示することができます。

上の設定だけでこんなグラフがすぐに出来上がります。

f:id:cluex-developers:20170213111439p:plain

これだけでもパネル設定がかなりラクになりました。

そのほかの色々なグラフなどの作り方はgrafana-zabbix.orgが出しているデモの設定が参考になります。

http://play.grafana-zabbix.org/dashboard/db/grafana-zabbix-demo

GrafanaでCloudWatchをデータソースに設定する

続いてGrafanaにCloudWatchのデータを取り込んで、グラフを表示させていきます。

AWS IAMでgrafana用のユーザーを作成

CloudWarchReadOnlyAccess ポリシーをアタッチしたユーザーをIAMで作成します。 Grafanaの方で使用する認証情報はアクセスキー及びシークレットキーになります。

GrafanaでCloudWatchデータソースの設定

本家Grafanaのドキュメントではaws-cliのクレデンシャルファイルを使用した設定方法となっていますが、 設定画面から直接IAMユーザーのアクセスキーとシークレットキーを入れることも可能です。

Grafana - AWS CloudWatch

個人的にはサーバーの中に credential を置く必要ないので、GUIで設定しちゃうとがラクかなと思います。 GUIで設定しても、再度設定を開くとアクセスキーなどは見れないようになっています。

f:id:cluex-developers:20170213111502p:plain

これでCloudWatchの方からもメトリクスを表示が可能となりました。

複数のAWSアカウントを設定する際も同じ要領でIAMユーザーを作成し、データソースを追加していくことでGrafanaからデータを取り出せます。

   

ELBのHealthyHostCountをパネルに表示する

試しにCloudWatchからのメトリクスとしてELBにアタッチされているHealthyHostCountのメトリクスを表示させてみます。

設定としてはこんな感じです。 f:id:cluex-developers:20170213121249p:plain

これでZabbix及びCloudWatchからデータが取れるようになったので、あとはパネルを一通り作れば、完成です!

f:id:cluex-developers:20170213111537p:plain

     

【番外編】 AWSの請求情報をgrafanaで確認する

AWSの請求情報、ついでにGrafanaで見たくないですか? 私は見たいです。

例えばこんな感じ。 f:id:cluex-developers:20170213112148p:plain

Grafanaの公式サイトにあるテンプレートを使えばすぐに表示させることができます。

   

grafana.net

上記のものだとインポートした後にカスタマイズができないので、 インポートした後にカスタマイズしたいという方には、カスタマイズできるやつ置いておきます。

よかったら使ってください。

GitHub - yoshi42662/Grafana-AWS-Billing-Dashboard

We’re hiring!!

Cluexではビジネスサイド、エンジニアサイド共にメンバーを募集しています! お気軽にご連絡下さいませ! エンジニアの方、ぜひ情報交換しましょう!

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com