Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
kyoneo
Advisor
Advisor

はじめに

本ブログはSAP BTPにある程度慣れているがSAP Cloud Logging Service(CLS)には触れたことがないエンジニア向けにCLSの機能を紹介する記事です。CLSのうち、メトリクス監視に関わる部分を中心に紹介します。(余裕があればシリーズ化します。)

本ブログで紹介されている内容は2024/03/25時点の内容です。CLSは2023/12にリリースされたばかりの製品であるために、ブログで紹介される内容以外の機能などもブログリリース後に順次追加されている可能性があります。詳しくはWhat's New for SAP Business Technology Platformなどをご確認ください。

 

前提知識

本ブログはCLSの機能を概要レベルで把握されている方向けの内容となっております。CLSについて概要を知りたい場合はSAP Helpこちらのブログ記事をご覧ください。

 

目次

  1. CLSにおけるメトリクス監視について
  2. Telegrafを利用したコンテナメトリクスのCLSへの連携
  3. コンテナメトリクス確認用ダッシュボードの作成

 

1. CLSにおけるメトリクス監視について

CLSはSAP Application Logging Service(ALS)の後継サービスとなっていて、ログの保管期間が90日まで延長できるほか、ALSと同じようにダッシュボード上からログやメトリクス監視を行えます。しかし、はじめてCLSを触った方は「おや?」と思われたかと思いますが、CLSではメトリクス監視用のダッシュボードが用意されておらず、サービスバインディングするだけではメトリクス監視が行えません。

メトリクス監視を行うには、以下の手順が必要になります。

  1. アプリケーションにCLSをバインドする。
  2. アプリケーションにメトリクス収集用クライアントを実装する。
  3. CLSのOpenSearch Dashboardからメトリクス監視用のダッシュボードを作成する。

メトリクス収集用クライアントとしてはTelegrafもしくは Spring Boot Actuatorを利用することができます。Telegrafはあらゆるサーバ上で動作するメトリクス収集用エージェントで、Cloud Foundryの場合はデプロイしたアプリケーションのSidecarプロセスとして動かします。そのためアプリケーションの言語、フレームワークにかかわらず利用することが可能です。Spring Boot Actuatorはその名の通りJava向けのフレームワークであるSpring Bootの監視向けライブラリで、JVMのメトリクス(Heap、GC頻度、等)を取得可能です。

今回はTelegrafを利用して、CAPアプリケーションon Node.jsのメトリクス監視を実現する方法をご紹介します。

 

2. Telegrafを利用したコンテナメトリクスのCLSへの連携

早速アプリケーションを作成して、そのアプリケーションコンテナのメトリクスをCLSに連携させてみます。これからご紹介する手順はアプリケーションロジックとは独立しているため、すでにメトリクス監視させたいアプリケーションを開発されている方はそれをお使いいただけますし、新たにサンプルアプリケーションを作成いただいても構いません。新たにアプリケーションを作成される場合、SAP Business Application StudioのCAPアプリケーション作成モジュールから、Minimal sampleつきでアプリケーションを作成するのが最もお手軽です(参照:Create a CAP Project with SAP Business Application Studio)。また前提として、すでにCLSのサービスインスタンスの作成、サービスキーの作成が完了しているものとします。

手順1. CLSインスタンスをアプリケーションにバインドする

下記のように作成したCLSのサービスインスタンスをアプリケーションにバインドします。なお後述しますが、telegrafをCloud FoundryのSidecarプロセスで動かす仕組み上mta.yamlを利用してデプロイする場合でもmanifest.ymlは別途必要になります。

mta.yamlのイメージ

 

 

...
modules:
  - name: telegraf_demo
    type: nodejs
    path: gen/srv
    parameters:
      buildpack: nodejs_buildpack
    build-parameters:
      builder: npm
    requires:
      - name: cls-trial
...
resources:
  - name: cls-trial
    type: org.cloudfoundry.existing-service

 

 

手順2. Telegrafの起動スクリプトおよび設定ファイルを作成する

作成したアプリケーションプロジェクトのルートディレクトリに移動し、telegrafという名前でディレクトリを作成してください。

 

 

mkdir telegraf

 

 

作成したディレクトリの中に以下の2つのファイルを作成します。

  • start-telegraf.sh:起動スクリプト。telegrafのダウンロードと起動を指示。
  • telegraf.conf:telegrafの設定ファイル。連携するメトリクスについて設定。

 

 

cd telegraf
touch start-telegraf.sh
touch telegraf.conf

 

 

まずはstart-telegraf.shから編集していきます。start-telegraf.shにはtelegraf.confで参照するための環境変数のセットアップと、telegrafのダウンロードおよび起動を行います。下記の内容をコピーしてそのままお使いいただけます。

 

 

#!/bin/sh

export CLS_HOST=$(echo $VCAP_SERVICES | jq -r '."cloud-logging"? | .[0]? | ."credentials"? | ."ingest-endpoint"')
export CLS_USER=$(echo $VCAP_SERVICES | jq -r '."cloud-logging"? | .[0]? | ."credentials"? | ."ingest-username"')
export CLS_PASSWD=$(echo $VCAP_SERVICES | jq -r '."cloud-logging"? | .[0]? | ."credentials"? | ."ingest-password"')

export VCAP_APPLICATION_ID=$(echo $VCAP_APPLICATION | jq -r '."application_id"')
export VCAP_APPLICATION_NAME=$(echo $VCAP_APPLICATION | jq -r '."application_name"')
export VCAP_ORGANIZATION_ID=$(echo $VCAP_APPLICATION | jq -r '."organization_id"')
export VCAP_ORGANIZATION_NAME=$(echo $VCAP_APPLICATION | jq -r '."organization_name"')
export VCAP_SPACE_ID=$(echo $VCAP_APPLICATION | jq -r '."space_id"')
export VCAP_SPACE_NAME=$(echo $VCAP_APPLICATION | jq -r '."space_name"')

if [[ "${CLS_HOST}" == "null" ]]; then
    echo "No Cloud Logging service instance found."
else
    # download telegraf
    wget https://dl.influxdata.com/telegraf/releases/telegraf-1.29.5_linux_amd64.tar.gz
    tar xf telegraf-1.29.5_linux_amd64.tar.gz

    # start telegraf
    ./telegraf-1.29.5/usr/bin/telegraf --config telegraf/telegraf.conf
fi

 

 

VCAP_APPLICATIONに格納されるアプリケーションの情報を環境変数に格納して後述するtelegraf.confにて扱えるようにし、telegrafのダウンロードと起動を行います。利用するバージョンをスクリプト内で指定しているのでメンテナンスが必要な点に注意してください。

次にtelegraf.confを編集します。telegraf.confにはメトリクスの取得間隔や送信先の設定を記述します。こちらも下記の内容をコピーしてお使いいただけます。

 

 

# Telegraf Configuration

# Global tags
[global_tags]
  component_id = "${VCAP_APPLICATION_ID}"
  component_name = "${VCAP_APPLICATION_NAME}"
  organization_id = "${VCAP_ORGANIZATION_ID}"
  organization_name = "${VCAP_ORGANIZATION_NAME}"
  space_id = "${VCAP_SPACE_ID}"
  space_name = "${VCAP_SPACE_NAME}"

  level = "INFO"
  type = "metrics"

# Configuration for telegraf agent
[agent]
  interval = "10s"
  round_interval = true

  metric_batch_size = 1000
  metric_buffer_limit = 10000

  collection_jitter = "0s"

  flush_interval = "10s"
  flush_jitter = "0s"

  precision = ""

  omit_hostname = false

# Input plugins
## Monitor process cpu and memory usage
[[inputs.procstat]]
  pattern = "."

# Output plugins
[[outputs.http]]
  url = "https://${CLS_HOST}/metrics/telegraf"
  username = "${CLS_USER}"
  password = "${CLS_PASSWD}"

  data_format = "json"
  content_encoding = "gzip"

[outputs.http.headers]
  Content-Type = "application/json; charset=utf-8"

 

 

global_tagsセクションでは送信するメトリクスに紐づけるメタ情報を指定します。ここでspace名やアプリ名を指定することで、CLSのダッシュボード上でどのアプリのメトリクスかを特定できるようになります。agentセクションではtelegraf agentの設定としてメトリクスの取得間隔等を設定します。設定内容の詳細についてはtelegrafのドキュメントをご確認ください。Inputプラグインとしてシステムリソースのモニタリングが可能なProcstat Input Pluginを利用しています。モニタリング対象のプロセスをオプションで指定できますが、今回は全プロセスの合計としています。プラグインの詳しい利用方法はリンク先のドキュメントをご確認ください。OutputプラグインとしてHTTP Output Pluginを利用して、CLSのメトリクス収集用のエンドポイントを指定しています。こちらも詳しくはリンク先のドキュメントをご確認ください。

