ワークロードの YAML で Log4j Appender を設定することで、クラスター内の Java アプリケーションから Simple Log Service (SLS) プロジェクトにログを直接送信できます。この方法により、エージェントレスなログ収集が可能になります。
Log4j は、Apache によってメンテナンスされている Java アプリケーション向けのオープンソースのロギングフレームワークです。そのコアコンポーネントには、Appender (出力先)、Layout (出力フォーマット)、Filter が含まれます。
前提条件
-
Log4j Appender をアプリケーションに統合するための AccessKey ペアが利用可能であること。
セキュリティのため、Alibaba Cloud アカウント (root ユーザー) の代わりに RAM ユーザーを使用し、その RAM ユーザー用の AccessKey ペアを作成してください。
ステップ1:Log4j Appender の設定
このステップでは、SLS プロジェクトと Logstore を作成する方法を説明します。Logstore のデータソースとして Log4j Appender を設定すると、Java アプリケーションはログを直接 SLS に送信できるようになります。
SLS プロジェクトは、クラスターと同じリージョンに作成してください。同じリージョンに作成することで、ログデータは内部ネットワーク経由で転送され、パブリック帯域幅のコストを回避し、ネットワーク遅延を削減できます。
SLS プロジェクトの課金の詳細については、「課金概要」をご参照ください。
-
SLS プロジェクトを作成します。
本セクションでは、主要なパラメーターのみを説明します。その他のパラメーターについては、デフォルト値のままにしておくことができます。詳細については、「プロジェクトを管理する」をご参照ください。
-
リージョン:ACK クラスターと同じリージョンを選択します。この例では、中国 (杭州) を選択します。
-
プロジェクト名:プロジェクト名を入力します。この例では k8s-log4j を使用します。
-
-
プロジェクトに Logstore を作成します。
この例では、Logstore 名 は k8s-logstore です。その他のパラメーターはデフォルト値のままでかまいません。詳細については、「Logstore の作成」をご参照ください。
-
k8s-logstore が作成されたら、画面のプロンプトに従ってデータを取り込みます。
-
Log4j の取り込みカードを検索し、画面のプロンプトに従って取り込みを完了します。
この例では、デフォルトの設定を使用します。特定のユースケースに基づいて設定を調整できます。Log4j データソースウィザードで、[Logstore の選択]、[データソースの設定]、[検索と分析の設定] のステップを完了します。手順エリアで、[ヘルプの表示] リンクをクリックして詳細なガイダンスを確認し、[次へ] をクリックして設定を完了します。
ステップ2:Log4j の統合
このステップでは、サンプルの Spring Boot アプリケーションをデプロイして、Log4j Appender プラグインを Java アプリケーションに統合する方法を示します。統合後、コンテナは起動時に JAVA_OPTS 環境変数を通じて SLS の設定を渡します。Log4j はこれらのパラメーターを自動的に読み取り、リアルタイムで SLS にログを送信します。
-
demo-deployment.yaml ファイルをダウンロードし、
JAVA_OPTS環境変数を設定します。ソースファイルは demo-deployment で入手できます。
JAVA_OPTSパラメーター:-
-Dproject:ご利用の SLS プロジェクトの名前。この例では k8s-log4j です。 -
-Dlogstore:ご利用の SLS Logstore の名前。この例では k8s-logstore です。 -
-Dendpoint:プロジェクトが配置されているリージョンのサービスエンドポイント。詳細については、「サービスエンドポイント」をご参照ください。この例では cn-hangzhou.log.aliyuncs.com を使用します。 -
-Daccess_key_id:ご利用の AccessKey ID に置き換えます。 -
-Daccess_key:ご利用の AccessKey Secret に置き換えます。
-
-
Deployment を作成します。
kubectl create -f demo-deployment.yaml -
demo-service.yaml ファイルをダウンロードします。デフォルトの設定のままでかまいません。
ソースファイルは demo-Service で入手できます。
-
demo-service.yaml ファイルをデプロイして Service を作成します。
kubectl create -f demo-service.yaml
ステップ3:ログ収集のテスト
Deployment と Service がデプロイされた後、サービスの外部 IP アドレス (EXTERNAL-IP) を介してアクセスすることで、ログが SLS に書き込まれることを確認できます。これにより、ログエントリが生成されます。
-
Service の
EXTERNAL-IPを表示します。kubectl get svc期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE log4j-appender-demo-spring-boot-svc LoadBalancer 172.21.XX.XX 120.55.XXX.XXX 8080:30398/TCP 1h -
/loginエンドポイントにアクセスして、テストログエントリを生成します。K8s_SERVICE_IPをEXTERNAL-IPに置き換えます。curl http://${K8S_SERVICE_IP}:8080/login?name=bruce完全な API セットについては、「GitHub log4j-appender-demo」をご参照ください。
ステップ4:ログの表示
SLS コンソールにログインして、収集されたログをクエリおよび分析できます。
Simple Log Service コンソールにログインします。
-
プロジェクト一覧 セクションで、ターゲットプロジェクトをクリックして詳細ページを開きます。
-
Logstore 名の右側にある
アイコンをクリックし、Query and Analysis を選択して、クラスターから収集されたログを表示します。クエリ結果にはログエントリが表示され、
messageフィールドにはUser login successfully, requestID=hIAgSGKGyA name=bruceが含まれています。これにより、アプリケーションログが正常に SLS に収集されたことが確認できます。