Exporter@Prometheus¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Exporter¶
Exporterとは¶
Prometheus がプル型収集でメトリクスの元になるデータポイントを収集するためのエンドポイントとして動作する。
Prometheus はデータポイントをメトリクスとして集約する。
基本的にはデータポイントを収集したい Node 内で稼働させるが、一部の Exporter (例:外形監視の black-exporter) は、Node 外で稼働させる。
プル型収集により、アプリケーションは Prometheus の存在を知る必要がなく、関心を分離できる。収集したいメトリクスに合わせて、Exporter を Kubernetes の Node に導入する必要がある。
また、各 Exporter は待ち受けるエンドポイントやポート番号が異なっており、Prometheus が各 Exporter からメトリクスの元になるデータポイントを収集できるように、各 Node でエンドポイントやポート番号へのインバウンド通信を許可する必要がある。
確認¶
Node で稼働している Exporter を確認する。
$ ps -aux | grep exporter
Exporterのデザインパターン¶
▼ デザインパターン¶
Exporter には、Kubernetes の Node 上でどう稼働させるかに応じて、デザインパターンがある。
| タイプ | 配置方法 |
|---|---|
| DaemonSetパターン | 各Node上にDaemonSetとして配置する。 |
| Deploymentパターン | 各Node上にDeploymentとして配置する。 |
| Pod内サイドカーパターン | Pod内にサイドカーとして配置する。 |
| 埋め込み型パターン | ライブラリとして、アプリケーション内に埋め込む。 |
▼ DaemonSetパターン¶
| Exporter名 | 説明 | 待ち受けポート番号 | 待ち受けエンドポイント | メトリクス名 |
|---|---|---|---|---|
| Node Exporter | Nodeに関するメトリクスの元になるデータポイントを収集する。 | 9100 |
/metrics |
node_* |
| Process Exporter | Nodeの非コンテナのプロセスに関するメトリクスの元になるデータポイントを収集する。収集対象のプロセス名は config.yaml ファイルで設定できる。 ・https://qiita.com/kkentaro/items/c01b8cf332da893791bb |
9256 |
同上 | namedprocess_* |
▼ Deploymentパターン¶
| Exporter名 | 説明 | 待ち受けポート番号 | 待ち受けエンドポイント | メトリクス名 |
|---|---|---|---|---|
| kube-state-metrics | Kubernetesのソース単位でメトリクスの元になるデータポイントを収集する。似た名前のツールにmetrics-serverがあるが、metrics-serverはNodeとPodのみを対象としており、またapiserverとして稼働する。 ・https://tech-blog.abeja.asia/entry/2016/12/20/202631 ・https://amateur-engineer-blog.com/kube-state-metrics-and-metrics-server/ |
8080 |
同上 | kube_* |
| Blackbox Exporter | 指定したプロトコルで外形監視を実施する。外形監視のため、リクエストは一度Cluster外に出る。リクエストの成否以外にも、各種メトリクス (レスポンスタイム、HTTPステータスなど) を収集できる。 ・https://handon.hatenablog.jp/entry/2019/01/29/005935 ・https://medium.com/@lambdaEranga/monitor-kubernets-services-endpoints-with-prometheus-blackbox-exporter-a64e062c05d5 |
9115 |
同上 | |
| Elasticsearch Exporter | ElasticSearchに関するメトリクスの元になるデータポイントを収集する。 | 9114 |
同上 | |
| Kubernetes Event Exporter | Kubernetesリソースのイベントを収集する。Fluentd/FluentBitに似たことを実現できるkubernetes-eventsプラグインがある。 |
▼ Pod内サイドカーパターン¶
| Exporter名 | 説明 | 待ち受けポート番号 | 待ち受けエンドポイント | メトリクス名 |
|---|---|---|---|---|
| Nginx Vts Exporter | Nginxに関するメトリクスの元になるデータポイントを収集する。 | 9113 |
同上 | |
| Apache Exporter | Apacheに関するメトリクスの元になるデータポイントを収集する。 | 9117 |
同上 | |
| Mysqld Exporter | MySQL/MariaDBに関するメトリクスの元になるデータポイントを収集する。 | 9104 |
同上 | |
| Postgres Exporter | PostgreSQLに関するメトリクスの元になるデータポイントを収集する。 ・https://grafana.com/oss/prometheus/exporters/postgres-exporter/#metrics-usage |
9187 |
同上 | |
| Oracledb Exporter | Oracleに関するメトリクスの元になるデータポイントを収集する。 | 9121 |
同上 | |
| Redis Exporter | Redisに関するメトリクスの元になるデータポイントを収集する。 | 9121 |
同上 |
▼ 埋め込み型パターン¶
| Exporter名 | 説明 | 待ち受けポート番号 | 待ち受けエンドポイント | メトリクス名 |
|---|---|---|---|---|
| open-telemetryのSDK |
セットアップ¶
▼ チャートとして¶
チャートリポジトリから複数のチャートを一括でインストールし、Kubernetes リソースを作成する。
kube-prometheus-stack は、いくつかの Exporter をサブチャートとしてインストールしてくれる。
$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts
$ helm repo update
$ kubectl create namespace prometheus
$ helm install <Helmリリース名> <チャートリポジトリ名>/kube-prometheus-stack -n prometheus --version <バージョンタグ>
02. MySQL Exporter (mysqld-exporter)¶
MySQL Exporterとは¶
MySQL にクエリを実行し、メトリクスとして収集する。
セットアップ¶
▼ チャートとして¶
チャートリポジトリからチャートをインストールし、Kubernetes リソースを作成する。
$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts
$ helm repo update
$ kubectl create namespace prometheus
$ helm install <Helmリリース名> <チャートリポジトリ名>/prometheus-mysql-exporter -n prometheus --version <バージョンタグ>
メトリクスの一覧¶
▼ 確認方法¶
PostgreSQL Exporter の場合は、Node の『127.0.0.1:9104/metrics』をコールすると、PromQL で使用できるメトリクスの元になるデータポイントを取得できる。
# Node内でコールする。
$ curl http://127.0.0.1:9104/metrics
...
postgres_exporter_build_info{branch="",goversion="go1.15.8",revision="",version="0.0.1"} 1
...
03. PostgreSQL Exporter¶
PostgreSQL Exporterとは¶
PostgreSQL にクエリを実行し、メトリクスとして収集する。
メトリクスの一覧¶
▼ 確認方法¶
PostgreSQL Exporter の場合は、Node の『127.0.0.1:9187/metrics』をコールすると、PromQL で使用できるメトリクスの元になるデータポイントを取得できる。
# Node内でコールする。
$ curl http://127.0.0.1:9187/metrics
...
mysqld_exporter_build_info{branch="HEAD",goversion="go1.12.7",revision="48667bf7c3b438b5e93b259f3d17b70a7c9aff96",version="0.12.1"} 1
...
PromQLを使用したメトリクス分析¶
▼ PostgreSQLのプロセスのステータス¶
PostgreSQL のプロセスのステータスを表す。
pg_up は、PostgreSQL のプロセスのステータスを表す。
正常な場合に 1、異常な場合に 0 となる。
pg_up == 0
▼ PostgreSQLの連続稼働時間¶
pg_postmaster_start_time_seconds は、PostgreSQL のマスタープロセス (postmaster プロセス) の連続稼働時間を表す。
time() - pg_postmaster_start_time_seconds
▼ DBインスタンス間のデータ同期の遅延¶
PostgreSQL で、Repmgr による DB クラスターを採用している場合に、DB インスタンス間のデータ同期の遅延を表す。
pg_replication_lag は、DB インスタンス間のデータ同期にかかる時間を表す。
pg_replication_lag > 10
▼ 残骸タプルサイズ¶
DB にたまっている残骸タプルのデータサイズを表す。
pg_stat_user_tables_n_dead_tup{datname="<DB名>"}
04. Process Exporter¶
セットアップ¶
▼ バイナリとして¶
バイナリファイルをインストールする。
# GitHubのバイナリファイルのリリースページから、テキストのURLを取得する。
# tmpディレクトリ配下にダウンロードする。
$ curl -L https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz -o /tmp/process-exporter-0.7.10.linux-amd64.tar.gz
$ tar -xvf /tmp/process-exporter-0.7.10.linux-amd64.tar.gz -C /tmp
▼ チャートとして¶
執筆時点 (2023/03/26) 時点で、Process Exporter のチャートはない。
メトリクスの一覧¶
▼ 確認方法¶
Process Exporter の場合は、Node の『127.0.0.1:9256/metrics』をコールすると、PromQL で使用できるメトリクスの元になるデータポイントを取得できる。
# Node内でコールする。
$ curl http://127.0.0.1:9256/metrics
...
process_exporter_build_info{build_date="2021-03-11-03:26:58",commit_sha="d0597c841d2c9fa30ce8b6ded6251d1994822e27",golang_version="go1.16.1",version="v1.18.0"} 1
...
05. Redis Exporter¶
メトリクスの一覧¶
▼ 確認方法¶
Redis Exporter の場合は、Node の『127.0.0.1:9121/metrics』をコールすると、PromQL で使用できるメトリクスの元になるデータポイントを取得できる。
# Node内でコールする。
$ curl http://127.0.0.1:9121/metrics
...
redis_exporter_build_info{build_date="2021-03-11-03:26:58",commit_sha="d0597c841d2c9fa30ce8b6ded6251d1994822e27",golang_version="go1.16.1",version="v1.18.0"} 1
...