はじめに
こちらの記事は、上記の記事を1年目新入社員が手を動かして実践してみた記録になります。
たくさんつまづいて、想像の何倍も時間がかかったので、3つのパートに分けて手順のなかで時間がかかったところを記録します。2は、記事と異なる箇所が多めです。
- DBmarlinサーバー構築
- PostgreSQL と テストアプリの作成・デプロイ・Instanaエージェントインストール
👈 今回はこれ - DBmarlin データベース接続設定
2. PostgreSQL / Flask / Instana を動かす(VM / Ubuntu)
全体像
本章では、仮想マシン(VM)上に構築した Ubuntu 環境において、
- 監視対象 PostgreSQL
- PostgreSQL を利用する Python Flask テストアプリ
- Instana Agent による可視化
を構築します。(VM/Ubuntu/venv 前提・安定版)
| 役割 | 実体 |
|---|---|
| DBmarlin | VM① |
| PostgreSQL + Flaskアプリ | VM② |
| 仮想化方式 | EC2 / KVM / VMware 等 |
| OS | Ubuntu |
全体手順
- PostgreSQLインストール
- テストデータの投入
- アプリ用DBユーザー作成
- Flaskテストアプリの作成
- Python仮想環境(venv)の作成
- Flaskアプリ挙動
- Instana Agentの導入(VM)
- PostgreSQL監視設定
- 可視化確認
1. PostgreSQL の導入(Ubuntu / apt)
PostgreSQL インストール
sudo apt update
sudo apt install -y postgresql postgresql-contrib libpq-dev
Ubuntu では initdb を手動で実行する必要がなかった。
PostgreSQL 起動確認
sudo systemctl start postgresql
sudo systemctl status postgresql
active (running) が確認できれば成功
psql に入れるか確認(インストール確認)
sudo -u postgres psql
postgres=# \q
postgresユーザーに切り替えて、psqlに入る。
psqlに入ると、SQL文が実行できる。
👉 psqlに入れることを確認したら、PostgreSQL 導入完了。
2. テストデータの投入
テーブル作成 & データ投入
sudo -u postgres psql
CREATE TABLE tr_test
(
test_code character varying(12),
test_date date,
test_contents character varying(50),
test_kinds character varying(1),
test_price numeric(10,0),
CONSTRAINT tr_test_pkey PRIMARY KEY (test_code)
);
INSERT INTO tr_test
SELECT lpad(i::character varying, 12, '0') AS test_code,
'2010-01-01'::date + (random() * 5000)::integer AS test_date,
format('内容%s', i) AS test_contents,
(random() * 9)::integer AS test_kinds,
(random() * 1000)::integer * 100 AS test_price
FROM generate_series(1, 100000000) AS i;
psqlに入って、SQLでデータテーブルを作成・データを挿入していく。
\q
psqlから出る。
3. アプリ用 DB ユーザー作成
DBのユーザーであるpostgresはrootユーザーのようなもの。
アプリ用に、専用のユーザーを作っていく。
sudo -u postgres psql
CREATE USER test1 WITH PASSWORD 'testpw1';
GRANT CONNECT ON DATABASE postgres TO test1;
GRANT USAGE ON SCHEMA public TO test1;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO test1;
DBにアクセスするためには、ユーザー情報・PWを必須でつける!
\q
4. Flask テストアプリの作成
ディレクトリ構成
/var/lib/postgresql/flask_test_app
├─ app.py
├─ templates/
│ └─ index.html
└─ venv/
記事のコードをコピペして、アプリを作っていきます。
この際、上記のディレクトリ構成としました。
5. Python 仮想環境(venv)の作成
sudo apt install -y python3 python3-venv python3-pip
cd /var/lib/postgresql/flask_test_app
python3 -m venv venv
source venv/bin/activate
pip install flask psycopg2-binary instana
📝つまづいたところ
-
sudo pipを使って壊した - venv と sudo を混ぜて使って、意味がわからなくなった。
- 「venv有効化 → python実行」を徹底
- venv は、アプリごとに専用の Python 実行環境を分離するための仕組み。
- Ubuntu の Python は OS 自体が利用しているため、直接ライブラリを入れると不具合の原因になるが、venv を使うことでOS 環境を汚さずに必要なライブラリだけを安全に管理できる。
6. Flask アプリ起動
⚠️ 注意点(今回の学び)
- Ubuntu には
pythonコマンドが無い - 必ず venv の python を使う
- sudo + venv は混ぜない
-
/var/lib/postgresql配下はログ権限に注意
起動手順
cd /var/lib/postgresql/flask_test_app
source venv/bin/activate
# このシェルで使う`python`を、OSのpythonからvenv内のpythonに切り替え。
nohup python app.py > /tmp/app.log 2>&1 &
# nohup →ログアウトしてもプロセス生かす
# & →バックグラウンド実行
venvのPythonで、Flaskアプリを常駐起動させる。
起動確認
curl http://localhost
HTML が返れば成功。
7. Instana Agent の導入
Instana SaaS UI から Linux ワンライナーインストーラを取得し、VM 上で実行します。
これは超簡単!
どこでコマンド実行しても指定のファイルにエージェントが入るようになってる。
curl -o setup_agent.sh https://setup.instana.io/agent
chmod 700 setup_agent.sh
sudo ./setup_agent.sh -a <key> -d <key> -t dynamic -e ingress-xxxx.instana.io:443 -j -s
8. PostgreSQL 監視設定
統計情報の有効化
Instana や DBmarlin が PostgreSQL の内部状態を可視化するために必要な統計情報を有効化する。
sudo -u postgres psql
ALTER SYSTEM SET track_activities = 'on';
ALTER SYSTEM SET track_counts = 'on';
ALTER SYSTEM SET track_io_timing = 'on';
\q
sudo systemctl restart postgresql
Instana Agent 設定
エージェントの設定ファイルで、監視したいpostgreSQLの識別・認証情報(データベースの名前、username、PW)を入力して保存。
sudo vi /opt/instana/agent/etc/instana/configuration.yaml
com.instana.plugin.postgresql:
user: 'test1'
password: 'testpw1'
database: 'postgres'
sudo systemctl restart instana-agent
9. 可視化確認
- Flask アプリ(Python)
- PostgreSQL
- VM(CPU / Disk / Network)
が Instana UI 上で確認できれば成功
pythonアプリ、PostgreSQL、インフラが可視化できていることを確認できました。
まとめ
今回の学びをまとめます。
- PostgreSQLのユーザーは用途ごとに分ける。
postgresユーザーは管理用であるので、アプリごとに最小権限のユーザーを作成する。 - instanaでのDB監視は、DBの認証情報をファイルに記載しておく。PostgreSQL側でも統計情報の取得設定を有効化する。
- nohup・&を使って、プロセスをずっと監視するようにできる。
- venvでpythonの中でもアプリ・用途ごとに環境を分けるようにする。開発の際に、自分がどの環境にいるかをクリアにする。

