序章

Prometheus は、サービスからメトリックを収集して時系列データベースに保存する、強力なオープンソースの監視システムです。 多次元データモデル、柔軟なクエリ言語、Grafanaなどのツールによる多様な視覚化の可能性を提供します。

デフォルトでは、Prometheusはそれ自体に関するメトリックのみをエクスポートします(例: 受信したリクエストの数、メモリ消費量など)。 ただし、追加のメトリックを生成するオプションのプログラムである exporters をインストールすることで、Prometheusを大幅に拡張できます。

プロメテウスチームが維持している公式のものとコミュニティが提供しているものの両方のエクスポーターは、インフラストラクチャ、データベース、Webサーバーからメッセージングシステム、APIなどすべてに関する情報を提供します。

最も人気のある選択肢のいくつかは次のとおりです。

  • node_exporter -これにより、現在のCPU、メモリ、ディスクの使用状況、I / O、ディスクから読み取られたバイト数やサーバーの平均負荷などのネットワーク統計など、インフラストラクチャに関するメトリックが生成されます。
  • blackbox_exporter -これは、エンドポイントの可用性、応答時間などを決定するために、HTTPやHTTPSなどのプロービングプロトコルから派生したメトリックを生成します。
  • mysqld_exporter -これは、実行されたクエリの数、平均クエリ応答時間、クラスターレプリケーションステータスなど、MySQLサーバーに関連するメトリックを収集します。
  • javbitmq_exporter -これは、 RabbitMQ メッセージングシステムに関するメトリックを出力します。これには、公開されたメッセージの数、配信の準備ができているメッセージの数、キュー内のすべてのメッセージのサイズが含まれます。
  • nginx-vts-exporter -これは、 NginxVTSモジュールを使用するNginxWebサーバーに関するメトリックを提供します。これには、開いている接続の数、送信された応答の数(応答コードでグループ化)が含まれます。 、および送信または受信したリクエストの合計サイズ(バイト単位)。

PrometheusのWebサイトで、公式およびコミュニティが提供するエクスポーターのより完全なリストを見つけることができます。

このチュートリアルでは、PrometheusとNode Exporterをインストール、構成、および保護して、サーバーのパフォーマンスの監視を容易にするメトリックを生成します。

前提条件

このチュートリアルを実行する前に、次のことを確認してください。

ステップ1—サービスユーザーの作成

セキュリティ上の理由から、prometheusnode_exporterの2つの新しいユーザーアカウントを作成することから始めます。 チュートリアル全体でこれらのアカウントを使用して、Prometheusのコアファイルとディレクトリの所有権を分離します。

これらの2人のユーザーを作成し、--no-create-homeおよび--shell /bin/falseオプションを使用して、これらのユーザーがサーバーにログインできないようにします。

  1. sudo useradd --no-create-home --shell /bin/false prometheus
  2. sudo useradd --no-create-home --shell /bin/false node_exporter

Prometheusバイナリをダウンロードする前に、Prometheusのファイルとデータを保存するために必要なディレクトリを作成します。 標準のLinux規則に従って、Prometheusの構成ファイル用に/etcにディレクトリを作成し、そのデータ用に/var/libにディレクトリを作成します。

  1. sudo mkdir /etc/prometheus
  2. sudo mkdir /var/lib/prometheus

次に、新しいディレクトリのユーザーとグループの所有権をprometheusユーザーに設定します。

  1. sudo chown prometheus:prometheus /etc/prometheus
  2. sudo chown prometheus:prometheus /var/lib/prometheus

ユーザーとディレクトリが整ったら、Prometheusをダウンロードして、Prometheusを初めて実行するための最小限の構成ファイルを作成できます。

ステップ2—Prometheusをダウンロードする

まず、Prometheusの現在の安定バージョンをホームディレクトリにダウンロードして解凍します。 最新のバイナリとそのチェックサムは、Prometheusダウンロードページで見つけることができます。

  1. cd ~
  2. curl -LO https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz

次に、sha256sumコマンドを使用して、ダウンロードしたファイルのチェックサムを生成します。

  1. sha256sum prometheus-2.0.0.linux-amd64.tar.gz

このコマンドの出力をPrometheusダウンロードページのチェックサムと比較して、ファイルが本物であり、破損していないことを確認します。

Output
e12917b25b32980daee0e9cf879d9ec197e2893924bd1574604eb0f550034d46 prometheus-2.0.0.linux-amd64.tar.gz

チェックサムが一致しない場合は、ダウンロードしたファイルを削除し、前の手順を繰り返してファイルを再ダウンロードします。

次に、ダウンロードしたアーカイブを解凍します。

  1. tar xvf prometheus-2.0.0.linux-amd64.tar.gz

