前書き
Monitは、さまざまなイベントベースのアクションを実行できる無料のオープンソースサービス監視アプリケーションです。 Monitは、電子メール通知を送信したり、サービスやアプリケーションを再起動したり、その他のレスポンシブアクションを実行したりできます。
このチュートリアルは、基本的なLEMPスタック(Linux、Nginx、MySQL、PHP)で構築します。 Monitは、スタック内のすべてのサービスを監視し、悪条件のルートユーザーに警告するために組み込まれます。
オプションの外部Monitサーバーは、Webアプリケーションまたは他のサービスのリモート監視にも使用できます。
前提条件
-
始める前に、まずUbuntu 14.04ドロップレットをセットアップする必要があります
-
sudo権限を持つ標準ユーザーアカウントが必要です。
-
このチュートリアルでは、既存のLEMPスタックにMonitを追加します。 初期LEMPスタックの作成方法に関するチュートリアルについては、https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14を参照してください-04 [Linux、nginx、MySQL、PHP(LEMP)スタックをUbuntu 14.04にインストールする方法]
-
オプション:リモートWebサイト、DNS、またはメールサーバーを監視する場合は、パブリックにアクセス可能なドメインまたはIPアドレスでそのサーバーをセットアップする必要があります(詳細は手順6を参照)
手順1-Monit通知の電子メール配信を構成する
システム監視の一部には、通常、アラートの電子メール通知が含まれます。 そのため、Monitが電子メール通知を送信するには、適切な電子メール配信が必要です。 典型的なMonitアラートメールは次のようになります。
From: [email protected]
To: [email protected]
Resource limit matched Service example.com
Date: Mon, 22 Dec 2014 03:04:06
Action: alert
Host: example.com
Description: cpu user usage of 79.8% matches resource limit [cpu user usage>70.0%]
Your faithful employee,
Monit
このチュートリアルでは、アラートがトリガーされるたびにメールを送信するようにMonitをセットアップします。
注: Monitの通知は、デフォルトでスパムフォルダに送信される可能性があります。 メールが正常に配信される可能性が最も高くなるように、リバースDNS(PTRレコード)を適切に構成する必要があります。 Dropletのホスト名は完全修飾ドメイン名(FQDN)と一致する必要があるため、たとえば両方を*にすることができます。 DigitalOceanドロップレットのPTRレコードを編集するには、DigitalOceanコントロールパネルにアクセスします。 *設定*に移動し、*名前変更*タブを選択します。 新しいホスト名を入力して、 Rename *をクリックします。
このガイドでは、既存のメール転送エージェント(MTA)がないことを前提としているため、Postfixをインストールします。 Postfixのローカルインストールにより、システムはGmailやYahooなどの外部メールプロバイダーに通知メールを送信できます。
MTAとしてPostfixのインストールを開始するには、まずシステムのリポジトリソースリストを更新します。
sudo apt-get update
次に、UbuntuのリポジトリからPostfixおよびGNU Mailutilsパッケージをインストールします。
sudo apt-get install postfix mailutils
インストールの終わり近くに、以下のスクリーンショットに示すように、サーバー構成タイプを選択するよう求められます。 *インターネットサイト*を選択します。
image:https://assets.digitalocean.com/articles/Lemp_Monit/1.png [Postfix-インターネットサイトの選択]
*システムメール名*の入力を求められたら、ドロップレットの完全修飾ドメイン名(FQDN)を使用します。 *注意:*システムメール名は、後で `+ / etc / mailname +`で変更することもできます。
image:https://assets.digitalocean.com/articles/Lemp_Monit/2.png [Postfix-システムメール名の設定]
次に、編集するファイルを開きます。 このガイドではNanoを使用しますが、任意のテキストエディターを使用できます。
sudo nano /etc/aliases
ここで、Monitの通知メールを受信する個人のメールアドレスを追加します。 これらのメール通知は、LEMPサーバーのルートユーザーから送信されます。
postmaster: root
root:
必要に応じて、複数の宛先を追加することもできます。
root: , ,
変更を保存してNanoを終了します。 次に、次のコマンドを実行してエイリアスファイルを更新します。
sudo newaliases
ドロップレットからテストメッセージを送信して、メール配信を確認できます。 テストメッセージが受信トレイに最初に表示されない場合は、スパムフォルダーを確認してください。
echo test | mail -s "test message from my VPS" root
手順2-Monitのインストールと構成
MonitはUbuntuパッケージリポジトリでも利用できます。 Monitの簡単なリファレンスガイドについては、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-monit [このチュートリアル]を参照してください。
Monitは、LEMPサーバーに以下を使用してインストールできます。
sudo apt-get install monit
Ubuntu 14.04では、Monit設定ファイルはにあり、メインのMonit設定ファイルは `+ / etc / monit / monitrc +`です。
編集のためにNanoで開くには:
sudo nano /etc/monit/monitrc
次の行のコメントを解除し、以下に示すように変更します。
set mailserver #Use localhost for email alert delivery.
set mail-format {
from: monit@$HOST
subject: monit alert -- $EVENT $SERVICE
message: $EVENT Service $SERVICE
Date: $DATE
Action: $ACTION
Host: $HOST
Description: $DESCRIPTION
Your faithful employee,
Monit
}
set alert #Set email address to receive alerts. This guide uses root mail.
ファイル内で、次の行のコメントを外し、サーバーのドメインまたはIPアドレスに合わせて変更します。
check system
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if swap usage > 25% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
また、ファイルの最後にこのエントリを追加します。
check filesystem rootfs with path / #Alert if low on disk space.
if space usage > 90% then alert
変更を保存してNanoを終了します。
手順3-MonitでLEMPサービスのサービス監視を構成する
Ubuntu 14.04では、Monitの設定は、 `+ / etc / monit / monitrc `ファイルで直接指定するか、 ` / etc / monit / conf.d / `の個々のファイルを介して指定できます。 このチュートリアルでは、個々のファイルは ` / etc / monit / conf.d / +`ディレクトリの下に作成されます。
最初に、サービスを管理する手段をMonitに提供します。 このチュートリアルを簡単にするために、すべてのプロセス監視を `+ / etc / monit / conf.d / lemp-services +`にある単一のファイルに配置します。 次のエントリを使用して、MonitはNginx、MySQL、PHP-FPMを監視し、何らかの理由でこれらのサービスが異常停止した場合、これらのサービスを再起動します。
Nanoを使用して作業ファイルを作成できます。
sudo nano /etc/monit/conf.d/lemp-services
LEMPスタックのサービスに次のエントリを追加します。
check process nginx with pidfile /var/run/nginx.pid
group www-data
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
check process php5-fpm with pidfile /var/run/php5-fpm.pid
start program = "/etc/init.d/php5-fpm start"
stop program = "/etc/init.d/php5-fpm stop"
次に、変更を保存します。
手順4-正常でないLEMPサービスを再起動するためのアクションを追加する
Monitが選択したサービスを管理できるようになったので、必要に応じてサービスを再起動するアクションを追加できます。 たとえば、MonitにはTCP接続を監視する機能があります。 サーバーがHTTP接続を提供しなくなった場合、MonitはPHP-FPMまたはNginxを再起動して問題を自動的に解決できます。
既存の構成を構築するために、 `+ / etc / monit / conf.d / lemp-services +`をさらに編集します。 以下に追加する内容を示します。HTTP接続が使用できなくなった場合、MonitにNginxとPHP-FPMを再起動するよう指示します。 さらに、ソケットが利用できない場合、MonitにMySQLを再起動させます。
*注:*最初と3番目のエントリに表示されるドロップレットのドメインまたはIPアドレスを必ず使用してください。
check process nginx with pidfile /var/run/nginx.pid
group www-data
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
check process php5-fpm with pidfile /var/run/php5-fpm.pid
start program = "/etc/init.d/php5-fpm start"
stop program = "/etc/init.d/php5-fpm stop"
変更を保存してNanoを閉じます。 次に、Monitを再起動して、これまでに行った設定変更を適用します。
sudo service monit restart
ステップ5(オプション)-エラーとキーワードのログを監視する
Monitは、特定のキーワードのログを監視し、アクションを実行したり、アラートを送信したりすることもできます。 これは、Webアプリケーションに問題がある場合、またはチームが特定のトレースバックまたはログからのイベントの通知を必要とする場合に役立ちます。
以下は、Monitが監視できるタイムアウトエラーとアラートのあるNginxログの例です。
2014/12/22 11:03:54 [error] 21913#0: *202571 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 2600:3c01::f03c:91ff:fe6e:5a91, server: example.com, request: "GET /wp-admin/admin-ajax.php?action=wordfence_doScan&isFork=1&cronKey=40cb51ccsdfsf322fs35 HTTP/1.0", upstream: "fastcgi://unix:/var/run/example.com.sock", host: "example.com"
既存の構成に基づいて、LEMPサービスの構成ファイルをNanoで再度開きます。
sudo nano /etc/monit/conf.d/lemp-services
次のエントリを追加します。 これは、PHP-FPMと通信するNginxからタイムアウトが発生したときに通知を送信します。
check file nginx-error with path /var/log/nginx/error.log
if match "^timed out" then alert
変更を保存してNanoを閉じます。 次に、Monitを再起動して、変更を有効にします。
sudo service monit restart
ステップ6(オプション)-Monitを使用してリモートWebサイトおよびその他のサービスを監視する
Monitをローカルで使用することに加えて、Monitはさまざまな外部サービスと接続を監視できます。 この例では、既に設定したMonitのローカルインスタンスを使用し、外部サービス用の新しい監視設定を追加します。
帯域外の目的のために、外部のMonitシステムをまったく異なるデータセンターに配置することをお勧めします。 Webアプリケーションがニューヨークに拠点を置く場合、サンフランシスコに小さな外部Monitサーバーを配置することが理想的です。
以下は、Monitを実行している2番目のホストに実装できる外部Monitチェックの例です。 これらの例は外部サーバーの `+ / etc / monit / conf.d / lemp-external +`ファイルに配置され、**のLEMPスタックをリモートでチェックします。
Nanoを使用して、この構成ファイルを作成します。
sudo nano /etc/monit/conf.d/lemp-external
ICMP応答とHTTPおよびHTTPS接続を監視します。
# ICMP check
check host with address
if failed icmp type echo
for 5 times within 5 cycles
then alert
# HTTP check
if failed
port 80 protocol http
for 5 times within 5 cycles
then alert
# HTTPS check
if failed
port 443 type tcpSSL protocol http
for 5 times within 5 cycles
then alert
DNSの監視:
check host with address
if failed port 53 type udp protocol dns then alert
SMTPの監視:
check host with address
if failed port 25 type tcp protocol smtp then alert
WebアプリケーションのヘルスチェックURLを監視する
Webアプリケーションの場合、MonitはヘルスチェックURLで特定のリクエストを実行することもできます。 以下は、ヘルスチェックURLが `+ https:// remote-example.com / healthcheck +`のサイト**の例です。
check host with address
if failed
port 443 type tcpSSL protocol http
request "/healthcheck"
for 5 times within 5 cycles
then alert
ステップ7-コマンドラインからMonitを管理する
Monitはコマンドラインユーティリティも提供します。 そこから、単純なコマンドを使用して、全体的なMonitステータスを確認し、監視の一時的な開始や停止などの便利なタスクを完了できます。
コマンドラインからMonitステータスチェックを実行するには、Monit Webサービスを有効にする必要があります。 これを行うには、Nanoで編集するために「+ / etc / monit / monitrc +」を開きます。
sudo nano /etc/monit/monitrc
Webサービスをローカルで有効にするには、次の行のコメントを解除します。
set httpd port 2812 and
use address localhost
allow localhost
変更を保存してNanoを終了します。 次に、Monitを再起動します。
sudo service monit restart
コマンドラインからMonitのステータスを確認できるようになりました。
以下は、監視を一時的に無効および有効にするコマンドです。
sudo monit unmonitor all
sudo monit monitor all
ステップ8-レポートの表示
設定しているすべてのチェックのレポートを見てみましょう。
sudo monit status
これで、ローカルLEMPサービスや外部チェックなど、Monitがチェックするように設定したすべての出力が表示されます。
sudo monit status
The Monit daemon 5.6 uptime: 0m
System 'example.com'
status Running
monitoring status Monitored
load average [0.00] [0.01] [0.05]
cpu 0.5%us 0.4%sy 0.0%wa
memory usage 115132 kB [22.9%]
swap usage 0 kB [0.0%]
data collected Mon, 22 Dec 2014 16:50:42
Filesystem 'rootfs'
status Accessible
monitoring status Monitored
permission 755
uid 0
gid 0
filesystem flags 0x1000
block size 4096 B
blocks total 5127839 [20030.6 MB]
blocks free for non superuser 4315564 [16857.7 MB] [84.2%]
blocks free total 4581803 [17897.7 MB] [89.4%]
inodes total 1310720
inodes free 1184340 [90.4%]
data collected Mon, 22 Dec 2014 16:50:42
Process 'nginx'
status Running
monitoring status Monitored
pid 14373
parent pid 1
uptime 28m
children 4
memory kilobytes 1364
memory kilobytes total 9228
memory percent 0.2%
memory percent total 1.8%
cpu percent 0.0%
cpu percent total 0.0%
port response time 0.018s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
Process 'mysql'
status Running
monitoring status Monitored
pid 12882
parent pid 1
uptime 32m
children 0
memory kilobytes 44464
memory kilobytes total 44464
memory percent 8.8%
memory percent total 8.8%
cpu percent 0.0%
cpu percent total 0.0%
unix socket response time 0.000s to /var/run/mysqld/mysqld.sock [DEFAULT]
data collected Mon, 22 Dec 2014 16:50:42
Process 'php5-fpm'
status Running
monitoring status Monitored
pid 17033
parent pid 1
uptime 0m
children 2
memory kilobytes 13836
memory kilobytes total 22772
memory percent 2.7%
memory percent total 4.5%
cpu percent 0.0%
cpu percent total 0.0%
port response time 0.018s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
File 'nginx-error'
status Accessible
monitoring status Monitored
permission 644
uid 0
gid 0
timestamp Mon, 22 Dec 2014 16:18:21
size 0 B
data collected Mon, 22 Dec 2014 16:50:42
Remote Host 'example.com'
status Online with all services
monitoring status Monitored
icmp response time 0.021s [Echo Request]
port response time 0.107s to example.com:443 [HTTP via TCPSSL]
port response time 0.062s to example.com:80 [HTTP via TCP]
data collected Mon, 22 Dec 2014 16:50:42
このデータを使用して、サービスの状態を確認し、有用な統計を確認してください。
トラブルシューティング
問題が発生した場合は、最初に `+ / var / log / monit.log +`にあるMonitのログを確認してください。 これにより、問題の性質に関する詳細情報が得られます。
エラーログエントリの例:
[UTC Dec 22 13:59:54] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 14:10:16] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 15:24:19] error : 'example.com' failed protocol test [HTTP] at INET[example.com:80] via TCP -- HTTP: Error receiving data -- Resource temporarily unavailable
[UTC Dec 22 15:57:15] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:00:57] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:49:00] error : 'example.com' failed, cannot open a connection to INET[example.com:443/API] via TCPSSL
結論
このガイドを完了すると、Ubuntu 14.04でLEMPスタックを監視するようにMonitが構成されているはずです。 Monitは非常に拡張性があり、小規模および大規模ネットワークのあらゆる種類のサービスを監視するために、簡単にカスタマイズまたは拡張できます。
以下は、Monitの追加リンクです。