monitのインストール
monitはプロセス監視ツールです。プロセスが停止した場合再起動したり、アラートを出したりすることができます。
1. インストール
yumのepelリポジトリからインストールできます。
# yum install --enablerepo=epel monit
2. 初期設定
(1) /etc/monitrc
monitの設定ファイル「/etc/monitrc」を編集します。
# cp /etc/monitrc /etc/monitrc.default
# vi /etc/monitrc
■デーモンモード
デーモンモードを有効にすると、バックグラウンドで処理を行います。
監視の間隔時間(秒)を指定します。(デフォルトは30秒)
#set daemon 30
set daemon 60
なお、時間遅延オプションを指定すると、サービス起動後指定の時間(秒)まで監視を行いません。(デフォルトは240秒)
※この項目を設定するとmonitのサービスが起動しない場合があるので注意。
■pidファイル
set pidfile /var/run/monit.pid
■stateファイル
set statefile /var/.monit.state
■SSLオプション(グローバルオプション)
set ssl options {
verify: disable
}
※「pemfile」は実際のSSLサーバ証明書のパス名を記載して下さい。
※monitが使用するSSLサーバ証明書は、「SSLサーバ証明書」+「中間CA証明書」+「サーバ秘密鍵(パスフレーズなし)」をまとめたものです。
※各証明書間に空白行などがあるとエラーとなるので注意して下さい。
【書式】 SET <SSL|TLS> [OPTIONS] { VERSION: <AUTO|SSLV2|SSLV3|TLSV1|TLSV11|TLSV12|TLSV13> VERIFY: <ENABLE|DISABLE> SELFSIGNED: <ALLOW|REJECT> CIPHERS: <string> PEMFILE: <path> CLIENTPEMFILE: <path> CACERTIFICATEFILE: <path> CACERTIFICATEPATH: <path> } |
- VERSION:使用する特定のSSL / TLSバージョンを設定します。デフォルトでは、MonitはAUTOを使用します。AUTOモードでは、TLSのみが使用され、SSLv2およびSSLv3は廃止されたと見なされます。SSLv2またはSSLv3を使用する必要がある場合は、バージョンを明示的に設定する必要があります。
- VERIFY:SSLサーバ証明書の検証を有効にします。これにより、サーバー証明書が信頼されていないか、無効であるか、有効期限が切れている場合、エラーが検証および報告されます。デフォルトでは、証明書の検証は無効になっていますが、有効にすることをお勧めします。そうしないと、Monitが通信相手と思われるサーバーと通信する保証はありません。
- SELFSIGNED:自己署名証明書はデフォルトで拒否されます。このオプションを使用して、自己署名証明書を許可します。警告:セキュリティ上の理由から、本番環境ではお勧めできません。そのような場合、クライアントは正しいサーバーと通信していることを確認できず、中間者やDNSハイジャックなどの攻撃が可能です。
- CIPHERS:デフォルトのSSL / TLS暗号を上書きします。
- PEMFILE:SSLサーバー証明書へのパスをPEM形式で設定します。このオプションは、monit HTTPインターフェイスに対してのみ有効です。
- CLIENTPEMFILE:PEMエンコードされたSSLクライアント証明書データベースファイルへのパスを設定します。設定すると、クライアント証明書認証が有効になります。
- CACERTIFICATEFILE:認証局(CA)証明書を含むPEMエンコードファイルへのパスを設定します。このオプションを使用しない場合、MonitはOpenSSLのデフォルトCA証明書を使用します(openssl version -dを使用してデフォルトCA証明書を取得できます)。多くのディストリビューションにはSSLとCA証明書が既にセットアップされており、通常このオプションを使用する必要はありません。
- CACERTIFICATEPATH:認証局(CA)証明書を含むディレクトリへのパスを設定します。このオプションを使用しない場合、MonitはOpenSSLのデフォルトCA証明書を使用します。多くのディストリビューションにはSSLとCA証明書が既にセットアップされており、通常このオプションを使用する必要はありません。
SSLオプションステートメントは、Monit経由で行われるすべてのSSL / TLS接続にグローバルに適用されます。SSLオプションは、ローカルチェック、メールサーバー設定、またはmmonitステートメントでも設定でき、グローバル設定を上書きまたは拡張します。 グローバルSSLオプションを設定するには、次のステートメントを.monitrcファイルの先頭近くに配置します。 |
■メールサーバの設定
set mailserver localhost
with timeout 10 seconds
【書式】 SET MAILSERVER <hostname|ip-address> [PORT number] [USERNAME string] [PASSWORD string] [using SSL [with options {...}] [CERTIFICATE CHECKSUM [MD5|SHA1] <hash>], ... [with TIMEOUT X SECONDS] [using HOSTNAME hostname] |
コンマ区切りリストを使用して、複数のメールサーバーを設定できます。Monitが最初のサーバーに接続できない場合、リスト内の次のサーバーなどを試行します。
portステートメントにより、デフォルトのSMTPポート(SSLの場合は465、TLSおよび非セキュア接続の場合は25)をオーバーライドできます。
Monitは、SMTP認証のAUTH PLAINおよびAUTH LOGINをサポートしています。USERNAMEおよびPASSWORDオプションを使用して、ユーザー名とパスワードを設定できます。
接続のSSL / TLS オプションを設定し、SSL証明書のチェックサムを確認することもできます。
デフォルトの接続タイムアウトは5秒です。TIMEOUTオプションを使用して、この制限を引き上げることができます。
例(2つのメールサーバーをフェールオーバーに設定する):
set mailserver smtp.gmail.com, smtp.other.host
デフォルトでは、MonitはSMTP HELO / EHLOおよびMessage-IDヘッダーでローカルホスト名を使用します。HOSTNAMEオプションを使用してこれをオーバーライドできます。
■メッセージフォーマット
alertメッセージの書式を指定します。
set mail-format {
from: Monit Support <monit@example.jp>
reply-to: support@example.jp
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
【書式】 set mail-format { from: Monit Support <monit@foo.bar> reply-to: support@domain.com subject: $SERVICE $EVENT at $DATE message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION. Yours sincerely, monit } |
- $EVENT:発生したイベントを説明する文字列。
- $SERVICE:サービス名
- $DATE:現在の時刻と日付(RFC 822日付スタイル)。
- $HOST:Monitが実行されているホストの名前
- $ACTION:Monitによって実行されたアクションの名前。
- $DESCRIPTION:エラー状態の説明
■アラートメッセージ
Monitは、以下の状況でアラートを生成します。
- A service does not exist (e.g. process is not running)
- Cannot read service data (e.g. cannot get filesystem usage)
- Execution of a service related script failed (e.g. start failed)
- Invalid service type (e.g. if path points to directory instead of file)
- Custom test script returned error
- Ping test failed
- TCP/UDP connection and/or port test failed
- Resource usage test failed (e.g. cpu usage too high)
- Checksum mismatch or change (e.g. file changed)
- File size test failed (e.g. file too large)
- Timestamp test failed (e.g. file is older then expected)
- Permission test failed (e.g. file mode doesn't match)
- An UID test failed (e.g. file owned by different user)
- A GID test failed (e.g. file owned by different group)
- A process' PID changed out of Monit's control
- A process' PPID changed out of Monit control
- Too many service recovery attempts failed
- A file content test found a match
- Filesystem flags changed
- A service action was performed by administrator
- A network link failed
- A network link capacity changed
- A network link saturation failed
- A network link upload/download rate failed
- Monit was started, stopped or reloaded
■アラート受信者の設定
Monitが送信したアラートを受信するための設定を行います。
アラートステートメントには、グローバルとローカルの2種類があります。
[1] グローバル構文
【書式】 SET ALERT mail-address [[NOT]{event, ...}] [REMINDER cycles] |
- サービスについてイベントが発生するたびに、指定のメールアドレスにメールを送信します。
set alert support@example.jp
[2] ローカル構文
ローカル構文を指定して、特定のサービスのみのアラートを有効にすることもできます。
【例】 check host myhost with address 1.2.3.4 if failed port 3306 protocol mysql then alert if failed port 80 protocol http then alert alert foo@baz # Local service alert |
※グローバル構文とローカル構文がある場合、ローカル構文が優先となり、グローバル構文を上書きします。
■イベントフィルターの設定
特定のイベントについてのみアラートメッセージを送信することができます。
- 「timeout」、「nonexist」イベントが発生したら、アラートを送信。
set alert support@example.jp only on { timeout, nonexist }
- Monitの起動と停止を除く、すべてのアラートを受信。
set alert support@example.jp but not on { instance }
イベントリストは以下の通りとなります。
| Event: |
Failure state: |
Success state: |
| action |
"Action failed" |
"Action done" |
| checksum |
"Checksum failed" |
"Checksum succeeded" |
| bytein |
"Download bytes exceeded" |
"Download bytes ok" |
| byteout |
"Upload bytes exceeded" |
"Upload bytes ok" |
| connection |
"Connection failed" |
"Connection succeeded" |
| content |
"Content failed", |
"Content succeeded" |
| data |
"Data access error" |
"Data access succeeded" |
| exec |
"Execution failed" |
"Execution succeeded" |
| fsflags |
"Filesystem flags failed" |
"Filesystem flags succeeded" |
| gid |
"GID failed" |
"GID succeeded" |
| icmp |
"Ping failed" |
"Ping succeeded" |
| instance |
"Monit instance changed" |
"Monit instance changed not" |
| invalid |
"Invalid type" |
"Type succeeded" |
| link |
"Link down" |
"Link up" |
| nonexist |
"Does not exist" |
"Exists" |
| packetin |
"Download packets exceeded" |
"Download packets ok" |
| packetout |
"Upload packets exceeded" |
"Upload packets ok" |
| permission |
"Permission failed" |
"Permission succeeded" |
| pid |
"PID failed" |
"PID succeeded" |
| ppid |
"PPID failed" |
"PPID succeeded" |
| resource |
"Resource limit matched" |
"Resource limit succeeded" |
| saturation |
"Saturation exceeded" |
"Saturation ok" |
| size |
"Size failed" |
"Size succeeded" |
| speed |
"Speed failed" |
"Speed ok" |
| status |
"Status failed" |
"Status succeeded" |
| timeout |
"Timeout" |
"Timeout recovery" |
| timestamp |
"Timestamp failed" |
"Timestamp succeeded" |
| uid |
"UID failed" |
"UID succeeded" |
| uptime |
"Uptime failed" |
"Uptime succeeded" |
- 各受信者ごとに独自のフィルターを持つことができます。
set alert foo@bar { nonexist, timeout, resource, icmp, connection }
set alert security@bar on { checksum, permission, uid, gid }
set alert admin@bar
障害通知
サービスが障害状態の場合に通知することもできます。
【書式】 SET ALERT mail-address [WITH] REMINDER [ON] number [CYCLES] |
- サービスが障害状態のままである場合に10サイクルごとにアラートを発生。
alert foo@bar with reminder on 10 cycles
alert foo@bar with reminder on 1 cycle
■WEBインターフェースの設定
WEBで管理管理状況が閲覧できます。
set httpd port 2812 and
# use address localhost # only accept connection from localhost
# allow localhost # allow localhost to connect to the server and
allow admin:monit # require user 'admin' with password 'monit'
with ssl { # enable SSL/TLS and set path to server certificate
pemfile: /etc/httpd/certs/latest/monit.pem
}
なお、ここで指定したポート番号をFirewallで通す必要があります。 # firewall-cmd --add-port=2812/tcp --zone=public --permanent # firewall-cmd --reload |
■Includeファイル
別ファイルに記述した各サービスのチェックコマンドを、読み込むことができます。
「/etc/monit.d」ディレクトリに保存します。
なお、ファイル名は以下に記述したパターンで指定します。
#include /etc/monit.d/*
include /etc/monit.d/*.conf
※デフォルトはワイルドカードのファイル名ですが、分かりやすくするため拡張子「.conf」を付与した形に変更します。
最終更新:2020年03月02日 21:14