本ブログはSAP Cloud Logging Service(CLS)に触れたことがないがBTPにはある程度慣れているエンジニア向けにCLSを紹介します。特に本ブログでは、CLSの機能のうちでもCloud Foundryに関する機能を中心に紹介します。
本ブログで紹介されている内容は2023/12/23時点の内容です。CLSは2023/12にリリースされたばかりの製品であるために、ブログで紹介される内容以外の機能などもブログリリース後に順次追加されている可能性があります。詳しくはWhat’s New for SAP Business Technology Platformなどをご確認ください。
CLSはOpenSearchをベースに用意されたBTPのCloud FoundryやKyma向けのオブザーバビリティサービスです。OpeanSearchはElasticsearchからforkしたソフトウェアであるために、どちらもKibanaダッシュボードでログやメトリクスを監視できます。これはOpenSearchを利用するCLSもElasticsearchを利用するSAP Application Logging Service(ALS)と同様の見た目のダッシュボードを提供することを意味します。これにより、既存のALSユーザも特別なトレーニングなどなしにCLSのダッシュボードを操作可能です。
CLSはALSに比べ、多くの機能が追加されています。例えば、閾値を設定してトリガーさせる通知、ランダムカットフォレスト(RCF)を利用した異常検知、ダッシュボードのカスタムやログの保管期間設定などの機能がCLSには追加されています。通知機能はSAP Alert Notifiation Serviceなどの他サービスとの連携も可能です。ログの保管期間は最大で90日間です。
CLSのサービスインスタンスを作成し、作成したインスタンスに対して各アプリケーションからログやメトリクスを転送できるように設定します。CLS操作のためのユーザ管理の観点から、サービスインスタンス作成時にはSAP Identity Authentication(IAS)を連携することが推奨されます。しかしIASを連携せずに(IdPなどを使ってCLSに対して外部ユーザを連携なしに)CLSを使用開始することも可能です。
作成したCLSのインスタンスにログを転送するには、ログをCLSのインスタンスのAPIに投げ込む必要があります。ログをCLSのAPIに転送するにはsyslog drainの仕組みを利用するか、CLSのAPIに対応するログライブラリ(Java / NodeJS)を使用します。
CLSのインスタンスにメトリクスを転送するには、Telegrafもしくは Spring Boot Actuatorを利用します。
本ブログでは以下のパターンのCLS導入手順を紹介します。このパターンはALSからCLSに移行する際に最もシンプルに(少ない労力で)完結できるパターンです。
IASを使用しないCLSのインスタンス
syslog drainを利用したアプリケーションログの転送
CLSのEntitlementが作業対象のサブアカウントに割り当てられていること
Cloud Foundryが有効化され、ログを監視するアプリケーションが既にあること
cf cliを使用可能な環境があること
cf create-service cloud-logging <service-plan> <instance_name>
を実行し、CLSのインスタンスを作成します。このときservice-plan
にはdev
、standard
およびlarge
の3つの選択肢があります。それぞれの詳細はdiscovery centerをご参照ください。一度インスタンス作成した後のプラン変更はできません。このコマンド実行時にログの保管期間(retention period)なども設定可能です。例えば、以下のように設定します。
cf create-service cls-trial standard cloud-logging -c '{
"retention_period": 14,
"backend": {
"max_data_nodes": 10,
"api_enabled": false
},
"ingest": {
"max_instances": 10
},
"saml": {
"enabled": false
}
}'
cf create-service-key <service-instance> <service-key>
を実行し、サービスキーを生成します。作成したキーの内容はcf service-key <service-instance> <service-key>
で確認します。例えば、以下のように実行します。
cf create-service-key cls-trial cls-key
cf service-key cls-trial cls-key
Getting key cls-key for service instance cls-trial as <logged-in user>...
{
"backend-endpoint": "backend-sf-xxxxxxxx-416c-4524-b361-xxxxxxxxxxxx.cls-02....ondemand.com",
"backend-password": "XXXXXXXXXXXXXX",
"backend-username": "openDistro_a2d4be37-1f7f-4568-896b-xxxxxxxxxxxx",
"ingest-endpoint": "ingest-sf-xxxxxxxx-416c-4524-b361-xxxxxxxxxxxx.cls-02....ondemand.com",
"ingest-password": "XXXXXXXXXXXXXX",
"ingest-username": "XXXXXXXXXXXXXX",
"dashboards-endpoint": "dashboards-sf-xxxxxxxx-416c-4524-b361-xxxxxxxxxxxx.cls-02....ondemand.com",
"dashboards-password": "XXXXXXXXXXXXXX",
"dashboards-username": "openDistro_a2d4be37-1f7f-4568-896b-xxxxxxxxxxxx",
"ingest-mtls-endpoint": "ingest-mtls-sf-xxxxxxxx-416c-4524-b361-xxxxxxxxxxxx.cls-02....ondemand.com",
"ingest-mtls-cert": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
"ingest-mtls-key": "-----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY-----",
"ingest-mtls-client-ca": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
}
cf create-user-provided-service <user-provided-service-name> -l https://<ingest-username>:<ingest-password>@<ingest-endpoint>/cfsyslog
を実行し、syslog drainよりログ転送できるように設定します。
cf bind-service <app-name> <service-instance>
を実行し、作成したsyslog drainの設定を用いてアプリケーションよりログ転送できるようにします。
syslog drainではなくライブラリからのログ転送を利用する場合、手順2でサービスキーを作成した代わりにアプリケーションに直接CLSのインスタンスをバインドします。これにより、アプリケーションの環境変数にendpointやuser name、passwordの情報が格納されるため、ログ転送ライブラリが作成したCLSインスタンスにログ転送可能です。
本ブログではCLSの概要とCLSを利用する手順の一例を紹介しました。より詳細な情報は公式Helpページなどをご参照ください。本ブログでは大きく割愛しましたが、CLSはOpenTelemetoryを使って監視にオブザーバビリティを導入することも可能です。また、何かご質問があればSAPの日本語コミュニティページなどに投稿してください。
CLSとよいSAP開発ライフを!