web-dev-qa-db-ja.com

許可されたグループであっても、monitデーモンのステータスを読み取ることができません

monit statusまたは他のCLIコマンドを機能させることができないようです。


RaspberryPiで実行するためにmonitv5.8を構築しました。監視対象のサービスを追加できます。Webインターフェイスはパブリック読み取り専用アクセス用に設定されているため、問題なくアクセスできます(これはテストサーバーであり、最終的な本番セットアップではないため、大きくはありません)。今すぐ取引)。

問題は、monit statusを実行するとrootとしてログインしているときにが得られることです。

# monit status
monit: cannot read status from the monit daemon

この/etc/inittabファイルエントリを使用して、ブート時にmonitも開始しました。

mo:2345:respawn:/usr/local/bin/monit -Ic /etc/monitrc

Monitが実行されていることを確認しました。monitプロセスを手動で強制終了するか、Raspberry Piを再起動するたびに、電子メールアラートが表示されます。そこで、次に、monitrcファイルのアクセス許可をチェックして、どのグループがアクセスを許可されているかを確認します。

# ls -al /etc/monitrc
-rw------- 1 root root 2359 Aug 24 14:48 /etc/monitrc

これが、制御ファイルの関連する許可セクションです。

set httpd port 80
    allow [omitted] readonly
    allow @root
    allow localhost
    allow 0.0.0.0/0.0.0.0

また、このファイルの権限を640に設定してグループの読み取り権限を許可しようとしましたが、何をしようとしても、上記と同じエラーが発生するか、権限が640に設定されていると、次のようになります。

# monit status
monit: The control file '/etc/monitrc' must have permissions no more than -rwx------ (0700); right now permissions are -rw-r----- (0640).

ここで何が欠けていますか? httpdを有効にする必要があることはわかっています。これは、CLIが情報を取得するために使用するインターフェイスであるため(または読んだことがあるため)、それを実行しました。そして、monitが監視ジョブを実行し、電子メールアラートを送信するという点では、それはすべて同様に機能しています。


これが私のmonitrcファイル全体です。これもバージョンv5.8であり、PAMSSLの両方をサポートしてビルドされています。プロセスはrootユーザーの下で実行されます。

# Global settings
set daemon 300
    with start delay 5
set logfile /var/log/monit.log
set pidfile /var/run/monit.pid
set idfile /var/run/.monit.id
set statefile /var/run/.monit.state

# Mail alerts
## Set the list of mail servers for alert delivery. Multiple servers may be
## specified using a comma separator. If the first mail server fails, Monit
# will use the second mail server in the list and so on. By default Monit uses
# port 25 - it is possible to override this with the PORT option.
#
set mailserver smtp.gmail.com port 587
               username [omitted] password [omitted]
               using tlsv1

## Send status and events to M/Monit (for more informations about M/Monit
## see http://mmonit.com/). By default Monit registers credentials with
## M/Monit so M/Monit can smoothly communicate back to Monit and you don't
## have to register Monit credentials manually in M/Monit. It is possible to
## disable credential registration using the commented out option below.
## Though, if safety is a concern we recommend instead using https when
## communicating with M/Monit and send credentials encrypted.
#
# set mmonit http://monit:[email protected]:8080/collector
#     # and register without credentials     # Don't register credentials
#
#
## Monit by default uses the following format for alerts if the the mail-format
## statement is missing::
set mail-format {
    from: [email protected]
 subject: $SERVICE $DESCRIPTION
 message: $EVENT

Service:     $SERVICE
Date:        $DATE
Action:      $ACTION
Host:        $Host
Description: $DESCRIPTION

          Monit instance provided by chicagomeshnet.com
}

# Web status page
set httpd port 80
    allow [omitted] readonly
    allow @root
    allow localhost
    allow 0.0.0.0/0.0.0.0

## You can set alert recipients whom will receive alerts if/when a
## service defined in this file has errors. Alerts may be restricted on
## events by using a filter as in the second example below.
3
jefflunt

-vフラグと-vvフラグを試して、ステータスコマンドの詳細度を上げます。このような問題をデバッグするための次の優れたツールはstraceです。それをインストールして実行します:

strace -efile -o trace.log monit status

ほとんどの場合、ログの終わり近くに理由が見つかります。それでも問題が解決しない場合は、次を実行します。

strace -f -o trace.log monit status

プログラムとその子が作成しているすべてのシステムコールを確認します。 見つかりません接続が拒否されましたなどのエラーを検索します。

2
Arkadi Shishlov

それを機能させるには、allow admin:monitルールが必要でした。

set httpd port 2812 and
    use address 0.0.0.0
    allow 0.0.0.0/0
    allow localhost
    allow admin:monit
    allow guest:guest read-only

この回答 および http://dasunhegoda.com/what-why-how-monit/756/ から

0
Koen.