ブログ

【SAP BTP】SAP Cloud Logging Service実践編 その1:アプリケーションログ収集の応用

この記事をSNSでシェア!

2024.4.11公開のブログ「【SAP BTP】新サービス「SAP Cloud Logging Service」を使ってみた」では、SAP Cloud Logging Service(CLS)の概要とアプリケーションログの収集方法について解説しました。
今回からはCLSで何ができるのかということをより詳しく説明するために、実践編として、①アプリケーションログ収集の応用、②メトリクス収集、③データ活用の方法について3回に分けてご紹介させていただきます。

SAP Cloud Logging Service 関連ブログ

CLS関連のブログを以下の通り掲載しております。目的に応じてご参照ください。

  1. 【SAP BTP】新サービス「SAP Cloud Logging Service」を使ってみた
  2. 【SAP BTP】SAP Cloud Logging Service実践編 その1:アプリケーションログ収集の応用(本記事
  3. 【SAP BTP】SAP Cloud Logging Service実践編 その2:メトリクス監視してみよう
  4. 【SAP BTP】SAP Cloud Logging Service実践編 その3:収集したデータを分析・ログを一元管理してみよう

前提条件

全体構成やCLSの構築については「【SAP BTP】新サービス「SAP Cloud Logging Service」を使ってみた」で解説した通りです。実践編では主に以下のポイントで解説します。

・ロギングフレームワークと組み合わせたログ出力とCLSへの送信(本記事で解説 ※上図の赤枠部分
・OpenTelemetryを使用したメトリクスデータの収集(実践編その2で解説)
・ダッシュボードやアラート機能を使用したデータ活用(実践編その3で解説)

Cloud Logging Serviceのセットアップ

CLSの購入からセットアップについては前回の記事(「【SAP BTP】新サービス「SAP Cloud Logging Service」を使ってみた」)で紹介していますので、そちらの手順に沿って設定を行ってください。

【参照する手順】
・サービス追加
・インスタンス作成
・サービスキー作成
・アプリケーションの紐づけ

ロギングフレームワークの導入とログ出力

今回はJava用のフレームワークとしてLog4Jを導入したため、Log4Jでの導入手順をご紹介します。

Log4Jとは

Log4Jとは、Javaベースのアプリケーションで使用されるログ出力ライブラリです。
アプリケーションのログ出力処理をLog4Jで実装することにより、ログ内容をカスタマイズしてCloud Loggingに出力することができます。

設定手順

プログラム修正

ログの出力をLog4Jに切り替えるために、対象アプリケーションに修正を加えます。
対象のファイルは以下の通りです。

ファイル名パス役割区分補足
log4j.xmlsrv/src/main/resourcesフォーマット・設定情報を定義新規
log4j.propertiessrv/src/main/resources(ローカル)
/home/vcap/app/BOOT-INF/classes/ (CF)
メッセージを定義新規
ローカル環境とCF環境ではクラスパスが異なるので注意
pom.xmlsrv/log4j指定バージョンのインストールを定義修正
Logging.javasrv/src/main/設定ファイルの読み込み/ログ出力新規
Application.javasrv/src/main/・System.out.printlnをlog4jのログ出力に差し替え
・loggingメソッドにメッセージIDを引数で設定しログ出力処理を呼び出し
修正
その他使用中のjavaファイルsrv/src/main/handlers・System.out.printlnをlog4jのログ出力に差し替え
・loggingメソッドにメッセージIDを引数で設定しログ出力処理を呼び出し
修正

①srv/src/main/java/jp/co/kyoso/demo/startprjCapに以下のようなLogging.javaファイルを作成します。
package部分は対象環境に合わせて変更が必要です。
※例ではINFO、WARN、ERRORログの出力を想定して処理を記載しています。

②pom.xmlにLog4Jの設定を追加します。
バージョンは対象環境に合わせて変更が必要です。

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

③srv/src/main/resourcesにlog4j.xmlを作成します。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >

  <!-- ログ出力 -->
  <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%d] [%-5p] [%C] [%t] - %m%n" />
    </layout>
  </appender>
  
  <!-- ログレベル・出力先 -->
  <root>
    <level value="debug"/>
    <appender-ref ref="stdout"/>
  </root>
</log4j:configuration>

6~11行目でログの出力先や形式を設定します。今回は標準出力を使用するためConsoleAppenderを使用します。
7行目ではAppenderオプションのTargetを使用し、ログの出力先をSystem.outにすることで標準出力に設定しています。
9行目のvalue以降では出力パターンを記述しています。
現在記載している出力パターンのイメージと文字列の意味は以下の通りです。

[2024-03-13 10:23:16,640][INFO][jp.co.kyoso.demo.startprjCap.Application][main]-CommonInfo-001:Update dataset completed
パターン文字列意味
[%d]ログを生成した日付情報2024-03-13 10:23:16,640
[%-5p]ログレベルが左詰めで5文字分出力INFO+スペース1文字
[%C]カテゴリ名jp.co.kyoso.demo.startprjCap.Application
[%t]ログを生成したスレッド名main
文字列‐を挿入
%mログメッセージCommonInfo-001:Update dataset completed
%n改行を挿入する改行
参照:ログ出力レイアウトの設定

④srv/src/main/resourcesにlog4j.propertiesを作成します。

CommonInfo-001 = Update dataset completed
CommonInfo-002 = Data update process completed
CommonInfo-003 = Data deletion process completed
CommonInfo-004 = API for acquiring all data
CommonInfo-005 = Search API
CommonWarn-001 = caution
CommonWarn-002 = warning
CommonError-001 = An error has occurred
CommonError-002 = failed

⑤Application.javaにログ出力用処理を追加し、System.out.printlnをlog4jでの出力(logging.();)に変更します。

⑥対象アプリケーションに現存する各Service.javaファイルも⑤のApplication.javaの変更と同様にSystem.out.printlnをlog4jでの出力に変更します。

デプロイ

修正後のアプリケーションプログラムをデプロイするために、ターミナルで以下のコマンドを実行します。

// 1.プログラムを実行可能なアプリケーションにパッケージ化
mbt build

// 2.対象の環境にログイン
cf login -a [APIエンドポイント(例: https://api.example.com)]

// 3.1で生成された.mtarファイルをデプロイする
cf deploy  mta_archives/startprjCap_0.0.1.mtar

対象アプリケーション実行

デプロイしたアプリケーションにアクセスし、ログ出力対象の操作を行います。
今回はプログラム修正手順⑤で、Application.javaに全件取得をしたときにログ出力を行う処理を記載したため、アプリを起動して/getAllで初期データの全件取得を行います。

出力確認

OpenSearchにアクセスし、ログの出力を確認します。

※OpenSearchとは、検索および分析のためのオープンソースのソフトウェアスイートで、リアルタイムでのアプリケーションのモニタリングやログ分析が可能なサービスです。
OpenSearchへのアクセス方法については「【SAP BTP】新サービス「SAP Cloud Logging Service」を使ってみた」をご覧ください。

①OpenSearchにログイン後画像赤枠のDashboadsを押下します。

③Application Logsにて出力されたログを確認できます。

最後に


いかがでしたでしょうか?
上記の設定をすることでSAP Cloud Logging上で出力されたログデータを確認することができました。
SAP Cloud Loggingサービスは最近リリースしたばかりのサービスで、まだまだ情報が少なく、私自身導入する中でどのようなことができるのか、どのように設定したらいいのかわからない部分がたくさんありました。
本記事で解説した内容が、‟SAP Cloud Loggingで何ができる?”‟導入したいけれど設定方法が分からない!”という方のお役に立てたら嬉しいです。
次回は実践編②としてOpenTelemetryを利用したメトリクスの取得方法について解説します。

投稿者プロフィール

宇田川 莉央
宇田川 莉央
2023年にIT未経験で入社。
主にAWS、Vue.js、Javaを使用した開発を行っています。
最近はSAPサービスの調査やアプリ開発にも取り組んでいます。
この記事をSNSでシェア!