検索
連載

【Azure】App Service on Linux上の「SQLite」「zstd圧縮」で課金を増やさないコツTech TIPS

ファイルベースのDBMS「SQLite」でDBを圧縮/解凍する「zstd拡張機能」を利用する場合、デフォルトのログ出力レベルのままだと、ログの分量が増えてクラウド料金が増える恐れがある。そこでログ出力を抑えるための設定を紹介する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

Azure App ServiceでSQLite+zstd拡張によるログ増大を抑える

対象:Azure App Service、SQLite、Azureポータル、PowerShell


 Tech TIPS「【Azure】App Service on Linux上のファイルDB『SQLite』でお高いマネージドDBを置き換えてみた」では、ファイルベースのDBMS(データベース管理システム)である「SQLite」をApp Serviceで利用する方法を紹介した。

 その中で、「sqlite-zstd(zstd拡張機能)」というSQLite DBを圧縮/解凍する拡張機能で高速化する方法も説明している。ただ、zstd拡張機能はデフォルトの設定のままだと、ログ出力の量が多いため、クラウドサービスの料金が増えかねない。

 そこで本Tech TIPSでは、ログ出力の量を抑えるための方法を紹介する。

■執筆時の各種ツールのバージョン


zstd拡張機能が出力するログを確認する

 App Service上で圧縮済みのSQLite DBにクエリするためにsqlite-zstd(zstd拡張機能)をロードすると、App Serviceのコンソールログに次のようなメッセージが出力される。

2025-06-30T04:40:41.1797688Z [2025-06-30T04:40:41Z INFO  sqlite_zstd::create_extension] [sqlite-zstd] initialized



 これは、ロードされたzstd拡張機能が初期化を完了したことを表しているログである。これがログに記録されるのは、zstd拡張機能が詳細な情報をログに出力するようにデフォルトで設定されているためだ。

 このログを確認するには、Azureポータルで対象のApp Serviceのページを開き、左側の[監視]−[ログストリーム]を選択する。クライアントからのアクセスでDBへのクエリが生じるたびに上記のログが出力されているはずだ。

zstd拡張機能のログをApp Serviceの「ログストリーム」で確認しているところ
zstd拡張機能のログをApp Serviceの「ログストリーム」で確認しているところ
これはAzure ポータルで対象のApp Serviceのページを開き、[監視]−[ログストリーム]を選択したところ。右ペインに表示されているApp Serviceのコンソールログに、zstd拡張機能の初期化完了を表すメッセージが記録されていることが分かる。基本的にSQLite DBに接続するたびに1行ずつ追加されるため、ログの量は相当増えることになる。

 Azure Log Analyticsのようなログ分析サービスにApp Serviceのコンソールログを送信/蓄積している場合、上記のようなログ出力をそのまま放置していると、月々の課金が増えてしまう恐れがある。普段はエラー発生のログだけに留め、必要なときだけ詳細な情報が出力されるようにして、コストを抑えたいところだ。

【Azureポータル】zstd拡張機能が出力するログを減らすには

 zstd拡張機能のログを減らすには、App Serviceの環境変数のアプリ設定で、名前が「SQLITE_ZSTD_LOG」、値が「error」という変数を追加して、ログ出力をエラー発生だけに留めるようにする。Azureポータルでの設定手順は以下の通りだ。

