「Asterisk ログファイル」の版間の差分
(→自動でログをローテートする) |
|||
27行目: | 27行目: | ||
==自動でログをローテートする== | ==自動でログをローテートする== | ||
− | + | Asteriskには、内蔵のログローテート機構があります。<br> | |
+ | ===ローテートの仕方の設定=== | ||
+ | ログのローテートのファイル名の付け方をlogger.confの[general]セクションで設定できます。<br> | ||
+ | <nowiki>[general] | ||
+ | rotatestrategy=sequential</nowiki> | ||
+ | |||
+ | ; none | ||
+ | : 全くローテートを行いません。 | ||
+ | ; sequential(デフォルト) | ||
+ | : ローテートするたびに、最も新しいログファイルのファイル名の通し番号が最も大きくなるように変名します。 | ||
+ | ; rotate | ||
+ | : ローテートするたびに、過去のログファイルのファイル名の通し番号を1ずつ増やし、最も新しいログファイルの末尾の数字を0とします。 | ||
+ | ; timestamp | ||
+ | : 通し番号の代わりにタイムスタンプを使用します。 | ||
+ | |||
+ | sequentialとrotateの違いが分かりにくいですが、例えば「messages」ログファイルを今、ローテートするとして、既にmessages.0 messages.1 messages.2がある場合、 | ||
+ | ; sequential | ||
+ | : ローテートすると、messagesはmessages.3に変名されます。0~2はそのままです。 | ||
+ | ; rotate | ||
+ | : ローテートすると、messages.2はmessages.3に、messages.1がmessages.2に、messages.0がmessages.1に変名され、messagesはmessage.0に変名されます。 | ||
+ | その後、新しいmessagesが作られ、ローテート後はこの新しいmessagesに書き込まれます。 | ||
+ | |||
+ | ===古いファイルを自動で消す=== | ||
+ | varパーティションが溢れないようにするためには、古いファイルを自動で消す必要があります。<BR> | ||
+ | 古いログファイルを4世代保持しておき、古いファイルから消していくためには、[general]セクションで次のように設定します。<BR> | ||
+ | |||
+ | ''記載途中'' | ||
+ | |||
+ | 設定ファイルを変更したら、[[Asterisk CLI]]でlogger reloadを行うと変更が反映されます。 | ||
+ | |||
+ | ===ローテートの実行=== | ||
+ | |||
ログのローテートそのものは、[[Asterisk CLI]]でlogger rotateを行うと実行されます。<br> | ログのローテートそのものは、[[Asterisk CLI]]でlogger rotateを行うと実行されます。<br> | ||
2020年8月21日 (金) 00:27時点における版
Asteriskのログファイルについて
目次
ログファイル
デフォルトの設定では/var/log/asterisk/messagesに、ログレベルnotice, warning, errorが出力されます。
ログファイルの設定は/etc/asterisk/logger.confで行います。
# /etc/asterisk/logger.conf [logfiles] messages => notice,warning,error
noticeレベルログとして認証失敗も記録されるため、Asteriskをインターネットに公開していると、膨大なログが出力されます。
Fail2banを使用していても、しつこい攻撃者がいると、ログが増えていきます。
ログファイルを置くvarパーティションが溢れないようにログファイルの管理を行う必要があります。
ログの記録レベルを変更する
必要がなければ、ログの記録レベルを落として出力を減らすのも、1つの手段です。
/etc/asterisk/logger.confのlogfilesセクションにて、上記の例にならいログレベルをカンマ区切りで記載します。
レベルとしてはdebug, trace, notice, warning, error, verbose, dtmf, fax, securityが記載できます。ログレベルとして「*」を使用すると、全ログレベルを意味します。
また、ログレベルの前に[json]を付与するとJSON出力が可能です。
full-json => [json]debug,verbose,notice,warning,error,dtmf,fax
警告:debugログレベル及びこれを含む*ログレベルを使用すると、極めて多量のログが出力されます。運用モードではdebugログを出力しないことを強く勧めます!
Fail2banを使用している場合は、ログ出力のレベルを変更すると動作に影響を及ぼす恐れがあります。注意して変更してください。
設定ファイルを変更したら、Asterisk CLIでlogger reloadを行うと変更が反映されます。
自動でログをローテートする
Asteriskには、内蔵のログローテート機構があります。
ローテートの仕方の設定
ログのローテートのファイル名の付け方をlogger.confの[general]セクションで設定できます。
[general] rotatestrategy=sequential
- none
- 全くローテートを行いません。
- sequential(デフォルト)
- ローテートするたびに、最も新しいログファイルのファイル名の通し番号が最も大きくなるように変名します。
- rotate
- ローテートするたびに、過去のログファイルのファイル名の通し番号を1ずつ増やし、最も新しいログファイルの末尾の数字を0とします。
- timestamp
- 通し番号の代わりにタイムスタンプを使用します。
sequentialとrotateの違いが分かりにくいですが、例えば「messages」ログファイルを今、ローテートするとして、既にmessages.0 messages.1 messages.2がある場合、
- sequential
- ローテートすると、messagesはmessages.3に変名されます。0~2はそのままです。
- rotate
- ローテートすると、messages.2はmessages.3に、messages.1がmessages.2に、messages.0がmessages.1に変名され、messagesはmessage.0に変名されます。
その後、新しいmessagesが作られ、ローテート後はこの新しいmessagesに書き込まれます。
古いファイルを自動で消す
varパーティションが溢れないようにするためには、古いファイルを自動で消す必要があります。
古いログファイルを4世代保持しておき、古いファイルから消していくためには、[general]セクションで次のように設定します。
記載途中
設定ファイルを変更したら、Asterisk CLIでlogger reloadを行うと変更が反映されます。
ローテートの実行
ログのローテートそのものは、Asterisk CLIでlogger rotateを行うと実行されます。
そこで、systemdの下で定期的にログローテートを行うためのユニットファイルの一例を示します。
# /etc/systemd/system/asterisk-logrotate.service [Unit] Description=Asterisk log rotate Requires=asterisk.service [Service] Type=simple #User=asterisk #Group=asterisk ExecStart=/usr/sbin/asterisk -rx 'logger rotate'
# /etc/systemd/system/asterisk-logrotate.timer [Unit] Description=Asterisk log rotate timer [Timer] OnCalendar=Mon *-*-* 04:00:00 RandomizedDelaySec=300 Persistent=true [Install] WantedBy=timers.target
設定したら、systemdにユニットファイルをリロードさせ、タイマーを始動します。
# systemctl daemon-reload # systemctl start asterisk-logrotate.timer # systemctl enable asterisk-logrotate.timer
手動で1回ローテートしてみようと思う場合、次を実行します。
# systemctl start asterisk-logrotate.service
外部の機構によりログをローテートする
上記はAsterisk内蔵のログローテート機構によるローテートを説明しました。logrotate等、外部のログローテートツールを使用してログローテートを行う方法もあります。
その場合の詳細は割愛しますが、voip-info.org等には参考となる情報があるようです。
外部のログローテートツールによる場合でも、ローテート後にはCLIからlogger reloadを実行すればAsteriskはログを開き直すようです。