サイトアイコン ITC Media

【活用必須】loggerコマンドでログ管理|基本から実例まで

(最終更新月:2023年5月)

✔このような方へ向けて書かれた記事となります

「Loggerコマンドって何ができるのだろうか?」

「Loggerコマンドの書き方が知りたい」

「Loggerコマンドの実例が見たい」

✔当記事を通じてお伝えすること

当記事では、Loggerコマンドの基本だけでなく、そのオプションを活用した使い方まで、具体例を用いて詳しく解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

loggerコマンドの基本

loggerコマンドの基本から見ていきましょう。

覚えておくとかなり便利なので、基本をおさえておくことが重要です。

loggerコマンドとは?

loggerコマンドは、システムログやアプリケーションログを記録するためのコマンドラインツール

システム管理者や開発者が、ログを簡単に生成、整形、出力できます。

システム監視やトラブルシューティングを効率化できるコマンドといえるでしょう。

コマンドの構文とオプション

loggerコマンドの基本構文は次の通りです。

logger [オプション] [メッセージ]

よく使われるオプションは以下の通りです。

Loggerコマンドのインストール方法

多くのLinuxディストリビューションでは、Loggerコマンドは既にインストールされています。

もしインストールされていない場合は、以下のコマンドでインストールできます。

Debian/Ubuntu

sudo apt-get install bsdutils

CentOS/RHEL

sudo yum install util-linux

環境の準備

Loggerコマンドを使用する前に、システムログが正しく設定されていることを確認してください。

一般的に、/etc/syslog.conf または /etc/rsyslog.conf にログの設定が記載されています。

適切な設定がされていれば、ログの出力先やフォーマットの変更も可能です。

loggerコマンドの使い方

loggerコマンドの使い方をご紹介します。

ひとつずつ試しながら、確認していきましょう。

メッセージの記録

loggerコマンドを使ってメッセージを記録するには、以下のようなコマンドを実行します。

logger "Hello, world!"

以下のコマンドで記録されているのが分かります。

$ grep 'hello' /var/log/syslog
May 13 09:40:52 yulikepython-HP-Desktop yulikepython: hello, world

システムログは、「/var/log/syslog」にあります。(Ubuntuの場合)

grepコマンドについてはこちらをどうぞ。

優先度の設定

loggerコマンドでメッセージの優先度を設定するには、-pオプションを使用します。

例えば、次のコマンドでは、優先度を “warning” に設定しています。

logger -p user.warning "Warning message"

タグの追加

Loggerコマンドでメッセージにタグを追加するには、-t オプションを使用します。

例えば、次のコマンドでは、メッセージに “testtag” というタグを追加しています。

logger -t testtag "これはテストです。"

タグを付けることで、タグ名で検索が可能です。

$ grep 'testtag' /var/log/syslog
May 13 09:44:16 yulikepython-HP-Desktop testtag: これはテストです。

ファイルへの出力

Loggerコマンドでメッセージをファイルに出力するには、ログ設定ファイルを編集し、適切な出力先を設定します。

例えば、/etc/rsyslog.conf に以下のような設定を追加することで、特定のタグを持つメッセージを別のファイルに出力できます。

if $programname == 'testtag' then /var/log/testtag.log

書き換えたら、以下のコマンドでログデーモンを再起動しなければなりません。

sudo systemctl restart rsyslog

標準入力からのメッセージ取得

Loggerコマンドで標準入力からメッセージを取得するには、以下のようなコマンドを実行します。

echo "Hello from stdin" | logger

以下で確認してみよう。

$ grep 'Hello from' /var/log/syslog
May 13 09:48:59 yulikepython-HP-Desktop yulikepython: Hello from stdin

パイプラインを使ったログ収集

Loggerコマンドとパイプラインを組み合わせることで、他のコマンドの出力をログに記録できます。

例えば、以下のコマンドは、mycommand の実行結果をログに記録します。

mycommand | logger -t myapp

loggerコマンドのオプション一覧

以下はloggerコマンドのオプション一覧です。

オプションを活用することで、さまざまなことができるようになります。

