arrow_back

アプリケーションの指標を Cloud Monitoring に報告する

参加 ログイン

アプリケーションの指標を Cloud Monitoring に報告する

1時間 30分 クレジット: 1

GSP111

Google Cloud セルフペース ラボ

概要

このハンズオンラボでは、シンプルな動画サーバー アプリケーションを Go でセットアップし、アプリケーションの指標(カスタム指標とも呼ばれる)が Cloud Monitoring に報告されるように、OpenCensus ライブラリを使用してアプリケーションをインストゥルメント化します。

このラボは、GitHub の Go Cloud Monitoring エクスポータ サンプルをベースにしています。OpenCensus では指標を「統計情報」と呼びます。

OpenCensus とは

OpenCensus は、指標の収集と分散トレースのためのオープンソース フレームワークです。ユーザーにとって次のようなメリットがあります。

  • オーバーヘッドの少ないデータ収集。
  • 指標とトレースデータを処理するための標準のワイヤ プロトコルと一貫した API。
  • OpenMetrics 標準によるベンダー間の相互運用性。OpenCensus では複数のバックエンドへの並列取り込みが可能なため、バックエンドを段階的に移行したり、並べて比較したりできます。
  • トレースおよびログエントリ(今後対応予定)との相関関係。

Cloud Monitoring にアプリケーションの指標を報告するにはさまざまな方法がありますが(このラボの「Cloud Monitoring にアプリケーションの指標を報告するためのその他の方法」を参照)、Google と Cloud Monitoring は取り込みのデフォルト メカニズムとして OpenCensus を正式に採用しています。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

必要なもの

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Compute Engine インスタンスを作成する

このラボでは、標準の Compute Engine 仮想マシン(VM)上にアプリケーションを作成します。

Cloud Console で、ナビゲーション メニュー > [Compute Engine] > [VM インスタンス] を選択し、[インスタンスを作成] をクリックします。

次の項目を設定します。

  • [名前]: my-opencensus-demo

  • [リージョン]: us-central1(アイオワ)

  • [ゾーン]: us-central1-a

  • [シーリズ]: N1

  • [マシンタイプ]: n1-standard-1(1 vCPU、3.75 GB メモリ)

  • [ID と API へのアクセス]: [各 API にアクセス権を設定] を選択し、[Stackdriver Monitoring API] でドロップダウン メニューから [フル] を選択します。

  • [ファイアウォール]: [HTTP トラフィックを許可する] と [HTTPS トラフィックを許可する] の両方を選択します。

その他の項目はデフォルト値のままにして、[作成] をクリックします。

[進行状況を確認] をクリックして、実行したタスクを確認します。

Compute Engine インスタンスを作成する

Go と OpenCensus をインスタンスにインストールする

新しい Compute Engine VM インスタンスが起動したら、インスタンスに沿った [SSH] ボタンをクリックして、インスタンスへの SSH ターミナルを開きます。

SSH ターミナルを使用して次のものをインストールします。

  • Go
  • git パッケージ
  • OpenCensus パッケージ
  • Cloud Monitoring OpenCensus エクスポータ

SSH ターミナルで次のコマンドを実行します。

sudo curl -O https://storage.googleapis.com/golang/go1.16.2.linux-amd64.tar.gz
sudo tar -xvf go1.16.2.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo mv go /usr/local
sudo apt-get update
sudo apt-get install git

続行するかどうかをたずねられたら Y と入力して Enter キーを押します。

export PATH=$PATH:/usr/local/go/bin
go get go.opencensus.io
go get contrib.go.opencensus.io/exporter/stackdriver
go mod init test3
go mod tidy
「go mod tidy」は、未使用の依存関係を削除します。出力 go: 警告: 未使用の依存関係がない場合、「すべて」はパッケージに一致しませんでした。

Monitoring ワークスペースを作成する

