まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

Kubernetes上で動かしているRailsアプリでSentryを使うときにpod名などを表示するようにする

f:id:masato47744:20180509000519p:plain

コンテナからpod名を取得できるようにする

Sentryが実行時にpod名を取得するには、アプリケーションの実行時にpod名を何らかの方法で渡したり取得しにいく必要があります。 で、これをするための仕組みがkubernetesには用意されていてDownward APIというみたいです。

Downward APIはvolumeにマウントする方法と環境変数経由で渡す方法が用意されていて、今回の用途でいうと環境変数で取得できるようにするのが楽です。 やり方は単にk8sのmanifestのenvのところで書いてあげるだけでOKです。

ドキュメントはこちら Expose Pod Information to Containers Through Environment Variables

Deploymentで基本的に管理していると思うので、そこのenvのところでこんな感じで書けばOK。

      env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

Ravenの設定時にtagを設定する

あとはこんな風に環境変数をtagsで指定してあげるだけでいけちゃいます。

Raven.configure do |config|
  config.dsn = **************************************
  config.tags = {
    pod_name: ENV['POD_NAME'],
    pod_namespace: ENV['POD_NAMESPACE'],
  }
end

様子

f:id:masato47744:20180508235642p:plain