オープンソースの Elastic APM スタックと Alibaba Cloud Elasticsearch を統合して、サービスおよびアプリケーション向けの可観測性パイプラインを構築します。本ガイドでは、Elastic Compute Service (ECS) インスタンス上に自己管理型 APM サーバーをデプロイし、APM エージェントで Go アプリケーションをイベントトラッキング対象として設定し、Kibana で収集されたデータを可視化する手順を説明します。
APM は、インフラストラクチャメトリックとアプリケーションレベルの動作の間にあるギャップを埋めます。ログおよびメトリックはインフラストラクチャ層で何が起きているかを示しますが、APM はアプリケーション内部で何が起きているか、およびユーザーがどのように体験しているかを示します。スタックへの APM の統合により、以下のことが可能になります。
実行時間の最も長い操作を特定し、サービスの応答停止の原因を分析できます。
サービス間の依存関係をマッピングし、分散リクエストフロー内のボトルネックを特定できます。
ブラウザおよびネイティブクライアントにおけるリアルユーザー体験を追跡できます。
ビジネス視点から SLA レポートおよびトレンド分析を生成できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Alibaba Cloud Elasticsearch V7.10 クラスター。詳細については、「Alibaba Cloud Elasticsearch クラスターの作成」をご参照ください。
Linux を実行中の ECS インスタンス。詳細については、「パスワードまたはキーペアを使用した Linux インスタンスへの接続」をご参照ください。
ECS インスタンスに Go がインストール済みであること。本ガイドでは、Elastic APM Go エージェントを用いて Go アプリケーションをイベントトラッキング対象として設定します。
仕組み
APM サーバーは、アプリケーション内で実行中の APM エージェントからトレースデータを受信します。
APM サーバーは、そのデータをご利用の Alibaba Cloud Elasticsearch クラスターに転送します。
Kibana は Elasticsearch からデータを読み取り、可観測性 下の APM UI に表示します。
ステップ 1:APM サーバーの構築
APM サーバーのインストール
一般ユーザとして ECS インスタンスに接続します。詳細については、「パスワードまたはキーペアを使用した Linux インスタンスへの接続」をご参照ください。
APM サーバーパッケージをダウンロードします。
wget https://artifacts.elastic.co/downloads/apm-server/apm-server-7.10.2-linux-x86_64.tar.gzパッケージを展開します。
tar -zxf apm-server-7.10.2-linux-x86_64.tar.gz
APM サーバーの構成
APM サーバーのディレクトリに移動します。
cd apm-server-7.10.2-linux-x86_64/構成ファイルを開きます。
vim apm-server.yml構成を、ご利用の Elasticsearch クラスターの詳細情報に更新します。
パラメーター 説明 apm-server.hostAPM サーバーがリッスンするアドレスとポート。フォーマット: <IP>:<ポート>。0.0.0.0:8200を指定すると、すべてのインターフェイスでリッスンします。output.elasticsearch.hostsElasticsearch クラスターのエンドポイント。ECS インスタンスとクラスターが同一の仮想プライベートクラウド (VPC) 内にある場合は、内部エンドポイントを使用します。異なる VPC 内にある場合は、パブリックエンドポイントを使用し、パブリック IP アドレスホワイトリストを構成します。詳細については、「クラスターの基本情報を表示」および「Elasticsearch クラスターのパブリックまたはプライベート IP アドレスホワイトリストの構成」をご参照ください。 output.elasticsearch.usernameElasticsearch のユーザー名。デフォルトは elasticです。カスタムアカウントを使用する場合は、まずロールを作成し、必要な書き込み権限を付与してください。詳細については、「Elasticsearch X-Pack が提供する RBAC メカニズムを用いたアクセス制御の実装」をご参照ください。output.elasticsearch.passwordelasticアカウントのパスワードは、クラスター作成時に設定されます。パスワードを再設定する場合は、「Elasticsearch クラスターのアクセスパスワードの再設定」をご参照ください。apm-server: host: "0.0.0.0:8200" output.elasticsearch: hosts: ["es-cn-*****.elasticsearch.aliyuncs.com:9200"] username: "elastic" password: "<your-password>"
APM サーバーの起動
次のコマンドを実行して、APM サーバーをバックグラウンドで起動し、出力をログファイルにリダイレクトします。
nohup ./apm-server -e > apmserver.log 2>&1 &APM サーバーが起動し、指定したエンドポイントの Elasticsearch に接続し、エージェント API をポート 8200 で公開します。サーバーが正しく実行中であることを確認するには、apmserver.log を確認し、Elasticsearch への接続完了およびポート 8200 でのリッスン開始を示すメッセージが記録されていることを確認してください。
ステップ 2:APM エージェントの構成
本例では Elastic APM Go エージェントを使用します。本ガイドでは、初期設定に環境変数を用います。
本ガイドでは Go を例として使用しています。他のプログラミング言語の場合は、対応する Elastic APM エージェントをインストールしてください。サポートされる言語および組み込みモジュールの完全な一覧については、「Elastic APM エージェントのドキュメント」をご参照ください。
Go エージェントのインストール
プロジェクト向けに Go モジュールを初期化します。
sudo go mod init demoAPM エージェントパッケージをインストールします。
golang.org xxxx: i/o timeoutエラーが発生した場合、お使いの環境から golang.org への到達ができない状態です。再試行前に、Go モジュールプロキシを到達可能なミラーに変更してください。sudo go get go.elastic.co/apm sudo go get go.elastic.co/apm/module/apmhttp
APM エージェントの環境変数の設定
シェルプロファイルファイルを開きます。
vim ~/.bash_profile以下の環境変数を追加し、ファイルを保存します。
変数 デフォルト値 説明 ELASTIC_APM_SERVICE_NAME実行可能ファイル名 サービス名。使用可能な文字:英字、数字、ハイフン ( -)、アンダースコア (_)、およびスペース。ELASTIC_APM_SERVER_URLhttp://localhost:8200APM サーバーの URL。ステップ 1 で起動したサーバーのアドレスを指定してください。 ELASTIC_APM_SECRET_TOKEN(なし) APM サーバーで必要とされるシークレットトークン。 export ELASTIC_APM_SERVICE_NAME=zijian export ELASTIC_APM_SERVER_URL= export ELASTIC_APM_SECRET_TOKEN=構成を適用します。
source ~/.bash_profile
アプリケーションのインストルメンテーション
Elastic APM Go エージェントは、人気のあるフレームワーク(例:apmhttp)向けの組み込みモジュールおよびカスタムイベントトラッキング向けの低レベル Tracer API を提供します。本例では、標準 HTTP サーバーをラップするために apmhttp を使用します。
アプリケーションファイルを作成します。
vim apm.go以下のコードを追加し、ファイルを保存します。
package main import ( "net/http" "go.elastic.co/apm/module/apmhttp" ) func main() { mux := http.NewServeMux() http.ListenAndServe(":8080", apmhttp.Wrap(mux)) }アプリケーションを実行します。
sudo go run apm.goアプリケーションが実行されると、APM エージェントはトレースデータを APM サーバーに送信し始め、APM サーバーはそのデータをご利用の Elasticsearch クラスターに転送します。
ステップ 3:Kibana での APM データの表示
自動インデックス作成の有効化
Alibaba Cloud Elasticsearch ではインデックスの命名規則が強制されています。APM サーバーによって自動的に作成される APM オンボードインデックスは、これらの規則に準拠していないため、明示的に許可する必要があります。
Kibana コンソールにログインします。詳細については、「Kibana コンソールへのログイン」をご参照ください。
本ガイドでは V7.10 クラスターを使用しています。他の Elasticsearch バージョンではログイン手順が異なる場合があります。
Kibana ホームページの右上隅にある Dev tools をクリックします。
[コンソール] タブで、次のコマンドを実行します。
7.10.2をインストールした APM サーバーのバージョンに置き換えます。PUT _cluster/settings { "persistent": { "action.auto_create_index":"+.*,+apm-7.10.2-onboarding-*,-*" } }
監視対象サービスの表示
左上隅の
アイコンをクリックしてナビゲーションウィンドウを展開します。可観測性 の下で、APM をクリックします。
Services タブで、APM エージェントにより監視中のすべてのサービスが一覧表示されます。

サービス名をクリックして、トレース、トランザクション、およびパフォーマンスデータをドリルダウン表示します。
次のステップ
他のプログラミング言語を使用する場合は、対応する Elastic APM エージェントをインストールしてください。サポートされる言語および組み込みモジュールの完全な一覧については、「Elastic APM エージェントのドキュメント」をご参照ください。
再デプロイせずにエージェント構成を一元管理するには、可観測性 > APM > 設定項目 で Kibana ベースの APM エージェント構成を使用してください。
Alibaba Cloud Elasticsearch クラスターへのアクセスを制御するには、ロールベースアクセス制御を設定してください。詳細については、「Elasticsearch X-Pack が提供する RBAC メカニズムを用いたアクセス制御の実装」をご参照ください。