ubuntu18 に Metabase を割としっかりインストールする

  • 25 May 2019

Metabaseを Ubuntu18 にインストールしました。起動コマンドやらログ設定やらまで書いている記事が少なかったのでメモ。

Metabase

環境

  • Ubuntu 18.04 @GCP
  • OpenJDK 1.8
  • Metabase 0.32

下準備

apt が済んだら Java をインストールします。今は OpenJDK ですね。

$ sudo apt update
$ sudo apt install openjdk-8-jdk
$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)

次に、jar ファイル置くディレクトリ掘って Metabase をダウンロードします。今回は v0.32 です。

$ sudo mkdir /opt/metabase
$ sudo wget -O /opt/metabase/metabase.jar http://downloads.metabase.com/v0.32.8/metabase.jar

この時点でもう Metabase を起動できますがもう少し整備します。

systemd に Metabase を登録

Metabase の実行は java -jar metabase.jar で出来ますが、停止、再起動などが面倒なので、systemd に Metabase を登録して使いやすくします。

まずはユニット定義ファイルを作成します。

sudo vim /etc/systemd/system/metabase.service

metabase.service の中身はこんな感じ。

[Unit]
Description=Metabase
Documentation=https://www.metabase.com/docs/latest
After=local-fs.target

[Service]
User=root
Environment="MB_DB_TYPE=h2"
Environment="MB_DB_FILE=/opt/metabase/h2.db"
WorkingDirectory=/opt/metabase
ExecStart=/usr/bin/java -Dlog4j.configuration=file:/opt/metabase/log4j.properties -Xms128m -Xmx256m -jar /opt/metabase/metabase.jar
ExecStop=/bin/kill -SIGTERM $MAINPID

SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

ユニット定義ファイルのポイントは以下の2つです。

  • 環境変数を与える
  • log4jの設定を与える

以下ひとつずつ見ていきます。

環境変数を与える

Metabase を実行する際に環境変数を2つ与えます。いずれも Metabase の設定を格納するDBの設定です。

Environment="MB_DB_TYPE=h2"
Environment="MB_DB_FILE=/opt/metabase/h2.db"

書いてあるとおりですが、MB_DB_TYPE=h2 で設定格納する DB に H2 を利用することを宣言します。これはデフォルト値なので明示しなくても多分大丈夫。

続いて MB_DB_FILE=/opt/metabase/h2.db で H2 のデータ置き場を定義します。こちらは結構重要で、デフォルトだと java コマンドの実行場所に H2 のデータファイルが作成されてしまうので明示的に設定しておきます。

log4jのプロパティファイルを読み込ませる

Metabase はデフォルトではログを吐きません。そこで Metabase 内の log4j の設定を上書きします。

ExecStart=/usr/bin/java -Dlog4j.configuration=file:/opt/metabase/log4j.properties -Xms128m -Xmx256m -jar /opt/metabase/metabase.jar

このコマンドの-Dlog4j.configuration=file:/opt/metabase/log4j.properties の部分ですね。

設定ファイルの内容は後述するので、先に systemd の再読込だけやってしまいます。

ユニット定義ファイルを読込み

作成したユニット定義を読み込ませます。

$ sudo systemctl daemon-reload
$ sudo systemctl enable metabase.service

あとは以下のコマンドで起動・停止・再起動・ステータス確認ができます。

$ sudo systemctl start metabase
$ sudo systemctl stop metabase
$ sudo systemctl restart metabase
$ sudo systemctl status metabase

log4j の設定ファイルを作成する

先ほどユニット定義ファイルで参照した log4j の設定ファイルを作成します。

sudo vim /opt/metabase/log4j.properties

内容はこちらをベースに若干書き換えます。
metabase/log4j.properties at master · metabase/metabase · GitHub

log4j.rootLogger=WARN, console, metabase, file # ← ファイル書き出しを定義

# log to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{MM-dd HH:mm:ss} \u001b[1m%p %c{2}\u001b[0m :: %m%n

# log to a file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/opt/metabase/logs/metabase.log # ← ファイル出力先
log4j.appender.file.MaxFileSize=10MB  # ← ファイル出力サイズ
log4j.appender.file.MaxBackupIndex=2
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p%c - %m%n

# customizations to logging by package

log4j.logger.metabase.driver=INFO
log4j.logger.metabase.plugins=DEBUG
log4j.logger.metabase.middleware=DEBUG
log4j.logger.metabase.models.permissions=INFO
log4j.logger.metabase.query-processor.permissions=INFO
log4j.logger.metabase.query-processor=INFO
log4j.logger.metabase.sync=DEBUG
log4j.logger.metabase.models.field-values=INFO

# TODO - we can dial these back a bit once we are satisfied the async stuff isn't so new (0.33.0+)
log4j.logger.metabase.async.util=DEBUG
log4j.logger.metabase.middleware.async=DEBUG
log4j.logger.metabase.query-processor.async=DEBUG

log4j.logger.metabase=INFO

# c3p0 connection pools tend to log useless warnings way too often; only log actual errors
log4j.logger.com.mchange=ERROR

最後にログの格納先のディレクトリを掘ります。

$ sudo mkdir /opt/metabase/logs

これで一通り設定は完了です。

サービス起動

最後にサービスを起動します。

$ sudo systemctl start metabase

/opt/metabase/

h2.db.mv.db
h2.db.trace.db

が出来ていればOKです。

port:3000 で起動しているので、ブラウザからアクセスするにはhttp://localhost:3000/ に相当するURLを叩いてください。

下記の画面が出ればOKです。

Metabase

以上です。

参考