Nagios의 플러그인이 여러 SNMP 에이전트에서 정보를 캡처 할 수 있으며 특정 간격으로 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/지방/Nagios는/libexec 디렉토리)라는 이름의 check_multi_snmpwalk.php의 파일에 넣고하고 chmod +x /usr/local/nagios/libexec/check_multi_snmpwalk.php
실행 확신 할 수 있습니다.
마지막으로, 우리가해야 할 일은 Nagios가 그것을 집어 들고 사용하는 명령을 정의하는 것입니다. 다음과 같은 뭔가가 충분해야합니다
define command {
command_name check_multi_snmpwalk
command_line $USER1$/check_multi_snmpwalk.php $ARG1$ $ARG2$ $ARG3$ $ARG4$
}
지금 당신은 ARG1에서 당신은 JSON은 출력 할 파일을 지정 할 수 있어야하고 서로 인수는 호스트 주소를 포함해야합니다, 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
}
지금 당신이 "좋아, 모두 훌륭한 먹으 렴하지만 무엇을합니까?!"말을하는지
내가 기쁘다.
- snmpwalk를 실행 일부 사용자로부터 입력 (무엇을 우리가 걷고있는 SNMP입니까?)
- 을 잡아 (출력을 저장)에 snmpwalk에서 출력을 변환
- 을 지정된 각 호스트 : 이것은 무엇이다 읽기 쉬운 배열 파일에 JSON을 작성 JSON
- 에 거대한 배열을 변환 거대한 배열
- 에 읽기 쉬운 배열 각 호스트의 snmpwalk를 집계
- 지정
- 우리가 처리 한 호스트의 수를 나타내는 메시지가있는 Nagios의 OK 상태를 반환합니다!
몇 가지 참고 사항 :이 플러그인에 상관없이 사용자가 지정한 얼마나 많은 호스트가 실행되지 데 시간이 걸릴 것입니다
- , 당신은 을 확인 대신의 Nagios의 cron 작업에서 실행 고려할 수 있도록
- 이 플러그인은 내가 이전에 링크 된 플러그인 지침을 준수하지 않는,하지만 여전히이 도움이 재미있는 작은 프로젝트
희망이었다!
고마워요. @Nagios 지원. 정말 고맙습니다. 그러나 C에서 멀티 슬라이딩과 같은 개념을 적용 할 것입니다. 멀티 스레딩을 사용하는 C가 너무 많은 것을 모니터링하는 좋은 옵션이 될 수 있습니다. 0.1 백만에 가까운) 장치. –
API 목록을 작성하는 멀티 스레딩 C가 너무 많은 (0.1 백만개에 달하는) 너무 많은 장치를 모니터링하는 좋은 옵션이 될 것입니다. 여기 API는 CPU로드, 메모리 사용량, 온도 e.t.c를 얻는 것입니다. 다시 감사드립니다. –
당신의 질문을 이해할 수 없다고 생각합니다. 그러나 "성능과 확장성에 관한 한 다중 스레드 C 코드가 더 좋을까요?" 그러면 대답은 "아마도 예"입니다. "API 목록 만들기"란 무엇을 의미합니까? –