はじめに
最近の傾向として監視などはサードパーティのSaaSを利用するケースが増えています。
日本ではDatadogとNewRelicが多く利用されていると思います。
そこでNewRelicを利用してAlibaba Cloudを監視運用できないかと考えました。
しかし、NewRelicは現状Alibaba Cloudとのインテグレーションをサポートしておらず個別にエージェントなどをインストールして監視する方法が必要となっています。
今回は唯一公式からNewRelicの記事があったので紹介したいと思います。
記事の中はAlibaba Cloud Function ComputeでAPMを利用する記事になっています。
APM Solutions – FC Integrated with NewRelic
バックグラウンド
クラウドネイティブという一般的なトレンドのもと、アプリケーションの作成やデプロイの際にコンテナやサーバーレス技術を採用する開発者が増えています。NewRelicは、クラウド・ネイティブ技術の進化と、オブザーバビリティの分野における新たな課題に常に注目しています。
最近は監視運用を淡々とするだけモニタリングでなくオブザーバビリティ(可観測性)は注目されています。特にNewRelicはオブザーバビリティに力を入れているサービスで今後も様々機能が充実していくと思います。
従来のサーバー、仮想マシン、コンテナ、サーバーレス機能、そして開発者の運用・保守の負担は徐々に軽減・解消されていきます。しかし、オブザーバブルで観察可能なインサイトの需要は増え続けています。
クラウドへの移行や、SaaSを含め様々な運用ツールの充実などによって開発者の負担は少なくなっています。
オブザーバブルで観察可能なインサイトの需要。サービスがマイクロサービス化して多くのアプリケーションが動作する環境が増えてきていると感じます。そこにこのような需要が生まれてきています。特にアプリケーションのパフォーマンスを気にするお客様が増えたように思います。
NewRelicのようなサードパーティのAPMプラットフォームの統合を容易にするために、FCはAPMエージェントがサーバーレスアプリケーションをよりよく監視できるようにするLifecycle Capabilityをリリースしました。
次に、NewRelicをFCに統合する方法を紹介します。私たちの手順に従えば、独自のサーバーレス・オブザーバビリティ・ダッシュボードを手に入れることができます。
NewRelicと連携するソリューション
始める前に
ステップ1:環境の準備
Funcraftをインストールする簡単でシンプルな方法は、実行可能なバイナリファイルをダウンロードすることです。
バイナリファイル以外にもnpmやDocckerで利用可能です。
funcraftはAlibaba Cloudのサーバーレスアプリケーションをデプロイするためのツールです
fun --version
を実行して、インストールが成功したかどうかを確認します。fun config
を実行してFuncraftを設定します。アカウントID、アクセスキーID、アクセスキーシークレット、デフォルトリージョン名をプロンプトに従って設定します。$ fun config Aliyun Account ID 1234xxx Aliyun Access Key ID xxxx Aliyun Access Key Secret xxxx Default region name cn-xxxx The timeout in seconds for each SDK client invoking 300 The maximum number of retries for each SDK client 5 Allow to anonynously report usage statistics to improve the tool over time? (Y/n)
設定に必要なアカウントID、アクセスキーID、アクセスキーシークレット、デフォルトリージョン名はポータルにログインして確認します。
ステップ2: アプリケーションのデプロイ
git clone https://github.com/awesome-fc/fc-newrelic-demo.git
cd fc-newrelic-demo
EnvironmentVariables: NEW_RELIC_LICENSE_KEY: your-license-key
make deploy
環境によってはmakeがない場合もあるため別途導入が必要かもしれません。
➜ newrelic make deploy docker build -t fc-go-runtime -f build-image/Dockerfile build-image Sending build context to Docker daemon 2.048kB Step 1/5 : FROM golang:1.12.16-stretch ---> 7ad03a8aece5 Step 2/5 : RUN mkdir -p $GOPATH/src/golang.org/x/ ---> Using cache ---> 5678ac31beda Step 3/5 : RUN cd $GOPATH/src/golang.org/x/ && git clone https://github.com/golang/net.git ---> Using cache ---> 77d355f1730b Step 4/5 : RUN cd $GOPATH/src/golang.org/x/ && git clone https://github.com/golang/sys.git ---> Using cache ---> 414d3e786a8e Step 5/5 : RUN go get github.com/newrelic/go-agent ---> Using cache ---> 5c983a67a451 Successfully built 5c983a67a451 Successfully tagged fc-go-runtime:latest docker run --rm -it -v $(pwd):/tmp fc-go-runtime bash -c "go build -o /tmp/code//bootstrap /tmp/code/main.go" chmod +x code/bootstrap fun deploy -y using template: template.yml using region: cn-shenzhen using accountId: ***********3743 using accessKeyId: ***********Ts6J using timeout: 20 Collecting your services information, in order to caculate devlopment changes... Resources Changes(Beta version! Only FC resources changes will be displayed): ┌─────────────────────┬──────────────────────────────┬────────┬──────────┐ │ Resource │ ResourceType │ Action │ Property │ ├─────────────────────┼──────────────────────────────┼────────┼──────────┤ │ newrelic-integration │ Aliyun::Serverless::Function │ Modify │ CodeUri │ └─────────────────────┴──────────────────────────────┴────────┴──────────┘ Waiting for service fc-integrate-with-third-apm to be deployed... make sure role 'aliyunfcgeneratedrole-cn-shenzhen-xxx' is exist role 'aliyunfcgeneratedrole-cn-shenzhen-xxx' is already exist Waiting for function newrelic-integration to be deployed... Waiting for packaging function newrelic-integration code... The function newrelic-integration has been packaged. A total of 2 files were compressed and the final size was 4.16 MB function newrelic-integration deploy success service xxx deploy success
funcraftを利用することで簡単にデプロイすることができます。失敗する場合はIDなど確認をして再度試してみてください。
アプリケーションは正常にデプロイされ、あなたの機能はNewrelicで監視することができます。
アプリケーションのテンプレートには、デフォルトでタイムトリガーがあり、1分ごとにトリガーされ、1tpsの起動でデフォルトのダッシュボードを見ることができます。
fun invoke
コマンドやAPIコールで関数を呼び出すこともできます。
これらの作業が完了するとNewrelicのダッシュボードで確認することが可能です。
まとめ
NewRelicとAlibaba Cloudの組み合わせの記事はあまりないので紹介してみました。
課題としてはNewRelicだけで運用していけるかはまだ考えるところがあります。
特にAlibaba Cloudを正式サポートしておらずインテグレーションやAlibaba Cloud Linuxもサポートしていません。
今後のサポートも期待しています。APMとしは優秀だとおもいますので組み合わせで使うこともよいと思いました。