手順3. アプリケーションをデプロイする

まず手順1. で作成したmta.yamlを利用してビルド/デプロイしてください。

 

 

mbt build
cf deploy mta_archives/XXX

 

 

これでアプリケーションは稼働しますが、MTAはCloud FoundryのSidecarプロセスに対応していないため、別途manifest.yamlを用いてtelegrafをSidecarプロセスで起動するようにする必要があります。

下記コマンドを実行して、手順2. で作成したtelegrafの起動スクリプトおよび設定ファイルをビルドで生成されたgenディレクトリにコピーしてください。(mbt buildコマンドを実行するとgenディレクトリが初期化されてしまうので、ビルドのたびにこれらの操作が必要です。)

 

cp -R telegraf gen/srv

 

次に下記のようにmanifest.yamlを作成し、プロジェクトのルートディレクトリ直下に配置してください。(アプリ名やバインドするサービスについては実際に作成されたアプリと合わせてください。)

 

 

---
applications:
- name: telegraf_demo
  path: gen/srv
  buildpack: nodejs_buildpack
  services:
    - name: cls-trial
  sidecars:
  - name: telegraf
    process_types: [ 'web' ]
    command: 'source telegraf/start-telegraf.sh'

 

 

このmanifest.ymlを利用してアプリをデプロイするとtelegrafがSidecarプロセスで起動し、CLSにメトリクスを送信するようになります。

 

 

cf push

 

 

これでアプリケーション側の手順は以上になります。次に、CLSのダッシュボードからメトリクス情報を閲覧できるようにダッシュボードを作成していきます。

 

3. コンテナメトリクス確認用ダッシュボードの作成

まずはCLSのOpenSearch Dashboardにログインします。ログイン情報はサービスキーに記載してあります。サービスインスタンス作成時に下記のようにsaml認証を無効化した場合、ログインのためのユーザID/パスワードもサービスキーに記載されます。

 

 

"saml": {
    "enabled": false
}

 

 

サービスキーの「dashboards-endpoint」がダッシュボードにサクセスするためのURLで、dashboards-usernameとdashboards-passwordがそれぞれログインのためのユーザID/パスワードになります。

ログインできたらまずはメトリクスが正しく送られているか確認しましょう。左のメニューからDiscoverをクリックします。ここではCLSに送られてくる全てのテレメトリーデータを閲覧できるので、今回作成したアプリケーションのメトリクスデータが送られてきているかどうか確認します。下記の画像のように「metrics-*」というインデックスパターンを選択し、「cpu_usage」でフィルタして値が取得できれば成功です。

kyoneo_3-1711362215055.png

メトリクス情報が送られてきていることを確認できたら、次はVisualizationを作成します。左のメニューからVisualizationに遷移し、下記画像のように「Create visualization」から「Timeline」を選択してください。

kyoneo_1-1711359701634.png

遷移したら、「Timeline expression」欄に下記のように入力してください。

 

.es(index=metrics-*,metric=max:cpu_usage,timefield=@timestamp,
q='component_name:telegraf_demo')

 

入力後、「Update」をクリックして画面左側にCPU使用率の推移が表示されれば成功です。「Save」をクリックしてVisualizationを保存してください。

kyoneo_2-1711362005499.png

最後にDashboardを作成します。左のメニューからDashboardに遷移し「Create dashboard」から上記で作成したVisualizationを選択すれば完了です。もちろん既存のダッシュボードにvisualizationを追加することも可能です。

 

さいごに

本ブログではCLSを利用したメトリクス監視の手順についてご紹介しました。今回はCPUのリソース監視のみを取り上げましたが、メモリ監視や、telegrafのPrometheus Input Pluginを利用したカスタムメトリクスの監視を行うことも可能です。何かご質問があればSAPの日本語コミュニティページなどに投稿ください。

この機会にぜひCLSをご活用ください!