【Azureポータル】zstd拡張機能が出力するログを減らす(1/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(1/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(2/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(2/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(3/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(3/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(4/4)
【Azureポータル】zstd拡張機能が出力するログを減らす(4/4)

 上記画面にある通り、アプリ設定を変更するとApp Serviceが再起動することがあるので、上記の変更を実行するタイミングに注意しよう。

 元に戻す、すなわちログ出力のレベルを詳細情報に戻すには、値を「error」から「info」に変更する。デバッグ情報まで出力させたい場合は「debug」を指定すればよい。

【PowerShell】zstd拡張機能が出力するログを減らすには

 PowerShellでもzstd拡張機能のログ出力レベルを変えることは可能だ。Azure PowerShellのコマンドレットを使って、環境変数のアプリ設定などを変更すればよい。

# ファイル名: Set-ZSTDLogLevel.ps1

[CmdletBinding()]
param(
  [Parameter(Mandatory, HelpMessage = "SQLite向けのzstd拡張機能のログ出力レベル。「error」「info」「debug」")]
  [ValidateSet("error", "info", "debug")][string]$ZSTDLogLevel,

  [Parameter(HelpMessage = "ログ出力レベルの設定をデプロイスロット固有にするか否か。デフォルトは「$false」すなわち固有にしない")]
  [bool]$Sticky = $false,

  [Parameter(Mandatory, HelpMessage = "対象のAzure App Serviceのリソース名")]
  [string]$Name,

  [Parameter(Mandatory, HelpMessage = "対象のAzure App Serviceのリソースグループ名")]
  [string]$ResourceGroupName
)

# zstd拡張機能のログ出力レベルを指定するためのアプリ設定名(環境変数名)
$ZSTDLogLevelEnvName = "SQLITE_ZSTD_LOG"

# アプリ設定を取得
$App = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $Name

# 各アプリ設定がデプロイスロット固有かどうかの設定を取得
$SlotConfigName = Get-AzWebAppSlotConfigName `
  -ResourceGroupName $ResourceGroupName -Name $Name

# 取得に失敗したらエラーで終了
if (-not ($App -and $SlotConfigName)) {
  Write-Error "指定されたリソースグループ「$ResourceGroupName」内にアプリ「$Name」が見つかりませんでした。"
  exit 1
}

# アプリ設定をハッシュテーブルに変換
$LastAppSettings = $App.SiteConfig.AppSettings # 従来(既存)の設定を取得
$NewAppSettings = @{} # 新たなアプリ設定(ハッシュテーブル)
$LastAppSettings | ForEach-Object {
  $NewAppSettings[$_.Name] = $_.Value # コピー
}
# zstd拡張機能のログ出力レベルのみ、新しい値に更新
$NewAppSettings[$ZSTDLogLevelEnvName] = $ZSTDLogLevel

# スロット固有のアプリ設定名一覧をハッシュテーブルに変換
$LastAppSettingNames = $SlotConfigName.AppSettingNames # 従来(既存)
$NewAppSettingNames = @() # 新たなアプリ設定名一覧(配列)
$LastAppSettingNames | Where-Object { $_ } | ForEach-Object {
  $NewAppSettingNames += $_ # 有効なアプリ設定名のみコピー
}
# 指定されたパラメーターに応じてアプリ設定名一覧を修正
if ($Sticky) {
  # スロット固有にするなら、ログ出力レベルのアプリ設定名を一覧に追加
  $NewAppSettingNames = ($NewAppSettingNames + $ZSTDLogLevelEnvName) | `
    Select-Object -Unique # 重複を排除
} else {
  # スロット固有にしないなら、一覧からログ出力レベルのアプリ設定名を削除
  $NewAppSettingNames = $NewAppSettingNames -ne $ZSTDLogLevelEnvName
}

# 新たなアプリ設定をApp Serviceに適用
Set-AzWebApp -AppSettings $NewAppSettings `
  -ResourceGroupName $ResourceGroupName -Name $Name  
Set-AzWebAppSlotConfigName -AppSettingNames $NewAppSettingNames `
  -ResourceGroupName $ResourceGroupName -Name $Name


 上記のプログラムでログ出力レベルを「error」に変えるには、次のようなコマンドラインを実行する。

.\Set-ZSTDLogLevel.ps1 -ZSTDLogLevel debug -Sticky $false -Name <App Service名> -ResourceGroupName <App Serviceのリソースグループ名>


 デプロイスロット固有の設定にするには、「-Sticky」パラメーターに「$true」を指定すること。デプロイスロット固有設定そのものについては、Tech TIPS「【Azure】App Serviceでアプリケーション設定やDB接続文字列をデプロイスロットにひも付けるには」を参照していただきたい。

 Azureポータルの場合と同じく、上記のプログラムを実行するとApp Serviceが再起動することがあるので、実行するタイミングには注意しよう。

 プログラムの注意点としては、「Get-AzWebApp」で取得したアプリ設定は、変数の型が異なるため、そのまま「Set-AzWebApp」で書き戻すことができないことが挙げられる。ハッシュテーブルに変換してから書き戻せばよい。また「Get-AzWebAppSlotConfigName」「Set-AzWebAppSlotConfigName」についても、配列に変換してから書き戻す必要がある。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.