投稿者:常田

Bluemix上のCloudFoudnryアプリケーションのログ管理は色々機能が加わってきており数か月前からは Kibana4でも見れるなど利便性が上がってきています。とは言えログを独自に管理(データ保管やログ監視)をしたいというニーズは一定数あると思います。 ここでは、CFアプリケーションのログを自分で管理しているsyslogサービスへ転送する方法を説明します。

CloudFoudnryでは、アプリケーションのログはLoggregatorといわれる一連のプロセスにより収集されストリーミングとして処理をすることが出来ます。

https://docs.cloudfoundry.org/loggregator/images/architecture/loggregator.png

実際の Loggregator がどこに設定されているかは bx コマンドで表示することが出来ます。

$ bx info | grep loggre 
ロギング・エンドポイント:               wss://loggregator.ng.bluemix.net:443

.

事前準備(Syslog受信)

今回はSyslogサーバが手元にないので簡易的に Node-REDで受信したいと思います。手元に Node-REDのイメージがあるのでこのイメージを Container サービスを利用して起動したいと思います。今回利用したNode-REDイメージは、こちら https://hub.docker.com/r/nodered/node-red-docker/ のものになります。

docker tag 1ddbec9a483f registry.ng.bluemix.net/htokida/node-red
docker push registry.ng.bluemix.net/htokida/node-red
  • 名前をBluemix側のレポジトリ名としてTag付けします
  • 次にdockerコマンドのpushを利用してBluemix側にアップロードします
bx ic run -p 1234/tcp -p 1880 -m 512 registry.ng.bluemix.net/htokida/node-red
bx ic ip-bind 169.46.31.xxx 91xxxxxxx
  • ポートを公開して利用できるようにして起動します。1234は今回syslog/tcpとして受信するポートです。
  • Bluemix ICでIPアドレスをリクエストして取得した後にそのIPを今回の実行したコンテナにバインドします。

これで指定した http://IPアドレス:1880 に接続するとNode-REDが利用できます。以下のようなノードフローを作りましょう。

スクリーンショット 2017-06-30 11.03.39.png

TCPノードの設定は以下のようにしておきます。

スクリーンショット 2017-06-30 11.03.46.png

これで仮のsyslogサーバは準備が出来ました。

.

設定方法

cf コマンドを利用して新しいサービスを登録します。

$ cf create-user-provided-service mysyslog -l syslog://169.46.31.xxx:1234
hideaki_tokida@niandc.co.jp としてユーザー提供サービス mysyslog を組織 solct3 / スペース tokida 内に作成しています...
OK

myslogは任意の名称で構いません。接続先としてsyslogサーバのアドレスとポート番号を指定します。

$ cf bind-service idle-bot mysyslog
hideaki_tokida@niandc.co.jp としてサービス mysyslog を組織 solct3 / スペース tokida 内のアプリ idle-bot にバインドしています...
OK
ヒント: 確実に環境変数の変更が有効になるようにするには、'cf restage idle-bot' を使用します
$ cf restage idle-bot

上手くうごいていいれば先程のNode-REDのDebug画面にログが表示されます。

スクリーンショット 2017-06-30 11.09.52.png

この用にCFアプリケーションのログを転送することが出来ました。

.

まとめ

  • 非常に簡単にログの転送が行えることがわかりました。
  • 必要に応じてアプリケーションごとにこの設定を行う必要がありますので忘れないように設定を行ってください。
  • 作成したプロバイダーはアイコンとして表示されています。こちらのサービスをBindして利用します。

スクリーンショット 2017-06-30 11.13.40.png

  • 余談ですが今回syslogサーバ代わりのNode-REDをContainerで利用しましたがこのように簡単に実行できるのは素晴らしいですね。プロトタイピングや検証目的として非常に早く構築することが出来ました。
  • 検証はしていないのですが Syslogサーバの代わりに Nifi等をContainerで起動しても面白いかもしれません。

.

参考