はじめに
こんにちは、今回はNew Relicを使ってKubernetes(K8s)とJavaアプリケーションのパフォーマンスモニタリングを実装した際の経験を共有します。このアドベントカレンダー記事が、同じような課題に直面している方の参考になれば嬉しいです。そして、Apple Watch series 10を狙っています!
New Relic for K8sの導入
Kubernetesはそのスケーラビリティと柔軟性から、私たちのプロジェクトでも積極的に使用されています。そのため、まずK8sクラスターのパフォーマンスを把握するためにNew Relicを導入しました。
導入の流れ
-
New Relicアカウントの設定: まず、New Relicのアカウントを用意します。ここで取得したAPIキーが必要になります。
-
K8sクラスターへのエージェントの設置: New RelicのクラスターエージェントをHelmを使って簡単にインストールできました。Helmチャートを使うことで、エージェントを迅速にクラスターに展開できます。
helm repo add newrelic https://helm-charts.newrelic.com helm install newrelic-bundle newrelic/nri-bundle --set global.licenseKey=<YOUR_LICENSE_KEY> --set global.cluster=<CLUSTER_NAME>
-
メトリクスの確認: ダッシュボードにアクセスすると、クラスター全体のパフォーマンスやリソース使用率を視覚的に確認することができました。
効果と課題
K8sクラスターのパフォーマンスをリアルタイムで監視できるようになり、異常検知が迅速化しました。ただし、導入初期には大量のメトリクスデータが収集されるため、ingested data量が想定以上に膨らんだという問題に直面しました。
Java APMの導入
次に、Javaアプリケーションのモニタリングを目的として、New RelicのAPM(Application Performance Monitoring)を導入しました。
導入プロセス
-
APMエージェントの設定: JavaアプリケーションにAPMエージェントをインストールします。
newrelic.jar
の配置とnewrelic.yml
の設定を行いました。java -javaagent:/path/to/newrelic.jar -jar myapp.jar
-
データ収集の開始: アプリケーションを再起動すると、自動的にデータが収集され始め、New Relicのダッシュボードにメトリクスが表示されます。
課題と解決策
Java APM導入後、ingested data量が膨大で契約している7.5TB/月を超えそうになりました。このため、以下の設定を無効化しました:
-
Distributed Traceを無効化:
newrelic.yml
ファイルで無効化しました。 -
Metricsを無効化: Metricsも無効化しました。その他にもほとんどの設定を無効化しました。
まとめ
New Relicを用いたK8sとJava APMの導入は、システム全体のパフォーマンスを詳細に把握するための強力な手段となりました。一方で、過剰なデータ量といった課題と向き合う必要がありました。これらの経験が、同じような取り組みを考えている方にとって少しでも役立つことを願っています。
もし、この記事があなたのお役に立てたら嬉しいです。また、成功や失敗、そして学んだことを共有することの価値を感じていただければ幸いです。