Linuxでの一般的なロギング/ログローテーションについて学習していますか?


13

Apache Webサーバーのログの横に、私はどのオペレーティングシステムでも(プロフェッショナルな)ログの種類とは一切接触したことがないと仮定します。そのため、ロギングはいくつかの基本を理解していますが、すべてがまったく新しいトピックです。現時点では、このトピックを完全に学習するための投資は非常に大きいように見えますが、最も抽象的な概念をもっと知る価値があるかどうかはまだわかりません。

その状況で誰かがロギングについて学習するために、どのリソース(チュートリアル、マニュアルページ、書籍)を消費すべきでしょうか?

通常のLinuxユーザーは、毎日/毎月どのログを読むべきですか?人間が読みやすいように書かれているのか、それとも一般に他のツールで評価されて使用されているのかという仮定は正しいのでしょうか?

通常の* nixユーザーおよびソフトウェア開発者は、これらのログについて何を知っている必要がありますか?

大量のイベントを処理するプロフェッショナルなWebサーバーを管理する予定がない場合、ログローテーションについて何を知っておく必要がありますか?


私(またはあなた)がタイトルを編集して「on Ubuntu」ではなく「on Linux」と読むのは基本的に同じ質問です(私の答えを参照)。そうすることで、「archでのロギングの学習」、「centOSでのロギングの学習」などに関する閉じた重複した質問に終わる可能性が低くなります
。– goldilocks

答えが良ければ、そのような変更は気にしません:)
erikbwork

回答:


18

[これは、systemdシステムでjournaldが広く採用される数年前に書かれたもので、触れていません。現在(2018年後半)journaldと(r)syslogの両方(以下で説明)がDebianなどのディストリビューションで使用されています。他のシステムでは、rsyslogを一緒に使用する場合はインストールする必要がありますが、journaldとの統合は簡単です。]

トピックは一般的にLinux向けに標準化されているため、ubuntuに関してロギングについては特に説明しませんそのために私の言葉を取る)。また、この質問に答える以外に、「ログの読み方」についてはあまり語りません。

人間が読みやすいように書かれているのか、それとも一般に他のツールで評価されて使用されているのかという仮定は正しいのでしょうか?

私はそれはアプリケーションに依存すると思いますが、一般的には、少なくともsyslog(下記参照)に入るものに関しては、人間が読めるものでなければなりません。「私にとって意味のある」は別の問題です、笑。ただし、特定の目的のために標準ツール(grep、awkなど)で構文解析を容易にする方法で構造化することもできます。

誰でも、最初に、独自のロギングを行うアプリケーションとシステムロガーを使用するアプリケーションには違いがあります。Apacheはデフォルトで前者ですが、後者を実行するように設定できます(ほとんどの人は望ましくないと思うでしょう)。独自のロギングを行うアプリケーションは、ファイルの任意の場所を使用して任意の方法でこれを行うことができるため、それについて述べることはあまりありません。システムロガーは、一般にと呼ばれsyslogます。

syslog

「Syslog」は、実際にsyslogd(dはデーモン用です!)と呼ばれるデーモンプロセスで実装される標準です。Linuxで現在使用されている主なsyslogデーモン(ubuntuを含む)はです。Rsyslogdは多くのことを実行できますが、ほとんどのディストリビューションですぐに設定できるように、従来のsyslogをエミュレートします。あなたにはそのためのドキュメントを見つけるかもしれない(そこにもある、注意してください、それはこのようなソースパッケージからわずかの通知だと)。そこにある場合はhtmlですが、Stack Exchangeはローカルファイルリンクの埋め込みを許可しません。rsyslogd/var/log/usr/share/doc/rsyslog-doc-[version]/usr/share/doc/rsyslog-[version]NEWSChangeLog

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をじっくり見ながら、そこから取り去りたいのは、機能優先順位を理解することです(「優先順位」はログレベルと呼ばれることもあります))、これらは前述のsyslog標準の一部であるため。この標準が重要な理由は、rsyslogが実際にカーネル経由でデータを取得するためであり、カーネルが実装するのは標準です。

$rsyslog.conf のディレクティブに関しては、これらはrsyslog固有のものであり、オプションのdocパッケージをインストールすると、それらのガイドがにありますrsyslog_conf_global.html

楽しみを持っている...あなたは、アプリケーションがシステムロガーを使用する方法について興味があるならば、見てman loggerman 3 syslog

ログローテーション

ログをローテーションする標準的な手段は、と呼ばれるツールを使用することですlogrotate(およびがありますman logrotate)。logrotateを使用する標準的な方法はcronデーモンを使用することですが、そのようにする必要はありません(たとえば、デスクトップを毎日オフにする傾向がある場合は、syslogが開始するにブート時一度だけ実行することもできますが、明らかに、ファイルシステムがマウントされた後(rw)。

ここで logrotateの良い紹介があります。logrotateはsyslogだけのものはなく、あらゆるファイルで使用できることに注意してください。基本設定ファイルはですが/etc/logrotate.conf、設定には「include」ディレクティブがあるため、通常、ほとんどのものは/etc/logrotate.dディレクトリ内の個々のファイルに入ります(ここでdはデーモンではなくディレクトリ用、logrotateはデーモンではありません)。

logrotateを使用する際に考慮すべき重要なことは、アプリケーションの実行中にログファイルが「回転」、つまり移動すると、アプリケーションがどのように反応するかです。WRT(r)syslogd、そのログへの書き込みを停止します(これにはセキュリティ上の理由があると思います)。これに対処する通常の方法は、syslogに再起動(およびすべてのファイルを再度開く)をpostrotate指示することです。そのため、logrotate confファイルに、SIGHUPをsyslogデーモンに送信するディレクティブが表示されます。


2
にも言及しているのsyslog-ngであれば、linux-loggingについてのすべてを書いているでしょう。素晴らしい答え。
ニルス

私は多くを学び、読むべき資料がもっとあります。ありがとう!ところで Apacheにシステムロギングを使用するのはなぜ悪いのでしょうか?そして、どのログを読みたいですか?
erikbwork

@ erikb85 1)主にapacheが大量の出力を生成するため。私は長い間Apacheを設定する必要がありませんでしたので、特定のものをsyslogに送信するのがWRTでどれだけ柔軟か覚えていません(しかし非常に柔軟だと思います)2)読みたいWRTログ、見てくださいのロジックで/etc/rsyslog.conf。たとえば、特定の優先度を超えるものはしばしばに入り/var/log/messages、それより下のものはに入り/var/log/noticeます。また、すべてを含むログが必要です。これにより、ダブルとトリプルのオーバーラップが発生しますが、それらを回転させておくと大したことではありません。
goldilocks

確認するために、rsyslogデーモンのラッパーではありませんlogrotateか?なぜそうなのか ?
トーマス14年

@Thomas(r)syslogはローテーションを実装してlogrotateの必要性をなくすことができますが、異なる目的を実行します。ただし、これらを別々にすると、syslogファイル以外のものに対してlogrotateを使用できます。
goldilocks 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.