著者はhttps://www.brightfunds.org/funds/diversity-in-tech [技術の多様性]ファンドを選択して、https://do.co/w4do-cta [Write for DOnations]プログラム。
前書き
Prometheusは、サービスからメトリックを収集するオープンソースの監視システムです。 Prometheus 2.0は、新しい時系列データベース、リソース使用の改善、アラートの新しい構成フォーマット、Alertmanagerディスカバリーの改善など、多くの変更と改善をもたらします。
このチュートリアルでは、既存のPrometheus 1.xインストールをPrometheus 2.0にアップグレードします。 「+ tsdb +」と呼ばれるPrometheus 2.0の新しい時系列データベースは、Prometheus 1.xと互換性がありません。つまり、Prometheus 2.xではPrometheus 1.xインスタンスからデータを読み取ることができません。 この制限を回避するには、古いデータを利用できるようにするために、Prometheus 1.xを読み取り専用データストアとして機能するように設定します。
Prometheus 2はアラートルールに新しい形式を使用するため、既存のアラートルールを新しい形式に更新して、Alertmanagerで作業します。
最後に、Web UIを使用して、Prometheusが意図したとおりに機能することを確認します。
このチュートリアルでは、最も重要な変更についてのみ説明します。 最新バージョンにアップグレードする前に、https://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0/ [Announcing Prometheus 2.0]を読んで、次のいずれの影響も受けないことを確認してください。その他の変更。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
1つのUbuntu 16.04サーバーは、リンク:[Ubuntu 16.04での初期サーバーセットアップチュートリアル]に従ってセットアップします。これには、sudo非ルートユーザーとファイアウォールが含まれます。
-
Prometheus Web UIを含む、サーバーにインストールされた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 +」機能を使用して古いデータから読み取るようにPrometheus 2.0を設定する必要があります。
`+ prometheus -version `コマンドを使用して、現在のPrometheusバージョンをチェックアウトします。 出力にはバージョンとビルド情報が含まれます。 既にバージョン「+1.8.2」を実行している場合は、この手順をスキップしてください。
prometheus -version
prometheus -version outputprometheus, version (branch: master, revision: 3afb3fffa3a29c3de865e1172fb740442e9d0133)
build user: root@0aa1b7fc430d
build date: 20170612-11:44:05
go version: go1.8.3
さらに先に進む前に、Prometheusを停止して、ファイルを置き換えます。
sudo systemctl stop prometheus
プロジェクトのhttps://github.com/prometheus/prometheus/releases[GitHubリリース]ページで、チェックサムとともにPrometheus 1.8.2を見つけることができます。 「+」というファイルが必要です。 次の ` curl +`コマンドを使用して、Prometheusアーカイブとチェックサムをホームディレクトリにダウンロードします。
cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download//
curl -LO https://github.com/prometheus/prometheus/releases/download//
破損していない本物のアーカイブがあることを確認するには、 `+ sha256sum `コマンドを使用してアーカイブのチェックサムを生成し、それを ` sha256sums.txt +`ファイルと比較します。
sha256sum -c 2>&1 | grep OK
Checksums checkprometheus-1.8.2.linux-amd64.tar.gz:
出力に「+ OK +」が表示されない場合は、ダウンロードしたアーカイブを削除し、前の手順に戻って再度ダウンロードします。
次に、アーカイブを解凍します。
tar xvf
`+ prometheus `および ` promtool `実行可能ファイルを ` / usr / local / bin +`ディレクトリにコピーします。
sudo cp prometheus-1.8.2.linux-amd64/prometheus /usr/local/bin
sudo cp prometheus-1.8.2.linux-amd64/promtool /usr/local/bin
ファイルのユーザーとグループの所有権を* prometheus *ユーザーに設定します。
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
最後に、Prometheusを起動して、意図したとおりに機能することを確認します。
sudo systemctl start prometheus
最後に、サービスのステータスを確認します。
sudo systemctl status prometheus
次の出力が表示されます。
Prometheus service status● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
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/
...
サービスのステータスが「++」でない場合は、画面上のログを追跡し、前の手順を再トレースして問題を解決してからチュートリアルを続けます。
Prometheusのバージョンを確認して、バージョン「++」を実行していることを確認します。
prometheus -version
prometheus -version outputprometheus, version (branch: HEAD, revision: 5211b96d4d1291c3dd1a569f711d3b301b635ecb)
build user: root@1412e937e4ad
build date: 20171104-16:09:14
go version: go1.9.2
「バージョン」が表示されない場合は、正しいファイルをダウンロードしたことを確認し、このセクションの手順を繰り返します。
最後に、ダウンロードしたファイルは不要になったため、削除します。
rm -rf
次に、既存のインストールを再構成して、インストール後にPrometheus 2.0に干渉しないようにします。
手順2-Prometheus 1.8.2を個別のサービスとして構成する
古いデータにアクセスできるようにPrometheus 1.8.2を維持したいのですが、古いインストールがPrometheus 2のインストール時に干渉しないことを確認する必要があります。 そのためには、すべてのPrometheus関連のディレクトリと実行可能ファイルの名前に「1」を追加します。 たとえば、「+ prometheus 」実行可能ファイルは「 prometheus1 +」になります。 また、サービス定義を更新し、別のポートで実行するように設定します。
続行する前に、Prometheusを停止して、ファイルとディレクトリの名前を変更できるようにします。
sudo systemctl stop prometheus
+ / usr / local / bin +`ディレクトリには、2つのPrometheus実行可能ファイル( `+ prometheus +`と `+ promtool +
)があります。 これらの名前をそれぞれ「+ prometheus1 」と「 promtool1 +」に変更します。
sudo mv /usr/local/bin/prometheus /usr/local/bin/prometheus1
sudo mv /usr/local/bin/promtool /usr/local/bin/promtool1
Prometheusには、設定ファイルを保存するための `+ / etc / prometheus `とデータを保存するための ` / var / lib / prometheus +`の2つの関連ディレクトリがあります。 これらのディレクトリの名前も変更します。
sudo mv /etc/prometheus /etc/prometheus1
sudo mv /var/lib/prometheus /var/lib/prometheus1
Prometheus 1.8.2を読み取り専用のデータストアとして実行するため、エクスポーターからデータを収集する必要はありません。 これを確実にするために、次の `+ truncate +`コマンドを使用して設定ファイルからすべてのコンテンツを削除します。 ファイルの内容を削除する前に、ファイルのバックアップを作成して、後でPrometheus 2.0の構成に使用できるようにします。
sudo cp /etc/prometheus1/prometheus.yml /etc/prometheus1/prometheus.yml.bak
次に、設定ファイルの内容を `+ truncate`で空にします。
sudo truncate -s 0 /etc/prometheus1/prometheus.yml
次に、サービスファイルの名前を「+ prometheus 」から「 prometheus1 +」に変更します。
sudo mv /etc/systemd/system/prometheus.service /etc/systemd/system/prometheus1.service
テキストエディターでPrometheusサービスファイルを開きます。
sudo nano /etc/systemd/system/prometheus1.service
デフォルトのポート「9090」でPrometheus 2.0を実行するため、Prometheus 1.8.2がリッスンするポートをポート「9089」に変更します。 `+ ExecStart +`ディレクティブを次の設定に置き換えます:
ExecStart-/etc/systemd/system/prometheus.service
...
ExecStart=/usr/local/bin/ \
-config.file /etc//prometheus.yml \
-storage.local.path /var/lib// \
-web.listen-address ":"
...
ファイルを保存し、テキストエディターを閉じます。 変更を適用するには、 `+ systemd +`をリロードします。
sudo systemctl daemon-reload
`+ prometheus1 +`サービスを開始します。
sudo systemctl start prometheus1
意図したとおりに機能することを確認するには、サービスのステータスを確認します。
sudo systemctl status prometheus1
前と同様に、出力にはPID、ステータスなどのプロセスに関する情報が含まれます。
Service status output● prometheus1.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus1.service; disabled; vendor preset: enabled)
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/
...
サービスのステータスが「++」でない場合は、画面上のログを追跡し、前の手順を再トレースして問題を解決してからチュートリアルを続けます。
サービスを有効にして、システムの起動時に確実に開始されるようにします。
sudo systemctl enable prometheus1
この時点で、Prometheus 1.8.2は輸出業者をスクレイピングしません。 これにより、Prometheus 2.0をセットアップすると、データの一貫性が確保されます。Prometheus2.0は、現在のインストールを古いデータの読み取り専用データストアとして使用します。 次のステップでは、Prometheus 2.0をインストールし、Prometheus 1.8.2を使用して古いデータにアクセスします。
ステップ3-Prometheus 2.0の構成
このステップでは、Prometheus 2.0を設定してエクスポーターをスクレイピングし、Prometheus 1.8.2を読み取り専用データストアとして使用して、既存のデータにアクセスできるようにします。
チュートリアルを続ける前に、https://www.digitalocean.com/community/tutorials/how-to-install-prometheus-on-ubuntu-16-04#step-2-%のステップ1および2に従ってPrometheus 2をインストールします。 E2%80%94-downloading-prometheus [Ubuntu 16.04にPrometheusをインストールする方法]チュートリアル。
Prometheusをインストールしたら、新しい構成ファイルを作成します。 構成ファイルの形式は変更されていないため、Prometheus 1.x構成ファイルをPrometheus 2で使用できます。 前の手順で作成した既存のPrometheus設定のバックアップを `+ / etc / prometheus / +`ディレクトリにコピーします。
sudo cp /etc/prometheus1/prometheus.yml.bak /etc/prometheus/prometheus.yml
新しく作成された構成ファイルのユーザーとグループの所有権を* prometheus *ユーザーに設定します。
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
このファイルに加える唯一の変更は、Prometheus 2.0にPrometheus 1.8.2を読み取り専用データストアとして使用するように指示して、古いデータにアクセスできるようにすることです。 テキストエディターで構成ファイルを開きます。
sudo nano /etc/prometheus/prometheus.yml
設定ファイルの最後に、リモートのPrometheusインスタンスから読み込む `+ remote_read `ディレクティブを追加します。 Prometheus 1.8.2インスタンスの ` localhst:9089 +`から読み取るように指示します。
プロメテウス構成ファイル-/etc/prometheus/prometheus.yml
...
remote_read:
- url: http://localhost:/api/v1/read
完了したら、ファイルを保存してテキストエディターを閉じます。
Prometheus 2.0を初めて実行する前に、アラートルールを更新し、Prometheusと連携するようにAlertmanagerを構成します。 アラートルールまたはAlertmanagerを使用しない場合は、次の手順をスキップしてください。
ステップ4-アラートの構成(オプション)
Prometheus 1.xアラートルールは、カスタム構文を使用して定義されました。 バージョン2.0では、YAMLを使用してアラートルールを定義します。 移行を容易にするために、Prometheusの「+ promtool +」コマンドは、古いルールファイルを新しい形式に変換できます。 アラートルールを使用しない場合は、この手順をスキップできます。
まず、持っているすべてのルールを `+ / etc / prometheus1 `ディレクトリから ` / etc / prometheus +`ディレクトリにコピーします。
sudo cp /etc/prometheus1/*.rules /etc/prometheus/
また、次のコマンドを実行して、 `+ promtool +`バージョン2.0があることを確認してください。
promtool --version
出力には、 `+ promtool +`バージョンとビルド情報が含まれます。
promtool --versionpromtool, 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 or`ディレクトリに移動します。
cd /etc/prometheus
ディレクトリにある各 `+ .rules `ファイルに対して次の ` promtool +`コマンドを実行します。
sudo promtool update rules .rules
これにより、提供されたファイルから `+ .rules.yml +`ファイルと呼ばれる新しいファイルが生成されます。 画面にエラーメッセージが表示された場合は、画面上のログに従って問題を解決してから、チュートリアルを続けてください。
ユーザーとグループの所有権が `+ promtool +`によって作成されたファイルに正しく設定されていることを確認してください。
sudo chown prometheus:prometheus .rules
最後に、Prometheus構成ファイルを更新して、古いルールファイルの代わりに新しく作成したルールファイルを使用します。 エディターで構成ファイルを開きます。
sudo nano /etc/prometheus/prometheus.yml
次のように、 `+ rule_files `ディレクティブの下にあるすべてのエントリに ` .yml +`サフィックスを追加します。
...
rule_files:
- alert1.rules
- alert2.rules
...
ファイルを保存し、エディターを終了します。
古いアラートルールファイルは不要になったため、削除します。
sudo rm
次に、Prototheusを設定してAlertmanagerを検出します。 `+ -alertmanager.url +`フラグはもう存在しません。 代わりに、Prometheus 2.0はAlertmanager Service Discoveryを導入しました。これにより、多くの新機能とKubernetesなどのサービスとのより良い統合がもたらされます。 Alertmanagerを使用しない場合は、この手順の残りをスキップしてください。
エディターで `+ prometheus.yml +`ファイルを再度開きます:
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-Prometheus 2.0の実行
Prometheus 2.0をサービスとして実行できるようにするには、サービスファイルを作成する必要があります。 `+ ExecStart +`コマンド以外はほとんど同じなので、Prometheus 1.8.2で使用したサービスファイルから開始できます。
既存のサービスファイルをコピーして、新しいサービスファイルを作成します。
sudo cp /etc/systemd/system/prometheus1.service /etc/systemd/system/prometheus.service
エディターで新しく作成したサービスファイルを開きます。
sudo nano /etc/systemd/system/prometheus.service
Prometheus 2.0は、以下を含むフラグシステムにいくつかの重要な変更をもたらします。
-
フラグには、一重ダッシュの代わりに二重ダッシュ(
-
)を使用してプレフィックスが付けられるようになりました。 -
すべての「+ -storage.local」および「+ -storage.remote 」フラグは削除され、「-storage.tsdb」フラグに置き換えられました。
-
`+ -alertmanager.url +`は削除され、Alertmanager Service Discoveryに置き換えられました。これについては前のステップで説明しました。
`+ 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 +`ディレクティブは、Prometheusに `+ / etc / prometheus +`ディレクトリの `+ prometheus.yml +`ファイルを使用するよう指示します。 `+-storage.local.path`の代わりに、
-storage.tsdb.path`を使用します。 また、2つの `-web。+`フラグを追加したため、組み込みのWebテンプレートにアクセスできます。
完了したら、ファイルを保存してテキストエディターを閉じます。
最後に、systemdをリロードして、新しく作成したサービスを使用できるようにします。
sudo systemctl daemon-reload
次に、Prometheusを起動します。
sudo systemctl start prometheus
サービスのステータスをチェックして、意図したとおりに機能していることを確認します。
sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
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/
...
サービスのステータスが「++」でない場合は、画面上のログを追跡し、前の手順を再トレースして問題を解決してからチュートリアルを続けます。
サービスが機能することがわかったので、システムの起動時に開始できるようにします。
sudo systemctl enable prometheus
Webブラウザで「+ http:// +」に移動し、Prometheusのインストール時に設定した資格情報を使用して認証することにより、PrometheusのWeb UIにアクセスできます。 次のステップでWeb UIを使用して、Prometheusが意図したとおりに機能することを確認します。
ステップ6-プロメテウスのテスト
Prometheus 2がすべてのエクスポーターを意図したとおりスクレイピングし、Prometheusの以前のインストールからのデータにアクセスできることを確認しましょう。
Webブラウザで「+ http:// +」に移動して、Prometheus Web UIにアクセスします。 Prometheusを最初にインストールしたときに設定したユーザー名とパスワードを入力するよう求められます。
資格情報を入力すると、*グラフ*ページが表示され、クエリを実行して視覚化できます。
image:https://assets.digitalocean.com/articles/promethus_2_upgrade_1604/EqSVHAn.png [プロメテウスグラフページ]
クエリを実行する前に、Prometheusのバージョンとエクスポーターのステータスを確認しましょう。 ナビゲーションバーの[ステータス]リンクをクリックし、[ランタイムとビルド情報]ボタンをクリックします。 Prometheusサーバーに関する情報を含むページが表示されます。
image:https://assets.digitalocean.com/articles/promethus_2_upgrade_1604/WmqDmEc.png [Prometheus Runtime Information]
次に、[ステータス]リンクをもう一度クリックし、[ターゲット]ボタンをクリックして、エクスポーターが意図したとおりに実行されていることを確認します。 Webページには、エクスポーターが稼働しているかどうかなど、エクスポーターに関する詳細が含まれています。
image:https://assets.digitalocean.com/articles/promethus_2_upgrade_1604/8X8y7ll.png [プロメテウスターゲット]
エラーが表示された場合は、チュートリアルを続行する前に、画面上の指示に従ってエラーを解決してください。
Prometheus 1.8.2データソースは、エクスポーターとしてではなくデータストアとして使用されるため、表示されません。 そこで、古いデータと新しいデータの両方にアクセスできるようにします。 *グラフ*ボタンをクリックします。
-
Expression *フィールドに「+ node_memory_MemAvailable / 1024/1024 +」と入力して、サーバーの使用可能なメモリをメガバイト単位で取得します。 [実行]ボタンをクリックします。
画面に結果が表示されます:
image:https://assets.digitalocean.com/articles/promethus_2_upgrade_1604/8ZEKOvP.png [プロメテウスグラフ-クエリ]
*グラフ*タブをクリックして、使用可能なメモリを経時的に視覚化します。 グラフには、以前のデータが表示され、Prometheusが機能していなかった休憩の後、最新のデータが表示されます。
image:https://assets.digitalocean.com/articles/promethus_2_upgrade_1604/65dC32n.png [Prometheus Query Visualization]
古いデータが表示されない場合は、サービスのステータスを確認してPrometheus 1.8.2が起動していることと、Prometheus 2.0がリモートデータベースとして使用するように設定していることを確認してください。
Prometheusが正常に機能し、データを正しく報告していることを確認しました。 次に、Prometheus 1.8.2と古いデータを使用しなくなったら削除する方法を見てみましょう。
ステップ7-古いデータの削除(オプション)
不要になったら、Prometheus 1.8.2と古いデータを削除できます。 すべてをクリーンアップするには、次の手順に従います。
最初に、Prometheus 2設定ファイルから `+ remote_read +`ディレクティブを削除します。 エディターでPrometheus 2.0構成ファイルを開きます。
sudo nano /etc/prometheus/prometheus.yml
ファイルの最後にある `+ remote_read +`ディレクティブを見つけて削除します。
remote_read:
- url: http://localhost:/api/v1/read
ファイルを保存し、テキストエディターを閉じます。 Prometheusを再起動して、変更を適用します。
sudo systemctl restart prometheus
サービスが適切に実行されていることを確認します。
sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
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/
...
サービスのステータスが「++」でない場合は、画面上のログを追跡し、前の手順を再トレースして問題を解決してからチュートリアルを続けます。
次に、 `+ prometheus1 +`サービスを無効にして削除し、Prometheus 1.8.2に関連するすべてのディレクトリとファイルをクリーンアップします。
サービスを無効にして、自動的に起動しないようにします。
sudo systemctl disable prometheus1
次に、サービスを停止します。
sudo systemctl stop prometheus1
出力は、操作が正常に完了したことを示しません。
次に、 `+ prometheus1 +`サービスファイルを削除します。
sudo rm /etc/systemd/system/prometheus1.service
最後に、不要になったファイルを削除します。 最初に、 `+ / usr / local / bin `ディレクトリにある ` prometheus1 `および ` promtool1 +`実行可能ファイルを削除します。
sudo rm /usr/local/bin/prometheus1 /usr/local/bin/promtool1
次に、データと設定の保存に使用したディレクトリ「+ / etc / prometheus1 」と「 / var / lib / prometheus1 +」を削除します。
sudo rm -r /etc/prometheus1 /var/lib/prometheus1
Prometheus 1.8.2がシステムから削除され、古いデータはなくなりました。
結論
このチュートリアルでは、Prometheus 1.xをPrometheus 2.0にアップグレードし、すべてのルールファイルを更新し、Alertmanagerが存在する場合に検出するようにPrometheusを構成しました。
Prometheus 2.0に含まれるすべての変更の詳細については、公式のhttps://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0/[Prometheus 2.0の発表]投稿とhttps:// githubをご覧ください。 .com / prometheus / prometheus / blob / master / CHANGELOG.md#200—2017-11-08 [プロジェクトの変更ログ]。