なに?
Muninは、管理者の間で人気のあるチャート作成ツールRRDToolで開発された、かなり新しいシステムではありません。 RRDToolのイデオロギーは「カルーセル」タイプに従ってデータを保存することです-固定サイズのデータベースにデータを入力すると、RRDToolはベーステール(つまり、古い)からヘッド(新しい)にデータの上書きを開始します。これにより、データベースが異常なサイズ(HP OpenViewやZabbixなど)に膨らむことがなくなります。 通常、RRDToolデータベースにはいくつかのカルーセルがあります。たとえば、「インスタントデータ」(毎週保存)、平均5分(インスタントデータから生成、1か月保存)、1時間あたりの平均(5分に基づいて生成、1年保存)などです。メガバイト、サイズの変更はありません(データベースにデータがない場合、ゼロはカルーセルの末尾にあり、データのすべてのスロットは一度に作成されます)。RRDToolのマイナスはプラスになります。作成したデータベースを編集する必要があるため、データベース容量を慎重に計算する必要がありますベースはすでに不可能です 別の基地に転送するzhnoプルデータ(SQLデータベースのアナログDUMP。) -もまた、まだデータのみを格納するための責任があるRRDtool、及びその者のそれを取ることが必要である...最初に」このsamopisnyeスクリプトに使用され、管理者従来、最初の場所は遍在するBashと脳波Perlで占められていました(後者では、RRDを操作するための拡張機能さえあります。他の言語では、コマンドラインから直接rrdtoolを呼び出す形式で「小道具」を使用する必要があります)。 皆のためのスクリプトは異なっていました、コードの品質とそのようなスクリプトの仕事の最適化は非常に広かったです。 私自身、私の管理職のキャリアの夜明けに、そのようなスクリプトを書き、「額に」書きました。パラメーターのかかとに簡単なスクリプトを書くには数秒かかりました。 もちろん、必要な場合(便利なチャート作成用のツールが必要な場合)、ツールも発生します。 これこそが、Muninのプロジェクトでした。
概要とアーキテクチャ
Muninは2つの部分で構成されています。 1つ目はサーバー(実際はmunin)です。クライアントをポーリングし、データベースを保存し、グラフを描画します。 2番目はクライアント(munin-node)です。 クライアントへの接続は、常にサーバーを開始します(cronを介して開始します)。 起動時に、サーバーはクライアントアドレスのリストを使用して構成を読み取り、各クライアント(ポート-4949 / tcp)をアドレス指定し、可能なパラメーターのリストを受信してから、リストからパラメーター値を受け取ります。 受信したデータはRRDファイルにロードされます(存在しない場合、サーバーが作成します)。 別のプロセスが既製のグラフの作成を担当します。これは、muninパッケージに含まれていますが、完全に独立した生活を送っています。
サーバーとは異なり、クライアントはメモリに常駐するデーモンです。 サーバーのように、純粋なperlで書かれています。 ところで、唯一の認証方法は、接続の開始元のIPです。 暗号化も行われていないため、悪魔を輝かせることはお勧めしません。ファイアウォールをキャンセルしたり、設定を慎重に設定したりする人はいません。 興味深い事実ですが、悪魔自体はそれが置かれているシステムについて何も知りません。 クライアントがサーバーに提供するデータは、クライアントが順次実行するプラグインプログラムから受信します。 これにより、サーバーの負荷が最適化され(必要なプラグインのみをいつでも残すことができます)、同時にデーモンのアイドル時間が短縮されます。これにより、この特定のシステムでは発生しなかったパラメーターが痛みを伴うようになります。
どうやって
インストールと診断
上で述べたように、muninは2つのパッケージで構成されています。 これらは簡単にセットアップされますが、munin(サーバー)がRRDとグラフィックス(GD)を担当するパッケージのかなりの山に沿ってドラッグするという事実に備える必要があります。 1つのサーバーを監視する必要がある場合は、両方のパッケージをインストールする必要があります(debianの例):
apt-get install munin munin-node
....
monitとは異なり、muninはシステムでアクションを実行できません(統計の収集を除く)。その結果、インストール後すぐに起動できます。 Debian GNU / LinuxおよびCentOSでは、デーモンは自動的に起動します。
lab:~# ps ax | grep muni
16139 ? Ss 0:00 /usr/sbin/munin-node
プラグインのアクティブ化も簡単でわかりやすいです-munin設定のあるフォルダー(Linuxでは/ etc / munin、freebsdでは/ usr / local / etc / munin)にpluginsフォルダーがあります。 munin-nodeの開始時にフォルダーに存在するすべてのプラグインはアクティブと見なされます。 何らかの理由で現在のプラグインが機能しない場合(たとえば、mysqldサービスが停止している場合のMySQLデータ収集プラグイン)、プラグインから情報を取得しようとすると、ノードは0を返します。
実際、利用可能なすべてのプラグインは通常別の場所にあり、シンボリックリンクがこのフォルダーに追加されます。
以下に例を示します。
lab:~# ls -al /etc/munin/plugins/
total 2
drwxr-xr-x 2 root root 1024 2009-06-21 15:31 .
drwxr-xr-x 5 root root 1024 2010-02-11 23:35 ..
lrwxrwxrwx 1 root root 29 2009-05-19 16:39 acpi -> /usr/share/munin/plugins/acpi
lrwxrwxrwx 1 root root 28 2009-03-22 22:51 cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27 2009-03-22 22:51 df -> /usr/share/munin/plugins/df
lrwxrwxrwx 1 root root 33 2009-03-22 22:51 df_inode -> /usr/share/munin/plugins/df_inode
...
最初は、多くのプラグインがmuninとともに提供されます(注意を払っています-すべてがアクティブではありません!)。さらに、プラグインも配置されているサイトがあります。 さらに、プラグインを自分で作成するためのガイドがありますが、このトピックはすでに記事の範囲を大きく超えています。
一部のプラグインは呼び出し引数をサポートしています。 印象的な例は次のとおりです。
実際のプラグインファイル
-rwxr-xr-x 1 root root 4775 2009-11-25 13:38 if_
-rwxr-xr-x 1 root root 3164 2009-11-25 13:38 if_err_
そして、ここに設定ディレクトリにあるものがあります:
lab:~# ls -al /etc/munin/plugins/ | grep if
lrwxrwxrwx 1 root root 32 2009-03-22 22:51 if_err_eth0 -> /usr/share/munin/plugins/if_err_
lrwxrwxrwx 1 root root 32 2009-03-22 22:51 if_err_eth1 -> /usr/share/munin/plugins/if_err_
lrwxrwxrwx 1 root root 28 2009-03-22 22:51 if_eth0 -> /usr/share/munin/plugins/if_
lrwxrwxrwx 1 root root 28 2009-03-22 22:51 if_eth1 -> /usr/share/munin/plugins/if_
lrwxrwxrwx 1 root root 28 2009-06-21 15:31 if_tun0 -> /usr/share/munin/plugins/if_
引数なしでは、そのようなプラグインを呼び出すことは無意味です-彼らは彼らから何を望んでいるか理解しません。
一部のプラグインは詳細設定をサポートしています。 たとえば、MySQLに関する情報を収集するプラグインの場合、ユーザー名とパスワードを指定してサーバーに入ることができます。 Muninはそのような設定を{confdir} /plugin-conf.d/munin-nodeファイルに保存します。
ファイルには詳細にコメントが付けられていますが、念のため、ここでいくつかの例を示します。
# APT
[apt]
# root. APT
user root
# smart_, smart_{DISK}
[smart_*]
# , root smartctl
user root
# postgres_queries, mngsearch
[postgres_queries_mngsearch]
#env.{} . source-
# mngsearch
env.PGUSER mngsearch
env.PGPASSWORD Yn2ajPV4f6V5rzqj
上記の例からわかるように、ファイルの構文は非常に単純です。
ステップバイステップの手順
思考の広がりを木に向けます。 今-明確で理解可能なステップバイステップの手順。
パッケージのインストールはOSツールを使用して行われますが、SRCからパッケージを収集することはお勧めしません。 オブザーバと監視対象が物理的に1台のマシンである状況を考えます。
まず、クライアントを構成します。
vi /etc/munin/munin-node.conf
...
log_level 4
#"" munin . 10 - , 1 -
log_file /var/log/munin/munin-node.log
# .
pid_file /var/run/munin/munin-node.pid
#pid-file,
background 1
# . 0 -
setseid 1
user root
group root
# . root, ID ,
# root
setsid yes
# ID .
allow ^127\.0\.0\.1$
# IP . - 127.0.0.1
# , , (RegExp).
host 127.0.0.1
# IP . - 127.0.0.1
port 4949
#, .
プラグインの構成またはリストを変更するには、デーモンを再起動する必要があります。 プラグインのリストを変更するときは、デーモンを再起動する必要があります。kill-HUPはこの状況では役に立ちません。
デーモンの動作の確認:
lab:/etc/munin# telnet 127.0.0.1 4949
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# munin node at lab.local.logan
list
open_inodes ip_127.0.0.1 postgres_queries_mngsearch irqstats
if_eth0 squid_cache sensors_temp df tor_connections swap
load cpu df_inode smart_hda forks iostat sensors_fan open_files
memory postgres_queries_netams exim_mailqueue vmstat sensors_volt
if_err_eth0 entropy processes acpi interrupts mysql_bytes if_tun0 if_err_eth1
if_eth1 tor_traffic exim_mailstats
fetch ip_127.0.0.1
in.value 83599135
out.value 83599135
.
quit
Connection closed by foreign host.
listコマンドで、アクティブなプラグインのリストを取得し、fetchコマンドで、1つのプラグインからデータを取得しました。 監視デーモンは同じように動作するため、クライアントノードの正しい動作を確実に検証できます。
サーバーに移動します。 クライアント(ノード)とは異なり、サーバーはプロセスとして存在せず、データを受信してグラフを描画した時点でのみ起動します(常にではありませんが、この質問は以下で検討します)
プロセスリストでは、次のようになります。
lab:~# ps ax | grep muni
16139 ? Ss 0:00 /usr/sbin/munin-node
17841 ? Ss 0:00 /bin/sh -c if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi
17842 ? S 0:00 /bin/sh /usr/bin/munin-cron
17843 ? S 0:00 /usr/bin/perl -w /usr/share/munin/munin-update
17846 ? S 0:00 /usr/share/munin/munin-update [r1sz.zooclub.ru]
17847 ? S 0:00 /usr/share/munin/munin-update [web1.zooclub.ru]
17848 ? S 0:00 /usr/share/munin/munin-update [monitor-01.infobox.ru]
17849 ? S 0:00 /usr/share/munin/munin-update [stat.kpp.ru]
17851 ? S 0:00 /usr/share/munin/munin-update [ro2-h.local]
17852 ? S 0:00 /usr/share/munin/munin-update [ro1-h.local]
17853 ? S 0:00 /usr/sbin/munin-node
17859 ? Rs 0:00 /usr/bin/perl /etc/munin/plugins/postgres_queries_mngsearch config
デーモンの設定は{config} /munin.confファイルにあります
また、非常に詳細にコメントアウトされています。以下に、最小限の実行可能な例を示します。
dbdir /home/db/monitor
#, RRD. , rrd
htmldir /home/www/mon
#
logdir /var/log/munin
#
rundir /var/run/munin
#
[lab.local]
address 127.0.0.1
use_node_name yes
# , , .
[midori.local]
# ,
address 10.9.8.7
use_node_name yes
[web2.zooclub.ru]
#
address 77.221.150.98
use_node_name yes
contact.logan.command mail -s "Munin notification" logan@mydomain.my
# . . (<->)
#graph_strategy cgi
# CGI . , .
# ( ) - .
上記の設定は通常の操作には十分です。 これらの設定については、ドキュメントで詳しく説明していますが、muninに多くを期待する必要はありません。これは便利ですが、非常にシンプルで制限されたツールです。
UPD:労働者の要求に応じて、すでにインストールされているムニンの写真を追加しました
監視中のホストのリスト:
チャートの例: