クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

オブザーバビリティの基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 10分コマンド6個

このレッスンですること

ソフトウェアを動かすことは、運用の半分にすぎません。もう半分は、誰かに言われる前に不具合に気づくことです。監視(monitoring)は、プログラムの数値を時間とともに集めることです。アラート(alert)は、その数値を見張って、おかしいときに知らせるルールです。このラボには、Web サーバー、Prometheus という集計ツール、Grafana というグラフ表示ツールがあります。質問を1つして、アラートのルールを1つ書き、わざとサーバーを止めて、アラートが鳴るのを見ます。

始める前に

メモ

このレッスンの上のバーにある ラボを起動 を押し、動いていると表示されるまで待ってください。4つのコンテナは app、exporter、prometheus、grafana で、この名前でお互いを見つけます。下の 実行 ボタンは、ラボのターミナルにコマンドを同じセッションで順番に入力します。実行の様子を見たり、自分でコマンドを打ったりするときは、バーの ターミナルを開く(新しいタブ) を押します。

1. Prometheus に質問する

Prometheus は、集めた数値をすべて持っています。質問に使う言葉を PromQL といい、いちばん簡単な質問は数値の名前そのものです。nginx_up は、Web サーバーが応答しているあいだは 1、応答しないときは 0 です。答えは JSON で返ります。"value":[ のあとに時刻と "1" が続いているところを探してください。同じ質問をブラウザの Prometheus のページに入力すると、表やグラフで見られます。-w "\n" は答えの最後に改行を付けます。そのため、答えがコマンドの下の行に表示されます。

コマンド
curl -s -w "\n" 'http://prometheus:9090/api/v1/query?query=nginx_up'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. アラートのルールを書く

ルールは「この質問が10秒続けて当てはまったら、アラートを出す」と言っています。このルールの質問は nginx_up == 0、つまり「サーバーが止まっている」です。1つ目のコマンドは、それを1行で、Prometheus のコンテナのルール用フォルダに書き込みます。Prometheus はそこの .yml ファイルをすべて読みます。何も表示されません。2つ目のコマンドは、Prometheus にファイルをもう一度読ませます。これも何も表示されません。そのあとブラウザの Prometheus のページで Alerts(アラート)を開くと、AppDown が並んでいます。問題がないので緑色です。

コマンド
docker exec prometheus sh -c 'echo "$0" > /etc/prometheus/rules/lab.yml' '{"groups":[{"name":"lab","rules":[{"alert":"AppDown","expr":"nginx_up == 0","for":"10s","labels":{"severity":"page"}}]}]}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s -X POST http://prometheus:9090/-/reload

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3. サーバーを止めて、アラートが鳴るのを見る

docker stop app は Web サーバーを止めて、その名前を表示します。Prometheus は10秒ほどで気づきます。ルールが求めた10秒を待つあいだ、アラートは "state":"pending"(待機中)です。2つ目のコマンドの 実行 を、数秒あけて2回押してください。答えが "state":"firing"(発火中)に変わります。そのあと docker start app でサーバーを元に戻します。15秒ほど待ってから2つ目の 実行 をもう一度押すと、答えは "alerts":[] に戻ります。最後に Grafana を開き、Explore(探索)を押して、データソースに Prometheus を選び、nginx_up を実行してください。ダッシュボードのパネルが描く線は、これです。

コマンド
docker stop app

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s -w "\n" http://prometheus:9090/api/v1/alerts

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
docker start app

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

先生へ

ヒント

このレッスンは ラボで進めるレッスン の小さな例です。手順と 実行 ボタンがレッスンで、ラボは生徒一人ひとりのコピーです。ラボは4つのサービスと2つの名前付きボリュームでできています。ここには自動採点はありません。生徒は、ルール、アラートが発火している画面のスクリーンショット、Grafana のパネルを提出し、当番の人ならどうするかを一文で添えます。ルールは Prometheus のボリューム上のファイルにあるので、ラボを停止して起動し直しても残っています。自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューから一から作ってください。

このラボとソースについて: 可観測性のラボ:Prometheus と Grafana、アラートルールを書く

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。