Database
データベースセンサー
📚 情報ソース
このドキュメントは以下の情報源を基に作成されています:
主要ソース
補足ソース
- 各データベース公式ドキュメント: 接続設定とメトリクス情報
- 実運用環境の設定例: 本番環境でのHA構成とVault統合パターン
このセクションでは、各種データベースの監視設定を解説します。データベース監視では、パフォーマンスメトリクス、クエリ統計、接続情報などを収集します。
Snowflake
📚 公式ドキュメント: Snowflake
| com.instana.plugin.snowflake:
enabled: true
account: 'xy12345.us-east-1'
url: 'https://xy12345.us-east-1.snowflakecomputing.com'
user: 'monitoring_user'
password: 'secure_password'
role: 'ACCOUNTADMIN'
warehouse: 'COMPUTE_WH'
poll_rate: 3600 # 秒単位(デフォルト3600秒=1時間)
collectOrganizationData: true
org_poll_rate: 43200 # 組織データ収集間隔(12時間)
availabilityZone: 'Snowflake Production'
|
設定項目の説明:
- account: Snowflakeアカウント識別子
- url: SnowflakeアカウントURL
- role: 使用するロール(ACCOUNTADMIN推奨)
- warehouse: クエリ実行用ウェアハウス
- collectOrganizationData: 組織レベルのデータ収集
- org_poll_rate: 組織データの収集間隔
設定値の取得方法:
| 項目 |
取得方法 |
account |
Snowflakeコンソール > Account > Account Identifier |
url |
https://<account_identifier>.snowflakecomputing.com |
user/password |
Snowflakeで監視用ユーザーを作成 |
role |
SHOW ROLES;で確認(ACCOUNTADMIN推奨) |
warehouse |
SHOW WAREHOUSES;で確認 |
Oracle Database (リモート監視)
📚 公式ドキュメント: Oracle Database (リモート監視)
| com.instana.plugin.oracledb:
remote:
- host: 'oracle-server.example.com'
port: '1521'
databaseSID: 'ORCL'
user: 'sys as sysdba'
password: 'oracle_password'
poll_rate: 1
|
DB2
📚 公式ドキュメント: DB2
| com.instana.plugin.db2:
local:
- instance: 'db2inst1'
port: '50000'
user: 'db2inst1'
password: 'db2_password'
poll_rate: 5
databases:
- 'database1'
- 'database2'
|
設定値の取得方法:
- instance: DB2インスタンス名(db2ilistコマンドで確認)
- port: DB2ポート番号(デフォルト50000、db2 get dbm cfg | grep SVCENAMEで確認)
- user/password: 下記のSQLで監視用ユーザーを作成
- databases: 監視対象データベース名(db2 list db directoryで確認)
監視ユーザーの作成:
| -- DB2で実行
CREATE USER monitoring_user IDENTIFIED BY db2_password;
GRANT CONNECT ON DATABASE TO USER monitoring_user;
GRANT DATAACCESS ON DATABASE TO USER monitoring_user;
GRANT DBADM ON DATABASE TO USER monitoring_user;
-- または最小権限で
GRANT CONNECT ON DATABASE TO USER monitoring_user;
GRANT SELECT ON SYSIBMADM.* TO USER monitoring_user;
|
DB2 for z/OS
📚 公式ドキュメント: DB2 for z/OS
| com.instana.plugin.db2z:
remote:
- host: '192.168.1.100' # z/OSシステムのIPアドレス
port: '5040' # DDF(Distributed Data Facility)ポート
availabilityZone: 'DB2Z Remote Monitoring'
poll_rate: 60 # 秒単位
locations:
- name: 'LOCATION1' # DB2ロケーション名
user: 'DB2ADMIN' # z/OSユーザーID
password: 'password'
- name: 'LOCATION2'
user: 'DB2ADMIN'
password: 'password'
|
設定値の取得方法:
- host: z/OSシステムのIPアドレスまたはホスト名
- port: DDFポート番号(z/OS管理者に確認、通常5040または446)
- locations.name: DB2ロケーション名(-DIS DDFコマンドで確認)
- user/password: RACF/ACF2/Top Secretで定義されたz/OSユーザー
- 必要な権限: SYSADM、SYSOPR、またはMONITOR権限
AWS RDS / Aurora
📚 公式ドキュメント: MySQL | PostgreSQL
💡 注意: AWS RDS/Auroraには2つの監視方法があります:
1. CloudWatch経由(cloud.md参照)- メトリクス収集のみ
2. 直接DB接続(本セクション)- 詳細なクエリ監視、スロークエリ、接続数など
MySQL/Aurora MySQL:
| com.instana.plugin.mysql:
remote:
- host: 'mydb.abc123.us-east-1.rds.amazonaws.com'
port: '3306'
user: 'monitoring_user'
password: 'secure_password'
database: 'mysql' # システムデータベース
poll_rate: 5
availabilityZone: 'AWS RDS MySQL Production'
|
PostgreSQL/Aurora PostgreSQL:
| com.instana.plugin.postgresql:
remote:
- host: 'mydb.abc123.us-east-1.rds.amazonaws.com'
port: '5432'
user: 'monitoring_user'
password: 'secure_password'
database: 'postgres' # システムデータベース
poll_rate: 5
availabilityZone: 'AWS RDS PostgreSQL Production'
|
設定値の取得方法:
| 項目 |
取得方法 |
host |
AWS Console > RDS > データベース > エンドポイント |
port |
AWS Console > RDS > データベース > ポート(MySQL: 3306, PostgreSQL: 5432) |
user/password |
RDSで作成した監視用ユーザー(下記参照) |
database |
システムデータベース(MySQL: mysql, PostgreSQL: postgres) |
監視ユーザーの作成:
MySQL/Aurora MySQL:
| -- RDSマスターユーザーで実行
CREATE USER 'monitoring_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'monitoring_user'@'%';
GRANT SELECT ON performance_schema.* TO 'monitoring_user'@'%';
FLUSH PRIVILEGES;
|
PostgreSQL/Aurora PostgreSQL:
| -- RDSマスターユーザーで実行
CREATE USER monitoring_user WITH PASSWORD 'secure_password';
GRANT pg_monitor TO monitoring_user;
GRANT SELECT ON pg_stat_database TO monitoring_user;
|
セキュリティグループ設定:
- Instana AgentのセキュリティグループからRDSへのインバウンドルールを追加
- ポート: MySQL(3306), PostgreSQL(5432)
ベストプラクティス:
- パスワードはsecrets.mdのVault統合を使用
- 読み取りレプリカがある場合は、レプリカも監視対象に追加
- poll_rateは負荷に応じて調整(本番環境では5-10秒推奨)
実践的な使用例
シナリオ1: 本番環境でのMySQL監視(Vault統合)
本番環境では、Vaultを使用してデータベース認証情報を安全に管理します。
| # Vault統合を使用したMySQL監視
com.instana.plugin.mysql:
host: 'mysql-primary.prod.example.com'
port: 3306
database: 'production_db'
user:
configuration_from:
type: vault
secret_key:
path: 'secret/database/mysql/production'
key: 'username'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/mysql/production'
key: 'password'
poll_rate: 5 # 5秒ごとに監視
availabilityZone: 'MySQL Production Primary'
tags:
- 'production'
- 'primary'
- 'critical'
|
監視ユーザーの作成(最小権限):
| -- MySQLで実行
CREATE USER 'instana_monitor'@'%' IDENTIFIED BY 'secure_password';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'instana_monitor'@'%';
GRANT SELECT ON performance_schema.* TO 'instana_monitor'@'%';
GRANT SELECT ON mysql.* TO 'instana_monitor'@'%';
FLUSH PRIVILEGES;
|
シナリオ2: PostgreSQL高可用性構成の監視
プライマリとレプリカの両方を監視する設定:
| # プライマリデータベース
com.instana.plugin.postgresql:
host: 'postgres-primary.prod.example.com'
port: 5432
database: 'production'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/postgresql/primary'
key: 'password'
poll_rate: 5
availabilityZone: 'PostgreSQL Primary'
tags:
- 'production'
- 'primary'
- 'postgres'
# レプリカ1
com.instana.plugin.postgresql:
host: 'postgres-replica1.prod.example.com'
port: 5432
database: 'production'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/postgresql/replica'
key: 'password'
poll_rate: 10 # レプリカは監視頻度を下げる
availabilityZone: 'PostgreSQL Replica 1'
tags:
- 'production'
- 'replica'
- 'postgres'
|
PostgreSQL監視ユーザーの作成:
| -- PostgreSQLで実行
CREATE USER instana_monitor WITH PASSWORD 'secure_password';
GRANT pg_monitor TO instana_monitor;
GRANT CONNECT ON DATABASE production TO instana_monitor;
GRANT USAGE ON SCHEMA public TO instana_monitor;
|
シナリオ3: マルチデータベース環境の監視
複数のデータベースを一元管理する設定:
| # MySQL - アプリケーションDB
com.instana.plugin.mysql:
host: 'mysql.prod.example.com'
port: 3306
database: 'app_db'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/mysql/app'
key: 'password'
poll_rate: 5
availabilityZone: 'MySQL Application DB'
# PostgreSQL - 分析DB
com.instana.plugin.postgresql:
host: 'postgres.prod.example.com'
port: 5432
database: 'analytics_db'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/postgresql/analytics'
key: 'password'
poll_rate: 10
availabilityZone: 'PostgreSQL Analytics DB'
# MongoDB - ログDB
com.instana.plugin.mongodb:
hosts:
- 'mongo1.prod.example.com:27017'
- 'mongo2.prod.example.com:27017'
- 'mongo3.prod.example.com:27017'
database: 'logs_db'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/mongodb/logs'
key: 'password'
poll_rate: 10
availabilityZone: 'MongoDB Logs DB'
# Redis - キャッシュ
com.instana.plugin.redis:
host: 'redis.prod.example.com'
port: 6379
password:
configuration_from:
type: vault
secret_key:
path: 'secret/database/redis/cache'
key: 'password'
poll_rate: 5
availabilityZone: 'Redis Cache'
|
シナリオ4: Kubernetes環境でのデータベース監視
StatefulSetで動作するデータベースの監視:
| # Kubernetes内のPostgreSQL監視
com.instana.plugin.postgresql:
host: 'postgres-0.postgres-headless.database.svc.cluster.local'
port: 5432
database: 'app_db'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/k8s/database/postgres'
key: 'password'
poll_rate: 5
availabilityZone: 'Kubernetes PostgreSQL'
tags:
- 'kubernetes'
- 'statefulset'
- 'postgres'
|
シナリオ5: クラウドマネージドデータベースの監視
AWS RDS、Azure Database、Google Cloud SQLの監視:
| # AWS RDS MySQL
com.instana.plugin.mysql:
host: 'mydb.abc123.us-east-1.rds.amazonaws.com'
port: 3306
database: 'production'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/aws/rds/mysql'
key: 'password'
poll_rate: 5
availabilityZone: 'AWS RDS MySQL us-east-1'
tags:
- 'aws'
- 'rds'
- 'managed'
# Azure Database for PostgreSQL
com.instana.plugin.postgresql:
host: 'myserver.postgres.database.azure.com'
port: 5432
database: 'production'
user: 'instana_monitor@myserver' # Azure形式
password:
configuration_from:
type: vault
secret_key:
path: 'secret/azure/postgres'
key: 'password'
poll_rate: 5
availabilityZone: 'Azure PostgreSQL'
tags:
- 'azure'
- 'managed'
# Google Cloud SQL
com.instana.plugin.mysql:
host: '10.0.0.3' # プライベートIP
port: 3306
database: 'production'
user: 'instana_monitor'
password:
configuration_from:
type: vault
secret_key:
path: 'secret/gcp/cloudsql/mysql'
key: 'password'
poll_rate: 5
availabilityZone: 'GCP Cloud SQL'
tags:
- 'gcp'
- 'cloudsql'
- 'managed'
|
パフォーマンスチューニング
ポーリング間隔の最適化
データベースの負荷とモニタリング要件に応じて、ポーリング間隔を調整します。
| # 高負荷環境 - ポーリング間隔を長くする
com.instana.plugin.mysql:
poll_rate: 10 # 10秒(デフォルトは1秒)
# 低負荷環境 - より頻繁に監視
com.instana.plugin.mysql:
poll_rate: 1 # 1秒
# 分析用DB - 監視頻度を下げる
com.instana.plugin.postgresql:
poll_rate: 30 # 30秒
|
推奨設定:
| データベースタイプ |
本番環境 |
開発環境 |
分析DB |
| MySQL/PostgreSQL |
5秒 |
10秒 |
30秒 |
| MongoDB |
5秒 |
10秒 |
30秒 |
| Redis |
5秒 |
10秒 |
15秒 |
| Oracle |
10秒 |
30秒 |
60秒 |
| DB2 |
10秒 |
30秒 |
60秒 |
接続プールの設定
データベース接続数を最適化:
| # MySQL - 接続プール設定
com.instana.plugin.mysql:
host: 'mysql.example.com'
port: 3306
# 接続タイムアウト(ミリ秒)
connection_timeout: 5000
# 最大接続数(Instana Agent側では制御しない)
# データベース側で設定: max_connections = 200
|
データベース側の設定例(MySQL):
| -- my.cnf
[mysqld]
max_connections = 200
max_user_connections = 50
wait_timeout = 28800
interactive_timeout = 28800
|
クエリパフォーマンスの監視
スロークエリの監視設定:
| # MySQL - スロークエリログの有効化
# my.cnf
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2 # 2秒以上のクエリをログ
log_queries_not_using_indexes = 1
|
| # PostgreSQL - スロークエリログの有効化
# postgresql.conf
log_min_duration_statement = 2000 # 2秒以上のクエリをログ
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_statement = 'all'
|
メモリ使用量の最適化
| # MySQL - メモリ設定
# my.cnf
[mysqld]
innodb_buffer_pool_size = 8G # 物理メモリの70-80%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
|
| # PostgreSQL - メモリ設定
# postgresql.conf
shared_buffers = 2GB # 物理メモリの25%
effective_cache_size = 6GB # 物理メモリの50-75%
work_mem = 64MB
maintenance_work_mem = 512MB
|
トラブルシューティング
問題1: データベースへの接続エラー
症状:
| ERROR: Failed to connect to database: Connection refused
|
原因と解決策:
-
データベースが起動していない
| # MySQL
sudo systemctl status mysql
sudo systemctl start mysql
# PostgreSQL
sudo systemctl status postgresql
sudo systemctl start postgresql
|
-
ファイアウォールでポートがブロックされている
| # ポート確認
telnet mysql.example.com 3306
# ファイアウォール設定(CentOS/RHEL)
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
# ファイアウォール設定(Ubuntu)
sudo ufw allow 3306/tcp
|
-
データベースがリモート接続を許可していない
| -- MySQL: bind-addressの確認
-- my.cnf
bind-address = 0.0.0.0 # すべてのIPから接続許可
-- PostgreSQL: listen_addressesの確認
-- postgresql.conf
listen_addresses = '*'
-- pg_hba.conf
host all all 0.0.0.0/0 md5
|
問題2: 認証エラー
症状:
| ERROR: Access denied for user 'instana_monitor'@'host' (using password: YES)
|
解決策:
-
ユーザー名とパスワードの確認
| # Vaultから取得した値を確認
vault kv get secret/database/mysql/production
# 直接接続テスト
mysql -h mysql.example.com -u instana_monitor -p
|
-
ユーザーの権限確認
| -- MySQL
SHOW GRANTS FOR 'instana_monitor'@'%';
-- PostgreSQL
\du instana_monitor
SELECT * FROM pg_roles WHERE rolname = 'instana_monitor';
|
-
ホストベースの認証
| -- MySQL: 特定のホストからのみ接続許可
CREATE USER 'instana_monitor'@'instana-agent-host' IDENTIFIED BY 'password';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'instana_monitor'@'instana-agent-host';
|
問題3: パフォーマンスの問題
症状:
データベースの応答が遅い、CPU使用率が高い
解決策:
-
ポーリング間隔を調整
| com.instana.plugin.mysql:
poll_rate: 10 # 1秒から10秒に変更
|
-
不要なメトリクスの無効化
| # 特定のデータベースのみ監視
com.instana.plugin.mysql:
databases:
- 'production_db' # 他のDBは監視しない
|
-
インデックスの最適化
| -- MySQL: スロークエリの分析
SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
-- インデックスの追加
CREATE INDEX idx_user_email ON users(email);
|
問題4: メトリクスが収集されない
症状:
Instanaダッシュボードにデータが表示されない
解決策:
-
Agentログの確認
| # Agentログの確認
sudo journalctl -u instana-agent -f | grep -i mysql
# ログファイルの確認
tail -f /opt/instana/agent/data/log/agent.log
|
-
設定ファイルの構文チェック
| # YAML構文チェック
yamllint /opt/instana/agent/etc/instana/configuration.yaml
|
-
Agentの再起動
| sudo systemctl restart instana-agent
# 起動確認
sudo systemctl status instana-agent
|
問題5: Vault統合の問題
症状:
| ERROR: Failed to retrieve secret from Vault
|
解決策:
-
Vault接続の確認
| # Vault接続テスト
curl -k https://vault.example.com:8200/v1/sys/health
|
-
シークレットパスの確認
| # シークレットの存在確認
vault kv get secret/database/mysql/production
|
-
Vault認証の確認
| # トークンの有効性確認
vault token lookup
# AppRoleの確認
vault read auth/approle/role/instana-agent/role-id
|
問題6: レプリケーション遅延の監視
症状:
レプリカの遅延が検出されない
解決策:
| # MySQL - レプリケーション監視
com.instana.plugin.mysql:
host: 'mysql-replica.example.com'
port: 3306
# レプリケーション状態を監視
poll_rate: 5
|
| -- MySQL: レプリケーション状態の確認
SHOW SLAVE STATUS\G
-- PostgreSQL: レプリケーション状態の確認
SELECT * FROM pg_stat_replication;
|
ベストプラクティス
1. セキュリティ
- ✅ 常にVaultを使用してパスワードを管理
- ✅ 最小権限の原則に従う
- ✅ 監視用ユーザーには読み取り専用権限のみ付与
- ✅ SSL/TLS接続を使用
- ✅ 定期的にパスワードをローテーション
2. パフォーマンス
- ✅ 本番環境では poll_rate を 5-10秒に設定
- ✅ 不要なデータベースは監視対象から除外
- ✅ 接続プールを適切に設定
- ✅ スロークエリログを有効化
3. 高可用性
- ✅ プライマリとレプリカの両方を監視
- ✅ フェイルオーバー時の自動切り替えを考慮
- ✅ 複数のAvailability Zoneを使用
- ✅ タグを使用して環境を識別
4. 運用
- ✅ 環境ごとに設定ファイルを分離
- ✅ タグを使用してデータベースを分類
- ✅ アラート閾値を適切に設定
- ✅ 定期的にログを確認
よくある質問(FAQ)
Q1: 複数のデータベースインスタンスを監視できますか?
A: はい、configuration.yamlに複数の設定ブロックを追加することで、複数のデータベースを監視できます。
Q2: データベースのパスワード変更時の対応は?
A: Vaultを使用している場合、Vaultのシークレットを更新するだけで、Instana Agentが自動的に新しいパスワードを取得します。
Q3: クラウドマネージドデータベース(RDS、Azure Database等)も監視できますか?
A: はい、ネットワーク接続が可能であれば、クラウドマネージドデータベースも監視できます。
Q4: データベース監視がアプリケーションのパフォーマンスに影響しますか?
A: 適切に設定すれば、影響は最小限です。poll_rateを調整し、必要なメトリクスのみ収集することを推奨します。
Q5: レプリケーション遅延はどのように監視されますか?
A: Instanaは自動的にレプリケーション状態を監視し、遅延が発生した場合にアラートを発行します。
参考リンク