何十年もの間、Linuxのログはsyslogdデーモンによって管理されてきました。
Syslogdは、システムプロセスとアプリケーションが/ dev/log疑似デバイスに送信したログメッセージを収集します。次に、メッセージを/ var /log/ディレクトリ内の適切なプレーンテキストログファイルに転送します。
Syslogdは、各メッセージにメタデータフィールド(タイムスタンプ、メッセージの発信元と優先度を含む)を含むヘッダーが含まれているため、メッセージの送信先を認識します。
systemdの執拗で世界を征服するジャガーノートをきっかけに、Linuxのロギングもjournaldによって処理されるようになりました。また、syslogdはどこにも行かず、従来のログファイルのほとんどは/ var /log/にあります。ただし、町には(コマンドライン)名前がjournalctlである新しい保安官がいることに注意する必要があります。
しかし、この記事はジャーナルに関するものではありません。ここではsystemdに焦点を当てているので、もう少し掘り下げてみましょう。
syslogdを使用したロギング
syslogdシステムのイベントによって生成されたすべてのログが/var/ log/syslogファイルに追加されます。ただし、識別特性によっては、同じディレクトリ内の他の1つ以上のファイルに送信される場合もあります。
syslogdの場合、メッセージの配信方法は50-default.conf
の内容によって決まります。 /etc/rsyslog.d/
にあるファイル ディレクトリ。
50-default.conf
のこの例 cron関連としてマークされたログメッセージがどのようにcron.logファイルに書き込まれるかを示します。この場合、アスタリスク(*)は、syslogdに任意の優先度レベル(emergやerrなどの単一レベルではなく)のエントリを送信するように指示します。
cron.* /var/log/cron.log
syslogdログファイルの操作には、journalctlなどの特別なツールは必要ありません。ただし、これをうまくやりたい場合は、各標準ログファイルにどのような情報が保持されているかを知る必要があります。
次の表に、最も一般的なsyslogdログファイルと
彼らの目的。
ファイル名 | 目的 |
---|---|
auth.log | システム認証とセキュリティイベント |
boot.log | ブート関連のイベントの記録 |
dmesg | デバイスドライバに関連するカーネルリングバッファイベント |
dpkg.log | ソフトウェアパッケージ管理イベント |
kern.log | Linuxカーネルイベント |
syslog | すべてのログのコレクション |
wtmp | ユーザーセッションを追跡します(whoコマンドとlastコマンドを介してアクセスします) |
さらに、個々のアプリケーションが独自のログファイルに書き込む場合があります。また、アプリケーションデータを受信するために作成された/ var / log /apache2/や/var/ log /mysql/などのディレクトリ全体も表示されることがよくあります。
ログのリダイレクトは、前に見た*記号(すべての優先度レベル)に加えて、8つの優先度レベルのいずれかを介して制御することもできます。
レベル | 説明 |
---|---|
デバッグ | デバッグに役立ちます |
情報 | 情報 |
通知 | 通常の状態 |
警告 | 警告が必要な条件 |
err | エラー状態 |
クリティカル | 重大な条件 |
アラート | 早急な対応が必要 |
emerg | システムが使用できません |
sysglogdを使用したログファイルの管理
デフォルトでは、syslogdは、ユーザーの助けを借りずに、ログのローテーション、圧縮、および削除をバックグラウンドで処理します。ただし、特別な処理が必要なログがある場合に備えて、それがどのように行われるかを知っておく必要があります。
単純なログにはどのような特別な処理が必要でしょうか?さて、あなたの会社がサーベンスオクスリー法やPCI-DSS法のような規制や業界標準に関連する取引報告規則に準拠している必要があるとしましょう。 ITインフラストラクチャの記録に長期間アクセスできるようにする必要がある場合は、間違いなく
キーファイルを見つける方法を知るために。
logrotateシステムの動作を確認するには、/ var /log/ディレクトリの内容の一部を一覧表示します。たとえば、auth.logファイルは3つの異なる形式で表示されます。
- auth.log- 現在アクティブで、新しい認証メッセージが書き込まれているバージョン。
- auth.log.1- ローテーションされた最新のファイルが使用できなくなりました。圧縮されていない形式で維持されているため、必要に応じてすぐに元に戻すことができます。
- auth.log.2.gz- スペースを節約するために圧縮された古いコレクション(次のリストの.gzファイル拡張子からわかるように)。
7日後、次のローテーション日が来ると、auth.log.2.gzはauth.log.3.gzに名前が変更され、auth.log.1は圧縮され、auth.log.2.gz、auth.logに名前が変更されます。 auth.log.1になり、新しいファイルが作成され、auth.logという名前が付けられます。
デフォルトのログローテーションサイクルは、/ etc/logrotate.confファイルで制御されます。このリストに示されている値は、アクティブな1週間後にファイルをローテーションし、4週間後に古いファイルを削除します。
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# packages drop log rotation information into this directory
include /etc/logrotate.
/etc/logrotate.d/ディレクトリには、個々のサービスまたはアプリケーションのログローテーションを管理するためのカスタマイズされた構成ファイルも含まれています。そのディレクトリの内容を一覧表示すると、次の構成ファイルが表示されます。
$ ls /etc/logrotate.d/
apache2 apt dpkg mysql-server
rsyslog
samba
unattended-upgrade
コンテンツを表示して、ログローテーションでどのような構成になっているのかを確認できます。
💡多くの管理者は、ログエントリを専用のリモートログサーバーにリダイレクトすることを選択します。このサーバーでは、データに必要なすべての特別な注意を払うことができます。これにより、アプリケーションサーバーをすぐに使用できるように解放し、ログデータを単一の簡単にアクセスできる中央の場所に統合できます。何百万行ものログエントリを読むよりも、自分の時間との関係が優れていることをご存知でしょう。
ここでは猫の使用は完全に避ける必要があります。画面に数千行をダンプするだけです。
ファイルを介してテキストをフィルタリングするためにgrepを使用することをお勧めします。
tail -fコマンドを使用すると、現在のログファイルをリアルタイムで読み取ることができます。これをgrepと組み合わせて、目的のテキストでフィルタリングできます。
場合によっては、古い圧縮ログにアクセスする必要があります。いつでも最初にファイルを抽出してから、grep、less、およびその他のコマンドを使用してそのコンテンツを読み取ることができますが、より適切なオプションがあります。 zcat、zlessなどのzコマンドがあり、圧縮ファイルを明示的に抽出せずに操作できます。
これは、ログイン試行の失敗の証拠をauth.logファイルで検索する明らかな例です。失敗という単語を検索すると
フレーズ認証の失敗を含む行を返します。
これを時々チェックすると、正しいパスワードを推測することでアカウントを侵害する試みを見つけるのに役立ちます。誰でも1回か2回パスワードを台無しにすることができますが、失敗した試行回数が多すぎると疑わしいものになります。
$ cat /var/log/auth.log | grep 'Authentication failure'
Sep 6 09:22:21 workstation su[21153]: pam_authenticate: Authentication failure
あなたが間違いを犯さないような管理者であれば、この検索は空になる可能性があります。ロガーと呼ばれるプログラムを使用してログエントリを手動で生成することにより、少なくとも1つの結果を保証できます。次のようなことを試してみてください:
logger "Authentication failure"
ユーザーアカウントにログインして間違ったパスワードを入力することで、本物のエラーを事前にシードすることもできます。
お分かりのように、grepがあなたに代わって仕事をしてくれましたが、結果からわかるのは、認証に失敗したことだけです。誰のアカウントが関係していたかを知ることは役に立ちませんか?一致の直前と直後の行を含めるように指示することで、grepが返す結果を拡張できます。
この例では、一致をその周囲の線と一緒に印刷します。これは、アカウントdavidを使用している誰かが、su(ユーザーの切り替え)を使用してスタジオアカウントにログインしようとして失敗したことを示しています。
$ cat /var/log/auth.log | grep -C1 failure
Sep 6 09:22:19 workstation su[21153]: pam_unix(su:auth): authentication
failure; logname= uid=1000 euid=0 tty=/dev/pts/4 ruser=david rhost=
user=studio
Sep 6 09:22:21 workstation su[21153]: pam_authenticate:
Authentication failure
Sep 6 09:22:21 workstation su[21153]: FAILED su for studio by david
次は何?
基本を知ることは一つのことであり、知識を適用することは別のことです。ただし、基礎の知識はさまざまな状況で役立ちます。
Linuxでのsyslogの基本を理解したので、ログを処理するのに少し時間がかかるかもしれません。
この記事は、DavidClinton著の『Linux in Action』からの抜粋です。 Manning Publicationによって発行されており、 30%割引を取得できます。 マニングの本でコードnlitsfoss22を使用 チェックアウト時に。
Linux in Action BookLinuxの学習をお楽しみください。