著者は、 Diversity in Tech 基金を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Prometheus は、サービスから指標を収集するオープンソースの監視システムです。 Prometheus 2.0は、新しい時系列データベース、より優れたリソース使用量、アラートの新しい構成形式、より優れたAlertmanager検出など、多くの変更と改善をもたらします。

このチュートリアルでは、既存のPrometheus1.xインストールをPrometheus2.0にアップグレードします。 tsdbと呼ばれるPrometheus2.0の新しい時系列データベースは、Prometheus 1.xと互換性がありません。つまり、Prometheus2を使用してPrometheus1.xインスタンスからデータを読み取ることはできません。 この制限を回避するには、Prometheus 1.xを読み取り専用のデータストアとして機能するように構成して、古いデータを利用できるようにします。

Prometheus 2はアラートルールに新しい形式を使用するため、既存のアラートルールを新しい形式に更新し、Alertmanagerを使用します。

最後に、Web UIを使用して、Prometheusが意図したとおりに機能していることを確認します。

このチュートリアルでは、最も重要な変更のみを取り上げます。 最新バージョンにアップグレードする前に、 Prometheus 2.0の発表を読んで、他の変更の影響を受けていないことを確認する必要があります。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu 16.04チュートリアルを使用した初期サーバーセットアップ(sudo非rootユーザーとファイアウォールを含む)に従ってセットアップされた1つのUbuntu16.04サーバー。
  • PrometheusWebUIを含むサーバーにインストールされたPrometheus1.x。 prometheus -versionコマンドを実行すると、Prometheusのバージョンを確認できます。 出力には、Prometheusバージョンとビルド情報が含まれます。

このチュートリアルでは、Prometheusのインストールについて次のことを前提としています。

  • prometheusユーザーを作成しました。
  • Prometheusの構成ファイルを保持するディレクトリ/etc/prometheusを作成しました。
  • Prometheusのデータを保持するディレクトリ/var/lib/prometheusを作成しました。
  • prometheusおよびpromtool実行可能ファイルは/usr/local/binにあります。
  • prometheusと呼ばれるsystemdサービスとして実行するようにPrometheusを構成しました。

ステップ1—Prometheusを1.8.2にアップグレードする

Prometheus 2.0を使用して古いデータにアクセスするには、現在のPrometheusインストールをバージョン1.8.2にアップグレードしてから、remote_read機能を使用して古いデータから読み取るようにPrometheus2.0を設定する必要があります。 。

prometheus -versionコマンドを使用して、現在のPrometheusバージョンを確認します。 出力には、バージョンとビルド情報が含まれます。 すでにバージョン1.8.2を実行している場合は、この手順をスキップしてください。

  1. prometheus -version
prometheus -version output
prometheus, version 1.7.1 (branch: master, revision: 3afb3fffa3a29c3de865e1172fb740442e9d0133) build user: root@0aa1b7fc430d build date: 20170612-11:44:05 go version: go1.8.3

先に進む前に、Prometheusを停止して、ファイルを置き換えることができるようにします。

  1. sudo systemctl stop prometheus

Prometheus 1.8.2とチェックサムは、プロジェクトの GitHubReleasesページにあります。 prometheus-1.8.2.linux-amd64.tar.gzというファイルが必要です。 次のcurlコマンドを使用して、Prometheusアーカイブとチェックサムをホームディレクトリにダウンロードします。

  1. cd ~
  2. curl -LO https://github.com/prometheus/prometheus/releases/download/v1.8.2/prometheus-1.8.2.linux-amd64.tar.gz
  3. curl -LO https://github.com/prometheus/prometheus/releases/download/v1.8.2/sha256sums.txt

破損していない本物のアーカイブがあることを確認するには、sha256sumコマンドを使用してアーカイブのチェックサムを生成し、sha256sums.txtファイルと比較します。

  1. sha256sum -c sha256sums.txt 2>&1 | grep OK
Checksums check
prometheus-1.8.2.linux-amd64.tar.gz: OK

出力にOKが表示されない場合は、ダウンロードしたアーカイブを削除し、前の手順に戻って再度ダウンロードしてください。

次に、アーカイブを解凍します。

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

prometheusおよびpromtool実行可能ファイルを/usr/local/binディレクトリにコピーします。

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

ファイルのユーザーとグループの所有権をprometheusユーザーに設定します。

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

最後に、Prometheusを起動して、意図したとおりに機能していることを確認します。

  1. sudo systemctl start prometheus

最後に、サービスのステータスを確認します。

  1. sudo systemctl status prometheus

次の出力が表示されます。

Prometheus service status
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-01-01 21:44:52 UTC; 2s ago Main PID: 1646 (prometheus) Tasks: 6 Memory: 17.7M CPU: 333ms CGroup: /system.slice/prometheus.service └─1646 /usr/local/bin/prometheus -config.file /etc/prometheus/prometheus.yml -storage.local.path /var/lib/prometheus/ ...

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

Prometheusのバージョンを確認して、バージョン1.8.2を実行していることを確認します。

  1. prometheus -version
prometheus -version output
prometheus, version 1.8.2 (branch: HEAD, revision: 5211b96d4d1291c3dd1a569f711d3b301b635ecb) build user: root@1412e937e4ad build date: 20171104-16:09:14 go version: go1.9.2

version 1.8.2が表示されない場合は、正しいファイルをダウンロードしたことを確認して、このセクションの手順を繰り返してください。

最後に、ダウンロードしたファイルは不要になったので削除します。

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

次に、既存のインストールを再構成して、インストール後にPrometheus2.0に干渉しないようにします。

ステップ2—Prometheus1.8.2を個別のサービスとして構成する

古いデータにアクセスできるようにPrometheus1.8.2を維持したいのですが、古いインストールがPrometheus2に干渉しないようにする必要があります。 そのために、Prometheus関連のすべてのディレクトリと実行可能ファイルの名前に1を追加します。 たとえば、prometheus実行可能ファイルはprometheus1になります。 また、サービス定義を更新し、別のポートで実行するように設定します。

続行する前に、Prometheusを停止して、ファイルとディレクトリの名前を変更できるようにします。

  1. sudo systemctl stop prometheus

/usr/local/binディレクトリには、prometheuspromtoolの2つのPrometheus実行可能ファイルがあります。 これらの名前をそれぞれprometheus1promtool1に変更します。

  1. sudo mv /usr/local/bin/prometheus /usr/local/bin/prometheus1
  2. sudo mv /usr/local/bin/promtool /usr/local/bin/promtool1

Prometheusには、構成ファイルを保存するための/etc/prometheusと、データを保存するための/var/lib/prometheusの2つのディレクトリが関連付けられています。 これらのディレクトリの名前も変更します。

  1. sudo mv /etc/prometheus /etc/prometheus1
  2. sudo mv /var/lib/prometheus /var/lib/prometheus1

Prometheus 1.8.2を読み取り専用のデータストアとして実行するため、エクスポーターからデータを収集するためにPrometheus1.8.2を実行する必要はありません。 これを確実にするために、次のtruncateコマンドを使用して、構成ファイルからすべてのコンテンツを削除します。 ファイルの内容を削除する前に、ファイルのバックアップを作成して、後でPrometheus2.0の構成に使用できるようにします。

  1. sudo cp /etc/prometheus1/prometheus.yml /etc/prometheus1/prometheus.yml.bak

次に、truncateを使用して構成ファイルの内容を空にします。

  1. sudo truncate -s 0 /etc/prometheus1/prometheus.yml

次に、サービスファイルの名前をprometheusからprometheus1に変更します。

  1. sudo mv /etc/systemd/system/prometheus.service /etc/systemd/system/prometheus1.service

テキストエディタでPrometheusサービスファイルを開きます。

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

9090のデフォルトポートでPrometheus2.0を実行するので、Prometheus1.8.2がポート9089をリッスンするポートを変更します。 ExecStartディレクティブを次の構成に置き換えます。

ExecStart-/etc/systemd/system/prometheus.service
...
ExecStart=/usr/local/bin/prometheus1 \
	-config.file /etc/prometheus1/prometheus.yml \
	-storage.local.path /var/lib/prometheus1/ \
	-web.listen-address ":9089"
...

ファイルを保存して、テキストエディタを閉じます。 systemdをリロードして、変更を適用します。

  1. sudo systemctl daemon-reload

prometheus1サービスを開始します。

  1. sudo systemctl start prometheus1

意図したとおりに機能していることを確認するには、サービスのステータスを確認してください。

  1. sudo systemctl status prometheus1