オプション名説明実例
-p, --priority [facility.level]メッセージの優先度を設定します。facility はログの種類(例えば、auth、cron、daemonなど)、level はログのレベル(例えば、info、notice、warningなど)を指定します。logger -p auth.info "User logged in"
-t, --tag _tag_メッセージにタグを追加します。tag は任意の文字列を指定できます。logger -t myapp "Application started"
-i, --idメッセージにプロセスIDを追加します。logger -i "This is a message with PID"
-s, --stderrメッセージを標準エラー出力にも出力します。logger -s "This is a message to stderr"
-f, --file _file_指定したファイルからメッセージを読み込みます。logger -f /path/to/message.txt
-n, --server _name_メッセージをリモートの syslog サーバーに送信します。name はサーバーの名前またはIPアドレスを指定します。logger -n 192.168.1.1 "This is a remote log message"
-P, --port _port_メッセージを送信するリモート syslog サーバーのポートを指定します。logger -n 192.168.1.1 -P 514 "This is a remote log message"
-d, --udpメッセージをUDPで送信します。デフォルトはTCPです。logger -d -n 192.168.1.1 "This is a UDP log message"
-T, --tcpメッセージをTCPで送信します。これがデフォルトの動作です。logger -T "This is a TCP log message"

応用編:Loggerコマンドを活用する具体的なシナリオ

Loggerコマンドを活用する場面について詳しくみていきます。

できることだけでなく、どのような場面で役立つかを理解しておきましょう。

システムログの監視と分析

Loggerコマンドを使用してシステムログを監視し、不審なアクティビティやエラーを検出できます。

例えば、ログファイルを定期的にチェックし、特定のパターンを検出したら通知するスクリプトを作成できるのです。

以下に、複数のコマンド・ツールを組み合わせた通知システムの例をご紹介します。

cronについて詳しく知りたい方はこちらをどうぞ。

Loggerコマンド

Loggerコマンドを使って、システムやアプリケーションの状況に応じてログを生成します。

例えば、以下のコマンドは”Critical error occurred”というメッセージをシステムログに生成します。

logger -p auth.crit "Critical error occurred"

cron

cronを使って定期的にログをチェックするスクリプトを実行します。

例えば、以下のコマンドをcrontabに追加することで、毎分システムログをチェックします。

* * * * * /path/to/your/script.sh

grepコマンド

/path/to/your/script.shというスクリプトでは、grepを使って特定のパターン(この場合は”Critical error occurred”)をシステムログから検索します。

見つかった場合は、通知を出します。

#!/bin/bash
logfile="/var/log/syslog" # ログファイルのパスを適切に変更してください
pattern="Critical error occurred"
if grep -q "$pattern" $logfile; then
    # 通知を出すコマンドを書く。例えば:
    echo "$pattern found in $logfile" | mail -s "Critical error detected" admin@example.com
fi

Logger コマンドを使って特定の状況でログを生成し、そのログを他のツールで監視します。

不審なアクティビティ・エラーの検出を自動化しているのです。

ただし、上記の例は非常に単純化したものであり、実際の状況に合わせて適切に調整する必要があります。

アプリケーションログの取得と整形

Loggerコマンドを使ってアプリケーションログを取得し、整形して出力できます。

例えば、アプリケーションのデバッグ情報をシステムログに追加したり、タイムスタンプやタグを付与して整形することなどです。

例はこちらです。

アプリケーションのデバッグ情報を含むテキストファイル(debug_info.txt)があるとします。

DEBUG: Failed to connect to database
DEBUG: Retry attempt 1
DEBUG: Retry attempt 2
DEBUG: Connection successful

このファイルから読み込んだログメッセージに、myappというタグを付けてシステムログに追加するには、以下のようなコマンドを実行します。

logger -t myapp -f debug_info.txt

このコマンドを実行すると、システムログには以下のようなメッセージが追加されます。

May 13 16:34:56 myhost myapp: DEBUG: Failed to connect to database
May 13 16:34:56 myhost myapp: DEBUG: Retry attempt 1
May 13 16:34:56 myhost myapp: DEBUG: Retry attempt 2
May 13 16:34:56 myhost myapp: DEBUG: Connection successful

logger コマンドを使うことで以下のようなメリットがあります。

このように、logger コマンドを使えば、アプリケーションのログを簡単にシステムログに追加し、整形して出力することができます。

イベント通知の自動化とカスタマイズ

Loggerコマンドを使用して、システムやアプリケーションで特定のイベントが発生した際に自動的に通知を送信できます。

以下のbashスクリプトで、、ディスクの使用量をチェックし、それが90%以上であれば、Logger コマンドを使ってシステムログに警告メッセージを記録してみましょう。

#!/bin/bash

# ディスク使用量を取得
disk_usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')

# ディスク使用量が90%以上なら警告をログに記録
if [ $disk_usage -ge 90 ]; then
    logger -p daemon.warning "Disk usage is critically high: $disk_usage%"
fi

このスクリプトをcronで定期的に実行することで、ディスク使用量が一定の閾値を超えた場合に自動的に警告が記録されます。

その後、ログの監視ツールを使用してこの種の警告を検出し、管理者に通知も可能です。

ログのリモート送信とリモート監視

以下のコマンドは、Logger コマンドの -n オプションを使用してリモートホストにログメッセージを送信します。

logger -n 192.168.1.10 -p local0.notice "This is a test log message"

このコマンドを実行すると、"This is a test log message" というメッセージが 192.168.1.10 のホストに送信されます。

送信されたメッセージは、リモートホストのシステムログに記録され、リモートホストでログの監視や分析が可能になります。

ただしこちらのでスクリプトでは、リモートホストがログメッセージを受け入れるように設定されている必要があります。

また、通信はデフォルトではUDPプロトコルを使用し、ポート514が開いている必要があります。

loggerを活用した上級者向けのテクニック

loggerを活用したより高度な実例をご覧いただきます。

ここまでの内容を理解できたなら、覚えておくことをおすすめします。

スクリプトやエイリアスを使った効率化

Loggerコマンドを使いこなすためには、スクリプトやエイリアスを利用して作業を効率化することが重要です。

例として、「~/.bashrc」 ファイルなどに、以下のようなエイリアスを定義すれば、特定のタグや優先度を付与する logger コマンドを実行できます。

alias errorlog='logger -p local0.error -t myapp'
alias infolog='logger -p local0.info -t myapp'

上記の設定を行った後、新たにターミナルを開き、source ~/.bashrc(または source ~/.bash_aliases)を実行することでエイリアスを有効化します。

これにより、以下のようなコマンドを短く書くことができます。

errorlog "This is an error message"
infolog "This is an info message"

上記のコマンドを実行すると、それぞれエラーメッセージと情報メッセージが、タグ myapp とともにローカル0のエラーログや情報ログとしてシステムログに記録されます。

エイリアスを使用することで、一般的によく使う logger コマンドを簡単に実行でき、作業の効率化が図れます。

カスタムフォーマットの作成

Loggerコマンドを使用して、カスタムフォーマットのログメッセージを作成できます。

ログ設定ファイルを編集して、出力フォーマットをカスタマイズできるのです。

ログメッセージの見やすさや分析のしやすさを向上させることができるでしょう。

トラブルシューティングとFAQ

loggerコマンドでよくあるトラブルシューティングについて見ていきます。

事前に理解しておくことで、回避できるトラブルもあるでしょう。

よくあるエラーと対処法

Loggerコマンドの使用中にエラーが発生することがあります。

その際は、エラーメッセージを確認し、適切な対処をおこなってください。

例えば、権限が不足している場合には、sudo コマンドを使用して管理者権限で実行してください。

ログの解析方法

Loggerコマンドで生成されたログを解析するには、grepやawk などのテキスト処理ツールを使用します。

これにより、特定のキーワードやパターンにマッチするログを抽出し、トラブルシューティングや分析を効率化できます。

grepコマンドについてはこちら。

awkコマンドについてはこちらです。

よくある質問と回答

Q: Loggerコマンドでリモートホストにログを送信できません。どうすればいいですか?

A: リモートホストのファイアウォール設定を確認し、必要であればポートを開放してください。また、リモートホストのログ受信設定も確認してください。

Q: Loggerコマンドで生成されたログが見つかりません。どこにあるのですか?

A: ログの出力先は、ログ設定ファイル(/etc/syslog.conf や /etc/rsyslog.conf など)で定義されています。設定ファイルを確認し、適切なパスを特定してください。

まとめ

Loggerコマンドは、システム管理者や開発者にとって重要なツールです。

ログの生成、整形、出力を簡単に行うことができ、システムの監視やトラブルシューティングを効率化できるでしょう。

当記事で紹介した内容を理解し、実践することで、Loggerコマンドの基本的な使い方をマスターできます。

さらなるスキルアップのためには、実際のシステムやアプリケーションで Loggerコマンドを活用し、経験を積むことが重要です。

参考リンク:Loggerコマンドの公式ドキュメント

[GNU Coreutils: logger invocation](https://www.gnu.org/software/coreutils/manual/html_node/logger-invocation.html)

モバイルバージョンを終了