...

Node Exporter の正しい設定方法:Prometheus による Linux サーバー監視の実践ガイド

Node Exporter を適切に設定するということは、Prometheus が明確なポート、適切な Collector 設定、そして適切なセキュリティ対策を通じて、信頼性の高い Linux サーバーメトリクスを収集できるようにサービスを構築することを意味します。 この実践ガイドでは、インストール、systemdの設定、コレクターのチューニング、セキュリティ対策、Prometheusとの統合、パフォーマンス向上のコツ、そして日常運用に役立つチェック項目について解説します。.

中心点

  • インストール および独自のsystemdユニットによるサービスの起動
  • コレクター 的を絞って選択し、メトリック負荷を軽減する
  • セキュリティ ポート開放とプロキシを通じて
  • プロメテウス スクレイプ、アラート、および保存
  • パフォーマンス インターバル、シャーディング、クリーンアップを通じて

Node Exporterとは何ですか?

をセットした。 ノード 各Linuxホストにエクスポーターをインストールし、Prometheus形式のシステムメトリクスを提供します。このデーモンは、CPU負荷、システム負荷、メモリ、スワップ、ファイルシステム、ネットワーク、およびオプションでsystemdやプロセスのデータを提供します。私はHTTP経由でエンドポイントにアクセスします。 /metrics を確認すると、Prometheusが周期的に取得する、読みやすい時系列データが見られます。このアプローチは、異種混在のサーバー群に適しており、プル型モデルを採用しているため透明性が保たれます。私は、エクスポーターがデータを収集し、Prometheusが保存・分析するという明確な役割分担の恩恵を受けています。.

アーキテクチャの概要:Node ExporterとPrometheusの連携方法

ポートでエクスポーターを起動します 9100, 、コレクターを制御し、Prometheusによる定期的なスクレイピングを実行しています。プル方式を採用することで、Prometheusからホストへのアクセスのみを開放すればよいため、ファイアウォールの管理が容易になります。その後、Grafanaや類似の可視化ソリューションがPrometheusのデータを活用し、値をわかりやすく表示します。 本番環境では、責任範囲を明確に分けるために複数のPrometheusサーバーを運用しています。これにより、処理パスを短く保ち、役割を明確にし、管理の透明性を確保しています。.

Linux でのインストール:クリーンかつ再現性のある方法

私は、以下のものに対応するバイナリをダウンロードします。 リナックス-amd64 またはターゲットアーキテクチャを指定し、それを /usr/local/bin/. その後、ログイン不要のシステムユーザーを設定します。例えば、 node_exporter, そしてバイナリファイルの所有権を設定します。自動起動のために、ディレクトリ内に systemd ユニットを作成します /etc/systemd/system/ 単純なExecStartとRestartポリシーを設定して。以下のように systemctl daemon-reload サービスを有効にして起動し、ステータスを確認して、 curl http://localhost:9100/metrics 。これにより、メトリクスが正しく取得できているか、サービスが想定通りに稼働しているかを即座に確認できます。.

systemd サービスとしての Node Exporter:重要な調整項目

私はこのユニットで次のように定義しています ユーザー および Group を専用アカウントとして設定し、 Type=simple そして、明確なExecStart。次のような再起動戦略 再起動=失敗時 急な欠勤への対策になります。更新の際は、ユニットを編集するか、変更履歴が追跡できるようドロップインファイルを作成します。調整を行うたびに、 daemon-reload を停止し、サービスを再起動します。このユニットは、コンパクトで、ドキュメントが整備されており、あらゆるサーバークラスで再利用できるようにしています。.

ポートとリストアドレス:一貫性と安全性

デフォルトではポート 9100, 、ただし、ポートの重複がある場合は、プロジェクトごとにポートを変更してください。このオプション --web.listen-address ホストおよびポートの変更が可能で、例えば 127.0.0.1:9200 ローカルプロキシオフロードの場合。統一されたポート構成は、大規模なチームにおける混乱を軽減します。私はポートの変更を一元的に登録し、ファイアウォールやセキュリティリストが正しく機能するようにしています。このポートはPrometheusサーバーに限定され、インターネットへ自由に接続されることはありません。.

Collectorを的確に設定する:本当に重要なものだけ

