本ブログは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やこちらのブログ記事をご覧ください。
CLSはSAP Application Logging Service(ALS)の後継サービスとなっていて、ログの保管期間が90日まで延長できるほか、ALSと同じようにダッシュボード上からログやメトリクス監視を行えます。しかし、はじめてCLSを触った方は「おや?」と思われたかと思いますが、CLSではメトリクス監視用のダッシュボードが用意されておらず、サービスバインディングするだけではメトリクス監視が行えません。
メトリクス監視を行うには、以下の手順が必要になります。
メトリクス収集用クライアントとしてはTelegrafもしくは Spring Boot Actuatorを利用することができます。Telegrafはあらゆるサーバ上で動作するメトリクス収集用エージェントで、Cloud Foundryの場合はデプロイしたアプリケーションのSidecarプロセスとして動かします。そのためアプリケーションの言語、フレームワークにかかわらず利用することが可能です。Spring Boot Actuatorはその名の通りJava向けのフレームワークであるSpring Bootの監視向けライブラリで、JVMのメトリクス(Heap、GC頻度、等)を取得可能です。
今回はTelegrafを利用して、CAPアプリケーションon Node.jsのメトリクス監視を実現する方法をご紹介します。
早速アプリケーションを作成して、そのアプリケーションコンテナのメトリクスをCLSに連携させてみます。これからご紹介する手順はアプリケーションロジックとは独立しているため、すでにメトリクス監視させたいアプリケーションを開発されている方はそれをお使いいただけますし、新たにサンプルアプリケーションを作成いただいても構いません。新たにアプリケーションを作成される場合、SAP Business Application StudioのCAPアプリケーション作成モジュールから、Minimal sampleつきでアプリケーションを作成するのが最もお手軽です(参照:Create a CAP Project with SAP Business Application Studio)。また前提として、すでにCLSのサービスインスタンスの作成、サービスキーの作成が完了しているものとします。
下記のように作成したCLSのサービスインスタンスをアプリケーションにバインドします。なお後述しますが、telegrafをCloud FoundryのSidecarプロセスで動かす仕組み上mta.yamlを利用してデプロイする場合でもmanifest.ymlは別途必要になります。
...
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
作成したアプリケーションプロジェクトのルートディレクトリに移動し、telegrafという名前でディレクトリを作成してください。
mkdir telegraf
作成したディレクトリの中に以下の2つのファイルを作成します。
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のメトリクス収集用のエンドポイントを指定しています。こちらも詳しくはリンク先のドキュメントをご確認ください。
まず手順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のダッシュボードからメトリクス情報を閲覧できるようにダッシュボードを作成していきます。
まずはCLSのOpenSearch Dashboardにログインします。ログイン情報はサービスキーに記載してあります。サービスインスタンス作成時に下記のようにsaml認証を無効化した場合、ログインのためのユーザID/パスワードもサービスキーに記載されます。
"saml": {
"enabled": false
}
サービスキーの「dashboards-endpoint」がダッシュボードにサクセスするためのURLで、dashboards-usernameとdashboards-passwordがそれぞれログインのためのユーザID/パスワードになります。
ログインできたらまずはメトリクスが正しく送られているか確認しましょう。左のメニューからDiscoverをクリックします。ここではCLSに送られてくる全てのテレメトリーデータを閲覧できるので、今回作成したアプリケーションのメトリクスデータが送られてきているかどうか確認します。下記の画像のように「metrics-*」というインデックスパターンを選択し、「cpu_usage」でフィルタして値が取得できれば成功です。
メトリクス情報が送られてきていることを確認できたら、次はVisualizationを作成します。左のメニューからVisualizationに遷移し、下記画像のように「Create visualization」から「Timeline」を選択してください。
遷移したら、「Timeline expression」欄に下記のように入力してください。
.es(index=metrics-*,metric=max:cpu_usage,timefield=@timestamp,
q='component_name:telegraf_demo')
入力後、「Update」をクリックして画面左側にCPU使用率の推移が表示されれば成功です。「Save」をクリックしてVisualizationを保存してください。
最後にDashboardを作成します。左のメニューからDashboardに遷移し「Create dashboard」から上記で作成したVisualizationを選択すれば完了です。もちろん既存のダッシュボードにvisualizationを追加することも可能です。
本ブログではCLSを利用したメトリクス監視の手順についてご紹介しました。今回はCPUのリソース監視のみを取り上げましたが、メモリ監視や、telegrafのPrometheus Input Pluginを利用したカスタムメトリクスの監視を行うことも可能です。何かご質問があればSAPの日本語コミュニティページなどに投稿ください。
この機会にぜひCLSをご活用ください!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
11 | |
11 | |
10 | |
9 | |
7 | |
6 | |
6 | |
6 | |
6 | |
5 |