Asterisk ログファイル

2020年8月20日 (木) 15:26時点におけるTakatyan (トーク | 投稿記録)による版 (ログファイル)


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 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はログを開き直すようです。