Metabase を導入してダッシュボードを作る~番外編:IIS でアクセス可能にする~

2022.08.18

何回かMetabase を紹介しています。

今回は紹介ではなくて、Metabase を Windows 上でサービスとして動かす方法と、IIS を使って Web アプリとして公開(とはいっても社内での公開の想定ですが。。。)する方法のメモです。

Metabase をサービスとして、起動・停止を簡単に

上記の記事で、Metabase を起動するところまで紹介しましたが、java のコマンドを実行して起動するのは面倒ですし、実際に社内のBIサーバとして利用するには非現実的です。

この記事では

  • Metabase をサービスとして起動・停止出来るようにする
  • IIS を使って、公開出来るようにする

の2つについて説明します。

Javaのアプリケーションをサービスとして動かす

Java のアプリケーションをサービスとして動かす方法を探してみたところ、いくつか見つかった中で、簡単そうだったこちらのツールを利用することにしました。

https://nssm.cc/

ツールの名前があまり良くありませんが、、、オープンソースでもありますし、インストールも不要なので、選択しました。

ダウンロードして、解凍すると、いくつかのファイルとフォルダに分かれています:

nssm

私は 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

とすると、以下のような画面が出ます。

nssm のGUI

Metabase を実行するには:

  1. Path に、Javaの実行ファイルへのパスを記載する。
  2. Startup directory に metabase.jar を配置するパスを指定する。
  3. Auruments に metabase を実行するコマンドを記載する。 ( つまり、java -jar /path/to/metabase.jar)

以上になります。私の場合のサンプルです:

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

サービスを見てみます:

metabase サービスの登録の確認

Metabase の実行

事前に、Metabaseが起動していないことを確認します。

ブラウザで http://localhost:3000 へアクセスしてみましょう。 Metabase が表示されなければ、OKです。その状態で、

サービスを右クリックして、 Metabase を開始します。

サービスの開始

サービスが開始したら、再度ブラウザで

http://localhost:3000

へアクセスします。

Metabase のサービス化成功!

これで、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

設定編集の画面が出てきますので、オプションを追加します。

追加したのは Aurguments への 「-Dlog4j.configurationFile=C:\Programs\metabase-service\log4j2.xml」の部分

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 が開くはずです:

IIS経由で Metabase を動かすことが出来ました!

まだ localhost でのアクセスだけなので、実際には他端末からアクセスできるように設定など必要ですが、Metabase 特有の話題ではないので、一旦ここまでとします。


以上、Metabase を利用するシリーズの番外編でした。

Metabase は Windows でも簡単に動かすことが出来るので、社内で手軽にBIサーバを用意して、データの活用や分析を開始することが出来ます。是非お試しください。

また、導入に関するご相談は、お気軽に弊社までお問合せ下さい。