Top takeaways
はじめに:
Contents Delivery Network(以下、CDN)を運用している中で発生しているログをみなさんはどの様に活用されていますか?みなさまのサービスを活用されているお客様に何か問題が発生した際に、ログファイルを取得して解析するといった際に活用されているのではないでしょうか?もし、このログファイルの取得が、解析が必要な際に既に手元で解析できる状況だと、みなさまの解析作業を迅速に進められるのではないでしょうか?あるいは、その解析でさえもリアルタイムで行えるのであれば、みなさまは根本原因の対応、ひいては、障害発生の予兆を捕まえることができるようになるのではないでしょうか?
本ブログでは、主要CDNの1つであるAmazon CloudFront(以下、CloudFront)で発生するログを直接New Relicに送信するための設定をご報告させて頂きます。
また、CloudFrontのログをNew Relic Oneに連携する方法はいくつか存在しますが、時事刻々と発生するログを運用に活かすには、リアルタイム性が重要です。そのため、Amazion Kinesis(以下、Kinesis)を用いたリアルタイムログ連携を本ブログではお伝えします。
ブログの大きな流れは以下の通りです。
-
実作業紹介
- 事前準備: New Relic API Keyの取得
- Kinesis上でのDelivery Streamの作成
- CloudFrontのReal time loggingの有効化
- New Relic Logging上でのParing設定
-
New Relic Dashboardの作成例紹介
上記の実作業の所要時間は、おおよそ30分程度の見込みです。また、既にAWSを活用しており、New Relic Oneのアカウントをお持ちの方を想定しています。もし、New Relic Oneアカウントをお持ちではない場合、こちらより、Freeアカウントを取得して下さい。
-
事前準備: New Relic API Keyの取得
- こちらのブログの手順に従って、ライセンスキー(Ingest - License)を取得してください。ここで取得したライセンスキーは、Kinesis firehoseのDestinationを設定する際に用います。
-
Amazon Kinesis上でのDelivery Streamの作成
- AWSのWebコンソールにログインし、Kinesisにアクセスします。
- Data Firehoseを新たに作成し、
- Source: Amazon Kinesis Data Streams
- Destination: New Relic
を選択します。画面下部に設定すべきフィールドが表示されます。
- 以下の要領に従い、設定を行います。
その他の項目は、利用形態に併せて設定を行ってください。- Source settings - Kinesis data stream: 既存のdata streamを選択するか、新たにData streamを作成します。
新規で作成する場合、新しいコンソールの画面が開きますので、data streamを作成後、Delivery streamのコンソールに戻り、既存のData stream一覧から選択してください。 - Delivery stream name: 管理を行いやすい名前を設定します。
- Destination settings:
- HTTP endpoint URL: New Relicのデータセンターに合わせてプルダウンメニューから選びます。USを用いている場合、LogsのNew Relic logs - USを選択し、EUを用いている場合、LogsのNew Relic logs - EUを選択します。
- API key: 項目1で取得したキーを設定します。
- Add parameterにて、key:valueを設定します。(例: key: logtype, value: cloudfront-realtime-logging) こちらは、New RelicのLogs上でフィルタリングを容易に行える様にするために設定します。
- Source settings - Kinesis data stream: 既存のdata streamを選択するか、新たにData streamを作成します。
-
CloudFrontのReal time loggingの有効化
- CloudFrontの設定ダッシュボードに移動し、左ペインのTelemetry - Logsにアクセスします。
- Real-time configurationsのタブを選択し、設定を作成します。
- Settings:
- Name: 管理しやすい名前を設定します。
- Sampling rate: 保存するログラインの割合を1-100で指定します。
- Fields: ログに含めたい属性名を選択します。全てを選択することをお薦めします。
- Endpoint: 先ほど作成したDelivery streamを選択します。
- IIAM role: 既存ロールを用いるか、新しくロールを作成します。
- Distributions:
- 紐づけるCloudFrontの設定を選択します。
- Settings:
- 作成後、Telemetry - Logsに戻り、表示される一覧の中から対象のCloudFrontを見つけ、Real-time logsがEnabledになっているかを確認して下さい。
-
New Relic Logging上でのParsing設定
- AWSコンソールにて、Kinesisにアクセスし、対象Delivery streamのMonitoringからログデータが送信されているかを確認してください。確認できたら、以下のステップに進みます。
- New Relic Oneにアクセスし、登録しているユーザでログインします。
- Logs UIにアクセスし、CloudFrontのログがLogs UIに表示されているかを確認します。
補足: この時点では、CloudFrontから送信されるログラインの内容は、messageという属性に1つの文字列として設定されています。CloudFrontのログのフィールドを、それぞれの属性としてLogs UIで扱うためにParsingの設定を行います。 - Logs UIの左ペインからParsingを選択し、右側からスライドして表示されるUI上のCreate parsing ruleボタンをクリックします。設定画面が表示されますので、以下の様に設定します。
- Rule name: 管理しやすい名前を設定します。
- Attribute/Value: Delivery streamを作成する際に作成したparameterをここで指定します。
- Parsing logic: 以下の内容を記載します。
以下の内容は、CloudFrontのReal time loggingを設定する際に、全てのフィールドを選択しているという想定のものになります。もし、全てを選択していない場合、適宜編集を行い、記載して下さい。 - Parsingルール: 後続のコードサンプルをご確認下さい。
- Enable rule: トグルを動かし、緑色にします。
- Save parsing ruleボタンをクリックします。
- Parsingの設定後に受け取るCloudFrontのログの内容が、それぞれの属性名で表示される様になっていることを確認します。
^%{INT:timestamp}.%{INT:timestampMs:integer}%{SPACE}%{NOTSPACE:client-ip}%{SPACE}%{NOTSPACE:time-to-first-byte:float}%{SPACE}%{NOTSPACE:sc-status:integer}%{SPACE}%{NOTSPACE:sc-bytes:integer}%{SPACE}%{NOTSPACE:cs-method}%{SPACE}%{NOTSPACE:cs-protocol}%{SPACE}%{NOTSPACE:cs-host}%{SPACE}%{NOTSPACE:cs-uri-stem}%{SPACE}%{NOTSPACE:cs-bytes:integer}%{SPACE}%{NOTSPACE:x-edge-location}%{SPACE}%{NOTSPACE:x-edge-request-id}%{SPACE}%{NOTSPACE:x-host-header}%{SPACE}%{NOTSPACE:time-taken:float}%{SPACE}%{NOTSPACE:cs-protocol-version}%{SPACE}%{NOTSPACE:c-ip-version}%{SPACE}%{NOTSPACE:cs-user-agent}%{SPACE}%{NOTSPACE:cs-referer}%{SPACE}%{NOTSPACE:cs-cookie}(?<s1>(\t))(?<csuriquery>([^\t]*))(?<s2>(\t))%{NOTSPACE:x-edge-response-result-type}%{SPACE}%{NOTSPACE:x-forwarded-for}%{SPACE}%{NOTSPACE:ssl-protocol}%{SPACE}%{NOTSPACE:ssl-cipher}%{SPACE}%{NOTSPACE:x-edge-result-type}%{SPACE}%{NOTSPACE:fle-encrypted-fields}%{SPACE}%{NOTSPACE:fle-status}%{SPACE}%{NOTSPACE:sc-content-type}%{SPACE}%{NOTSPACE:sc-content-len}%{SPACE}%{NOTSPACE:sc-range-start}%{SPACE}%{NOTSPACE:sc_content_len:integer}%{SPACE}%{NOTSPACE:c-port:integer}%{SPACE}%{NOTSPACE:x-edge-detailed-result-type}%{SPACE}%{NOTSPACE:c-country}%{SPACE}%{NOTSPACE:cs-accept-encoding}%{SPACE}%{NOTSPACE:cs-accept}%{SPACE}%{NOTSPACE:cache-behavior-path-pattern}%{SPACE}%{NOTSPACE:cs-headers}%{SPACE}%{NOTSPACE:cs-header-names}%{SPACE}%{NOTSPACE:cs-headers-count:integer}
New Relic Dashboardの作成例紹介:
CloudFrontのログをNew Relicに連携することで以下のダッシュボードを作成することができるようになります。
次のステップ
まとめ:
New Relic OneにCDNのログを連携することで、日々の運用の中でログを手動で取得たり、都度都度解析を行うという負担を一気に解消することができ、必要な配信状況を必要な時に即座に確認ができるようになります。サービスが問題なく稼働しているのか、現在の配信状況が過去と比較して想定外の振る舞いを行っていないか、そのような複雑な確認を、New Relicと連携することで簡単に実現できるようになるのです。
ご紹介したDashboardは、集積したデータを元に、さまざまなカスタマイズを行うことができますので、みなさまのサービス固有な視点の解析を取り込み、即座に運用に活かすことが可能です。
また、トラブルシューティングの時にも、既にログが取り込まれていることの価値をご理解頂けるかと思います。ログを取得し、問題の箇所を特定するという作業も、New Relicのポータルにアクセスするだけで実現できるのです。日々の運用やトラブルシューティングを通してCDNのログ情報を活用頂くことで、CDNのより効果的な活用を推進することも可能となります。
今回のブログでは、CDNという観点でのみ記載させて頂いていますが、CDNはサービスを構成する重要な部分を担っていることは、共通の理解かと思います。また、New Relicは、システムの本丸であるバックエンド側や、みなさまのサービスを活用されているお客様がどのような状況でサービスを利用しているかといった計測も得意としております。ですので、フロントサイド/CDN/バックエンドの計測データを一元的に集約し、分析に活用する。一元的に集約したデータを元に、さまざまな組み合わせで潜在的なリスクが顕在化するまえにアラート発報を行い、問題の改善を迅速に行うといったことができるようになるのです。今後は、フロントサイド/CDN/バックエンドを組み合わせた活用方法についてもお伝えしていきたいと思います。
New Relicは、CDNを含めたサービス全体の状況を把握するための環境をご提供致します。CloudFrontに限らず、さまざまなCDNの連携ノウハウについてもご提供可能でございますので、是非、お気軽にお声がけ下さい。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。