Google Cloud プロジェクトに関連付けられた Monitoring ワークスペースを設定します。次の手順に沿って、Monitoring を無料でお試しいただける新しいアカウントを作成します。

  1. Cloud Console で、ナビゲーション メニュー > [Monitoring] をクリックします。

  2. Monitoring Overview ページが開いたら、メトリック スコープ プロジェクトの準備は完了です。

Overview.pngMonitoringWindow.png

エージェントはデータを収集し、GCP Console 内の Cloud Monitoring に情報を送信またはストリーミングします。

Cloud Monitoring エージェントは、collectd ベースのデーモンで、仮想マシン インスタンスからシステムの指標とアプリケーションの指標を収集して Monitoring に送信します。デフォルトでは、Monitoring エージェントはディスク、CPU、ネットワーク、プロセスの指標を収集します。Monitoring エージェントを構成すると、サードパーティ アプリケーションでエージェント指標の包括的なリストを取得することができます。詳細については、Cloud Monitoring エージェントの概要をご確認ください。

このセクションでは、Cloud Logging エージェントをインストールして、VM インスタンスから Cloud Logging にログをストリーミングします。 このラボの後半で、VM を停止および開始したときに生成されるログを確認します。

全ての VM インスタンスで Cloud Logging エージェントを実行することをお勧めします。

VM で エージェントをインストールします。

VM インスタンスの SSH ターミナルで Monitoring エージェント インストール スクリプトのコマンドを実行して、Cloud Monitoring エージェントをインストールします。

curl -sSO https://dl.google.com/cloudagents/add-monitoring-agent-repo.sh
sudo bash add-monitoring-agent-repo.sh
sudo apt-get update
sudo apt-get install stackdriver-agent

続行するかどうかをたずねられたら Y と入力して Enter キーを押します。

VM インスタンスの SSH ターミナルで Logging エージェント インストール スクリプトのコマンドを実行して、Cloud Logging エージェントをインストールします。

curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh
sudo apt-get update
sudo apt-get install google-fluentd

[進行状況を確認] をクリックして、実行したタスクを確認します。

モニタリング ワークスペースを作成し、VM にエージェントをインストールする

Go で基本的なアプリケーション サーバーを作成する

次に、疑似動画サーバー アプリケーションを作成します。このアプリケーションは、入力キューのサイズを 1 秒ごとに確認して、その情報をコンソールに出力します(実際のキューに見せかけます)。

SSH ウィンドウで、適当なエディタ(nanovi など)を開いて main.go という Go ファイルを作成し、次の内容をコピーして貼り付けます。

nano main.go

以下をファイルにコピーします。

package main
import (
        "fmt"
        "math/rand"
        "time"
)
func main() {
        // Here's our fake video processing application. Every second, it
        // checks the length of the input queue (e.g., number of videos
        // waiting to be processed) and records that information.
        for {
                time.Sleep(1 * time.Second)
                queueSize := getQueueSize()
                // Record the queue size.
                fmt.Println("Queue size: ", queueSize)
        }
}
func getQueueSize() (int64) {
        // Fake out a queue size here by returning a random number between
        // 1 and 100.
        return rand.Int63n(100) + 1
}

Ctrl + XYEnter キーを押してファイルを保存します。

次のコマンドを使用してこのファイルを実行します。

go run main.go

次のような出力が表示されるはずです。1 秒ごとに新しい出力行が表示されます。

Queue size: 11
Queue size: 52
...

Ctrl + C キーを押して出力を停止します。

OpenCensus を使用して測定を定義および記録する

OpenCensus を使用して指標(統計情報)を伝達するための基本的なインフラストラクチャを配置するには、測定を定義して記録し、その測定を収集して集計するためのビューを設定する必要があります。

これらのすべての作業を行うために、main.go ファイルにいくつかのステップを追加します。

main.go ファイルをテキスト エディタで開きます。

nano main.go

まず、測定を定義して記録します。

// [[この行を追加]]」や「// [[このブロックを追加]] … // [[終了: このブロックを追加]]」で示されている変更箇所をファイルに追加し、追加した行をコメント化解除して指示部分を削除します。

