LoginSignup
2
2

More than 5 years have passed since last update.

fluentd-s3をkubernetesでアプリと同一podに格納してS3にログ転送

Posted at

前回の投稿で、akka-slf4とfluentdを利用してログをS3に転送しました。

この際に、以下の2つのサービスが登場しました。

  • akkaのアプリケーション
  • fluentdのプロセス

上記を、kubernetes上でdeployするをどうしようかな、と考えましたが、集約的なcollectorを一つ配置するのではなく思い切って、アプリごとにfluentdのコンテナを付随させようと思いました。

メリットとしては以下のとおりです。

  • logback.xmlの中で、fluentdのホストをlocalhostにしておける
  • 一元的なfluentdサービスが不在になることで、どれかひとつのfluentdのpodがこけても他のサービスのロギングは継続される

デメリットとしては以下なのかな、と思いました。

  • 各サービスに付随するfluentdの通信が途絶えた時に追跡しにくい
  • AWSのリソース(S3)へのアクセス権限を持つpodが点在する

後者は、ちょっとうざったいので、もう一個何かをかますか、構成を変更するか、というところもあるので悩みどころです。

うだうだと書きましたが、下記のようなReplicationController用のYamlを用意することで実現が可能となります。

ご興味のある方はご利用ください。

rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: triplew-app-name
  labels:
    app: triplew-app-label
    tier: triplew-app-tier
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: triplew-app-label
        tier: triplew-app-tier
    spec:
      containers:
      - name: fluentd-s3
        image: triplew/fluentd-s3
        env:
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: awsaccesskeyid
        - name: AWS_SECRET_ACCESS_KEY 
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: awssecretaccesskey
        - name: FLUENTD_S3_BUCKET
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: fluentds3bucket
        - name: FLUENTD_S3_REGION
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: fluentds3region
        ports:
        - containerPort: 24224
      - name: triplew-app-name
        image: triplew/app:latest
        env:
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: awsaccesskeyid
        - name: AWS_SECRET_ACCESS_KEY 
          valueFrom:
            secretKeyRef:
              name: mySecretKey
              key: awssecretaccesskey
        - name: JAVA_OPTS
          value: -Dconfig.file=application.production.conf 
        ports:
        - containerPort: 8080

secretKeyRefについては、kubernetesがv1.2だと動作しますが、v1.0系だと未実装の状態ですのでご注意ください。


本日は以上となります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2