Metricbeat(Elastic Stack)でPostgreSQLのメトリクスを収集する


はじめに

Metricbeat(Elastic Stack)を用いてPostgreSQLのメトリクスを収集し、Kibanaのダッシュボードで確認します。

環境

以下の環境で試しています。

  • CentOS 7.5
  • Elasticsearch 7.8
  • Kibana 7.8
  • Metricbeat 7.8

ElasticsearchとKibanaは以下の投稿で構築した環境を利用しています。

Metricbeatのインストール

Metricbeatのインストールは以下の公式ドキュメントを参考に実施します。

まずはRPMをダウンロードし、インストールします。

# curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.8.1-x86_64.rpm
# rpm -vi metricbeat-7.8.1-x86_64.rpm

PostgreSQLからメトリクスを収集するモジュールを有効にします。デフォルトで、この他にシステムメトリクスが収集されます。

# metricbeat modules enable postgresql
Enabled postgresql

PostgreSQLのモジュールを登録した後は、設定を見直します。
今回は以下のように設定しました。

# vi /etc/metricbeat/modules.d/postgresql.yml 


- module: postgresql
  metricsets:
    - database
    - bgwriter
    - activity
    - statement
  period: 10s
  hosts: ["postgres://localhost:5432?sslmode=disable"]
  username: postgres
  password: postgres

statementメトリクスを利用するためには、pg_stat_statements拡張をPostgreSQLにインストールしておく必要があります。
以下のコマンドでインストールし、postgresql.confでモジュールを読み込むように設定します。

# CREATE EXTENSION pg_stat_statements;
#postgresql.conf
shared_preload_libraries = 'pg_stat_statements' 

次にElasticsearchとKibanaのエンドポイントを設定します。
Kibanaのエンドポイントを設定すると、サンプルKibanaダッシュボードを使用することができます。
Elasticsearchへのインデックステンプレートの登録は自動で実行されます。

# vi /etc/metricbeat/metricbeat.yml 

setup.kibana:
  host: "localhost:5601"
output.elasticsearch:
  hosts: ["localhost:9200"]

Metricbeatには、サンプルのKibanaダッシュボードがパッケージされており、以下のコマンドで作成することができます。

metricbeat setup --dashboards

最後にMetricbeatを自動起動に設定し、起動します。

# systemctl enable metricbeat
# systemctl start metricbeat

Metricbeatのログは以下に出力されます。

/var/log/metricbeat/metricbeat

Kibanaのダッシュボードでメトリクスを確認

自動でダッシュボードが登録されており、[Metricbeat PostgreSQL] Database Overviewを選択すると以下の画面が表示されます。

表示されているグラフになります。

  • Rows Fetched/Returned
  • Database Transactrions
  • Query Latency
  • Top Queries
  • Fileblock IO
  • Rows Inserted/Deleted/Updated
  • Conflict/Deadlock Rates
  • Local block cache stats
  • Shared block cache stats

なお、システムメトリクスは以下のダッシュボードで表示することができます。