CloudFoundry(以下CFと略す)にデプロイしたアプリケーションのログをsyslog転送するにはsyslogサービスをバインドすることで簡単に設定することができます。
syslogサービスのバインドは下記のコマンドで簡単に行なえます。
$ cf create-user-provided-service サービス名 -l syslogサーバのURL $ cf bind-service アプリケーション名 サービス名
試しに下記のgithubに上がっているlog4jを出力するデモアプリでsyslog転送を行なってみます。
https://github.com/callicoder/spring-boot-log4j-2-demo
ますはビルドしてjarファイルを作成します。
$ wget https://github.com/callicoder/spring-boot-log4j-2-demo/archive/master.zip $ unzip master.zip $ cd spring-boot-log4j-2-demo-master $ mvn package
続いてcfをpushするための設定を行ないます。
$ vi manifest.yml
application: - name: demo path: target/log4j2-demo-0.0.1-SNAPSHOT.jar
アプリケーションをデプロイします。
$ cf push -b https://github.com/cloudfoundry/java-buildpack.git
続いてsyslogのサービスを作成し、デプロイしたアプリケーションにバインドします。
$ cf create-user-provided-service syslog-service -l syslog://XXX.XXX.XXX.XXX:51000 $ cf bind-service demo syslog-service $ cf restage demo
これでCFにデプロイしたアプリケーションがsyslog転送されます。
なお、今回はlogstashサーバにsyslog転送しそこからDatadogにログを連携するようにしました。
ちなみにCF→DatadogはDatadogのbuildpackを使用してログの転送ができますがあまりカスタマイズ(タグの追加等)ができないためlogstashを経由することにしました。