
Content Delivery Network(以下、CDN)は、非常に有用なサービスであるのと同時に、どの様に効果的に活用していくのかは、システムを運用される方々には非常に難しい課題の1つかと思います。簡単な例として、複数の管理画面を都度切り替えながらCDNの配信状況やシステム側の負荷状況を監視するといったことに非常に負荷を感じるといった声をよくお聞きします。
今回、日本で有名なCDNの1つであるFastlyとNew Relic Oneを連携させる手順をご紹介し、日々感じるお悩みを解決する第一歩となれればと幸いです。
はじめに、今回の連携方法を確認する上で、どのような環境を使ったかを簡単にご紹介します。
- New Relic Free Trialアカウント: 利用制限はありますが、New Relic Oneが提供する機能をフルで利用することが可能です。
- 既に実契約に基づくFull Userのアカウントをお持ちでしたら、そちらをご活用ください。
- もし、まだアカウントをお持ちでなければ、是非、こちらよりサインアップして、ご利用を開始頂けますと幸いです。
- Fastly Free Trialアカウント: Fastly社のサイトよりサインアップして利用することができます。利用規約をご確認の上で、進めて下さい。
- こちらのTrialアカウントを用いて今回の検証を行いましたが、既にFastlyをご活用頂いている場合、このTrialアカウントは必要ございません。
- 配信設定: オリジンはAWS EC2を利用し、CNAMEレコードやAレコードの登録は、AWS Route53を用いて、配信設定の作成を実施しました。Fastlyの配信設定作成方法については、非常に多くの方が記事を書かれていますので、割愛いたしますが、使い慣れている環境をご利用下さい。
既にFastlyの配信設定が完了し、リクエストが正しくオリジンやFastlyで処理が行える様になっているという前提で進めさせて頂きます。
作業全体のイメージ
作業を始める前に、全体の作業ボリュームと全体像を記載致します。
全体の連携: 30分程度で完了になります。
- New Relic OneにてAPI Keyの生成(5分)
- Fastly でのLogging設定(15分)
- FastlyからNew Relic Oneにログが送られているかの確認(10分)
FastlyのデフォルトのLogging設定に追加情報を設定する部分が最も悩まれる部分かと思います。まずは連携を優先し、New Relic Oneに出力されるログを見ながらステップバイステップで進めていっても良いかと思います。
New Relic API Keyの生成
New Relic Oneにログインし、画面右上のアイコンからプルダウンメニューを表示し、[API keys]を選択して下さい。
右側からAPI keyを作成するためのプロンプトが出てきますので、適切な値を選び、[Create a key]ボタンをクリックして下さい。

- Account: Fastlyがログを送ってきた際に受け取りたいアカウントを指定して下さい。
- Key type: Keyのタイプを選びます。Ingest – Licenseを選択して下さい。
- Name: 管理しやすい任意名を入力して下さい。
- Notes: メモに相当する部分になりますので、管理情報を記載を行って下さい。
API Keys画面に戻り、新たに作成されたAPI Keyが一覧に表示されます。

当該Keyの右側にある[…]よりプルダウンを表示し、[Copy key]をクリックして下さい。
この作業により、クリップボードにAPI Keyがコピーされます。

*** ご注意ください *** ここで取り扱っているKeyは、外部に漏れない様に慎重に取り扱って下さい。誤って外部に漏れてしまった可能性がある場合、他の目的で利用されていないことをご確認の上で、[Delete]で削除を実施して下さい。
FastlyのLogging設定
次に、Fastlyの管理ポータルに移動します。
管理ポータル上の配信設定一覧から、ログをNew Relic Oneに送りたい配信設定を選び、編集可能なVersionを選択して下さい。
以下の例ですと、Draftのステータスになっている[Version 10]を選択します。

Fastlyの設定画面に切り替わりますので、左の設定項目から[Logging]を選択します。

選択すると、logging設定の一覧が右画面に表示されますので、アルファベット順で並んでいるNew Relic Logsを探し、[ + Create endpoint ]ボタンをクリックします。

