Pi-hole広告ブロックDNSの肥大したログの整理と抑制

公開 | 更新 

Alpine Linux仮想マシンに構築した Pi-hole 広告ブロックDNSを自宅で運用して3ヶ月が経過、早くもストレージを埋め尽くされそうになっていたことに気づき、慌てて logrotate を導入したり、 SQLite DBへのクエリログ保持期間を短く設定しました。

運用3ヶ月で肥大したログとDB

Prometheus(関連記事はこちら)で監視中のダッシュボードで、他のノードに比べてストレージの使用率が高くなっているのが、このPi-hole仮想マシンです。

図1.Prometheus Grafanaダッシュボード

図1.Prometheus Grafanaダッシュボード

ターミナルを開いて現在の状況を確認。

元々数GBしか割り当てていないシステムですが、この短期間にすくすく成長したファイルは何なのか、システム内の大容量ファイルを検索。

これを元に対処すべきファイルを以下にピックアップ。大きく分けてPi-holeのSQLite DBファイルと、Pi-holeとPrometheusエクスポータのログファイル群です。

まず、pihole-FTL.dbはPi-holeのWebUIにある Long-term Data 機能で閲覧可能なクエリログです。

図2.Pi-hole Long-term Data

図2.Pi-hole Long-term Data

さらに、Pi-holeのWebUIでは ToolsTail FTL.log でpihole-FTLサービスのログファイルを、

図3.Pi-hole Tail FTL.log

図3.Pi-hole Tail FTL.log

ToolsTail pihole.log でクエリの生ログが閲覧可能です。

図4.Pi-hole Tail pihole.log

図4.Pi-hole Tail pihole.log

もう1つのlighttpdはPi-holeのWebサーバ機能のログ。ついでにprometheus関連では、Pi-holeに特化したエクスポータがかなり話好きなのでこれも併せて対処します。

 

Pi-holeデータベースの抑制

Pi-holeがデータべースにクエリログを保持する日数は、設定ファイル /etc/pihole/pihole-FTL.conf の MAXDBDAYS パラメータにセットすれば良さそう(デフォルトは 365 )。

但し、ドキュメンテーションによると、別のパラメータ MAXNETAGE がデフォルトで MAXDBDAYS の値を参照するので、過去のIPアドレスやホスト名の保持日数を司るこのパラメータは、あらためて長めの数字をセットしました。

これでサービスを再起動すれば、追加した設定が反映されるはず。

サービスログ FTL.log にも確かに追加した設定が見受けられるも、肝心のSQLite DBファイルは小さくならなず、むしろ微増。

SQLite DBファイルを取り出してDB Browser for SQLiteで確認すると、一番古いレコードのUNIXタイムスタンプは確かに7日前のもの。

図5.SQLite DB Browser

図5.SQLite DB Browser

さらに調べて見つけたのがこちらのフォーラムTipでは、Pi-holeの設定に依らずSQLite DBにSQL文を直接発行して、指定日数より古いレコードを消しているのですが、 DELETE 文に VACUUMを発行していました。

早速、Alpine Linuxにsqliteパッケージをインストールの後、サービスを止めて VACUUM 文を試してみると、劇的に小さくなりました。

Pi-holeがレコードを削除する際に VQCUUM しないのなら、 MAXDBDAYS でいくら抑制してもまたSQLite DBファイルサイズが増えるのはおそらく必定。またしばらく様子を見て、必要なら次のようなクリーンアップスクリプトを定期的に実行するようスケジュールジョブに登録するつもり。

 

logrotateを導入して各種ログを抑制

SQLite DBに続いてログファイルの抑制には、logrotateを導入します。

手順は以前、Alpine LinuxベースのUnbound DNSを構築した時と同じ。

パッケージをインストールすると、 /etc/periodic/daily に起動スクリプトが配置されます。

各種ログローテーション定義のうちlighttpdは、logrotateインストール時にセットされた模様。

そして、Pi-holeの公式GitHubにlogrotateのテンプレートが用意されているので、

[blogcar url=”https://github.com/pi-hole/pi-hole/blob/master/advanced/Templates/logrotate”]

これを元に、残るPi-holeとPrometheusのログローテーション定義を次のように記述。

 

なお、cronを再起動させただけではうまくlogrotateしてくれず、システムログには毎時Permission Errorが吐出。

最終的にはシステムを一度再起動させることで、この不具合は解消され、logrotateも機能するようになりました。

これによりシステムストレージも、使用率75%から28%へ大きく減少して一安心です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA