複数のSNMPエージェントから情報を取得できるNagiosのプラグインがあり、特定の間隔でsnmpwalk情報をダンプします。 情報がJSON形式でダンプされる方が良いでしょう。Nagiosを使用してファイルにSNMP情報をダンプする
0
A
答えて
0
よく文書化されているplugin development guidelinesのため、これは自分で簡単に作成できるものです。
今すぐ作成しましょう。 2つのIPアドレス192.168.1.10と192.168.1.11があるとしましょう。 PHPを使用して簡単なプラグインを構築しますが、好きな言語で書くことができます。
このプラグインは完全にガイドに準拠するつもりはありませんが、それはあなたに素敵な出発点を与えるはずです!
#!/usr/bin/php
<?php
// check if we have at least the minimum required output
// (we need at least 1 argument)
if (count($argv) < 2) {
echo <<<USAGE
Usage:
{$argv[0]} <outputfile> <address1>,<snmpcommunity1>,<snmpversion1>,<mib1> <address2>,<snmpcommunity2>,<snmpversion2>,<mib2> ...
USAGE;
exit(1);
}
// prep the data
$hosts = array();
$output = array();
$output_file = '';
for ($i = 1; $i < count($argv); $i++) {
$host = explode(",", $argv[$i]);
// we need exactly 4 elements
if (count($host) != 4) {
// unless of course we are specifying the output file to write the data to!
if (count($host) == 1) {
$output_file = $argv[$i];
continue;
}
echo "{$argv[$i]} IS INVALID. YOU MUST SPECIFY ALL OF: <address>,<snmpcommunity>,<snmpversion>,<mib>\n";
exit(1);
}
$hosts[] = array(
'address' => $host[0],
'snmp_community' => $host[1],
'snmp_version' => $host[2],
'mib' => $host[3],
);
}
// cycle through each host and gather the data
// this may take a while
foreach($hosts as $host) {
$snmpwalk_array = get_snmpwalk_lines($host['address'], $host['snmp_community'], $host['snmp_version'], $host['mib']);
$snmp_array = walk_lines_to_snmp_array($snmpwalk_array);
$output[$host['address']] = $snmp_array;
}
// convert the output array to json and put it in the file!
$json = json_encode($output);
file_put_contents($output_file, $json);
$num_hosts = count($hosts);
echo "OK - {$num_hosts} PROCESSED\n";
exit(0);
// format an array in a sane way from snmp walk output
// this will return an array like:
// [oid][type] = 'Counter32'
// [oid][value] = 0011232
// etc.
function walk_lines_to_snmp_array($walk_arr) {
$snmp = array();
foreach ($walk_arr as $line) {
$oid = convert_snmpwalk_line_to_array($line, $arr);
if ($oid !== false)
$snmp[$oid] = $arr;
}
return $snmp;
}
// return an array of an executed snmpwalk output
function get_snmpwalk_lines($address, $snmp_community, $snmp_version, $mib) {
$cmd = "snmpwalk -c {$snmp_community} -v {$snmp_version} {$address} -m {$mib}";
exec($cmd, $output);
return $output;
}
// return the oid and pass the array by ref
// or return false on failure
function convert_snmpwalk_line_to_array($line, &$arr) {
if (preg_match('/(.*) = (.*): (.*)/', $line, $matches) === 1) {
$arr = array(
'type' => $matches[2],
'value' => $matches[3],
);
return $matches[1];
}
return false;
}
さて、あなたはあなたの$ USER1の$ディレクトリ(/ usr/local/nagiosに/ libexecに)という名前のcheck_multi_snmpwalk.php内のファイルでこれを入れて、それが実行可能chmod +x /usr/local/nagios/libexec/check_multi_snmpwalk.php
だことを確認することができます。
最後に、私がする必要があることは、Nagiosがそれを持ち上げて使用するためのコマンドを定義することだけです。今、あなたはJSONはARG1内に出力したいファイルを指定することができるはず
define command {
command_name check_multi_snmpwalk
command_line $USER1$/check_multi_snmpwalk.php $ARG1$ $ARG2$ $ARG3$ $ARG4$
}
をして、お互いの引数は、ホストアドレス、SNMPコミュニティが含まれている必要があり、次のようなもので十分ですあなたが歩きたいsnmpのバージョンとmib。
したがって、たとえば:
define service {
host_name localhost
service_description Multi SNMP Walk
use local-service
check_command check_multi_snmpwalk!/tmp/jsonfile!192.168.1.10,community,1,all!192.168.1.11,community,2c,all!!
register 1
}
は今、あなたは "オーケー、すべての偉大なthatsのが、それは何をするのか?!" と言っています
嬉しいです。
- のsnmpwalkを実行するいくつかのユーザからの入力(何が私たちが歩いSNMPされている?)
- をつかむ(および出力を保存)にsnmpwalkの出力を変換
- を指定した各ホストのために:これは、それが何をするかでありますファイルにJSON JSONを書く
- に巨大な配列を変換する巨大な配列
- に各ホストのsnmpwalkの読みやすい配列を集約読みやすい配列
- は を指定しました
- 処理したホストの数を示すメッセージとともにNagiosのOKステータスを返す!
いくつかの注意事項:
- あなたが代わりにNagiosのチェック のcronジョブからそれを実行することを検討することもできますので、このプラグインは、指定したどのように多くのホストに関係なく実行するためにしばらく時間がかかります
- このプラグインは、私が以前にリンクされたプラグインのガイドラインに準拠していないが、それはまだ、これが助けた楽しい小さなプロジェクト
希望でした!
関連する問題
- 1. SNMPを使用してサーバー情報を取得する
- 2. SNMP管理情報ベース
- 3. ダンプ内のプロセス情報
- 4. PHPサイトをネットワーク管理アプリケーションにSNMP情報を送信する
- 5. Windowsの資格情報を使用してファイルをコピーする
- 6. PERFORCEを使用してファイル情報を取得する
- 7. ArrayListを使用して情報を保存し、情報にアクセスする
- 8. SNMP - プロセスからの情報の取得
- 9. phpを使用してURLからファイル情報を取得
- 10. Browscapファイルを使用してブラウザ/ OS情報を検出
- 11. ライブ情報データベースを使用してAPIを使用する
- 12. カスタムアセンブリ情報を使用してTLBファイルをアセンブリに変換する
- 13. nosetestsとログパッケージを使用してログ情報をファイルに保存する方法
- 14. csvファイルからの情報を使用してより多くの情報を表示する関数
- 15. DBをmysqldumpでダンプし、テーブルパーティション情報をスキップできますか?
- 16. データベース情報をドロップダウンリストオプションとして使用
- 17. NagiosでSNMPトラップ監視を設定する
- 18. PHPを使用してmysqlに情報を更新する
- 19. PHPを使用してdivに情報を挿入する
- 20. AJAXを使用してリモートファイル情報を取得するには?
- 21. FormsAuthentication.SetAuthCookieを使用してさらに情報を保存する
- 22. ETagを使用してクッキー情報をブローワーに保存する
- 23. NSDictionaryを使用してテーブルに情報を入力する
- 24. CPUIDを使用してマザーボード情報を検索するには?
- 25. Python:Visual Studioでデバッグ情報ファイルを使用するには?
- 26. UWPを使用してSOAPに情報を保存します
- 27. ドライバオブジェクトを使用してグラジエント情報にアクセスする
- 28. ページリダイレクト後に情報を保存して使用する
- 29. クエリを使用してカスタムユーザー情報にアクセスする
- 30. DelphiのWindowsを使用してファイル情報を取得するapi
ありがとうございます。本当にありがとうございます。ただし、スケーラビリティの問題が少ないため、同じ概念をC(マルチスレッド)に入れようとしています。マルチスレッドでCを使用すると、 0.1百万に近い)デバイス。 –
APIのリストを作成するためのマルチスレッドを使用するCが、あまりにも多くのデバイスを監視するのに適しているかどうかをお勧めします(ここでは0.1百万に近いデバイスがCPU負荷、メモリ使用、温度e.t.cを取得します)。 –
私はあなたの質問を具体的に理解しているとは思えませんが、「パフォーマンスとスケーラビリティに関しては、上記のコードのマルチスレッド化されたCバージョンは良いでしょうか?答えは "おそらくはい"です。 「APIのリストを作成する」とはどういう意味ですか? –