prometheus/postgres

更新日: 2020-06-15 (月) 22:54:11 (414d)

prometheus

prometheus

prometheusは、モニタリングツールとして人気を博しているツール。
特徴は、pull型でモニタリングツールから監視対象のexporterに対してmetricsを収集する。
prometheus server自体がexporterとしても機能することもできる。

go言語で書かれているため、winやlinux、macなどプラットフォームで動作させることができる。
バイナリ をダウンロードして起動するだけで、すぐに動作している環境のcpuやメモリなど基本的なmetricsを収集しかしかすることができる。

postgres_exporter

databaseのexporterには以下がある。
PostgreSQLのexporterはofficialではないが、サードパーティとして実装してくれている方がいる。

PostgreSQL_Exporter.png

URL https://prometheus.io/docs/instrumenting/exporters/#databases

早速試してみる。

prometheusのインストール

単純に動かすだけであれば、インストールは非常に簡単である。
バイナリ を落としてきて起動するだけである。
(mac環境で実施)

curl -L https://github.com/prometheus/prometheus/releases/download/v2.19.0/prometheus-2.19.0.darwin-amd64.tar.gz -O
tar xzf prometheus-2.19.0.darwin-amd64.tar.gz

postgres_exporterのインストール

curl -L https://github.com/wrouesnel/postgres_exporter/releases/download/v0.8.0/postgres_exporter_v0.8.0_darwin-amd64.tar.gz -O
tar xzf postgres_exporter_v0.8.0_darwin-amd64.tar.gz

scrapeの設定

scrape_configsセクションにスクレイピング対象を追加する。
静的なスクレイピング対象の設定は、static_configというのがある。
新しいexporterが追加される時に動的にexporterを検出するには、別のconfigが良いようだ。
static_configは、対象の変更に対して再起動が必要となるためである。
参考 USE FILE-BASED SERVICE DISCOVERY TO DISCOVER SCRAPE TARGETS - on https://prometheus.io/docs/guides/file-sd/

今回は、以下のように設定する。

prometheus.yml

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'database'
    file_sd_configs:
      - files:
          - ./database/pg_metrics.yaml
        refresh_interval: 1m

/database/pg_metrics.yaml

- targets:
    - localhost:9187
  labels:
     service: database
     database: postgresql
     role: master

prometheusの起動

file_sd_configsの動的な変更読み込みを確かめるため、pg_metrics.yamlのtargetsをコメントして起動する。

./prometheus &

リフレッシュインターバルはオプションで変更できるようだ。
デフォルトでは、5mとなっているが、ここでは1mとした。

# Refresh interval to re-read the files.
[ refresh_interval: <duration> | default = 5m ]

URL https://prometheus.io/docs/prometheus/latest/configuration/configuration/#triton_sd_config

postgres_exporterの起動

--auto-discover-databasesオプションをつけると、全てのデータベースに対するmetircsを収集する。
今回はテスト簡単のためにsslは使用しない。

DATA_SOURCE_NAME="postgresql://dbuser:dbpass@localhost:5432/postgres?sslmode=disable" ./postgres_exporter --auto-discover-databases &

この状態で http://localhost:9187/metrics をみると情報をテキストで確認できる。

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 4.9701e-05
go_gc_duration_seconds{quantile="0.25"} 5.2576e-05
go_gc_duration_seconds{quantile="0.5"} 5.7e-05
go_gc_duration_seconds{quantile="0.75"} 6.7389e-05
go_gc_duration_seconds{quantile="1"} 0.000166138
go_gc_duration_seconds_sum 0.000392804
go_gc_duration_seconds_count 5
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 12
...

ビュー画面

Service Discoveryでもactiveなターゲットとして表示されていることがわかる。

http://localhost:9090/graph

Prometheus_Time_Series_Collection_and_Processing_Server.png
postgres_exporter_pg_stat_activity.png

独自のmetricsの追加

postgres_exporterでは、extend.query-path オプションで指定したクエリのmetricsを追加することができる。
デフォルトにない独自のmetricsを追加した場合は、こちらに記述すると良い。
正しくクエリの追加しすぎは余計な負荷がかかるので考えてから追加する。

試しに掲示板のコメントのようなスキーマ構造のテーブルのコメント数をカウントするクエリを追加してみる。

postgres=# \d comments;
                          Table "public.comments"
   Column   |            Type             | Collation | Nullable | Default 
------------+-----------------------------+-----------+----------+---------
 comment_id | integer                     |           |          | 
 ticket_id  | integer                     |           |          | 
 user_id    | integer                     |           |          | 
 comment    | text                        |           |          | 
 created_on | timestamp without time zone |           |          | 

queries.yaml

comments:
  query: "SELECT COUNT(*) as comment_num FROM comments"
  master: true
  metrics:
    - comment_num:
        usage: "COUNTER"
        description: "Total number of comments"
  • commentsは、metricsを識別するラベル。
  • queryには、SQLを。
  • masterは、masterノードのみに適用するクエリか否か。
  • metricsには、カラム情報を。
    • comment_numは、一番目のカラム名。
    • usageは、prometheus(postgres_exporter)が値を解釈するタイプを示す。
      // nolint: golint
      const (
      	DISCARD      ColumnUsage = iota // Ignore this column
      	LABEL        ColumnUsage = iota // Use this column as a label
      	COUNTER      ColumnUsage = iota // Use this column as a counter
      	GAUGE        ColumnUsage = iota // Use this column as a gauge
      	MAPPEDMETRIC ColumnUsage = iota // Use this column with the supplied mapping of text values
      	DURATION     ColumnUsage = iota // This column should be interpreted as a text duration (and converted to milliseconds)
      )
      参考 postgres_exporter/cmd/postgres_exporter/postgres_exporter.go - on https://github.com/wrouesnel/postgres_exporter/

ドキュメントを見ると、Coreのmetricタイプは以下のようになっている。
URL METRIC TYPES - on https://prometheus.io/docs/concepts/metric_types/

上記のような設定を加えた結果が以下。
comments_comment_num という名前のmetricが追加されていることが確認できる。
namespace + metric となっている。

postgres_exporter_add_query.png

参考リンク


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
TOP | 閉じる | ダブルクリックで閉じる