以前と同様に、出力には、PID、ステータスなどのプロセスに関する情報が含まれます。

Service status output
● prometheus1.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus1.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2018-01-01 21:46:42 UTC; 3s ago Main PID: 1718 (prometheus1) Tasks: 6 Memory: 35.7M CPU: 223ms CGroup: /system.slice/prometheus1.service └─1718 /usr/local/bin/prometheus1 -config.file /etc/prometheus1/prometheus.yml -storage.local.path /var/lib/prometheus1/ ...

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

サービスを有効にして、システムの起動時にサービスが開始されることを確認します。

  1. sudo systemctl enable prometheus1

この時点で、Prometheus1.8.2はエクスポーターをスクレイプしません。 これにより、Prometheus 2.0をセットアップすると、データの一貫性が確保されます。Prometheus2.0は、現在のインストールを古いデータの読み取り専用データストアとして使用します。 次のステップでは、Prometheus 2.0をインストールし、Prometheus1.8.2を使用して古いデータにアクセスします。

ステップ3—Prometheus2.0の構成

このステップでは、エクスポーターをスクレイプするようにPrometheus 2.0を構成し、Prometheus 1.8.2を読み取り専用のデータストアとして使用して、既存のデータにアクセスできるようにします。

チュートリアルを続行する前に、 Ubuntu16.04チュートリアルにPrometheusをインストールする方法のステップ1と2に従ってPrometheus2をインストールしてください。

Prometheusをインストールしたら、新しい構成ファイルを作成します。 構成ファイルの形式は変更されていないため、Prometheus1.x構成ファイルをPrometheus2で使用できます。 前の手順で作成した既存のPrometheus構成のバックアップを/etc/prometheus/ディレクトリにコピーします。

  1. sudo cp /etc/prometheus1/prometheus.yml.bak /etc/prometheus/prometheus.yml

新しく作成した構成ファイルのユーザーとグループの所有権をprometheusユーザーに設定します。

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

このファイルに加える唯一の変更は、Prometheus 2.0に読み取り専用データストアとしてPrometheus1.8.2を使用するように指示して、古いデータにアクセスできるようにすることです。 テキストエディタで構成ファイルを開きます。

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

構成ファイルの最後に、リモートのPrometheusインスタンスから読み取るremote_readディレクティブを追加します。 Prometheus1.8.2インスタンスであるlocalhst:9089から読み取るように指示します。

Prometheus構成ファイル-/etc/prometheus/prometheus.yml
...

remote_read:
	- url: http://localhost:9089/api/v1/read

完了したら、ファイルを保存してテキストエディタを閉じます。

Prometheus 2.0を初めて実行する前に、アラートルールを更新し、Prometheusと連携するようにAlertmanagerを構成します。 アラートルールまたはAlertmanagerを使用しない場合は、次の手順をスキップしてください。

ステップ4—アラートの構成(オプション)

Prometheus 1.xアラートルールは、カスタム構文を使用して定義されました。 バージョン2.0以降、YAMLを使用してアラートルールを定義します。 移行を容易にするために、Prometheusのpromtoolコマンドは、古いルールファイルを新しい形式に変換できます。 アラートルールを使用しない場合は、この手順をスキップできます。