package main
import (
"context" // [[Add this line]]
"fmt"
"math/rand"
"time"
"go.opencensus.io/stats"  // [[Add this line]]
)
// [[Add this block]]
var videoServiceInputQueueSize = stats.Int64(
"my.videoservice.org/measure/input_queue_size",
"Number of videos queued up in the input queue",
stats.UnitDimensionless)
// [[End: add this block]]
func main() {
ctx := context.Background()  // [[Add: this line.]]
// Here’s our fake video processing application. Every second, it
// checks the length of the input queue (e.g., number of videos
// waiting to be processed) and records that information.
for {
time.Sleep(1 * time.Second)
queueSize := getQueueSize()
// Record the queue size.
// [[Add: next line.]]
stats.Record(ctx, videoServiceInputQueueSize.M(queueSize)) // [[Add]]
fmt.Println("Queue size: ", queueSize)
}
}
func getQueueSize() (int64) {
// Fake out a queue size here by returning a random number between
// 1 and 100.
return rand.Int63n(100) + 1
}

go.opencensus.io/stats パッケージには、測定の定義と記録に必要なすべてのサポートが含まれています。

この例では、videoServiceInputQueueSize が測定で、64 ビット整数型として定義されています。測定には、それぞれ名前(最初のパラメータ)、説明、測定値の単位が必要です。

定義した測定を記録する必要もあります。これは stats.Record(...) ステートメントで行われています。測定(videoServiceInputQueueSize)が、クエリされたサイズ(queueSize)に設定されています。

指標の収集と集計を設定する

指標が定義されて記録されるようになったので、次のステップでは、指標を収集して集計できるようにします。そのためには、OpenCensus でビューを設定します。

// [[この行を追加]]」や「// [[このブロックを追加]] … // [[終了: このブロックを追加]]」で示されている変更箇所を main.go ファイルに追加し、追加した行をコメント化解除して指示部分を削除します。

package main
import (
"context"
"fmt"
"log"  // [[Add this line]]
"math/rand"
"time"
"go.opencensus.io/stats"
"go.opencensus.io/stats/view"  // [[Add this line]]
)
var videoServiceInputQueueSize = stats.Int64(
"my.videoservice.org/measure/input_queue_size",
"Number of videos queued up in the input queue",
stats.UnitDimensionless)
func main() {
ctx := context.Background()
// [[Add this block]]
// Setup a view so that we can export our metric.
if err := view.Register(&view.View{  // [[Add]]
Name: "my.videoservice.org/measure/input_queue_size",
Description: "Number of videos queued up in the input queue",
Measure: videoServiceInputQueueSize,
Aggregation: view.LastValue(),
}); err != nil {
log.Fatalf("Cannot setup view: %v", err)
}
// Set the reporting period to be once per second.
view.SetReportingPeriod(1 * time.Second)
// [[End: Add this block]]
// Here’s our fake video processing application. Every second, it
// checks the length of the input queue (e.g., number of videos
// waiting to be processed) and records that information.
for {
time.Sleep(1 * time.Second)
queueSize := getQueueSize()
// Record the queue size.
stats.Record(ctx, videoServiceInputQueueSize.M(queueSize))
fmt.Println("Queue size: ", queueSize)
}
}
func getQueueSize() (int64) {
// Fake out a queue size here by returning a random number between
// 1 and 100.
return rand.Int63n(100) + 1
}

上の view.View{...} で、エクスポートされる指標の名前を定義して(測定と同じ名前を使用)videoServiceInputQueueSize 測定に関連付けた後、Aggregation フィールドを使用してその指標の最後の値をエクスポートするように指定しています。また、ここでは報告期間を明示的に設定しています。この例では指標を 1 秒ごとに報告するように指定していますが、本番環境のサービスでは、多くても 1 分に 1 回までに抑えることをおすすめします。

指標を収集して集計するビューの設定方法について詳しくは、https://godoc.org/go.opencensus.io/stats/view をご確認ください。

Cloud Monitoring にデフォルトの指標を報告する

最後のステップでは、アプリケーションの指標を Cloud Monitoring にエクスポートします。そのためには、OpenCensus Cloud Monitoring エクスポータを構成します。

// [[この行を追加]]」や「// [[このブロックを追加]] … // [[終了: このブロックを追加]]」で示されている変更箇所をファイルに追加し、追加した行をコメント化解除して指示部分を削除します。

package main
import (
"context"
"fmt"
"log"
"math/rand"
"os"        // [[Add]]
"time"
"contrib.go.opencensus.io/exporter/stackdriver"   // [[Add]]
"go.opencensus.io/stats"
"go.opencensus.io/stats/view"
monitoredrespb "google.golang.org/genproto/googleapis/api/monitoredres" // [[Add]]
)
var videoServiceInputQueueSize = stats.Int64(
"my.videoservice.org/measure/input_queue_size",
"Number of videos queued up in the input queue",
stats.UnitDimensionless)
func main() {
// [[Add block]]
// Setup metrics exporting to Stackdriver.
exporter, err := stackdriver.NewExporter(stackdriver.Options{
ProjectID: os.Getenv("MY_PROJECT_ID"),
Resource: &monitoredrespb.MonitoredResource {
Type: "gce_instance",
Labels: map[string]string {
"instance_id": os.Getenv("MY_GCE_INSTANCE_ID"),
"zone": os.Getenv("MY_GCE_INSTANCE_ZONE"),
},
},
})
if err != nil {
log.Fatalf("Cannot setup Stackdriver exporter: %v", err)
}
view.RegisterExporter(exporter)
// [[End: add block]]
ctx := context.Background()
// Setup a view so that we can export our metric.
if err := view.Register(&view.View{
Name: "my.videoservice.org/measure/input_queue_size",
Description: "Number of videos queued up in the input queue",
Measure: videoServiceInputQueueSize,
Aggregation: view.LastValue(),
}); err != nil {
log.Fatalf("Cannot setup view: %v", err)
}
// Set the reporting period to be once per second.
view.SetReportingPeriod(1 * time.Second)
// Here’s our fake video processing application. Every second, it
// checks the length of the input queue (e.g., number of videos
// waiting to be processed) and records that information.
for {
time.Sleep(1 * time.Second)
queueSize := getQueueSize()
// Record the queue size.
stats.Record(ctx, videoServiceInputQueueSize.M(queueSize))
fmt.Println("Queue size: ", queueSize)
}
}
func getQueueSize() (int64) {
// Fake out a queue size here by returning a random number between
// 1 and 100.
return rand.Int63n(100) + 1
}

Cloud Monitoring 用の OpenCensus 指標エクスポータは拡張パッケージです。そのため、このエクスポータが正しく機能するように ProjectID を渡しています。このラボでは、MY_PROJECT_ID 環境変数によって設定される値を使用しています。

また、Cloud Monitoring では、指標はモニタリング対象リソースに対して報告される必要があります。モニタリング対象リソースは指標データのソースを識別します。このラボでは、指標は基盤となる Compute Engine VM インスタンスに対して報告されます。モニタリング対象リソースを指定するには、stackdriver.OptionsResource パラメータを指定します。

d66b7eb43806df69.png

タイプ gce_instance は、この指標に関連付けるモニタリング対象リソースのタイプを指定します。Compute Engine VM インスタンスには、「instance_id」と「zone」の 2 つのラベルがあります。instance_id は Compute Engine VM インスタンスの数値 ID で、zone は、インスタンスが実行されているゾーンです。この情報は、Compute Engine のインスタンスの詳細ページで確認できます。ゾーンの情報はすぐにわかります。Compute Engine VM インスタンスのインスタンス ID を確認するには、ページの一番下にある [同等の REST] をクリックします。ID は 19 桁の番号です。ここでは、利便性を考慮して、これらの値を Go アプリケーションにハードコードする代わりに環境変数に設定します。

