Apache Webサーバーのログのほかに、どのオペレーティングシステムのいかなる種類の(プロフェッショナルな)ログとも接触したことがないとします。したがって、ロギングはいくつかの基本を理解していますが、すべて一緒になってかなり新しいトピックです。現時点では、このトピックについて完全に学ぶための投資は非常に大きいようですが、最も抽象的な概念よりも知る価値があるかどうかさえ、まだわかりません。
ロギングについて学ぶために、その状況の誰かがどのようなリソース(チュートリアル、マニュアルページ、本)を消費したらよいでしょうか。
通常のLinuxユーザーが毎日/毎月どのログを読む必要がありますか?人間が読みやすいように書かれているか、一般に他のツールによって評価および使用されているという仮定は正しいですか?
通常の* nixユーザーとソフトウェア開発者は、これらのログについて何を知っている必要がありますか?
大量のイベントが発生するプロフェッショナルなWebサーバーを管理する予定がない場合、ログローテーションについて何を知る必要がありますか?
[systemdシステムでjournaldが広く採用される数年前に書かれたものであり、触れられていません。現在(2018年後半)bothjournaldと(r)syslogは、以下で説明するように、Debianなどのディストリビューションで使用されています。他のものでは、rsyslogを一緒に使用したい場合はインストールする必要があるかもしれませんが、journaldとの統合は簡単です。]
このトピックはLinuxで一般的に標準化されているため、ubuntuに関するロギングについては特に説明しません(そして、私が言わなければならないことのほとんどまたはすべては、どのフレーバー* nixでも一般的に当てはまると思いますが、私の言葉を取ってください)。また、この質問に答える以外に、「ログの読み方」についてはあまり触れません。
人間が読みやすいように書かれているか、一般に他のツールによって評価および使用されているという仮定は正しいですか?
それはアプリケーションに依存すると思いますが、一般的には、少なくともsyslogに入るもの(以下を参照)に関しては、人間が読めるものでなければなりません。 「私にとって意味のあること」は別の問題です(笑)。ただし、特定の目的のために標準ツール(grep、awkなど)で簡単に解析できるように構成することもできます。
だれでも、まず、独自のロギングを行うアプリケーションと、システムロガーを使用するアプリケーションの間には違いがあります。デフォルトではApacheが前者ですが、後者を実行するように構成することもできます(ほとんどの人は望ましくないと考えています)。独自のロギングを行うアプリケーションは、ファイルの任意の場所を使用して任意の方法でこれを行うことができるため、そのことについて言うことはあまりありません。システムロガーは一般にsyslog
と呼ばれます。
「Syslog」は実際には 標準デーモンプロセス で実装されており、総称的にsyslogdと呼ばれます(dはデーモン用です!) 。 ubuntuを含め、現在Linuxで使用されている主なsyslogデーモンはrsyslogd
です。 Rsyslogdは多くのことを実行できますが、ほとんどのディストリビューションですぐに設定できるように、従来のsyslogをエミュレートし、/var/log
のプレーンテキストファイルにデータをソートします。そのドキュメントは/usr/share/doc/rsyslog-doc-[version]
にあります(注意してください、/usr/share/doc/rsyslog-[version]
もありますが、これはNEWS
やChangeLog
などのソースパッケージからの通知にすぎません)。そこにある場合はhtmlですが、Stack Exchangeはローカルファイルリンクの埋め込みを許可しません。
file://usr/share/doc/rsyslog-doc/index.html
だから、それをコピーして貼り付けてみることができます。ない場合は、インストールされていない別のパッケージの一部である可能性があります。パッケージングシステムをクエリします(例:apt-cache search rsyslog | grep doc
)。
構成は/etc/rsyslog.conf
にあります。これには、man rsyslog.conf
のマニュアルページがありますが、マニュアルページは詳細なリファレンスを作成しますが、概要としてはあまり浸透しません。幸い、ストックrsyslog.confの基本は、多くの導入とチュートリアルが存在する従来のsyslog.confの基本に準拠しています。 これ など。ローカルのrsyslog.confを覗き見しながら、そこから取り除きたいのは、設備との理解です)priorities( "priority"はloglevel)と呼ばれることもあります。これらは前述のsyslog標準の一部であるためです。この標準が重要な理由は、rsyslogが実際にカーネルを介してデータを取得するためであり、カーネルが実装するものは標準です。
Rsyslog.confの$
ディレクティブに関しては、これらはrsyslog固有であり、そのオプションのdocパッケージをインストールすると、rsyslog_conf_global.html
にそれらのガイドが見つかります。
楽しんでください...アプリケーションがシステムロガーをどのように使用するかについて知りたい場合は、man logger
とman 3 syslog
をご覧ください。
ログをローテーションする標準的な手段は、logrotate
というツールを使用することです(man logrotate
があります)。 logrotateを使用する標準的な方法は cronデーモン ですが、そのようにする必要はありません(たとえば、毎日デスクトップをオフにする傾向がある場合は、一度だけ実行することもできます)ブート時、syslogが開始する前ですが、ファイルシステムがマウントされた後(rw)。
Logrotate here の良い紹介があります。 logrotateは、syslogのものだけでなく、どのファイルでも使用できます。基本構成ファイルは/etc/logrotate.conf
ですが、構成には "include"ディレクティブがあるため、通常、ほとんどのものは/etc/logrotate.d
ディレクトリ内の個々のファイルに入ります(ここで、dはディレクトリではなくデーモンです。logrotateはデーモンではありません)。
Logrotateを使用する際に考慮すべき重要なことは、アプリケーションの実行中に、ログファイルが "回転"したときにアプリケーションがどのように反応するか、つまりmoved-です。 。 WRT(r)syslogd、それはそのログへの書き込みを停止します(これにはセキュリティの正当化があると思います)。これに対処する通常の方法は、syslogに再起動(およびそのすべてのファイルを再度開く)を指示することです。これが、syslogデーモンにSIGHUPを送信するlogrotate confファイルにpostrotate
ディレクティブが表示される理由です。