コンテンツにスキップ

Node Exporter@Prometheus

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Node Exporterの仕組み

記入中

...


02. セットアップ

バイナリとして

バイナリファイルをインストールする。

# GitHubのバイナリファイルのリリースページから、テキストのURLを取得する。
# tmpディレクトリ配下にダウンロードする。
$ curl -L https://github.com/prometheus/node_exporter/releases/download/v1.0.0/node_exporter-1.0.0.linux-amd64.tar.gz -o /tmp/node_exporter-1.0.0.linux-amd64.tar.gz
$ tar -xvf /tmp/node_exporter-1.0.0.linux-amd64.tar.gz -C /tmp

# バイナリファイルだけを移動する。
$ mv /tmp/node_exporter/node_exporter-1.0.0.linux-amd64 /usr/local/bin/node_exporter

バイナリに直接的にパラメーターを渡せる。

$ /usr/local/bin/node_exporter --web.listen-address=":9100"


チャートとして

チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。

$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts

$ helm repo update

$ kubectl create namespace prometheus

$ helm install <Helmリリース名> <チャートリポジトリ名>/prometheus-node-exporter -n prometheus --version <バージョンタグ>

複数のExporterを一括してインストールする場合、例えばkube-prometheus-stackチャートがある。

$ 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 <バージョンタグ>


03. メトリクスの一覧

確認方法

Node Exporterの場合は、Nodeの『127.0.0.1:9100/metrics』をコールすると、PromQLで使用できるメトリクスを取得できる。

# Node内でコールする。
$ curl http://127.0.0.1:9100/metrics

...

node_exporter_build_info{branch="HEAD",goversion="go1.15.8",revision="4e837d4da79cc59ee3ed1471ba9a0d9547e95540",version="1.1.1"} 1

...


04. PromQLを使用したメトリクス分析

CPU使用率

NodeのCPU使用率を取得する。

rate(node_cpu_seconds_total[1m])


メモリ使用率

Nodeのメモリ使用率を取得する。

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes


ディスク使用率

Nodeのディスク使用率を取得する。

100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100

mountpointディメンションを使用して、マウントポイント別のディスク使用率を取得する。

100 - (node_filesystem_avail_bytes{mountpoint="/var/lib/data"} / node_filesystem_size_bytes{mountpoint="/var/lib/data"} ) * 100

jobディメンションを使用して、収集対象別にのディスク使用率を取得する。

100 - (node_filesystem_avail_bytes{job="foo-node"} / node_filesystem_size_bytes{job="foo-node"} ) * 100


ディスクのI/OによるCPU使用率

ディスクのI/OによるCPU使用率 (ディスクのI/OがNodeのCPUをどの程度使用しているか) を取得する。

iostatコマンドの%util指標と同じである。

rate(node_disk_io_time_seconds_total[1m])


ディスクのI/Oレスポンスタイム

# 読み出しレスポンスタイム
rate(node_disk_read_time_seconds_total[1m]) / rate(node_disk_reads_completed_total[1m])
# 書き込みレスポンスタイム
rate(node_disk_write_time_seconds_total[1m]) / rate(node_disk_writes_completed_total[1m])


パケットの受信サイズ

Nodeのパケットの受信サイズを取得する。

node_network_receive_packets_total

これを使用して、DDOS攻撃のアラートを作成することもできる。

(rate(node_network_receive_packets_total[5m]) / rate(node_network_receive_packets_total[5m] offset 5m)) > 10