Prometheus: Linuxからメトリクスを取得する

Node Exporterを使用してPrometheusでLinuxサーバーのメトリクスを取得する方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供するPrometheusクラウドソリューションを提供しています。主な利点は以下の通りです:

  • Alert Managerが含まれており、SlackMattermostPagerDutyなどにアラートを送信できます。
  • 無制限のメールアラートを送信できる専用メールサーバー。
  • BlackboxHTTPICMPTCPなどをプローブ。
  • オンライン設定ファイルエディタによる簡単な設定
  • ワンクリックでの手間いらずの更新
  • プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティ

時間を節約し、生活を簡素化:StackheroのPrometheusクラウドホスティングソリューションを試すのに5分しかかかりません!

Node Exporterは、*NIXカーネル(Linux、OpenBSD、FreeBSD、またはDarwin)にインストールして、Prometheusにシステムメトリクスを公開するためのソフトウェアです。サーバーのパフォーマンスとインフラの健全性を監視するための重要なコンポーネントです。

Prometheusの用語では、Node Exporterはエクスポーターとして機能し、Prometheusの設定でターゲットとして追加されます。Prometheusは、HTTPを介して定期的にTCPポート9100を使用してNode Exporterに接続し、メトリクスを取得します。

要約すると、Node ExporterはLinuxベースのシステムを監視することができます。 Windowsシステムの場合は、Windows Exporterを使用できます。

Stackhero for Prometheusの全体図Stackhero for Prometheusの全体図

Node Exporterは、そのGitHubリリースページからダウンロードできます。これは、システム上で直接実行されるバイナリとして配布されています。継続的に実行されるように設計されているため、サーバーの起動時に自動的に起動するように設定することをお勧めします。

デフォルトでは、Node Exporterは認証や暗号化なしでポート9100を世界に公開します。認証とTLS暗号化(以下参照)を追加し、ファイアウォールを設定してポート9100へのアクセスを制限し、Prometheusサーバーまたは他の許可されたIPアドレスのみが接続できるようにすることを強くお勧めします。

Ubuntuで以下の手順を実行できます:

# 最新のバージョン番号を取得するには、https://github.com/prometheus/node_exporter/releasesにアクセスしてください。
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# node_exporterをダウンロードしてインストールする
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# "node_exporter"というユーザーを作成する
sudo useradd -rs /bin/false node_exporter

# 起動時にnode_exporterを自動的に開始するsystemdサービスを作成する
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# 設定ディレクトリとファイルを作成する
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# node_exporterデーモンを開始し、そのステータスを確認する
sudo systemctl start node_exporter
sudo systemctl status node_exporter

この時点で、node_exporterバイナリはサーバー上で実行されているはずです。動作を確認するには、接続してメトリクスが返されるか確認できます:

curl http://localhost:9100/metrics

Node Exporterはポート9100をパブリックネットワークに公開します。つまり、誰でも接続してサーバーのメトリクスを取得できます! 最低限、認証とTLS暗号化を追加し(以下参照)、Prometheusサーバー以外のIPからのポート9100へのリクエストをブロックするファイアウォールを設定することを強くお勧めします。

DebianでのNode Exporterのインストールプロセスは、上記のUbuntuの方法と同じです。同じ手順に従ってください。

Node Exporterのインストール手順は、使用するシステムによって異なります。すべてのプラットフォームの詳細なドキュメントは提供されていませんが、基本的な手順は、システムに合ったバイナリをダウンロードし、起動時に開始するように設定することです。

デフォルトでは、Node Exporterは認証を行わないため、誰でも公開されたメトリクスを取得できます。アクセスを保護するために、ユーザーに対して基本認証を追加できます。

次のコマンドを使用してパスワードを生成します:

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Prometheusサーバー用に保持するクリアパスワード: ${password}"

htpasswdバイナリがない場合は、apt-get install --no-install-recommends apache2-utilsを使用してDebian/Ubuntuにインストールできます。

クリアパスワードを安全に保管してください。Prometheusの設定時に必要になります。

生成されたパスワードハッシュを持つ"prometheus"というユーザーを追加するために、設定ファイルに次の行を追加します:

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# Node Exporterを再起動する
sudo systemctl restart node_exporter

最後に、認証が正しく機能していることを確認します:

  • curl http://localhost:9100/metricsを実行すると"Unauthorized"が返されるはずです。
  • curl -u prometheus:${password} http://localhost:9100/metricsを実行するとメトリクスのリストが返されるはずです。

デフォルトでは、Node Exporterは通信を暗号化しません。これにより、前述のパスワードを含む資格情報が平文で送信されます。通信を保護するために、次のようにTLS暗号化を有効にできます。

次のコマンドを実行してTLS証明書とキーを作成します:

# TLS証明書を作成する
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

TLS設定を追加するために設定ファイルに次の行を追加し、Node Exporterを再起動します:

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# Prometheus Node Exporterを再起動する
sudo systemctl restart node_exporter

次のコマンドを使用してHTTPS経由で接続することでTLSがアクティブであることを確認できます:

curl -k -u prometheus:${password} https://localhost:9100/metrics

この方法はCA証明書を使用しないため、cURLで証明書検証をバイパスするために"-k"オプションを渡す必要があります。

Node Exporterをインストールして保護した後、Prometheusサーバーを設定して定期的にメトリクスを取得します。

Stackheroで、Prometheusサービスを選択し、「Prometheus configuration」URLに移動します。次に、scrape_configsセクションに以下を追加します:

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # "instance"をリラベルして":9100"部分を削除する
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

ファイルを保存し、Prometheusのログを確認して正常にリロードされたことを確認します(StackheroダッシュボードからPrometheusサービスを選択し、「Logs」タブをクリックしてログを表示できます)。

最後に、StackheroダッシュボードのPrometheus UIにアクセスし、Status > Targetsに移動して、Prometheusがメトリクスを取得していることを確認します。LinuxサーバーがターゲットリストにUPとして表示されるはずです。

ターゲット"myLinuxServer"がUPですターゲット"myLinuxServer"がUPです

Node Exporterから取得したメトリクスを表示するには、Stackheroダッシュボードを介して「Prometheus UI」URLを使用してPrometheusにログインするか、直接https://<prometheusDomain>/にアクセスします。

「Expression」フィールドにnode_memory_MemTotal_bytesと入力し、Enterキーを押します。すべてが正しく構成されている場合、サーバーの合計RAMがバイト単位で表示されます。

このサーバーの合計RAMは4068794368バイトで、3.78GBですこのサーバーの合計RAMは4068794368バイトで、3.78GBです

Grafanaは、Prometheusデータに基づいてダッシュボードを簡単に生成できます。Grafanaを設定してPrometheusデータを表示する詳細な手順については、Grafanaのドキュメントを参照してください。

Prometheus Node Exporterデータに基づいてGrafanaが生成したダッシュボードの例Prometheus Node Exporterデータに基づいてGrafanaが生成したダッシュボードの例