この記事について
以前、以下のプロバイダ責任制限法の記事を書きました。
この記事では法令対応の方針として、ログ保存戦略とデータベース保存戦略という2つの方針を書きました。この記事を受けて、エンジニア業務に携わらない方々より、そもそも、ログとデータベースの違いって何?という声も受けました。
この記事ではそうしたフィードバックを受け、そもそもログとデータベースの違いについてまとめてみました。
ログとは
ログとはシステム上の運用記録のデータのことです。明確な語源は不明ですが、もともとlogとは航海日誌などの記録を指していたようです。推測ですが、システムの稼働記録も航海記録と同様活動記録であるから同じ名前で名付けられたのかもしれません。
ログの利用用途
ログには以下のような用途が存在します。
トラブル発生時の原因調査
ログにはシステムエラーの記録、エラーが発生する前にどのような動作が行われていたかなどが記載されています。これらを精査することで、原因を追求し、早期の応急処置、再発防止をすることができます。このような目的で必要な稼働履歴を記録することがログの目的の一つです。
システム改善、サービス向上の指標としての利用
上記のような使われ方はどちらかというと、守りの目的ですが、ログの用途にはビジネス上の攻めの目的もあります。ユーザーの行動ログを取得することで、ユーザーがどのようにサービスを使っているかがわかります。これらを分析し、活用することでサービスの品質向上に役立ちます。
GAFAをはじめとする巨大ITサービスは、ありとあらゆるユーザーアクションを積極的にログとして取得して、サービス改善やビジネス利用をしています。その結果、プライバシー上の懸念も副作用として発生していたりしています。
ログの種類
すでにいくつか触れましたがログにも様々な種類があります。代表的なものをご紹介します。
アクセスログ・ユーザー行動ログ
ユーザーがシステムにアクセスした記録のログです。主に、アクセス日時、アクセス元の端末やIPアドレスの情報、アクセスしようとしたデータの名前などが記載されています。プロバイダ責任制限法上で重要になるログはこのログです。この他、集計することによって、顧客流入元の調査や人気ページの把握などマーケティングにも扱われます。
システム実行ログ
システムがどのような動作をしたのかを記録したログです。毎日2時に集計開始するなど、そういったプログラムを組んでいた場合、正確に毎日2時に実行していたかなどをチェックするのに使います。
エラーログ
システムエラーのログです。エラーが発生した時にどういう原因で発生したのかなどを記録しています。障害発生時に早急の障害解消のためなどに扱われます。
ログの性質
最後にログデータの性質を簡単に触れます。
手軽な登録ができるようにしている
ログはサービス改善、トラブル発生時の原因究明のためにとっておくものです。そのため手軽に保存できるようにしています。
特に、システムログなど、トラブルが発生しない限り積極活用を予定していないログは低コスト実装・低コスト管理をされることが多いです。テキストファイル形式で保存し、ログイベント発生時に毎回末行一行で実行結果を記載するだけという仕様が大半であるのが実情です。
それ故に後述のデータベース化されたデータと比べると検索利便性などに欠点がある状態で管理されていることがとても多いです。
長期保存を想定していないことが多い
ログは掲示板の投稿データ、商品データのようなデータと違い、短期間でも大量のデータを生み出します。
その一方で守りの目的でためられるエラーログ、アクセスログについては、トラブルが発生しない限り溜まっていくだけの無用のデータです。攻めの目的で貯められるユーザー行動ログについても、プライバシー観点やシステム圧迫を考えると、長期間にわたって持っていることが望ましいものではありません。
そのためログデータは一定期間の保持期間を定め、定期的に削除してしまうケースが非常に多いです。
ログの保存期間や保存項目を決める要素
そんなログについて、実際の保存期間や保存項目を決めるのは主に以下の要素となります。
障害発生時の説明責任が問われるシステム
大規模なシステムほど、障害発生時に原因の説明責任が問われます。そのようなシステムほど詳細なログをとって、障害発生時に正確な原因を経営陣、顧客などに伝えられるように配慮されることが多いです。
障害発生時のユーザー経済的補填がマストなシステム
ショッピングなどお金が絡むシステムの場合、ログはシステム復旧のための最後の砦となることが多いです。万が一売買処理中にシステムダウンししまい、ユーザーの大切な決済記録が破損してしまった場合、ログと破損データを突合させてデータ復旧やユーザー補填を図ったりします。
ユーザーログを元にしたサービス改善を積極的に行いたいシステム
サービスの改善を目的にする場合もログを積極的に取得していきます。もっとも、トップページのような主要ページこそログの取得は積極的に行っていきますが、逆にカスタマーサポートページなど、優先度が落ちるページのログなどはログをとることを見送る傾向が強いです。
法令上のログ保存義務が発生するシステム
最後に、サービス運営上の理由とは別に法令上取引記録管理が義務付けられているものは当然ログをとります。法令上のデータについては特に重要データとして扱われ、後述のログデータベース化することも視野に入れて実装を検討します。
データベースとは
続いてデータベースをみてみましょう。
データベースとは、大量のデータを管理・集計・利用しやすくしたソフトウェアのことです。
保存可能なデータの種類を限定しておらず、購買履歴データベース、投稿記録デーベースといった様々な種類のデータを取り扱うデータベースがあります。もちろんログを管理・集計しやすくしたログデータベースを作ることも可能です。
データベースの利用用途・性質
それではデータベースの利用用途や性質を述べてみたいと思います。
長期・永続保存を想定
データベースに保存したデータは基本削除を想定していません。システムを存続させたいという意向がある限り原則永続的に保持することを予定しています。データによっては仮に削除したとしても、削除記録データベースというものを用意して、何を削除したのか記録し、最悪の時に復旧させることもできるように管理していることもあります。
頻繁に利用するデータの保管庫として利用
検索、管理が容易なため、頻繁に利用するデータの保存庫として利用されます。
実装コストは高め
ここまで述べたように、長期的な保存、頻繁な利用を容易にすることを想定しているため、実装コストは高めに設定されやすいです。積極利用、厳重管理したい大切なデータのみをデータベース化することが多いのが実情です。
まとめ - 開発者がログをデータベース化することを避ける理由 -
ここまで述べたように、ログとデータベースは対立する概念ではありません。それ故にログデータベースというのも存在します。それでも性質上全てのログがデータベース化されることはありません。ログをデータベース化しにくい理由についてあらためてまとめてみます。
データが膨大になってしまう
やはり、ログは頻繁に記録されるのでデータが膨大になりやすいです。それ故に、長期的な保存を想定したとしても集計してサマライズしたデータであったり、どうしても残したいデータ項目に限ることが多いです。
永続保存する必要性が希薄なものも多い
前述のように、ログは基本的に永続保存する必要性が希薄なものが多いです。前述の法令上義務が課されたデータなどでない限り、一時的な保存を想定していることが全てです。
終わりに
以上がログとデータベースの解説でした。エンジニアリングに携わっていないかたでも、少しでもログ管理やデータベース利用といったシステムエンジニアリングの世界の理解が深まっていただければ幸いです。
Photo by Artem Sapegin on Unsplash