はじめに
最近 Instana で DB 関連のダッシュボードの最下部に、「さらに深いデータベースの洞察をお望みですか? DBmarlinとの統合をご検討ください。」というメッセージが出ていることにお気づきでしょうか?
Instana に加えて DBmarlin を使うことで、DB関連の可観測性・洞察がどれくらい向上するのか試してみました。
今回の「前編」では DBmarlin の導入と Instana との連携方法の紹介を、次回の「後編」では DB 関連の可観測性・洞察において得られる効果や、DBmarlin と Instana を比較してみます。
DBmarlin とは
ChatGPTで、DBmarlinに関してまとめてもらいましたので、抜粋してご紹介します。
何のために使用するツール?
DBmarlin は「データベース(DB)のパフォーマンスを可観測/監視し、性能劣化の原因を可視化して改善する」ためのソフトウェアです。
導入するメリットは?
複数のDBエンジン(MySQL, PostgreSQL, Oracle, SQL Server, IBM Db2, CockroachDB 等)およびオンプレミス/クラウドの環境を一つの製品で監視できます。
DBmarlin は「どこで時間を使っているか(SQL文、待機イベント、パラメータ、スキーマ変更など)」を詳細に分析できます。変更(スキーマ、パラメータ、実行プランなど)と性能の変化を関連付けて可視化できます。遅くなった原因が「クエリ」「インデックス」「パラメータ」「スキーマ変更」などどこにあるか把握しやすく、改善アクションを迅速にとれます。
モダンなUIで、DB専門家でなくても使いやすい設計がされており、DBA以外(開発者/DevOps/SRE)でもデータベース性能状況を理解できます。組織で「DB運用/性能監視をDBAだけに任せていて見えていない」という課題があれば、組織横断での対応がしやすくなります。
主な機能・特長は?
-
モダンUI/ダッシュボード
専門知識が浅いユーザーでも使いやすいUI設計。複数DBを横断して一元的に状況を見ることができます。 -
SQLステートメント/待機イベントのキャプチャ
実行されるSQL文テキストや待機(wait)イベントなどを収集し、「どこに時間を使っているか」を可視化。 -
変更検知(Change Tracking)
スキーマオブジェクト、データベースパラメータ、実行プラン(Explain Plan)などの変更を自動検知し、その変更が性能にどう影響したかを表示。 -
AI/インサイト/チューニング支援
DBmarlin では「AIコパイロット」機能なども打ち出しており、待機イベント・SQLチューニング・インデックス再検討などのアドバイスを出す機能があります。
「処理の詳細や変更を把握しやすく、問題個所を特定しやすい」、「使いやすい UI」、「AIによるアドバイス」といった点は、Instana にも共通するものがありますね!
さっそく、検証してみたいと思います。
今回の検証環境
Instana は SaaS 版を使い、管理対象のアプリと DB の MySQL を動かす「WordPress サーバー」、DBmarlin 本体を稼動させる「DBmarlin サーバー」は AWS EC2 で準備しました。
実はインストールして気づいたのですが、DBmarlin の Server を導入すると、必ず Agent もセットで導入されるようです。
DBmariln Agent はリモートに存在する DB から情報を収集できるため、管理対象 DB が導入されているサーバー1台ずつ Agent を展開する必要は無さそうです。今回は下図のように、「DBmarlin サーバー」上の Agent から、「WordPress サーバー」上の MySQL を管理する構成としました。
今回は DBmarlin の検証を中心にご紹介するので、管理対象アプリの WordPress 一式(Apache・MySQL)の導入と、Instana Agent の導入に関する手順紹介は省略させて頂きます。
DBmarlin Server と Agent の導入
DBmarlin のダウンロード
Instana に表示されているメッセージ「DBmarlinとの統合をご検討ください。」のリンク先を見ると、Instana ユーザーは、DBmarlin を1ライセンス永久利用できるとのこと。
今回は Instana は検証ライセンスを使っているため、DBmarlin も「Free trial」を使用しました。下記リンク先から、Linux x64 用の「Server」と「Agent」をダウンロードしました。
以下サイトに Linux 向けの Server・Agent のインストール手順があります。
特に問題なくインストールできたため、インストールの流れを簡単にご紹介します。
今回は検証のため、DBmarlin の WebUI への接続は「http」を使用する設定ですが、本番利用の場合はセキュリテイを考慮し、「https」を使用すべきかと思います。
Server インストール手順
※ 入力コマンドの応答は、重要な点をのぞき省略しています。
### パッケージリスト更新
$ sudo apt update
$ sudo apt upgrade -y
### DBmarlin 導入前提の nettools 導入
$ sudo apt-get install net-tools
### DBmarlin が使用するポートが未使用であることを確認
$ netstat -na | grep LISTEN | grep 9080
$ netstat -na | grep LISTEN | grep 9090
$ netstat -na | grep LISTEN | grep 9070
### DBmarlin ユーザー作成と、導入先ディレクト準備
$ sudo useradd dbmarlin
$ sudo passwd dbmarlin
$ sudo mkdir /opt/dbmarlin
$ sudo chown -R dbmarlin:dbmarlin /opt/dbmarlin
### ダウンロードしたファイルを展開し、Server のインストール
$ su - dbmarlin
$ tar -xvzf dbmarlin-Linux-x64-5.10.0.tar.gz -C /opt/
$ cd /op/dbmarlin
$ ./configure.sh
### インストーラーが起動します。
### DBmarlin の使用条件への同意
Do you accept the agreement Y/N ? Y
### ポート設定
Set port for Nginx (current 9090): 9090
Set port for Tomcat (current 9080): 9080
Set port for PostgreSQL (current 9070): 9070
### サイズ指定。管理対象1のため、「xsmall」選択
1) XSmall
2) Small
3) Medium
4) Large
5) XLarge
Choose the profile [1-5]: 1
XSmall profile selected
Recommended RAM is 1GB. You have 2.1GB
Continue Y/N ? Y
### 以下メッセージがでたら、インストール完了
All done!
Next run ./start.sh to startup the DBmarlin services
Then connect to http://ip-172-XX-XX-XX:9090/ in your browser
### 導入直後は、DBmarlin Server 停止状態のた、起動実施
$ cd /opt/dbmarlin
$ ./status.sh
nginx (Not running)
tomcat (Not running)
postgres (Not running)
$ ./start.sh
Starting all processes
Starting postgresql
postgresql started.
15738
(中略)
Starting tomcat
(中略)
Tomcat started.
tomcat started.
15758
Starting nginx
nginx started
15766
$ ./status.sh
nginx (Running)
tomcat (Running)
postgres (Running)
表示された URL にアクセスし、 DBmarlin の起動を確認。
Agent インストール手順
検証環境の構成で説明した通り、管理対象が導入された DB サーバーごとに Agent を展開する必要はありません。このパートでは参考まで、DBmarlin Agent の導入手順を紹介します。
※ 入力コマンドの応答は、重要な点をのぞき省略しています。
### WordPress や Instana Agent 導入後から作業
### DBmarlin 導入前提の nettools 導入
$ sudo apt-get install net-tools
### DBmarlin が使用するポートが未使用であることを確認
$ netstat -na | grep LISTEN | grep 9080
### DBmarlin ユーザー作成と、導入先ディレクト準備
$ sudo useradd dbmarlin
$ sudo passwd dbmarlin
$ sudo mkdir /opt/dbmarlin
$ sudo chown -R dbmarlin:dbmarlin /opt/dbmarlin
### ダウンロードしたファイルを展開
$ su - dbmarlin
$ tar -xvzf dbmarlin-agent-Linux-x64-5.10.0.tar.gz -C /opt/
$ cd /op/dbmarlin
### 環境変数を定義し、Agent 起動
$ export DBMARLIN_AGENT_NAME='agent1'
$ DBMARLIN_ARCHIVER_URL='http://ip-172-XX-XX-XX:9090/archiver'
$ ./agent-start.sh
DBMARLIN_AGENT_NAME is set [agent1]
DBMARLIN_ARCHIVER_URL is set [http://ip-172-xx-xx-xx:9090/archiver]
DBMARLIN_API_KEY is not set. Defaulting to no authentication.
Starting tomcat
(中略)
tomcat started.
110127
$ ./agent-status.sh
DBmarlin agent (Running)
DBmarlin サーバーの「Agents」メニューに対象サーバーが表示されることを確認。
DBmarlin Server ・ Agent どちらもインストールに必要な手順はシンプルですし、エラー等も発生せずに作業を終えることが出来ました。
DBmarlin に管理対象 サーバー(ホスト)・DB を設定
今回の検証環境は、サーバー OS が Linux、DB が MySQL、のサーバーとなりますが、管理対象設定に必要な手順は以下サイトで紹介されています。
サーバー(ホスト)を登録する
Linux OS 側の準備
AWS EC2 の Linux サーバーへの SSH 接続は、標準では鍵認証となるため、Agent が秘密鍵「pem」ファイルを参照できるように、サーバー上に配置します。
DBmarlin へ サーバー(ホスト) を登録
「SETTINGS」 セクションの 「Hosts」 → 「Create」を実行します。
サーバーの情報を入力し、「Creaet」を押下します。
入力が必要な項目は、以下表を参考にしてください。
| 設定項目 | 内容 |
|---|---|
| Name | 任意のフリーテキスト識別子を入力して、ターゲットホストに意味のある名前を付けます。名前は一意である必要があります。 |
| Host Type | Linux を選択。 |
| Host Address | DBmarlin サーバーから接続可能なホストのホスト名または IP アドレス。 |
| SSH Port | SSH の TCP ポートを選択。 |
| Username | 接続に使用する OS ユーザー名。 |
| SSH Private Keyfile | SSH 認証用の秘密鍵(PEM ファイル)のフルパス。 |
| Agent | デフォルトのエージェントは、DBmarlin サーバーの組み込みエージェント。 |
ホストの一覧に追加したサーバーが表示されるため、「Start」を押下し「チェック(✅)」が表示されれば完了です。
「ANALYSIS」 セクションの 「Hosts」を選択し、登録したサーバーが表示されていれば情報は取得されています。どういった情報が取得されているのかは、「後編」でご案内します。
MySQL を登録する
DBmarlin 用の DB ユーザー作成
MySQL のバージョンに関連して、マニュアルに記載の手順ではエラーになる点がありました。ユーザー作成時には、「'ユーザー名'@'%'」の指定で進める必要があります。
### MySQL へログイン
$ sudo mysql -u root -p
### ユーザー作成
mysql> CREATE USER 'ユーザー名'@'%' IDENTIFIED BY 'ユーザーパスワード';
mysql> GRANT SELECT,PROCESS,SHOW DATABASES on *.* to 'ユーザー名'@'%';
mysql> GRANT REPLICATION CLIENT ON *.* to 'ユーザー名'@'%';
mysql> FLUSH privileges;
mysql> EXIT;
DBmarlin へ MySQL を登録
「SETTINGS」 セクションの 「Database Instances」 → 「Create」を実行します。
DB の情報を入力し、「Creaet」を押下します。
詳細なオプションを確認するため、「Advanced Mode」のトグルを有効化しましたが、設定は初期値の状態です。
入力が必要な項目は、以下表を参考にしてください。
| 設定項目 | 内容 |
|---|---|
| Name | 任意のフリーテキスト識別子を入力して、ターゲットデータベースインスタンスに意味のある名前を付けます。名前は一意である必要があります。 |
| Host Address | DBmarlin Agent から接続可能なホストのホスト名または IP アドレス。 |
| Instance Type | MySQL を選択。 |
| Port | MySQL の接続 TCP ポートを選択。(Instance Type 選択時に自動入力) |
| Username | 接続に使用する DB ユーザー名。 |
| Password | DB ユーザーのパスワード。 |
| Agent | デフォルトのエージェントは、DBmarlin サーバーの組み込みエージェント。 |
| Host Mappings | DB が稼動してるホストを選択。登録済みホストが表示されます。 |
DB の一覧に追加した DB が表示されるため、「Start」を押下し「チェック(✅)」が表示されれば完了です。
「ANALYSIS」 セクションの 「Database Instances」を選択し、登録した DB が表示されていれば情報は取得されています。どういった情報が取得されているのかは、「後編」でご案内します。
Instana と DBmarlin を統合
Instana と DBmarlin を統合するには、それぞれに設定が必要です。手順は以下サイトで紹介されています。
・DBmarlin 側の統合設定手順
・Instana 側の統合設定手順
DBmarlin の統合設定
Instana で API Key( API トークン)を発行します。権限は初期値のままです。発行した API Key と Instana UI へのアクセス URL を控えます。
DBmarlin の 「SETTINGS」 セクションの 「Integrations」 → 「Instana」 → 「Edit」を実行し、次の画面で「Create」を実行します。
Instana で発行した API Key や アクセス URL の情報を入力し、「Creaet」を押下します。
Instana の設定が保存されたこと、Instana の統合が有効になっていることを確認します。
Instana の統合設定
Instana の 「設定」 メニューの「グローバル設定」にある、「統合」セクションの「データベース」 → 「DBmariln」を選択します。トグルが表示されている場合は、「有効」にしてください。
※ DBmarlin との統合を一度でも有効にした場合、トグルが表示される状態になります。
DBmarlin サーバーへの接続を設定し、「保存して有効にする」を押下します。
今回の検証環境の DBmarlin サーバーは、AWS EC2 上に構築しているため、EC2 に割り当てている「パブリック IP(グローバル IP)」になります。
統合の確認
Instana と DBmarlin が統合(連携)しているか確認します。
検証用に導入した「WordPress」にログインしたり、記事を作成・編集し、アプリを動かすことで DB の MySQL に処理が発生するようにします。
Instana では「アプリケーション」の画面から、処理が発生していることを確認できます。

DBmarlin では「Database Insatnaces」の画面から、処理が発生していることを確認できます。また DB 「wordpress」に「Instana」が表示されており、統合されていることも確認できます。
まとめ
「前編」では、 DBmarlin の Server・Agent の導入と、 Instana との統合の手順を確認しました。
「後編」では、 Instana と DBmarlin では、MySQL のどういった情報が取得されているのか比較してみたり、統合(連携)されることによるメリットなどをもう少し掘り下げてみようと思います。



















