さくらのクラウドでは、MySQL、PostgreSQL、MariaDB などのマネージドDBサービス(DBアプライアンス)を簡単に利用できます。
Web管理画面上で直接ログを確認可能ですが、運用規模の拡大に伴い、「アプリケーションログと合わせて一元的に管理したい」「監査要件に対応するため外部ストレージにログを保管したい」といったご要望が生じるケースもあります。
そんなときに便利なのが syslog転送機能 です。
現在データベースエンジンがMariaDBの場合のみ利用できますが、
DBアプライアンスから任意のサーバにログを転送し、保存することが可能になります。
今回は、この機能を実際に試し、仮想サーバ上の rsyslog に保存してみた手順を紹介します。
前提として、さくらのクラウド上の仮想サーバ(OS: Almalinux9 )とDBアプライアンス間の接続ができる状態とします。
DBアプライアンス側の設定手順
1. コントロールパネルさくらのクラウドの管理画面で対象の DBアプライアンスを開きます。
2. 設定タブから「syslog転送」を選択し「追加」を選択します。
3. 以下項目が表示されるため、各項目を選択します。
Facility : ログ送信時のファシリティを local1 , local2 , local3 から選択します。
IPAddress : syslogサーバのIPアドレスを指定します。
LogFile: RDBMSが出力するログファイルから転送対象のログを指定します。
Severity level : 転送対象とする最低ログレベルを指定します。
仮想サーバ側の設定(例: Almaliux9)
1. rsyslogのインストールを行います。
仮想サーバ側の設定(例: Ubuntu / CentOS)
rsyslogの準備
# CentOS / RHEL 系
sudo dnf install -y rsyslog
2. UDPポートを開放します。/etc/rsyslog.d/remote.conf に以下を追加します。
※DB_APPLIANCE_IP は実際のDBアプライアンスのプライベートIPアドレスに置き換えてください。
# UDP受信有効化
module(load="imudp")
input(type="imudp" port="514")
## DBアプライアンス専用のログ保存先を定義
if ($fromhost-ip == "DB_APPLIANCE_IP") then {
action(type="omfile" file="/var/log/dbappliance.log")
stop
}
3. rsyslogを再起動し、ファイアウォールの設定を行います。
# rsyslogを再起動
sudo systemctl enable rsyslog
sudo systemctl restart rsyslog
ファイアウォールの設定
sudo firewall-cmd --add-port=514/udp --permanent
sudo firewall-cmd --reload
動作確認
今回はsyslog転送が有効になったかを確認するために、一度DBアプライアンスを再起動し、
サーバー側で起動ログが転送されてきているか確認したところ、問題なくログが転送されていました。
上記設定SQLエラーで表示されない場合、
データベースのパラメータ設定で、log_warningsの値が、Warningsなどになっているかもしれないので、
None等に変更してみて動作を確認してみてください。