Kubernetes APM auto-attach を使用する場合、 Java拡張モジュールを追加して、デフォルトのJavaエージェントインストゥルメンテーションではカバーされていない特定のライブラリまたはフレームワークの監視機能を強化することができます。
このガイドでは、Java 拡張機能を備えたカスタム Docker イメージを作成し、それを Kubernetes APM 自動接続と統合する方法を説明します。
あなたが始める前に
Java 拡張機能を追加する前に、次の点を確認してください。
- Kubernetes APM 自動アタッチがインストールおよび構成されている
- カスタムイメージを構築するために Docker をインストールしました
- コンテナ レジストリ (Docker Hub、ECR、GCR など) へのアクセス
- レジストリにイメージをプッシュする権限
- 必要なJava拡張モジュールに関する知識
概要
このプロセスには主に 3 つのステップが含まれます。
- 希望する拡張機能を使用して、
newrelic/newrelic-java-init:latestに基づいてカスタム Docker イメージを作成します。 - イメージをビルドしてコンテナレジストリにプッシュする
- 新しいイメージを使用するようにKubernetes計装を更新します
拡張機能付きのカスタム Docker イメージを作成する
Dockerfileを作成する
元の New Relic Java init イメージを拡張し、必要な拡張機能を追加する新しいDockerfileを作成します。Kotlin コルーチン拡張機能を使用した例を次に示します。
# Start from the original New Relic Java init imageFROM newrelic/newrelic-java-init:latest
# Create the extensions directory in the rootRUN mkdir -p /extensions
# Example: Add Kotlin coroutines instrumentation# Download the latest version and extract to extensions directoryRUN VERSION=$(wget -q -O - https://api.github.com/repos/newrelic/newrelic-java-kotlin-coroutines/releases/latest | \ awk '/tag_name/{gsub(/,|"/,"",$2);print$2}') && \ wget -qO /tmp/kotlin-coroutines-instrumentation.zip \ "https://github.com/newrelic/newrelic-java-kotlin-coroutines/releases/download/$VERSION/kotlin-coroutines-instrumentation-$VERSION.zip" && \ unzip -j /tmp/kotlin-coroutines-instrumentation.zip "*.jar" -d /extensions && \ rm /tmp/kotlin-coroutines-instrumentation.zipヒント
Kotlin コルーチンの例を、必要な特定の拡張機能に置き換えます。利用可能な拡張機能については、Java 拡張モジュールのドキュメントを参照してください。
Dockerイメージをビルドする
カスタム イメージをローカルでビルドします。
$docker build -t your-registry/{Your-Image-Name}your-registry/{Your-Image-Name}実際のコンテナ レジストリ パスとイメージ名に置き換えます (例: mycompany/newrelic-java-init-custom )。
コンテナレジストリにプッシュする
イメージをコンテナ レジストリにプッシュします。
$docker push your-registry/{Your-Image-Name}Kubernetes計装の更新
計装リソースを変更する
新しいイメージを使用するには、既存のイメージ カスタム リソース (CR) を更新します。 次に例を示しますinstrumentation-java.yaml :
apiVersion: newrelic.com/v1beta2kind: Instrumentationmetadata: name: newrelic-instrumentation-java namespace: newrelicspec: agent: language: java image: your-registry/{Your-Image-Name}更新された計装を適用する
更新された計装をクラスタに適用します。
$kubectl apply -f instrumentation-java.yaml影響を受けるワークロードを再起動する
拡張機能を含む新しい init コンテナを取得するには、Java アプリケーションを再起動します。
特定のデプロイメントを再起動するには:
bash$# Restart a specific deployment$kubectl rollout restart deployment/my-java-deploymentネームスペース内のすべてのデプロイメントを再開するには:
bash$# Or restart all deployments in a namespace$kubectl rollout restart deployments -n my-namespace
トラブルシューティング
拡張機能が読み込まれない
拡張機能が読み込まれない場合:
カスタム イメージに拡張機能ディレクトリが存在することを確認します。
bash$docker run --rm your-registry/{Your-Image-Name} ls -la /extensionsファイルの権限をチェックして、拡張 JAR ファイルが読み取り可能であることを確認します。
エージェントの初期化中にエラー メッセージがないか init コンテナ ログを確認します。