Alibaba Cloud

Alibaba Cloud Function ComputeでNewRelicのAPMを利用する。

はじめに

最近の傾向として監視などはサードパーティのSaaSを利用するケースが増えています。
日本ではDatadogとNewRelicが多く利用されていると思います。

そこでNewRelicを利用してAlibaba Cloudを監視運用できないかと考えました。
しかし、NewRelicは現状Alibaba Cloudとのインテグレーションをサポートしておらず個別にエージェントなどをインストールして監視する方法が必要となっています。

今回は唯一公式からNewRelicの記事があったので紹介したいと思います。

記事の中はAlibaba Cloud Function ComputeでAPMを利用する記事になっています。

APM Solutions – FC Integrated with NewRelic

バックグラウンド

クラウドネイティブという一般的なトレンドのもと、アプリケーションの作成やデプロイの際にコンテナやサーバーレス技術を採用する開発者が増えています。NewRelicは、クラウド・ネイティブ技術の進化と、オブザーバビリティの分野における新たな課題に常に注目しています。

最近は監視運用を淡々とするだけモニタリングでなくオブザーバビリティ(可観測性)は注目されています。特にNewRelicはオブザーバビリティに力を入れているサービスで今後も様々機能が充実していくと思います。

従来のサーバー、仮想マシン、コンテナ、サーバーレス機能、そして開発者の運用・保守の負担は徐々に軽減・解消されていきます。しかし、オブザーバブルで観察可能なインサイトの需要は増え続けています。

クラウドへの移行や、SaaSを含め様々な運用ツールの充実などによって開発者の負担は少なくなっています。

  • リンクトラッキング:複数の機能のきめ細かな単一責任の相互接続、データベースにアクセスするためのリモート関数呼び出し、その他のクラウド・サービスには、分散型リンク・トラッキングが必要です。
  • インスタンスレベルのモニタリング:サーバーレスでは、インスタンスの概念はブラックボックス化されていますが、開発者は、インスタンスの変更によるコールドスタートなどのイベントがビジネスパフォーマンスに与える影響を確認する必要があります。
  • 豊富な指標:CPU、メモリ、ネットワーク、その他のクラウドサービスなど、ビジネス上の重要な指標はまだ提供されていないものもあり、ビジネス側が自分で手間暇かけて収集しています。
  • メトリクス、ログ、リンクトラッキング、コレレーションなどを用いて、分散アプリケーションの難しい問題を解決します。
  • オブザーバブルで観察可能なインサイトの需要。サービスがマイクロサービス化して多くのアプリケーションが動作する環境が増えてきていると感じます。そこにこのような需要が生まれてきています。特にアプリケーションのパフォーマンスを気にするお客様が増えたように思います。

    NewRelicのようなサードパーティのAPMプラットフォームの統合を容易にするために、FCはAPMエージェントがサーバーレスアプリケーションをよりよく監視できるようにするLifecycle Capabilityをリリースしました。

    次に、NewRelicをFCに統合する方法を紹介します。私たちの手順に従えば、独自のサーバーレス・オブザーバビリティ・ダッシュボードを手に入れることができます。

    NewRelicと連携するソリューション

    始める前に

  • NewRelicの登録とライセンスキーの取得(ライセンスキーはアプリケーション作成時に取得できます。)
  • FunctionComputeを登録します。
  • ステップ1:環境の準備
    Funcraftをインストールする簡単でシンプルな方法は、実行可能なバイナリファイルをダウンロードすることです。

    バイナリファイル以外にもnpmやDocckerで利用可能です。

  • ローカルマシンにFuncraftをインストールします。詳細は、インストール手順を参照してください。
  • funcraftはAlibaba Cloudのサーバーレスアプリケーションをデプロイするためのツールです

  • fun --version を実行して、インストールが成功したかどうかを確認します。
  • 自分のaliyunアクセスキーidとアクセスキーsecretを使ってFuncraftを設定する必要があります。funcraftの設定の手順に従って、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
  • template.ymlのライセンスキーを独自のライセンスキーで置き換える
  • EnvironmentVariables:
              NEW_RELIC_LICENSE_KEY: your-license-key
  • 以下のコマンドを実行して、functionをデプロイします。
  • 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としは優秀だとおもいますので組み合わせで使うこともよいと思いました。

    -Alibaba Cloud