次に、目的の指標をなんらかの方法でエクスポータにルーティングする必要があります。そのためには、view.Register(...) を使用して、その指標を収集して集計するビューにエクスポータを登録します。

Cloud Monitoring 用の OpenCensus エクスポータについて詳しくは、https://godoc.org/contrib.go.opencensus.io/exporter/stackdriver をご確認ください。

Ctrl + XYEnter キーを押して、main.go ファイルを保存して閉じます。

Cloud Monitoring でアプリケーションの指標を表示する

これで、Cloud Monitoring でアプリケーションの指標を表示する準備がほぼ整いました。

SSH ウィンドウで、必要な環境変数を設定します。

  • プロジェクト ID は、このラボを開始した ページで確認できます。

export MY_PROJECT_ID=<your-project-id>
export MY_GCE_INSTANCE_ID=my-opencensus-demo
export MY_GCE_INSTANCE_ZONE=us-central1-a
go mod tidy

続いてアプリケーションを実行します。

go run main.go
注: エラーが表示されても無視してかまいません。

アプリケーションを実行したままにしておきます。

Cloud Console に戻ります。Cloud Monitoring のウィンドウが表示されているはずです。

左側のメニューで [Metrics Explorer] をクリックします。

[Find resource type and metric] テキスト ボックスで、[Resource type] の下にある [VM Instance] を選択し、[Select a metric] 行に「input」と入力して、Enter キーを押します。

input_1.png

注: 「OpenCensus/my.videoservice.org」という選択肢が表示されない場合は、Cloud Monitoring がデータを収集するまで数分待ってから、ブラウザを更新して再試行してください。

すぐに次のようなデータがグラフに表示されるはずです。

metric_explor.png

[進行状況を確認] をクリックして、実行したタスクを確認します。

Cloud Monitoring でアプリケーションの指標を表示する

Cloud Monitoring にアプリケーションの指標を報告するためのその他の方法

初めてコードをインストゥルメント化する場合は、このラボで説明したように OpenCensus ライブラリを使用する必要があります。インストゥルメンテーションがすでにある場合は、以下に示す既存のアダプタを使用することを検討してください。

Cloud Monitoring には、指標の取り込み用の公開 API(CreateTimeSeries API)が用意されていますが、OpenCensus でサポートされていない取り込みユースケース(一括取り込みなど)を主な対象としています。ここで紹介した以外の方法は現在サポートされていません。

お疲れさまでした

ここでは、OpenCensus を使用して Cloud Monitoring に指標をエクスポートするシンプルなアプリケーションを作成しました。

4588136b652766c0.png

クエストを完了する

このセルフペース ラボは、Qwiklabs のクエストである Google Cloud's Operations Suite の一部です。クエストとは、学習パスを構成する一連のラボで、クエストを完了すると、成果が認められて上のバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクさせることができます。このラボを終えてこちらのクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なその他の Qwiklabs のクエストもご覧ください。

次のラボを受講する

Cloud Monitoring を使用した複数の Cloud プロジェクトのモニタリング」に進んでクエストを続けるか、以下のおすすめのラボをご確認ください。これらのラボを受講すると、Cloud Monitoring についてさらに詳しく学ぶことができます。

次のステップと詳細情報

Cloud Monitoring のドキュメントへのリンク(各プロダクトの詳細を含む):

Google Cloud Training & Certification

Google Cloud 技術を最大限に活用できるようになります。このクラスでは、必要な技術力とベスト プラクティスを習得し、継続的に学習することができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、仮想環境など、多忙なスケジュールに対応できるオプションが用意されています。認定資格を取得することで、Google Cloud の技術のスキルと知識を証明できます。

マニュアルの最終更新日: 2022 年 9 月 5 日
ラボの最終テスト日: 2022 年 9 月 5 日

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。