Logging設定の画面が表示されますので、設定を行います。

- Name: 任意の設定名を指定します。Fastlyの管理ポータル上で運用しやすい名前を指定して下さい。
- Log format: (下部を参照してください。)
- License key / Insert key: 前段階で生成したAPI Keyを入力して下さい。
Log formatについて: Logを送信する際の属性名や値の指定は、以下のフォーマットになっています。
“任意の属性名”:”Fastly上の変数名”
Fastly上の変数名は、VCL上の記載規則に準じていますので、詳細は割愛致しますが、以下の点を抑えておけば、運用上、重要な値をNew Relic Oneに送ることができました。
- Fastlyの仕様上、ログ機能で送信する場合、エンドユーザとFastlyがやりとりするRequestとResponseのヘッダを含めることができます。
- Fastlyとオリジン間のRequestとResponseに関するヘッダの情報は利用できない、あるいは制約があるようです。
- 重要なHeaderについては、既に直接できるVCL上の記載方法が予約されています。
今回の検証にて、以下の様な属性名を追加することで、ログの識別子としてNew Relic One上で利用できる文字列であったり、Fastlyのどのデータセンター経由で配信されたか、ステータスコード情報、オブジェクトのサイズ情報などをログに残せることが確認できました。

設定が終わりましたら、画面下部にある[Create]ボタンをクリックします。
補足: 配信設定をActivateするまでは、当該Logging設定を更新することができます。もし、配信設定をActivateしてしまった後に、Logging設定に誤りを見つけた場合、新しいVersionを生成した上で、Loggin設定の更新を行い、Activate処理を行います。

Fastly上のLoggingの設定はこれで完了しましたので、配信設定の展開を行います。画面右上にある[Activate]ボタンをクリックし展開を行います。
FastlyからNew Relic Oneにログが送られているかの確認
Fastlyはエンドユーザから送られるリクエストベースでログを生成し、New Relic Oneに送信します。ですので、手元でFastly経由でアクセスすることで、ログが生成され、ログが送られます。
正しくログを送信できていると、FastlyのStatsページにあるログに関するグラフがタイムリーに更新されます。
Statsのページは、画面上部のメニューから進みます。

ログが送られたので、グラフがピークを表示しています。

また、正しくログをNew Relic Oneに送信できていた場合、Logsにて送信されたログが表示されるようになります。

ご注意いただきたい点として、Fastlyのログ設定上で指定した”任意の属性名”がLogs上の属性名として表示されます。同様に、NRQLをかける際の変数名としてもりようされます。ですので、Fastly上で設定を行う際は、運用しやすい名前を意識されると、後続の処理が簡易になります。
まとめ
Fastlyの配信ログをNew Relic Oneに連携するためには、Fastlyが提供しているLoggingの機能を活用することで、非常に簡単に実現することができます。その際に、New Relic One上で生成するAPI Keyを利用すると言う点のみが特別な作業となってきます。連携することで、リクエストをFastlyが受けるたびにログラインをNew Relic Oneに送信されるようになり、ログ上の情報をNew Relic One上で一元的に管理することができる様になります。運用上重要な情報をログに載せ、New Relic Oneで監視している他の情報を連携させ、運用を効果的に行っていきましょう。
最後に
連携の設定を行っていただき、ログをNew Relic Oneに統合頂ければ、dashboard上でのグラフ化も非常に簡単に行えます。例えば、以下の様なdashboardを作成し、Fastlyのトラフィック情報を簡単に視覚化することができます。

更にBrowser/APM/InfrastructureといったNew Relic Oneの他の機能と一緒にグラフ化することで、初めに触れた、複数の管理画面を行ったり来たりといった運用を行わないです済む様になります。自前でツールをガリガリ実装するといったことも行わないで済みますね。
New Relic Oneにさまざまなデータやログを送って頂き、New Relic Oneを見ておけば、システム全体を簡単に把握できるという環境を作成できれば幸いです。
The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites.