このレッスンですること
ソフトウェアを動かすことは、運用の半分にすぎません。もう半分は、誰かに言われる前に不具合に気づくことです。監視(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 のボリューム上のファイルにあるので、ラボを停止して起動し直しても残っています。自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューから一から作ってください。