を選ぶ。 コレクター データ量と計算時間を制御するために意識的に行います。CPU、メモリ、ファイルシステム、ネットワーク用の標準モジュールは、通常、有効なままにしておきます。必要に応じて、次のような特別なモジュールを有効にします。 --collector.systemd 或いは --collector.processes, 、サービスやプロセスをより詳細に監視するためです。不要なモジュールは、 --no-collector.X, 、これにより、Prometheusが処理しなければならない時系列データの量を減らすことができます。チーム全体で一貫性を保つため、選択した内容をサーバーの役割ごとに記録しておきます。.

Textfile Collector:独自のメトリクスを正確に取り込む

私はテキストファイルコレクターを以下の目的で使用しています 個人 標準モジュールでは提供されない指標。次のようなディレクトリ: /var/lib/node_exporter/textfile_collector 集める .promPrometheus形式のファイル。スクリプトは、一時ファイルを作成し、処理終了時にそれを上書きすることで、未完成の値が表示されないよう、アトミックに書き込みを行います。このようにして、ビジネス統計、バッチのステータス、キューの長さをPrometheusに直接取り込んでいます。 分析やダッシュボードの可読性を高めるため、命名規則を厳守しています。.

本番環境におけるセキュリティ:権限を持つ者のみがアクセス可能

私は以下の方法でポートへのアクセスを制限しています。 ファイアウォール スクレイピング元に対して一貫した対策を講じています。必要に応じて、上流に配置されたリバースプロキシがTLSまたはmTLSを処理し、認証も担当します。このサービスはroot権限なしで実行し、ログファイルやテキストファイルのパスには最小限のファイル権限のみを付与しています。 分離されたネットワーク内では、VPNやプライベートサブネットを利用してさらにセキュリティを強化しています。これにより、詳細なシステム情報は保護され、監視インフラからのみ閲覧可能となります。.

Prometheus との連携:スクレイプ、ラベル、アラート

私は prometheus.yml 次のような仕事 job_name: node 、適切な scrape_interval (多くの場合15秒)で、ターゲットやサービスディスカバリーを設定します。統一されたラベル(例:環境、役割、場所)を使用することで、フィルタリングやダッシュボードの作成が容易になります。頻繁に行う分析のためにレコーディングルールを定義し、アドホックなクエリの負荷を軽減しています。 アラートは、CPU負荷、RAM、スワップ、ディスク使用率、ネットワークエラーなどの集計メトリクスに基づいて生成されます。利用率や負荷のピークに関する入門情報については、私の簡潔な CPUおよび負荷の分析, 、実務に即して主要な指標を解説しています。.

Node Exporter自体の監視:「信頼は大切だが、確認はそれ以上に重要」

私はそれをじっと見つめている 求人状況 Prometheusに設定し、ホストが長時間スクレイピングされない場合にアラートを発動するようにしています。エクスポーターのバージョンは定期的に確認し、バグ修正や新しいモジュールを速やかに活用できるようにしています。 さらに、ホストごとの時系列データの数を計測し、コレクターの変更によって負荷が急増した場合を早期に検知できるようにしています。ダッシュボードには、直近の正常な取得日時を示すパネル通知が表示されます。これにより、障害を迅速に検知し、即座に対応することができます。.

パフォーマンスの最適化とスケーリング:負荷を適切に管理する

をコントロールしている。 インターバル 環境の規模と目的に応じて:コアシステムは15秒、重要度の低いサーバーは30~60秒。コレクターを厳選することで、メトリクスとクエリ時間を削減しています。 独自のテキストファイルメトリクスは簡潔に保ち、古いものは削除し、一貫した命名規則に従います。環境が大幅に拡大した場合は、負荷を複数のPrometheusインスタンスに分散させ、役割を分離します。以下の表は、運用において実証済みの調整項目とその効果を示しています。.

トピック セッティング 効果 ヒント
スクレイピング間隔 15秒 / 30秒 / 60秒 スクラップの数を減らす 負荷 ホストクラスごとの重要度を考慮する
コレクター・セレクション 必要なモジュールのみ 時系列データを削減する ロールごとのリストを記録する
テキストファイルコレクター コンパクトな .prom ファイル 構文解析のオーバーヘッドを削減 簡潔に記述し、明確に命名する
ラベルのカーディナリティ ラベルを確認する 妨げる 爆発 シリーズの IDや変動の激しい値の使用を避ける
シャーディング 『プロメテウス』を分割する スクレイプとクエリをスケーリングする 責任の分担

