更新 tech

「実務で役立つログの教科書」読んだメモ

ざっと読んだのでメモを残しておく。

こちらの本を読んだ際のメモ。

ログの目的#

ログを利用する目的として、1,2はITエンジニアが関わっていることが多く、3は営業やマーケティングを担当する部署が利用することが多い。

  1. システム管理
  2. セキュリティ
  3. ビジネス

アクセスログ#

私たちがwebサイトを閲覧しているとき、webサーバー側でどのページが閲覧されているか記録しているだけでなく、マーケティング担当者が閲覧するためのプログラムが実装されていることがある。

  1. サーバーログ型
  • ApacheやnginxといったWebサーバーに記録されるアクセスログを集計する方法。エンジニアが一番想像しやすいのはこれ。
  1. パケットキャプチャ型
  • ネットワーク上にパケットをキャプチャする機器やソフトウェアを配置して、そこを通過するパケットを記録する方法。
  1. Webビーコン型
  • Webページ内にJavaScriptや画像ファイルを埋め込んでその呼び出しログを取得する、もしくはJavaScriptから特定のプログラムを呼び出して記録する方法。最近はこの方法がよく使われている。
  • 最も想像しやすいのはGoogle Analyticsで、ページ読み込み時にJavaScriptが実行され、その呼び出しログを取得することができる。

アクセスログのうちGoogle Analyticsがよく使用される理由もあり、それはキャッシュの影響を受けないため。Webサーバー、プロキシサーバー、CDN等のキャッシュの影響を考えなくて良いのがメリット。キャッシュにヒットしてしまうと、あるページにアクセスしたのに、キャッシュが代理でコンテンツを返すことでサーバー側では実行されずログに残らないためマーケティング活用のために適切な集計ができない。

ログの検索#

システム運用の現場では記録されている膨大なログから欲しいログを探し出す必要があり、それも効率よく解決する必要がある。

ログの量が少なければ単にキーワードで検索しても良いが、ログが膨大になってくるとインデックス(索引)やシャーディングの特定が重要になってくる。

  • インデックス
    • 索引を事前に用意しておく。イメージは木構造で、ある値を探す際に分岐の値より五十音順で前なら左、後ろなら右と言ったほうに移動することを繰り返す。
    • 英語のようにスペースで区切られていれば抽出は容易だが、日本語の場合空白で区切られてないので、形態素解析やn-gramで区切ることが必要。
  • シャーディング
    • 1つのコンピュータで膨大なログを管理するのは困難なため、別々のコンピュータで分散管理するという話。並列処理ができれば検索や集計を高速に行うことが可能。ElasticsearchやSplunkは基本機能として採用されている。
    • 具体的な活用シーンでは、ElasticSearchでインデックス化し、Kibanaで可視化するといったことが行われる。他にもGrafanaやSplunk等の分析プラットフォームもある。

ビジネス面での活用#

  • ページビュー(PV)、直帰率、平均セッション時間、離脱率、コンバージョン率や、クロスセル、アップセルといった様々な分析手法が使われる。
  • パフォーマンス最適化
    • SEOの観点で応答時間が長いと利用者張り出すする可能性があるためパフォーマンスの最適化は重要。
    • 方法としては、Apache,NginxなどのWebサーバーでカスタマイズされたログを出力したり、Webアプリ上のコードで計測したり、APMツールに頼ったりなど考えられる。

AIによるログ分析#

単純な攻撃パターンであれば閾値などで検知できるが、新しい攻撃手法では既存と異なるパターンが考えられる。そのため、AIを使ったログ分析手法が様々存在している。