2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Instana × DBmarlin 連携メモ(2/3):PostgreSQL とテストアプリの作成・Instanaエージェントインストール

Posted at

はじめに

こちらの記事は、上記の記事を1年目新入社員が手を動かして実践してみた記録になります。
たくさんつまづいて、想像の何倍も時間がかかったので、3つのパートに分けて手順のなかで時間がかかったところを記録します。2は、記事と異なる箇所が多めです。

  1. DBmarlinサーバー構築 
  2. PostgreSQL と テストアプリの作成・デプロイ・Instanaエージェントインストール
    👈 今回はこれ
  3. DBmarlin データベース接続設定

2. PostgreSQL / Flask / Instana を動かす(VM / Ubuntu)

全体像

image.png

本章では、仮想マシン(VM)上に構築した Ubuntu 環境において、

  • 監視対象 PostgreSQL
  • PostgreSQL を利用する Python Flask テストアプリ
  • Instana Agent による可視化

を構築します。(VM/Ubuntu/venv 前提・安定版)

役割 実体
DBmarlin VM①
PostgreSQL + Flaskアプリ VM②
仮想化方式 EC2 / KVM / VMware 等
OS Ubuntu

全体手順

  1. PostgreSQLインストール
  2. テストデータの投入
  3. アプリ用DBユーザー作成
  4. Flaskテストアプリの作成
  5. Python仮想環境(venv)の作成
  6. Flaskアプリ挙動
  7. Instana Agentの導入(VM)
  8. PostgreSQL監視設定
  9. 可視化確認

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 上で確認できれば成功

スクリーンショット 2026-01-23 14.45.26.png

pythonアプリ、PostgreSQL、インフラが可視化できていることを確認できました。

まとめ

今回の学びをまとめます。

  • PostgreSQLのユーザーは用途ごとに分ける。postgresユーザーは管理用であるので、アプリごとに最小権限のユーザーを作成する。
  • instanaでのDB監視は、DBの認証情報をファイルに記載しておく。PostgreSQL側でも統計情報の取得設定を有効化する。
  • nohup・&を使って、プロセスをずっと監視するようにできる。
  • venvでpythonの中でもアプリ・用途ごとに環境を分けるようにする。開発の際に、自分がどの環境にいるかをクリアにする。
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?