DockerCon EU 2015でBrian Christner氏は,‘Docker Monitoring’の概要に関するプレゼンテーションで,ベストプラクティスの紹介,Docker Stats APIの説明,一般的な監視オプションとしてcAdvisor, ‘cAdvisor + InfluxDB + Grafana’, Prometheusの3つの比較を行った。
プレゼンテーションの中でChristner氏は,コンテナのラベリングやリソース制限の設定などのベストプラクティスを提案した。さらに氏は,Googleのコンテナ監視ツールであるcAdvisorの使い勝手のよさを認める一方で,cAdvisorとInfluxDB, Grafanaを組み合わせることでより改善されたアプリケーション統合とスケーラビリティを得られること,Prometheusが監視プラットフォームとしてクライアントライブラリとアラート処理を‘最初から(out of the box)’提供していること,などに言及した。
Swisscom AGのクラウドアドボケートであるChristner氏は,講演の冒頭で,SwisscomのDockerの利用状況を紹介した。同社では,Docker上で展開される永続的なデータベース・アズ・ア・サービス(DBaaS)やCloud Foundry(ClusterHQとの協力で構築)の他,いくつかのDockerプロダクツを社内利用して,‘アプリケーションクラウドからTVに至るまで’,さまざまなアプリケーションをサポートしている。これらのプロジェクトでは,Dockerを導入することで,サーバ毎の実行アプリケーション数の向上(その結果としてのインフラストラクチャコスト削減),開発者に対して商品化時間の低減,アーティファクト展開における‘フリーサイズ(one size fits all)’アプローチなどを実現している。Dockerを運用する上で重要な課題となるのは,監視アプローチを変える必要があることだ。この点について氏は,情報の共有を強く主張した。
Dockerを監視するためのベストプラクティスのひとつにコンテナラベル(labelling container)がある。これは,‘--label environment="production"’のように,コンテナの内容を表すキー/バリューのペアで,リソース制限の設定や,信号対ノイズ比を改善する目的で(“過剰な警告は不要(Don’t overlert yourself)!”)発生する警告総数の制限などを行うものだ。さらにChristner氏は,‘docker stats’コマンドの概要について説明し,このツールがローカルおよびリモートのトラブルシュートで極めて有効だと述べた。またDocker stats APIについては,Docker監視ツールのベースとして使用するのが一般的だが,コンテナのリソース情報を既存のモニタリングソリューションに提供する手段としても使用可能だ,とコメントしている。
GoogleのcAdvisor(Container Advisor)は,“コンテナユーザに対して,実行中のコンテナのリソース使用量やパフォーマンス特性の理解を”可能にするツールだ。cAdvisorのコンテナ抽象化はGoogleのlmctfyコンテナスタックをベースとするもので,Dockerコンテナをネイティブサポートすると同時に,その他のタイプのコンテナも“出荷時の構成から”サポートしている。cAdvisorは,実行中のコンテナに関する情報の収集,集約,プロセス,エクスポートを行うデーモンとしてデプロイされる。処理対象の情報には,コンテナレベルのリソース分離パラメータやリソース使用履歴,さらにリソース使用履歴とネットワーク状態の完全なヒストグラムを含めることが可能だ。
cAdvisorは,時系列データベースのInfluxDBや計測値を表示するダッシュボートGrafanaと組み合わせて,表示情報を保存することもできる。氏は“How to setup Docker monitoring”と題したブログ記事に関連して,Docker Compiseのコンフィギュレーションファイルを作成した。cAdvisor, InfluxDB, Grafanaを使用した監視環境を,ひとつの‘docker-compose up’コマンドで生成することができる。
PrometheusはSoundCloudにおいて,StatsDやGraphiteを越える改良型監視システムの開発から生まれた,システムとサービスを監視するためのシステムである。Prometheusは,設定されたターゲットから所定のインターバルで計測値を収集して条件式を評価し,その結果を表示するとともに,特定の条件が成立した場合に警告を発することができる。GitHubリポジトリのREADME.mdには,他の監視システムに比較した場合に特徴的な機能として,多次元データモデル,そのモデルを活用した柔軟なクエリ言語,複数モードのグラフ表示およびダッシュボード表示のサポート,階層型および水平型のフェデレーションのサポートなどが述べられている。フル機能のPrometheus監視環境を構築可能なDocker Compose構成ファイルが,Christner氏のGitHubアカウントで公開されている。
Christner氏は,これまでに述べた3つのコンテナ管理アプローチ – cAdvisor, ‘cAdvisor + InfluxDB + Grafana’, Prometheusを比較することで,自身の講演を締め括った。cAdvisorは一番使いやすいと述べたが,スケーラビリティと警告処理に制限がある。‘cAdvisor + InfluxDB + Grafana’の組み合わせはスケーラビリティに優れ,クライアントライブラリも提供されるが,初期状態では警告がサポートされていない。Prometheusはスケールアップが容易ではないかも知れないが,警告をサポートする他,多数の言語用のクライアントライブラリが提供されている。
図1. Docker監視ソリューションの比較一覧
Christner氏のプレゼンテーション“Docker Monitoring”で使用されたスライドはSlideShareで,その他の情報はbrianchristner.ioの一連のブログ記事として,それぞれ公開されている。