これにより、2つのバイナリファイル(prometheusおよびpromtool)を含むprometheus-2.0.0.linux-amd64というディレクトリ、Webインターフェイスを含むconsolesおよびconsole_librariesディレクトリが作成されます。ファイル、ライセンス、通知、およびいくつかのサンプルファイル。

2つのバイナリを/usr/local/binディレクトリにコピーします。

  1. sudo cp prometheus-2.0.0.linux-amd64/prometheus /usr/local/bin/
  2. sudo cp prometheus-2.0.0.linux-amd64/promtool /usr/local/bin/

バイナリのユーザーとグループの所有権を、手順1で作成したprometheusユーザーに設定します。

  1. sudo chown prometheus:prometheus /usr/local/bin/prometheus
  2. sudo chown prometheus:prometheus /usr/local/bin/promtool

consolesおよびconsole_librariesディレクトリを/etc/prometheusにコピーします。

  1. sudo cp -r prometheus-2.0.0.linux-amd64/consoles /etc/prometheus
  2. sudo cp -r prometheus-2.0.0.linux-amd64/console_libraries /etc/prometheus

ディレクトリのユーザーとグループの所有権をprometheusユーザーに設定します。 -Rフラグを使用すると、ディレクトリ内のファイルにも所有権が設定されます。

  1. sudo chown -R prometheus:prometheus /etc/prometheus/consoles
  2. sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries

最後に、残ったファイルは不要になったため、ホームディレクトリから削除します。

  1. rm -rf prometheus-2.0.0.linux-amd64.tar.gz prometheus-2.0.0.linux-amd64

Prometheusがインストールされたので、最初の実行の準備として、構成ファイルとサービスファイルを作成します。

ステップ3—Prometheusを構成する

/etc/prometheusディレクトリで、nanoまたはお気に入りのテキストエディタを使用して、prometheus.ymlという名前の構成ファイルを作成します。 今のところ、このファイルには、Prometheusを初めて実行するのに十分な情報が含まれています。

  1. sudo nano /etc/prometheus/prometheus.yml

警告:Prometheusの構成ファイルはYAML形式を使用します。これはタブを厳密に禁止し、インデントに2つのスペースを必要とします。 構成ファイルの形式が正しくないと、Prometheusの起動に失敗します。

global設定で、メトリックをスクレイピングするためのデフォルトの間隔を定義します。 個々のエクスポーター自身の設定がグローバルをオーバーライドしない限り、Prometheusはこれらの設定をすべてのエクスポーターに適用することに注意してください。

Prometheus設定ファイルパート1-/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s

このscrape_interval値は、Prometheusに15秒ごとにエクスポーターからメトリックを収集するように指示します。これは、ほとんどのエクスポーターにとって十分な長さです。

次に、次のscrape_configsディレクティブを使用して、Prometheus自体をエクスポーターのリストに追加してスクレイプします。

Prometheus設定ファイルパート2-/etc/prometheus/prometheus.yml
...
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

Prometheusはjob_nameを使用して、クエリやグラフでエクスポーターにラベルを付けます。そのため、ここで説明的なものを選択してください。

また、Prometheusは、パフォーマンスの監視とデバッグに使用できる自身に関する重要なデータをエクスポートするため、グローバルscrape_intervalディレクティブを15秒から5秒にオーバーライドして、より頻繁に更新します。

最後に、Prometheusはstatic_configsおよびtargetsディレクティブを使用して、エクスポーターが実行されている場所を判別します。 この特定のエクスポーターはPrometheus自体と同じサーバーで実行されているため、デフォルトのポート9090とともに、IPアドレスの代わりにlocalhostを使用できます。

構成ファイルは次のようになります。

Prometheus設定ファイル-/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

ファイルを保存して、テキストエディタを終了します。

次に、構成ファイルのユーザーとグループの所有権を、手順1で作成したprometheusユーザーに設定します。

  1. sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

構成が完了したら、Prometheusを初めて実行してテストする準備が整いました。

ステップ4—Prometheusを実行する

prometheus ユーザーとしてPrometheusを起動し、構成ファイルとデータディレクトリの両方へのパスを指定します。

  1. sudo -u prometheus /usr/local/bin/prometheus \
  2. --config.file /etc/prometheus/prometheus.yml \
  3. --storage.tsdb.path /var/lib/prometheus/ \
  4. --web.console.templates=/etc/prometheus/consoles \
  5. --web.console.libraries=/etc/prometheus/console_libraries

出力には、Prometheusの読み込みの進行状況、構成ファイル、および関連サービスに関する情報が含まれています。 また、Prometheusがポート9090でリッスンしていることも確認します。

