狠狠撸

狠狠撸Share a Scribd company logo
MagicOnion を
Container 化して
kubernetes で動かして
New Relicで監視する
2019/06/04
@tanaka_733
自己紹介
Senior Technical Support Engineer @ New Relic K.K.
? アプリケーションプラットフォーム監視(APM)のSaaSです
? 日本語サポートなど日本市場に注力しています
Microsoft MVP for Azure (2018 Jul- 2019 Jun)
? .NET Core on Linux, Kubernetes, Azureなどのお仕事してました
? Visual StudioやQ#などにも興味があります
ソーシャル活動
? Twitter: @tanaka_733
? Blog: 銀の光と碧い空
? Qiita (New Relic関連): https://qiita.com/takayoshitanaka
今日のテーマ
MagicOnion(サーバー側)を(Linux)コンテナ化して動かす
コンテナ化したアプリをkubernetes上で動かす
MagicOnion(サーバー側)をNew Relicで監視する
資料ででてくるコードはここにあります
https://gist.github.com/tanaka-
takayoshi/b64e74305029a5820b6386ddb1996749
MagicOnion
をコンテナ化
コンテナにしよう
Linuxコンテナで!
? .NET CoreなのでWindowsでも動くけどメリットがない
MagicOnion.Hostingを使おう
? Console.ReadLineはコンテナ上では期待通り動かないです
Listeningアドレスは 0.0.0.0 で
? コンテナこしのネットワークなのでlocalhostではないのです
MagicOnion.Hosting
Console.ReadLine()はコンテナ内だと待機せずプロセスが終了する
面倒でもHostingを使いましょう
Dockerfileの例
ASP.NET CoreでVisual Studioが用意してくれるDockerfileを流用
マルチステージビルドで動かすコンテナにソースコードや中間バイナリなどを入れないようにする
コンテナを
動かそう
コンテナをどこで動かすか
オンプレかクラウドか
AWSなら
? EKS, ECS
Azureなら
? ACI, AKS (コンテナでなければWebAppでも)
GCPなら
? GKE
などなどお好きなところで。
コンテナ化することで、同じコンテナイメージをどこでも動かせる。
20190604 Containerized MagicOnion on kubernetes with Observability with New Relic
Kubernetes?
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/
多くの場合、Node=仮想マシン
コンテナとvolumeをまとめた
もの。1つのアプリ。
永続化ストレージ
コンテナ化したアプリ
=さっき作ったコンテナイメージ
kubernetesでMagicOnion
Podの公開、ロードバランシング
Podのオートスケーリング
Redis Backplaneの準備
Podにする?外部サービス?
Podのデプロイ
Podのヘルスチェック
kubernetesでMagicOnion
とりあえずkubernetesで動かすとしたうえでの課題
? インターネットへの公開やロードバランシングどうしよう
? デプロイ(アプリの更新)どうしよう?
? ヘルスチェックどうしよう?
? スケーリングどうしよう?
? Redis Backplaneどうしよう?
詳細はLTなので省略(ご希望あればセッション枠ください)
ただ、kubernetesじゃなくても考慮は必要な項目(のはず)
Kubernetesであればその機能を活用することが可能
公開とロードバランシング
Kubernetesではサービスというオブジェクトを作ってPodと通信する
既存の機能はHTTPやTCP向けにまず作られているのでgRPC向けの考慮が必要
単純なTCPでのロードバランシングでよければ、TCP向けのサービスで問題ない
より複雑なバランシングが必要であればどこかにバランサー要素を入れる必要がある
? クラウドロードバランサ(ALBs)が対応してくれればうれしいけど
? Nginx-ingressとかenvoyとかIstioとかぐぐるといろいろ見つかるけど
とりあえず動かす場合の定義例
単純にdeploymentを作って、クラウドLoadBalancer で公開する例
New RelicでObservability
New Relicの.NET Coreコンテナ対応
基本的な流れはQiitaに書いてあります
? https://qiita.com/takayoshitanaka/items/6eef46d821704a7384dc
推奨手順はインストーラー実行なのでDockerfile内でインストール実行
? インストーラー実行せずともdllやconfigなどを一式コピーしても動作はする
.NET CoreではkestrelおよびIISのみデフォルトで監視
? Kestrelを使わないMagicOnionだとカスタムインスツルメンツが必要
New Relic用のDockerfile例
環境変数の設定
(ライセンスキーとアプリ名は
コンテナ起動時に指定しているので
ここでは省略)
Agentのインストーラーを
インターネットから取得してインストール
必要な設定ファイルをローカルから
所定の位置へコピー
kubernetesのdeploymentに
環境変数を追加
カスタムインスツゥルメント用config例
このXMLファイルを/usr/local/newrelic-netcore20-agent/extensions/ (Linuxでの既定)以下に追加する
カスタムインスツゥルメント用config例
Transactionに指定して測定したいメソッド1つにつき、1つtraceFactoryを作る
カスタム用のデフォルト メトリクスの名前を決める
アセンブリ名
クラス名
メソッド名
属性によるトランザクション指定と
イベントの記録
数値型はSingle推奨
20190604 Containerized MagicOnion on kubernetes with Observability with New Relic
20190604 Containerized MagicOnion on kubernetes with Observability with New Relic
まとめ
コンテナでもMagicOnionは動きます
? はやりのkubernetes上でも動きますよ
? コンテナに限らず、スケーリングなどの考慮は必要
New Relicで監視できます!
? コンテナ化+kubernetes環境ならExplorerあります
? カスタムイベント含め、各種メトリクスを監視
New RelicへのFeedbackください
? MagicOnionで動かすゲーム(アプリ)をNew Relicで監視したいけど、○○ができない!
? MagicOnionじゃないけど、ゲーム?アプリサーバーを監視したいけど(
? C#じゃないけど(まで大歓迎

More Related Content

20190604 Containerized MagicOnion on kubernetes with Observability with New Relic