まず、/etc/prometheus1ディレクトリから/etc/prometheusディレクトリにすべてのルールをコピーします。

  1. sudo cp /etc/prometheus1/*.rules /etc/prometheus/

また、次のコマンドを実行して、promtoolバージョン2.0を使用していることを確認してください。

  1. promtool --version

出力には、promtoolのバージョンとビルド情報が含まれています。

promtool --version
promtool, version 2.0.0 (branch: HEAD, revision: 0a74f98628a0463dddc90528220c94de5032d1a0) build user: root@615b82cb36b6 build date: 20171108-07:11:59 go version: go1.9.2

バージョンが2.0でない場合は、promtool実行可能ファイルを正しい場所にコピーしたことを確認してください。

次に、/etc/prometheusディレクトリに移動します。

  1. cd /etc/prometheus

ディレクトリにある.rulesファイルごとに、次のpromtoolコマンドを実行します。

  1. sudo promtool update rules file-name.rules

これにより、提供されたファイルからfile-name.rules.ymlファイルと呼ばれる新しいファイルが生成されます。 画面にエラーメッセージが表示された場合は、チュートリアルを続行する前に、画面上のログに従って問題を解決してください。

promtoolによって作成されたファイルにユーザーとグループの所有権が正しく設定されていることを確認してください。

  1. sudo chown prometheus:prometheus file-name.rules

最後に、Prometheus構成ファイルを更新して、古いルールファイルの代わりに新しく作成したルールファイルを使用します。 エディターで構成ファイルを開きます。

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

次のように、rule_filesディレクティブの下のすべてのエントリに.ymlサフィックスを追加します。

...
rule_files:
  - alert1.rules.yml
  - alert2.rules.yml
...

ファイルを保存して、エディターを終了します。

古いアラートルールファイルは不要になったので、削除します。

  1. sudo rm alert1.rules alert2.rules

次に、Alertmanagerを検出するようにPrometheusを構成しましょう。 -alertmanager.urlフラグはもう存在しません。 代わりに、Prometheus2.0はAlertmanagerService Discoveryを導入しました。これは、多くの新機能とKubernetesなどのサービスとのより良い統合をもたらします。 Alertmanagerを使用しない場合は、このステップの残りをスキップしてください。

エディターでprometheus.ymlファイルを再度開きます。

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

次のalertingディレクティブは、Dropletのポート:9093で実行されているAlertmanagerを使用するようにPrometheusに指示します。 次のコンテンツをファイルのどこにでも追加できます。

/etc/prometheus/prometheus.yml
global:
...

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
      
rule_files:
...

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

これで、Prometheusはアラートルールを使用してAlertmanagerと通信できるようになり、初めて実行する準備が整いました。

ステップ5—Prometheus2.0を実行する

Prometheus 2.0をサービスとして実行できるようにするには、サービスファイルを作成する必要があります。 ExecStartコマンド以外はほとんど同じであるため、Prometheus1.8.2で使用したサービスファイルから始めることができます。

既存のサービスファイルをコピーして、新しいサービスファイルを作成します。

  1. sudo cp /etc/systemd/system/prometheus1.service /etc/systemd/system/prometheus.service

新しく作成したサービスファイルをエディターで開きます。

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

Prometheus 2.0は、フラグシステムに次のようないくつかの重要な変更をもたらします。

  • フラグには、一重ダッシュではなく二重ダッシュ(--)を使用して接頭辞が付けられるようになりました。
  • すべての-storage.localおよび-storage.remoteフラグが削除され、--storage.tsdbフラグに置き換えられました。
  • -alertmanager.urlは削除され、前の手順で説明したAlertmanagerServiceDiscoveryに置き換えられました。

ExecStartディレクティブを次のディレクティブに置き換えます。

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

--config.fileディレクティブは、/etc/prometheusディレクトリにあるprometheus.ymlファイルを使用するようにPrometheusに指示します。 --storage.local.pathの代わりに、--storage.tsdb.pathを使用します。 また、2つの--web.フラグを追加したため、組み込みのWebテンプレートにアクセスできます。

完了したら、ファイルを保存してテキストエディタを閉じます。

最後に、systemdをリロードして、新しく作成したサービスを使用できるようにします。

  1. sudo systemctl daemon-reload

次に、Prometheusを起動します。

  1. sudo systemctl start prometheus

サービスのステータスをチェックして、意図したとおりに機能していることを確認します。

  1. sudo systemctl status prometheus
Prometheus service status
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago Main PID: 1947 (prometheus) Tasks: 7 Memory: 54.3M CPU: 15.626s CGroup: /system.slice/prometheus.service └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ ...

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

サービスが機能することがわかったので、システムの起動時にサービスを開始できるようにします。

  1. sudo systemctl enable prometheus

PrometheusのWebUIにアクセスするには、Webブラウザでhttp://your_server_ipに移動し、Prometheusのインストール時に構成した資格情報を使用して認証します。 次のステップでWebUIを使用して、Prometheusが意図したとおりに機能していることを確認します。

ステップ6—プロメテウスのテスト

Prometheus 2が意図したとおりにすべてのエクスポーターをスクレイピングしていることを確認し、Prometheusの以前のインストールからのデータにアクセスできることを確認しましょう。

Webブラウザでhttp://your_server_ipに移動して、PrometheusWebUIにアクセスします。 Prometheusを最初にインストールしたときに設定したユーザー名とパスワードを入力するように求められます。

クレデンシャルを入力すると、グラフページが表示されます。このページでは、クエリを実行して視覚化できます。

Prometheus Graph page

クエリを実行する前に、Prometheusのバージョンとエクスポーターのステータスを確認しましょう。 クリックしてください状態ナビゲーションバーのリンクをクリックして、 ランタイムとビルド情報ボタン。 Prometheusサーバーに関する情報を含むページが表示されます。

Prometheus Runtime Information

次に、ステータスリンクをもう一度クリックし、ターゲットボタンをクリックして、エクスポーターが意図したとおりに実行されていることを確認します。 Webページには、エクスポーターが稼働しているかどうかなど、エクスポーターに関する詳細が含まれています。

Prometheus Targets

エラーが表示された場合は、チュートリアルを続行する前に、画面の指示に従ってエラーを解決してください。

Prometheus 1.8.2データソースは、エクスポーターとしてではなくデータストアとして使用されるため、表示されません。 それでは、古いデータと新しいデータの両方にアクセスできることを確認しましょう。 グラフボタンをクリックします。

Expression フィールドにnode_memory_MemAvailable/1024/1024と入力して、サーバーで使用可能なメモリをメガバイト単位で取得します。 実行ボタンをクリックします。

画面に結果が表示されます。

Prometheus Graph - Query

グラフタブをクリックして、使用可能なメモリを時間の経過とともに視覚化します。 グラフには、以前のデータと、Prometheusが機能していないときに休憩した後の最新のデータが表示されます。

Prometheus Query Visualization

古いデータが表示されない場合は、サービスのステータスを確認してPrometheus 1.8.2が起動していること、およびリモートデータベースとして使用するようにPrometheus2.0を構成したことを確認してください。

Prometheusが機能し、データを正しく報告していることを確認しました。 次に、Prometheus 1.8.2と、使用されなくなった古いデータを削除する方法を見てみましょう。

手順7—古いデータの削除(オプション)

Prometheus 1.8.2と古いデータが不要になったら、削除することをお勧めします。 次の手順に従って、すべてをクリーンアップします。

警告:これは元に戻せない操作です。 古いデータを削除すると、バックアップしない限り、データを復元することはできません。

まず、Prometheus2構成ファイルからremote_readディレクティブを削除します。 エディターでPrometheus2.0構成ファイルを開きます。

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

ファイルの最後にあるremote_readディレクティブを見つけて削除します。

remote_read:
	- url: http://localhost:9089/api/v1/read

ファイルを保存して、テキストエディタを閉じます。 Prometheusを再起動して、変更を適用します。

  1. sudo systemctl restart prometheus

サービスが正しく実行されていることを確認します。

  1. sudo systemctl status prometheus
Prometheus service status
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago Main PID: 1947 (prometheus) Tasks: 7 Memory: 54.3M CPU: 15.626s CGroup: /system.slice/prometheus.service └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ ...

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

次に、prometheus1サービスを無効にして削除し、Prometheus1.8.2に関連するすべてのディレクトリとファイルをクリーンアップします。

サービスを無効にして、自動的に起動しないようにします。

  1. sudo systemctl disable prometheus1

次に、サービスを停止します。

  1. sudo systemctl stop prometheus1

出力がない場合は、操作が正常に完了したことを示しています。

次に、prometheus1サービスファイルを削除します。

  1. sudo rm /etc/systemd/system/prometheus1.service

最後に、残ったファイルは不要になったので削除します。 まず、/usr/local/binディレクトリにあるprometheus1およびpromtool1実行可能ファイルを削除します。

  1. sudo rm /usr/local/bin/prometheus1 /usr/local/bin/promtool1

次に、データと構成の保存に使用した/etc/prometheus1および/var/lib/prometheus1ディレクトリを削除します。

  1. sudo rm -r /etc/prometheus1 /var/lib/prometheus1

Prometheus 1.8.2がシステムから削除され、古いデータが失われます。

結論

このチュートリアルでは、Prometheus1.xをPrometheus2.0にアップグレードし、すべてのルールファイルを更新し、Alertmanagerが存在する場合はそれを検出するようにPrometheusを構成しました。

Prometheus 2.0に含まれるすべての変更について詳しくは、 Prometheus2.0の公式投稿とプロジェクトの変更ログをご覧ください。