Output
level=info ts=2017-11-17T18:37:27.474530094Z caller=main.go:215 msg="Starting Prometheus" version="(version=2.0.0, branch=HEAD, re vision=0a74f98628a0463dddc90528220c94de5032d1a0)" level=info ts=2017-11-17T18:37:27.474758404Z caller=main.go:216 build_context="(go=go1.9.2, [email protected], date=20171108- 07:11:59)" level=info ts=2017-11-17T18:37:27.474883982Z caller=main.go:217 host_details="(Linux 4.4.0-98-generic #121-Ubuntu SMP Tue Oct 10 1 4:24:03 UTC 2017 x86_64 prometheus-update (none))" level=info ts=2017-11-17T18:37:27.483661837Z caller=web.go:380 component=web msg="Start listening for connections" address=0.0.0.0 :9090 level=info ts=2017-11-17T18:37:27.489730138Z caller=main.go:314 msg="Starting TSDB" level=info ts=2017-11-17T18:37:27.516050288Z caller=targetmanager.go:71 component="target manager" msg="Starting target manager... " level=info ts=2017-11-17T18:37:27.537629169Z caller=main.go:326 msg="TSDB started" level=info ts=2017-11-17T18:37:27.537896721Z caller=main.go:394 msg="Loading configuration file" filename=/etc/prometheus/promethe us.yml level=info ts=2017-11-17T18:37:27.53890004Z caller=main.go:371 msg="Server is ready to receive requests."

エラーメッセージが表示された場合は、構成ファイルでYAML構文を使用していることを再確認してから、画面の指示に従って問題を解決してください。

ここで、CTRL+Cを押してPrometheusを停止し、新しいsystemdサービスファイルを開きます。

  1. sudo nano /etc/systemd/system/prometheus.service

サービスファイルは、systemdに、 prometheus ユーザーとしてPrometheusを実行し、構成ファイルを/etc/prometheus/prometheus.ymlディレクトリに配置し、そのデータを/var/lib/prometheusに保存するように指示します。 ]ディレクトリ。 (systemdサービスファイルの詳細はこのチュートリアルの範囲を超えていますが、 Systemdユニットとユニットファイルについてで詳細を学ぶことができます。)

次のコンテンツをファイルにコピーします。

Prometheusサービスファイル-/etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

最後に、ファイルを保存してテキストエディタを閉じます。

新しく作成したサービスを使用するには、systemdをリロードします。

  1. sudo systemctl daemon-reload

これで、次のコマンドを使用してPrometheusを起動できます。

  1. sudo systemctl start prometheus

Prometheusが実行されていることを確認するには、サービスのステータスを確認してください。

  1. sudo systemctl status prometheus

出力には、Prometheusのステータス、メインプロセス識別子(PID)、メモリ使用量などが表示されます。

サービスのステータスがactiveでない場合は、チュートリアルを続行する前に、画面の指示に従い、前の手順をたどって問題を解決してください。

Output
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2017-07-21 11:40:40 UTC; 3s ago Main PID: 2104 (prometheus) Tasks: 7 Memory: 13.8M CPU: 470ms CGroup: /system.slice/prometheus.service ...

先に進む準備ができたら、Qを押してstatusコマンドを終了します。

最後に、起動時にサービスを開始できるようにします。

  1. sudo systemctl enable prometheus

Prometheusが稼働しているので、追加のエクスポーターをインストールして、サーバーのリソースに関するメトリックを生成できます。

ステップ5—ノードエクスポーターのダウンロード

Prometheusをそれ自体に関するメトリックを超えて拡張するために、NodeExporterと呼ばれる追加のエクスポーターをインストールします。 Node Exporterは、CPU、ディスク、メモリ使用量など、システムに関する詳細情報を提供します。

まず、NodeExporterの現在の安定バージョンをホームディレクトリにダウンロードします。 最新のバイナリとそのチェックサムは、Prometheusのダウンロードページで見つけることができます。

  1. cd ~
  2. curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.15.1/node_exporter-0.15.1.linux-amd64.tar.gz

sha256sumコマンドを使用して、ダウンロードしたファイルのチェックサムを生成します。

  1. sha256sum node_exporter-0.15.1.linux-amd64.tar.gz

チェックサムをダウンロードページのチェックサムと比較して、ダウンロードしたファイルの整合性を確認します。

Output
7ffb3773abb71dd2b2119c5f6a7a0dbca0cff34b24b2ced9e01d9897df61a127 node_exporter-0.15.1.linux-amd64.tar.gz

チェックサムが一致しない場合は、ダウンロードしたファイルを削除して、前の手順を繰り返します。

次に、ダウンロードしたアーカイブを解凍します。

  1. tar xvf node_exporter-0.15.1.linux-amd64.tar.gz

これにより、[X37X]