
何回かMetabase を紹介しています。
今回は紹介ではなくて、Metabase を Windows 上でサービスとして動かす方法と、IIS を使って Web アプリとして公開(とはいっても社内での公開の想定ですが。。。)する方法のメモです。
Metabase をサービスとして、起動・停止を簡単に
上記の記事で、Metabase を起動するところまで紹介しましたが、java のコマンドを実行して起動するのは面倒ですし、実際に社内のBIサーバとして利用するには非現実的です。
この記事では
- Metabase をサービスとして起動・停止出来るようにする
- IIS を使って、公開出来るようにする
の2つについて説明します。
Javaのアプリケーションをサービスとして動かす
Java のアプリケーションをサービスとして動かす方法を探してみたところ、いくつか見つかった中で、簡単そうだったこちらのツールを利用することにしました。
ツールの名前があまり良くありませんが、、、オープンソースでもありますし、インストールも不要なので、選択しました。
ダウンロードして、解凍すると、いくつかのファイルとフォルダに分かれています:

私は Windows 64bit で動かしているので、win64 の中にある nssm.exe をコピーして
c:\Users\minami\programs\metabase\
の下に置きました。metabase.jar の置いてあるフォルダです。
nssm.exe の使い方は、コマンドラインより、nssm.exe のあるフォルダで
nssm install xxxxx
とすることで、 xxxxx という Windows の サービスを登録するための画面が出てきます。
そこに必要な情報を入力して、登録すると、 Windows のサービスが出来上がります。
今回は Metabase を サービスにしたいので
nssm install metabase
とすると、以下のような画面が出ます。

Metabase を実行するには:
- Path に、Javaの実行ファイルへのパスを記載する。
- Startup directory に metabase.jar を配置するパスを指定する。
- Auruments に metabase を実行するコマンドを記載する。 ( つまり、java -jar /path/to/metabase.jar)
以上になります。私の場合のサンプルです:

この状態で「Install service」をクリックすると、サービスのインストールに成功した旨のダイアログが出ます。
サービスを見てみます:

Metabase の実行
事前に、Metabaseが起動していないことを確認します。
ブラウザで http://localhost:3000 へアクセスしてみましょう。 Metabase が表示されなければ、OKです。その状態で、
サービスを右クリックして、 Metabase を開始します。

サービスが開始したら、再度ブラウザで
http://localhost:3000
へアクセスします。

これで、Metabaseの起動・停止、が簡単になりました。
Metabase のログファイル
Metabase をコマンドプロンプトから実行している間は、ログはコマンドプロンプトへ表示されますが、サービスになるとログが見れません。
外部のログファイルへ出力する必要があります。
Metabase は log4j を使っていますので、設定用 xml ファイルを用意することで、ログファイルを制御出来ます。
https://www.metabase.com/docs/latest/operations-guide/log-configuration.html
( Metabase の log4j 脆弱性への対応は、発覚後に速やかに行われています。 https://github.com/metabase/metabase/issues/19344 )
実行時のパラメタに log4j2.xml へのパスを渡せば良いとのことなので、lof4j2.xml を用意して、nssm を使ってサービスの設定を更新します。
nssm edit metabase
設定編集の画面が出てきますので、オプションを追加します。

log4j2.xml を置いた場所へのパスを、-Dlog4j.configurationFile パラメタで設定します。
log4j2.xml は、Metabase のソースからオリジナルの設定を持ってきて、 RollingFileAdapter の設定を追加しました。
https://github.com/metabase/metabase/blob/master/resources/log4j2.xml
以下、2か所追加してあります:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="%date %level %logger{2} :: %message%n%throwable">
<replace regex=":basic-auth \\[.*\\]" replacement=":basic-auth [redacted]"/>
</PatternLayout>
</Console>
<!-- ★★★★★★★★★★★★ ここから下を追加 ★★★★★★★★★★★★ -->
<RollingFile name="RollingFile" fileName="logs/metabase.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
<!-- ★★★★★★★★★★★★ ここまでを追加 ★★★★★★★★★★★★ -->
<!-- This file appender is provided as an example -->
<!--
<RollingFile name="FILE" fileName="${logfile.path}/metabase.log" filePattern="${logfile.path}/metabase.log.%i">
<Policies>
<SizeBasedTriggeringPolicy size="500 MB"/>
</Policies>
<DefaultRolloverStrategy max="2"/>
<PatternLayout pattern="%d [%t] %-5p%c - %m%n">
<replace regex=":basic-auth \\[.*\\]" replacement=":basic-auth [redacted]"/>
</PatternLayout>
</RollingFile>
-->
</Appenders>
<Loggers>
<Logger name="metabase" level="INFO"/>
<Logger name="metabase-enterprise" level="INFO"/>
<Logger name="metabase.plugins" level="DEBUG"/>
<Logger name="metabase.server.middleware" level="DEBUG"/>
<Logger name="metabase.query-processor.async" level="DEBUG"/>
<Logger name="com.mchange" level="ERROR"/>
<Logger name="org.quartz" level="INFO"/>
<Logger name="liquibase" level="ERROR"/>
<Root level="WARN">
<AppenderRef ref="STDOUT"/>
<!-- ★★★★★★★★★★★★ ここから下を追加 ★★★★★★★★★★★★ -->
<AppenderRef ref="RollingFile"/>
<!-- ★★★★★★★★★★★★ ここまでを追加 ★★★★★★★★★★★★ -->
</Root>
</Loggers>
</Configuration>
ログファイルは、metabase.jar のある場所に logs/metabase.log として作成されるようになりました。

IISで Metabase をサーブする
localhost:3000 へアクセスすれば Metabase が使えるようになりましたが、社内で全員に公開するにはWebサーバに載せる方が簡単です。
Windows で使っているので、IISを利用するのが一番簡単です。
IIS で Reverse Proxy を利用する
Metabase は Java のプロセスとして 3000 ポートで通信をしています。これを IIS に紐づけて、Webサービスとして公開をしたいので、
リバース・プロキシを利用して、IISへ来た通信を、Metabase へ紐づける必要があります。
※リバース・プロキシとは?
https://atmarkit.itmedia.co.jp/ait/articles/1608/25/news034.html
https://nodejs.keicode.com/nodejs/using-nodejs-as-webserver-with-iis.php
IISのサイト設定で、「URLの書き換え」をクリックし、「リバースプロキシ」 を選択します。

リバースプロキシの設定は、Metabase へ向けたいので

これでOKをクリックします。
http://localhost へアクセスする
ブラウザを localhost へ向けると、Metabase が開くはずです:

まだ localhost でのアクセスだけなので、実際には他端末からアクセスできるように設定など必要ですが、Metabase 特有の話題ではないので、一旦ここまでとします。
以上、Metabase を利用するシリーズの番外編でした。
Metabase は Windows でも簡単に動かすことが出来るので、社内で手軽にBIサーバを用意して、データの活用や分析を開始することが出来ます。是非お試しください。
また、導入に関するご相談は、お気軽に弊社までお問合せ下さい。