Monitは、rootとして実行されるスタンドアロンのデーモンです。 デーモンは、Linux、Free / Net / OpenBSD、Solaris SUN、およびその他のUNIXシステムで実行されます。 これは、「お兄さん」がいるオープンソースプロジェクトです-商用MMonitプロジェクトです。 後者は、大規模な監視、インターワーキング、およびレポートの問題に関してより広範な機能を備えています。 著者のアイデアは単純です-単一のサーバーではMonitを使用し、大規模なネットワークファームではMMonitを使用します。
設定に応じて、デーモンは以下をチェックします。
- PIDプロセスの存在
- 特定のポート操作(TCP / UDP)
- 特定のポートを介した特定のプロトコル応答(SMTP、SSH、HTTP ...)
- プロセスリソース(CPU時間/ RAM)
- MD5チェックサム
- ファイルシステムのボリュームと空き領域
- アクティブな(および合計の)iノードインの数
- ファイルまたはディレクトリのアクセス許可
異なる検証方法を組み合わせることを禁止する人はいません。 1つのオブジェクトについて、チェック(テスト)は互いに依存しています。つまり、test1が最初に実行され、エラーなしで合格した場合は、test2、次に-test3などになります。
いくつかのテストが失敗した場合、monitは以下を実行できます。
- デーモンを停止、開始、または再起動します
- 一定時間待つ
- 管理者に通知(メール)
- ファイルシステムをマウント、アンマウント、または再マウントします
- 別のスクリプト(管理者が事前に作成)を実行し、それに特定のパラメーター(プロセス名/エラーテキストなど)を渡します。
アクションの組み合わせを禁止する人はいません。たとえば:
HTTPdに200メガバイト以上かかる場合-何も変わらない場合は1分間待ちます-これも解決しない場合はサービスを再起動します-5分待ちます これでも解決しない場合は、サービスを停止し、管理者に書面で通知してください。
そしてもう一つ。 Monitには独自のhttpサーバーがあります。 root権限で動作するため、悪用されるべきではありませんが、Webコンソールにアクセスできると非常に便利です。 Webサーバーは、同じ記事で個別に検討されます。
インストールとセットアップ
Monitは、ほぼすべての広く配布されています。 Debian、CentOS、およびSuseでは、それはそれが呼ばれているものです。 FreeBSDでは、PORTS / sysmgmt / monitにあります。 オペレーティングシステムの標準的な方法で記述されているため、これについては詳しく説明しません。
インストール結果は、デーモン(monit)とここにある構成ファイルになります。
#Linux、Solaris: / etc / monit / monitrc #FreeBSD / OpenBSD / NetBSD / usr / local / etc / monitrc
設定は非常に詳細に文書化されていますので、読むことをお勧めします。 詳細な例と興味深いことがたくさんあります。 原則として、ほとんどのデフォルト設定は変更できず、必要な変更のみに制限されます。
#プロセスはデーモンのように機能し、検証サイクルは120秒です。 #サイクル時間は変更できます。これは、モニターの時間の主要な単位です。 #サイクルに一度、チェックがトリガーされ、管理者からのコマンドがWebインターフェイス経由で送信されます デーモン120の設定 #メール通知が通過するサーバー。 複数の操作を実行できます。操作のシーケンスはアプリケーションのシーケンスを繰り返します メールサーバーmail.zooclub.ru 10025を設定し、 ローカルホスト #通知を受け取るのは誰ですか? アラートを設定sysadmin@zooclub.ru
monitが確認する必要がある情報は、includeコマンドでメイン構成に接続されている別のファイルに保存することもできます。
#1つのファイル /etc/devel/monitcheck.monitconfを含めます #フォルダーの拡張子を持つすべてのファイル。 include / etc / stable / monit / *
各サービスの検証を個別のファイルに保存する方が便利だと思われます。これにより、デバッグが容易になり、管理が簡単になります。
サーバー全体のステータスを監視します。
チェックシステムws1.zooclub.ru loadavg(1min)> 4の場合、アラート loadavg(5min)> 2の場合、アラート メモリ使用量が75%を超える場合、アラート CPU使用量(ユーザー)> 90%の場合、アラート CPU使用率(システム)> 40%の場合、アラート CPU使用量(待機)> 20%の場合、アラート
ファイルシステム:
#/etc/stable/monit/filesystem.conf #デバイスのマウントポイントを確認します。 #ディスクを直接確認できます(/ dev / hda)が、LVMおよびその他の論理「ディスク」ではこのフォーカスは機能しません。 #それらはマウントポイントのみでチェックでき、それ以外は何もチェックできません。 パス/ホームでデバイスのhomefsを確認してください 開始プログラム= "/ bin / mount / home" 停止プログラム= "/ bin / umount / home" 許可に失敗した場合は755 uid rootに失敗した場合、アラート #場所が20%未満の場合、最後の15回のうち少なくとも5回はアラームを鳴らし、それ以外は何もしません。 #アクティビティがあると、モニターは管理者に手紙で警告します。 15サイクル内で5回、スペース使用量が80%を超える場合、アラート #場所は終わりました、ファイルシステムをアンマウントします スペース使用量> 99%の場合は停止 #iノードについても同様です。 iノード使用率> 80%の場合、アラート iノードの使用率が99%を超える場合は停止 グループサーバー デバイスのrootfsをパス/で確認します プログラムの開始= "/ bin / mount /" #サーバーの実行中に失われる-暗い見通し。 したがって、悪い場合は、読み取り専用で再マウントしてください プログラムの停止= "/ bin / mount -o remount、ro /" 許可が失敗した場合、755 uid rootに失敗した場合、監視を解除します 15サイクル内で5回、スペース使用量が80%を超える場合、アラート スペース使用量> 99%の場合は停止 iノード使用率> 80%の場合、アラート iノードの使用率が99%を超える場合は停止 グループサーバー path / bootでデバイスのbootfsを確認します 開始プログラム= "/ bin / mount / boot" プログラムの停止= "/ bin / mount -o remount、ro / boot" #この構築は、フォルダへの権限が755でない場合、ファイルシステムのテストを「無効」にします 許可が失敗した場合、755 uid rootに失敗した場合、監視を解除します 15サイクル内で5回、スペース使用量が80%を超える場合、アラート スペース使用量> 99%の場合は停止 iノード使用率> 80%の場合、アラート iノードの使用率が99%を超える場合は停止 グループサーバー
次に、Apache Webサーバーの動作を確認します。
#/etc/stable/monit/apache.conf #ファイルチェック(サイズ、権限など): パス/ usr / local / apache / bin / httpdでファイルapache_binを確認します チェックサムに失敗した場合 #sumは標準のmd5ハッシュです。 目的のファイルにmd5sumプログラムを設定することで取得できます 合計8f7f419955cefa0b33a2ba316cba3659を期待してから監視を解除します 許可が失敗した場合、755 uid rootに失敗した場合、監視を解除します 失敗したgid rootの場合、モニター解除 #別のアドレスへの別の手紙と別のコンテンツ。 alert security@zooclub.ru { チェックサム、許可、uid、gid、unmonitor }メール形式{件名:アラーム! } グループサーバー #プロセス検証はpid-fileによって実行されます。 pidファイルのパスは常に絶対パスです pidfile /var/run/apache2.pidを使用してプロセスApacheをチェックします プログラムの開始= "/etc/init.d/apache2 start" プログラムの停止= "/etc/init.d/apache2 stop" cpu> 60%が2サイクルの場合、アラート #Webサーバーがプロセッサ時間の80%を消費し、5回のチェックサイクルが連続して行われない場合-再起動します cpu> 80%が5サイクルの場合、再起動 #彼が飲み込んだ合計メモリと同様。 5サイクルでtotalmem> 500.0 MBの場合、再起動 children> 250の場合、再起動 #5分間のサーバーの平均負荷が連続して10 8サイクルを超える場合-削減。 loadavg(5min)が8サイクルで10より大きい場合、停止します #ここで最も興味深いのはマルチステップチェックです: #最初のステップは、ポート80、httpプロトコルに接続することです 失敗した場合、ホスト127.0.0.1ポート80プロトコルhttp #判明した場合-ファイル/index.htmlをリクエストします 「/index.html」をリクエストします タイムアウト15秒 #そして、何かがチェーンでうまくいかなかった場合、デーモンを再起動します その後、再起動します #HTTP-SSL検証。 Monitは、SSLと、保護されたプロトコルを別々に考慮します。 #このようなチェックを実行するには、SSLサポート付きのmonitをビルドする必要があります。 #FreeBSDの愛好家-ビルドするときは注意してください! #デフォルトでは、SSLサポートで収集されますが、無効にするとエラーが発生します ポート443に障害が発生した場合は、tcpssl protocol httpと入力します 「/test.html」をリクエストします タイムアウト15秒 その後、再起動します #最後の5回の検証サイクルで3回以上の再起動があった場合-1回の検証サイクルをスキップします。 5サイクル以内に3回再起動するとタイムアウトする #最初のチェックに合格した場合にのみチェックすることは理にかなっています(これにはアクセス権などがあります)。 #それ以外の場合、すべてのテストは無意味です。 apache_binに依存 グループサーバー
OpenSSHD:
pidfile /var/run/sshd.pidでプロセスsshdを確認します 起動プログラム「/etc/init.d/ssh start」 停止プログラム「/etc/init.d/ssh stop」 ポート22プロトコルsshが失敗した場合は再起動します 5サイクル以内に5が再起動するとタイムアウトする グループサーバー
OpenVPN。 プロセスの存在のみを確認します。
pidfile /var/run/openvpn.link1.pidでプロセスopenvpnを確認します グループシステム プログラムの開始= "/etc/init.d/openvpn start" 停止プログラム= "/etc/init.d/openvpn stop" 5サイクル以内に5が再起動するとタイムアウトする
PostgreSQL TCPポートとソケットを介した可用性の確認
pidfile /var/run/postgresql/main.pidでプロセスpostgresをチェックします グループデータベース 開始プログラム= "/etc/init.d/postgresql start" 停止プログラム= "/etc/init.d/postgresql stop" unixsocket /var/run/postgresql/.s.PGSQL.5432 protocol pgsqlに失敗した場合、再起動します ホスト127.0.0.1ポート5432プロトコルpgsqlに障害が発生した場合、再起動します 5サイクル以内に5が再起動するとタイムアウトする グループデータベース
プロトコルと検証オプションの完全なリストはドキュメントで見つけることができます 。 確かに、彼女は英語です。
ウェブフェイス
はじめに書いたように、monitには小さいながらも非常に便利なwebmordがあります。
設定例:
#特定のポートでWebインターフェイスを有効にする httpdポート10001を設定し、 #SSLを有効にする ssl有効 #pemファイルの入手先。 SSLに必要、詳細は以下 pemfile /etc/monit/monit.pem #リッスンするアドレス(インターフェイス)。 #アドレスを指定しない場合、アドレスは次の場所で聞かれます アドレス10.10.10.21を使用 #特定のアドレスからのみアクセスを許可 #強くお勧めします! 10.10.10.22/32を許可 10.10.12.0/24を許可 #パスワードを知っている人だけにアクセスを許可します。 #パスワードは、残念ながらクリアテキストで保存されます セネガミを許可する:aoLouch0aingahce ローガンを許可:Jefae2Othaitae1S
次に、pemファイルについて説明します。 monit Webサーバーは非常に原始的であり、1つのオブジェクトにssl証明書、そのキー、およびDHファイルが必要です。 実際には、pemファイルと呼ばれます。 次のように準備します。 まず、証明書のテンプレートを作成します。
-----開始:monit.cnf ----- #RSA証明書の作成-サーバー RANDFILE = ./openssl.rnd [必須] default_bits = 1024 encrypt_key = yes 識別名= req_dn x509_extensions = cert_type [req_dn] countryName =国名(2文字のコード) countryName_default = RU stateOrProvinceName =都道府県名(フルネーム) stateOrProvinceName_default = NorthWest localityName =地域名(例:都市) localityName_default =サンクトペテルブルク OrganizationName =組織名(会社など) organizationName_default = AnyOne LLC organizationalUnitName =組織単位名(セクションなど) organizationalUnitName_default = Net commonName =共通名(サーバーのFQDN) commonName_default = ws1.zooclub.ru emailAddress =メールアドレス emailAddress_default = security@zooclub.ru [cert_type] nsCertType =サーバー -----終了:monit.cnf -----
もちろん、ニーズに合わせて値を変更する必要があります
次に、テンプレートから証明書を収集します。
openssl req -new -x509 -days 720 -nodes \ -config ./monit.cnf -out /etc/monit/monit.pem \ -keyout /var/certs/monit.pem#Diffie-Hellman番号を生成して非表示にする同じopenssl gendh 512ファイル>> /etc/monit/monit.pem#openssl証明書の読みやすさを確認しますx509 -subject -dates -fingerprint -noout -in /etc/monit/monit.pem#ファイルには特定の証明書キーが含まれているため、削減しますパーミッションchmod 400 /etc/monit/monit.pem
その後、モニターを再起動して楽しんでください:)