[Pi-hole]Dashboardの24時間表示のグラフが表示されない

4 min read読了の目安(約4300字

症状

Pi-holeのDashboard上のTotal queries over last 24 hoursClient activity over last 24 hoursのグラフが表示されない。OSの再起動後に発生。

環境

  • ハードウェア: Raspberry Pi 4 Model B
  • OS: Fedora 34 (Server Edition)
  • Pi-holeバージョン
    • Pi-hole v5.3.1
    • Web Interface v5.5
    • FTL v5.8.1
  • ソフトウェアバージョン
    • lighttpd/1.4.59 (ssl)
    • PHP 7.4.19

GitHubに報告されている同様のIssue

https://github.com/pi-hole/pi-hole/issues/3648

このIssueの報告者はRTCを使用しているためNTPサービスを停止して対処

原因

Raspberry PiにRTCがなく、OS起動時に一時的な時間のジャンプが発生するため。時刻が同期する前にpihole-FTLサービスが起動してしまい、時刻の連続性が失われてエラー発生→グラフが表示されない。

OS再起動後、NTPで正確な時刻に変更されるまでのタイムラグ

journalctl -e -u chronyd.service
(省略)

-- Boot 9e8ee208aa9444fe8a33b410eafd2b23 --
 515 09:00:40 rpi4 chronyd[704]: System clock wrong by 593007.919061 seconds
 522 05:44:08 rpi4 chronyd[704]: System clock was stepped by 593007.919061 seconds
 522 05:44:08 rpi4 chronyd[704]: System clock TAI offset set to 37 seconds
 522 05:44:09 rpi4 chronyd[704]: Selected source 133.243.238.243 (ntp.nict.jp)

pihole-FTLサービスの起動時ログ。時刻同期後からエラーが発生。

less /var/log/pihole-FTL.log
[2021-05-15 09:00:32.953 1093M] ########## FTL started! ##########

(省略)

[2021-05-15 09:00:35.779 1544/T1548] Compiled 0 whitelist and 0 blacklist regex filters for 0 clients in 2.4 msec
[2021-05-22 05:44:10.836 1544M] WARN: getOverTimeID(1621629900): 1132 is too large: 1620950700

この場合、時刻同期(09:00:40)前にpihole-FLTサービスが起動(09:00:35)していることがわかる。

OS上のRTCTimeとfake-hwclock

Fedora aarch64版向けのfake-hwclockパッケージがないため、RTCを搭載しないかぎりOS起動時の時間のジャンプが必ず発生してしまう。

timedatectlの出力
# timedatectl show
Timezone=Asia/Tokyo
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Sat 2021-05-22 05:12:08 JST
RTCTimeUSec=Fri 2021-04-16 21:01:51 JST

# timedatectl status
               Local time: 土 2021-05-22 05:13:02 JST
           Universal time: 金 2021-05-21 20:13:02 UTC
                 RTC time: 金 2021-04-16 12:02:45
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
fake-hwclockのリポジトリの有効化ができない
# dnf copr enable jorti/fake-hwclock
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.

The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.

Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.

Do you really want to enable copr.fedorainfracloud.org/jorti/fake-hwclock? [y/N]: y
エラー: このリポジトリーにはまだビルドがありませんので、今すぐ有効化できません。

一時的な対処:pihole-FTLのサービス起動を遅らせる

systemdサービスやデーモンが起動完了した後に発生しているため、依存関係や順番の入れ替えでは対処不可。そのため、pihole-FTLサービス自体の起動時間を遅延させて対処する。

pihole-FTLデーモンのスクリプトを書き換え
# vi /etc/rc.d/init.d/pihole-FTL

# Start the service
start() {
  if is_running; then
    echo "pihole-FTL is already running"
  else
    sleep 20 #← 行追加

遅延時間はNTP同期完了までにかかる時間などを考慮して、十分に余裕のある値にする。

sleep追加後、OSを再起動して動作確認

OS再起動後、NTPで正確な時刻に変更されるまでのタイムラグ

-- Boot feabcb5708764d22bd38f908d248352b --
 5月 15 09:00:36 rpi4 chronyd[714]: System clock wrong by 593669.638569 seconds
 5月 22 05:55:05 rpi4 chronyd[714]: System clock was stepped by 593669.638569 seconds
 5月 22 05:55:05 rpi4 chronyd[714]: System clock TAI offset set to 37 seconds
 5月 22 05:55:07 rpi4 chronyd[714]: Selected source 61.205.120.130 (ntp.nict.jp)

pihole-FTLサービスの起動時ログ。時刻同期後にサービスが起動しているためエラーなし。

less /var/log/pihole-FTL.log
[2021-05-22 05:55:17.417 2897M] ########## FTL started! ##########

(省略)

[2021-05-22 05:55:19.351 2899/T2903] Compiled 0 whitelist and 0 blacklist regex filters for 18 clients in 2.1 msec
[2021-05-22 05:59:41.526 2899M] Resizing "FTL-dns-cache" from 4096 to (512 * 16) == 8192 (/dev/shm: 5.0MB used, 4.1GB total, FTL uses 5.0MB)

Dashboardで正常に表示されるか確認

恒久的な対処

#3648と同じく、Raspberry Pi本体にRTCを乗せ、OS起動直後の時刻のジャンプが起こらないようにすることが望ましい。