ストレージシステムについては、デバイスごとおよびファイルシステムごとのI/O値とレイテンシに特に注意を払っています。私のガイドは、そのための良い出発点となります。 ディスクのレイテンシを監視する, 、典型的な症状の連鎖や指標をまとめたものです。私はこれらの値をCPUの待機時間や負荷と関連付けることで、ボトルネックを確実に特定しています。ダッシュボードの読み込みを高速化するため、クエリはレコーディングルールにカプセル化しています。これにより、分析と運用が迅速かつ明確に行えます。.

Grafanaによる可視化:状況を明確に把握し、迅速に行動する

私は既製のダッシュボードを次のような用途に利用しています CPU, 、RAM、ディスク、ネットワーク、systemdについてですが、自分のラベルに合わせて調整しています。 概要ダッシュボードではステータス、使用率、問題のあるホストが表示され、詳細ページではさらに深く掘り下げることができます。各指標の意味を誰もが理解できるよう、パネルについては簡単に説明しています。変数セレクターを使用すると、ホストやロール間の切り替えが迅速に行えます。全体像を把握したい方は、以下をご覧ください。 Grafana を使用したモニタリング・スタック 高性能なスタックを構築するためのヒント。.

整然としたパッケージ化とバージョン管理:再現性を維持する

バージョンを明示的に固定し、チェックサムを確認することで、インストール環境の再現性を確保しています。Fleet環境のセットアップでは、Node Exporterを、固定のパス構造とシステムユーザーを指定した内部パッケージ(例:DEB/RPM)としてパッケージ化しています。 アップデートは段階的に展開し、環境ごとに導入したバージョンを記録しています。適切な場合は、起動パラメータを EnvironmentFile, 、これにより、ユニットファイルに直接変更を加えることなく、バージョン管理を適切に維持できるようにしています。新しいリリースは、広く配布する前に、まずステージング環境でテストを行っています。.

設定例:systemdユニットとセキュリティ強化

私はシンプルだが堅牢なユニットを使用しており、必要に応じて硬化設定を追加しています:

[Unit]
Description=Prometheus Node Exporter
After=network-online.target
Wants=network-online.target

[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --collector.systemd \
  --collector.processes \
  --collector.filesystem.fs-types-exclude='^(tmpfs|devtmpfs|overlay|squashfs)$' \
  --collector.filesystem.mount-points-exclude='^/(sys|proc|dev|run)($|/)'
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

生産性の高いホストに対しては、その読み取り権限を /proc そして /シス を破る。これをドロップインとして設定する(/etc/systemd/system/node_exporter.service.d/hardening.conf) を:

[Service]
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectSystem=strict
ProtectHome=true
ProtectControlGroups=true
ProtectKernelTunables=true
ProtectKernelModules=true
LockPersonality=true
MemoryDenyWriteExecute=true
CapabilityBoundingSet=
AmbientCapabilities=
RestrictNamespaces=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
SystemCallFilter=@system-service

変更のたびに: systemctl daemon-reload そして、クリーンな再起動。デバッグの目的で、一時的にログレベルを高く設定しています。 --log.level=debug, 、コレクターおよびパーサーの詳細を表示するには。.

実務環境向けのCollectorの微調整

私は、適切なフィルターを使って、可視性と負荷のバランスを取っています:

  • ファイルシステム:疑似ファイルシステム(Pseudo-FS)と一時的なマウントは除外する(--collector.filesystem.fs-types-exclude そして --collector.filesystem.mount-points-exclude)、意味のないシリーズを避けるために。.
  • プロセス: --collector.processes 有用な合計値を提供しますが、追加のシリーズが生成されます。私は、プロセス数がシグナルとして提供されるホスト(バッチノードやワーカーノードなど)でのみ、これを有効にしています。.
  • ネットワーク:その netstat-Collectorは、カーネルや接続状況によっては多数のラベルを生成することがあります。私はステージング環境でそのカーディナリティを確認し、必要に応じて選択的に無効にしています。.
  • 圧力/PSI:最新のカーネルは圧力メトリクスを提供します (--collector.pressure, (多くの場合、デフォルトで有効になっています)。私はこれを利用して、CPU、I/O、メモリのボトルネックを早期に検知しています。.
  • NVMe/RAID:特定のコレクター(例:. NVMe) ハードウェアが導入されている場所でのみ有効にしています。そうすることで、ダッシュボードの有用性を維持できるからです。.

クエリパラメータを使用して、コレクタを条件付きでテストしています collect[], 、起動パラメータを変更せずに。例: curl 'http://localhost:9100/metrics?collect[]=systemd&collect[]=processes'. そうすれば、個々のコレクターがどのような影響を与えているかがすぐにわかります。.

テキストファイルコレクター:運用におけるベストプラクティス

私はメトリクスをアトミックに記述しています:スクリプトはまず .tmp-ファイルを作成し、最後に mv. 各ファイルには1つの論理グループのみが含まれており、サイズはせいぜい数キロバイトです。タイムスタンプの処理はPrometheusに任せており、ファイル自体にタイムスタンプは必要ありません。もし .prom-ファイルが削除されると、関連するシリーズは次回のスクレイピング後に消えてしまいます。私は名前空間(例:. business_*) そして、カーディナリティを管理するためにラベルの値を安定させています。値が大きく変動する場合は、ダッシュボードの動作を安定させるために、スクリプト内で(例えば平均値を求めるなどして)値を平滑化しています。.

セキュリティ:ファイアウォールとプロキシの種類

まずはネットワークのセグメンテーションを重視します。エクスポーターは内部でのみリスニングし、ファイアウォールはPrometheusのIPアドレスのみを許可します。例としては、 エヌエフティーブルズ 1台のホスト上で:

table inet filter {
  chain input {
    type filter hook input priority 0;
    ct state established,related accept
    iif lo accept
    tcp dport 9100 ip saddr { 10.0.0.10, 10.0.0.11 } accept
    tcp dport 9100 drop
  }
}

暗号化が必要な場合は、その前にローカルのリバースプロキシを配置し、TLSまたはmTLSを処理させ、 127.0.0.1:9100 転送します。あるいは、バージョンが対応している場合は、エクスポート機能のネイティブWeb設定を --web.config.file, 、認証と証明書を一元管理し続けるためです。基本的に、このサービスは特権のない状態で実行され、自身のディレクトリに対する権限は最小限に抑えられ、本当に必要な場所(例:テキストファイルのパス)でのみ書き込みを行います。.

Prometheus統合の詳細:リラベリング、リミット、アラート

私はジョブを簡潔かつ統一感のあるものにしています。制限とラベルの管理が施された実用的なジョブは、次のような形になります:

scrape_configs:
- job_name: node
  scrape_interval: 30s
  scrape_timeout: 10s
  sample_limit: 10000
  static_configs:
  - targets: ['host1:9100','host2:9100']
    labels:
 env: prod
 role: web
  relabel_configs:
  - source_labels: [__address__]
    target_label: instance
    regex: '([^:]+)(?::\d+)?'
    replacement: '$1'
  metric_relabel_configs:
  - source_labels: [device]
    regex: '^(ram|loop|zram|dm-).*'
    action: drop

と一緒に metric_relabel_configs 意味の薄いデバイスを除外することで、カーディナリティの問題を緩和しています。アラートについては、シンプルでありながら堅牢なルールを採用しています:

groups:
- name: node_basic
  rules:
  - alert: NodeDown
    expr: up{job="node"} == 0
    for: 5m
    labels: {severity: critical}
  - alert: HighCPU
    expr: 1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) > 0.9
    for: 10m
    labels: {severity: warning}

負荷の監視には、以下を使用しています scrape_duration_seconds そして scrape_samples_scraped ターゲットごとに。これにより、追加で有効化されたコレクターが、回収時間やシリアル番号を不釣り合いに増加させているかどうかを把握できます。.

コンテナとKubernetesでの運用

Node Exporterをコンテナ内でホストに近い場所に配置するのは、 /proc そして /シス ホストから引き続きアクセス可能にする。そのため、これらのパスをコンテナに読み取り専用でマウントし、 hostNetwork 一貫性のあるポート設定のためです。Kubernetes では、エクスポーターをノードごとに DaemonSet として実行し、セキュリティコンテキストを厳格に管理しています(不要な権限は付与しません)。コレクターの選定にあたっては、Cgroup-v2 環境を考慮に入れています。重要なコレクターとしては、 meminfo, 圧力, ファイルシステム そして CPU が基本となります。デプロイメント後、直接 カール Pod に対して、期待されるホストメトリックパスが実際に読み込まれているかどうかを確認する。.

トラブルシューティングと品質保証

  • 接続性:確認中 curl -s http://localhost:9100/metrics | head ターゲットホスト上において、Prometheus の観点から、開いているポート経由での到達可能性。.
  • コレクター向けテスト:概要 collect[] グローバル設定を変更せずに、個々のコレクターをテストしました。.
  • ログ:一時的にログレベルを引き上げます(--log.level=debug)、構文解析エラーや権限の問題を /proc//シス が見える。
  • バージョン管理:以下の方法で node_exporter_build_info 各バージョンを比較し、的を絞ってアップグレードを計画します。.
  • 注目シリーズ:メトリクス scrape_samples_scraped{job="node"} これを、ホストごとのシリーズ数の目安として使用しています。数値が急上昇した場合は、新しいコレクターの追加やラベルの爆発的な増加を示しています。.
  • タイムアウト:私は scrape_timeout ~より下 scrape_interval そして、じっと見守る scrape_timeout_seconds, 、ボトルネックを早期に発見するために。.

収容能力と保管:予期せぬ事態を防ぐための計画

Prometheusでのデータ保持はユースケースに応じて設定しています。基幹システムには短い間隔を、トレンド分析には長期保存を設定しています。システム群が拡大した場合は、シャーディング(例:拠点やチーム単位)による水平スケーリングを行い、クエリ負荷とインジェスト負荷を分離します。 必要に応じて、リモート書き込み機能を使用して、メトリクスを長期保存コンポーネントにも追加で書き込みます。カーディナリティを常に注視し、特に急速に増加しやすいテキストファイル形式のメトリクスについては、未使用のメトリクスやラベルを徹底的に削除しています。.

多様な車両で構成される車両群のための実践的なヒント

  • IPv6専用ホスト:私も参加します [::]:9100 また、適切なファイアウォールルールを設定してください。.
  • 専用ハードウェア:ハードウェア固有のコレクターは、それが妥当な場合にのみ有効にし、役割プロファイルの違いを文書化しています。.
  • 段階的な更新:バッチ単位で更新を行い、その様子を観察しています 上へ, scrape_duration_seconds そして scrape_samples_scraped, 、回帰分析の結果を即座に把握するため。.
  • ドキュメント:各ロールごとの実際の起動パラメータを記録しています。これにより、議論が省け、エラー分析も容易になります。.

簡単にまとめると:私の診療スケジュール

私はこれをインストールします ノード エクスポーターを独自のsystemdサービスとして設定し、ポートとリスニングアドレスを指定して、アクセスを厳重に制限します。コレクターは慎重に選択し、テキストファイルコレクターを介して必要な値を追加し、メトリクスの数を最小限に抑えています。 Prometheusでは、適切なインターバルを設定し、ラベルを管理し、CPU、RAM、ディスク、ネットワークに関する記録ルールとアラームを定義します。 エクスポーター自体を監視し、アップデートのスケジュールを立て、ホストごとのシリーズ数を定期的に確認しています。明確な可視化により、迅速に対応し、トレンドを早期に把握し、日常業務においてLinuxサーバーの監視体制を堅牢に保っています。.

現在の記事

グラフやサーバーインフラストラクチャを含む、Redisのモニタリングを写実的に表現したもの
管理

PrometheusとGrafanaを使ったRedisの監視:手順

PrometheusとGrafanaを活用したRedisのモニタリングにより、キャッシュ、メモリ、レイテンシ、パフォーマンスの可視性を向上させます。本番環境に最適です。.

データセンター内のサーバーで、MariaDBのバッファプールが最適化されている
データベース

MariaDB バッファプールのサイズ設定:InnoDB バッファプールに関する実践ガイドと経験則

明確な経験則と例示値を用いた、MariaDBのバッファプールサイジングに関する実践的なガイドです。MariaDBデータベースのパフォーマンスを大幅に向上させるために、InnoDBバッファプールを最適にサイジングする方法をご確認ください。安定したワークロードにおけるバッファプールサイジングに焦点を当てています。.