monitのインストール

monitはプロセス監視ツールです。プロセスが停止した場合再起動したり、アラートを出したりすることができます。

1. インストール

yumのepelリポジトリからインストールできます。
# yum install --enablerepo=epel monit
※リポジトリの「epel」を利用する方法は、yumのリポジトリの追加登録方法 (CentOS 7)もしくはyumのリポジトリの追加登録方法 (CentOS 6)を参照して下さい。

2. 初期設定

(1) /etc/monitrc
monitの設定ファイル「/etc/monitrc」を編集します。
# cp /etc/monitrc /etc/monitrc.default
# vi /etc/monitrc
■デーモンモード
デーモンモードを有効にすると、バックグラウンドで処理を行います。
監視の間隔時間(秒)を指定します。(デフォルトは30秒)
#set daemon  30
set daemon  60
なお、時間遅延オプションを指定すると、サービス起動後指定の時間(秒)まで監視を行いません。(デフォルトは240秒)
#    with start delay 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は、以下の状況でアラートを生成します。
  1. A service does not exist (e.g. process is not running)
  2. Cannot read service data (e.g. cannot get filesystem usage)
  3. Execution of a service related script failed (e.g. start failed)
  4. Invalid service type (e.g. if path points to directory instead of file)
  5. Custom test script returned error
  6. Ping test failed
  7. TCP/UDP connection and/or port test failed
  8. Resource usage test failed (e.g. cpu usage too high)
  9. Checksum mismatch or change (e.g. file changed)
  10. File size test failed (e.g. file too large)
  11. Timestamp test failed (e.g. file is older then expected)
  12. Permission test failed (e.g. file mode doesn't match)
  13. An UID test failed (e.g. file owned by different user)
  14. A GID test failed (e.g. file owned by different group)
  15. A process' PID changed out of Monit's control
  16. A process' PPID changed out of Monit control
  17. Too many service recovery attempts failed
  18. A file content test found a match
  19. Filesystem flags changed
  20. A service action was performed by administrator
  21. A network link failed
  22. A network link capacity changed
  23. A network link saturation failed
  24. A network link upload/download rate failed
  25. 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