Status der Synology DS per Script auslesen?

Hallo,

hat von euch zufällig jemand eine script zum Auslesen des Status der Synology (in meinem Fall DS 212j)? Sprich Kapazität, laufzeit, etc ???

Gruß
hardlog

Hi hardlog!

Fertig habe ich da nichts (steht aber noch auf meiner 2do), aber ich werde/würde das über SNMP machen. Wie man SNMP unter IPS nutzt, dazu gibt es im Forum einige Infos.

Hier ein paar mehr Infos zum SNMP bei Synology:
http://ukdl.synology.com/download/Document/MIBGuide/Synology_DiskStation_MIB_Guide.pdf
TKmon Servicechecks für Synology NAS / Thomas-Krenn-Wiki

Wenn du vor mir etwas fertig hast, kannst du es gerne veröffentlichen :slight_smile:

Grüße,
Chris

Moin…

… ich hatte mir mal ne Abfrage per SNMP gebastelt.
Das Problem war leider, dass durch das zyklische Abfragen der Werte, die Festplatten nicht mehr in den Ruhestand gefahren sind.

Ich kann mal schauen, ob ich die Skripte noch irgendwo finden kann.
Da bei mir das NAS eh mehr aus als ein ist, benötige ich diese Funktion nicht.

Gruß,
Peter

Danke für die ersten Einstieg tipps. Per Telnet komme ich an einzelne Dinge schon dran. Mit snmp werde ich mich jetzt mal beschäftigen.

Erste Probleme: ich hab mich erstmal mit nem MIB-browser (freesmnp) probiert. Er findet diverse Hardware, aber nichts unter der IP meiner Synology (muß ich das irgendwo in der synology freigeben?). Auch mit ssnmpq gibt nur folgende Antwort:
snmp.jpg

@Peter, falls du noch was findet’s, würde mir das vermutlich schon mal sehr weiterhelfen!

Gruß hardlog

Unter Systemsteuerung -> SNMP die/den entsprechenden Haken setzen.

Das Projekt steht bei mir auch noch auf der Liste. Bin ebenfalls an den Scripten von Peter interessiert.

Danke @wolfgang!!

So komme ich weiter. Ich werde meine Fortschritte mitteilen …

Gruß
hardlog

Ich werde mich mal auf die Suche machen. Ich weiß, das ich das alles vor kurzem gelöscht habe.
Da ich aber Regelmässig Backups mache, sollte ich das noch in einem dieser haben.
Melde mich sobald ich die Skripte habe.

Bis später,
Peter !! :slight_smile:

Ich wollte mal meine ersten Erfolge teilen.
Ich kann meine Synology (DS 212j mit 2 Platten) auslesen. Alle interessanten Daten hab ich noch nicht gefunden.
Ich weiß auch nicht ob die OID’s bei allen Synology-Modellen passen?

Als ersten das Programm ssnmpq.exe von folgender Seitedownloaden und in ein beliebiges Verzeichniss des IPS-Servers legen (z.B.: C:\IP-Symcon\IPStools\ssnmpq).
Folgends Script igendwo anlegen. die erten 3 Scriptzeilen anpassen und ausführen. Dann müßte er einiges auslesen und anzeigen.

<?
// *****************************************************************************
// ** Script zum Auslesen der MIB der Synology NAS (SMNP)
// ** läuft so nur unter Windows, da das Komandozeilenprogramm "ssmnpq.exe"
// ** benötig: genanntes Programm hier http://www.digigrupp.com/ssnmpq/ downloaden
// ** in einen beliebigen Ornder entpacken und den Ornder in diesem Script
// ** entsprechend anpassen
// ** In der Synology den SNMP-Dienst aktivieren.
// *****************************************************************************

// folgende 3 Zeilen anpassen
 $host           = "192.168.178.44"; // IP Adresse der Synology
 $community      = "public"; // SNMP Community
 $binary = "C:\IP-Symcon\IPStools\ssnmpq\ssnmpq.exe";

// ***** ab hier nichts mehr ändern
// ************  universelle Funktionen ****************************************
//SNMP Query Funktion
function snmp($oid)
{
    global $host, $community, $binary;
    $oid = ltrim($oid,".");
    $value = IPS_Execute($binary, "/h:$host /c:$community /o:$oid /v", false, true);
    $value = trim($value);
    return $value;
}

// ************ main ***********************************************************
echo snmp (".1.3.6.1.2.1.1.5.0")."
"; // device name
echo "Totaler Speicher: ".round((snmp (".1.3.6.1.2.1.25.3.6.1.4.1552")/1024/1024),2)." GB 
"; // totale Kapazität
$upTime=explode(":",(snmp (".1.3.6.1.2.1.25.1.1.0"))); //System UpTime
echo "Zeit seit letztem Systemstart: ".$upTime[0]." h ".$upTime[1]." min ".round($upTime[2])." sec
";
echo "SynologyModell: ".snmp (".1.3.6.1.4.1.6574.1.5.1.0")." SerienNr.: ".snmp (".1.3.6.1.4.1.6574.1.5.2.0")."
"; //Gerätebezeichnung
echo "Betriebsystem/Version: ".snmp (".1.3.6.1.4.1.6574.1.5.3.0")."
"; //
switch (snmp (".1.3.6.1.4.1.6574.1.5.4.0")) // liegen Betriebsystem Updates vor?
{
  case 1:
    echo "DSM-Update verfügbar!
";
  break;
  case 2:
    echo "DSM-Version aktuell!
";
  break;
  case 3:
    echo "DSM-Update: Connecting
";
  break;
  case 4:
    echo "DSM-Update: Disconnecting
";
  break;
  case 5:
    echo "DSM-Update: Others
";
  break;
  default:
    echo "DSM-Update: Unklar ???
";
  break;
}
echo "Festplatte 1: ".snmp (".1.3.6.1.2.1.25.3.2.1.3.1536")." Anschlußart: ".snmp (".1.3.6.1.4.1.6574.2.1.1.4.0")."
";
echo "Festplatte 1 - Temp: ".snmp (".1.3.6.1.4.1.6574.2.1.1.6.0")." °C
"; // DiskTemp
switch (snmp (".1.3.6.1.4.1.6574.2.1.1.5.0")) // Status der DISK 1
{
  case 1:
    echo "FestplattenStatus: Alles normal
";
  break;
  case 2:
    echo "FestplattenStatus: Platte ist partitioniert aber leer
";
  break;
  case 3:
    echo "FestplattenStatus: Platte ist unpartitioniert
";
  break;
  case 4:
    echo "FestplattenStatus: Partitionierung ist defekt
";
  break;
  case 5:
    echo "FestplattenStatus: Platte ist DEFEKT
";
  break;
  default:
    echo "FestplattenStatus: Unklar ???
";
  break;
}
switch (snmp (".1.3.6.1.4.1.6574.1.4.1.0")) // SystemFanStatus
{
  case 1:
    echo "System-Lüfter: OK
";
  break;
  case 2:
    echo "System-Lüfter: FEHLER!!!
";
  break;
}
switch (snmp (".1.3.6.1.4.1.6574.1.4.2.0")) // cpuFanStatus
{
  case 1:
    echo "CPU-Lüfter: OK
";
  break;
  case 2:
    echo "CPU-Lüfter: FEHLER!!!
";
  break;
}
switch (snmp (".1.3.6.1.4.1.6574.1.3.0")) // powerstatus
{
  case 1:
    echo "Netzteil: OK
";
  break;
  case 2:
    echo "Netzteil: FEHLER!!!
";
  break;
}
switch (snmp (".1.3.6.1.4.1.6574.1.1.0")) // Systemstatus
{
  case 1:
    echo "Systemstatus: OK
";
  break;
  case 2:
    echo "Systemstatus: FEHLER!!!
";
  break;
}
?>

Was ich noch nicht hinbekommen habe ist der Verbrauchte Plattenspeicher bzw. der noch freie.
Falles es jemand hinbekommt bitte mitteilen.

Mit dem freien Programm MIB-Brower von iReasoning kann man die MIB schön auslesen um die gewünschten Daten zu identifizieren.

Gruß
hardlog

Hi!

Danke für die Vorlage! Das sieht doch schon mal gut aus :slight_smile:

SystemUpTime: 18.04 h 38 min 55 sec
SynologyModell: DS415+ SerienNr.: ************
Betriebsystem/Version: DSM 5.1-5022
DSM-Update: Connecting
Festplatte 1: WDC WD50EFRX-68MYMN1 Anschlußart: SATA
Festplatte 1 - Temp: 31 °C
Festplatte 1 - Status: Alles normal
System-Lüfter: OK
CPU-Lüfter: OK
Netzteil: OK
Systemstatus: OK

Aber ändere bitte „FestplattenStutus:“ in „Festplatte 1 - Status:“ :slight_smile:

Und irgendwas sieht bei meiner Uptime komisch aus, da muss ich auch noch mal schauen was da ist.

Besten Dank und Grüße,
Chris

Moin…

… sorry das es so lange gedauert hat. Hier mein Skript von damals. Vielleicht kannst damit was anfangen? Ich habe ne DS212+

Gruß,
Peter


<?
$ip='XXX.XXX.XXX.XXX'; // DIE IP ADRESSE

$syscontact = snmpget($ip, 'public', '1.3.6.1.2.1.1.3.0');
//print "$syscontact";

$data_pos = zeichen_finden($syscontact, ")")+1;
SetValue(17486,substr("$syscontact", $data_pos));



//print_r(snmp2_walk("$ip", "public", "1.3.6.1.4.1.6574.2"));
//print_r(snmp2_walk("$ip", "public", "1.3.6.1.2.1.4")); //funzt

//print_r(snmpwalk("$ip", "public", "1.3.6.1.4.1")); //funzt
//print_r(snmpwalk("$ip", "public", "1.3.6.1.4.1")); //funzt
//$syscontact = snmp2_walk("$ip", "public", "1.3.6.1.4.1.6574");
//print_r ($syscontact);

//$sys = ($syscontact['0']); // SYSTEM STATUS
//$sys = str_replace("INTEGER: ","","$sys"); // SYSTEM STATUS

//SetValue(47808,intreplace($syscontact['2']));
//SetValue(45436,intreplace($syscontact['4']));



//SetValue(50359,floatreplace($syscontact['13']));
//SetValue(42735,floatreplace($syscontact['14']));


//print ($syscontact['0']); // SYSTEM STATUS
//print ($syscontact['1']); // SYSTEM TEMPERATUR
//print ($syscontact['2']); // SYSTEM POWER STATUS
//print ($syscontact['3']); // SYSTEM FAN STATUS
//print ($syscontact['4']); // CPU FAN STATUS
//print ($syscontact['11']); // HDD1 STATUS
//print ($syscontact['12']); // HDD2 STATUS
//print ($syscontact['13']); // HDD1 TEMPERATUR
//print ($syscontact['14']); // HDD2 TEMPERATUR




function intreplace($data)
{
$data = str_replace("INTEGER: ","","$data");
return (int)($data);
}

function floatreplace($data)
{
$data = str_replace("INTEGER: ","","$data");
return floatval($data);
}

function zeichen_finden($meinString, $findMich)
{
   return $pos = strpos($meinString, $findMich);
}


$sys_status =       '1.3.6.1.4.1.6574.1.1.0'; // 1= NORMAL   2=FAILED
$sys_status = snmpget($ip, 'public', $sys_status);
SetValue(55563,intreplace($sys_status));

// ---> SYSTEM TEMPERATUR-ABFRAGE NICHT IM RUHEZUSTAND M÷GLICH !!!
//$sys_temp =         '1.3.6.1.4.1.6574.1.2.0'; // SRTRING in ∞C
//$sys_temp = snmpget($ip, 'public', $sys_temp);
//SetValue(25632,intreplace($sys_temp));

$sys_fan_status =   '1.3.6.1.4.1.6574.1.4.1.0'; // 1= NORMAL   2=FAILED
$sys_fan_status = snmpget($ip, 'public', $sys_fan_status);
SetValue(26249,intreplace($sys_fan_status));


/*
.0 am ENDE ist die DISK 0=HDD 1 und 1=HDD 2

$sys_uptime =       '1.3.6.1.2.1.1.3.0'; // STRING
$sys_status =       '1.3.6.1.4.1.6574.1.1.0'; // 1= NORMAL   2=FAILED
$sys_temp =         '1.3.6.1.4.1.6574.1.2.0'; // SRTRING in ∞C
$sys_pwr_status =   '1.3.6.1.4.1.6574.1.3.0';// 1= NORMAL   2=FAILED
$sys_fan_status =   '1.3.6.1.4.1.6574.1.4.1.0'; // 1= NORMAL   2=FAILED
$sys_cpufan_status ='1.3.6.1.4.1.6574.1.4.2.0'; // 1= NORMAL   2=FAILED



$disk_hdd1_modell = '1.3.6.1.4.1.6574.2.1.1.3.0'; //SRTRING
$disk_hdd2_modell = '1.3.6.1.4.1.6574.2.1.1.3.1'; //SRTRING
$disk_hdd1_status = '1.3.6.1.4.1.6574.2.1.1.5.0'; // 1=Normal 2=Initialized 3=NotInitialized 4=SystemPartitionFailed 5=Crashed
$disk_hdd1_status = '1.3.6.1.4.1.6574.2.1.1.5.1'; // 1=Normal 2=Initialized 3=NotInitialized 4=SystemPartitionFailed 5=Crashed
$disk_hdd1_temp =   '1.3.6.1.4.1.6574.2.1.1.6.0'; //SRTRING in ∞C
$disk_hdd2_temp =   '1.3.6.1.4.1.6574.2.1.1.6.1'; //SRTRING in ∞C
$disk_space_free =  '1.3.6.1.2.1.25.2.3.1.5.10';





   $sysid = @snmpget($ip, 'public', '.1.3.6.1.2.1.1.2.0', 300);
   if($sysid) {
      $sysdescr = @snmpget($ip, 'public', '.1.3.6.1.2.1.1.1.0', 300);
   }

*/
?>

Hallo @Bayaro

die SystemUpTime die zeit in msec nach dem letzten booting der NAS.

Warum manchmal einzelne Daten nicht richtig ausgelesen werden und bein nächsten Abfragen wieder richtig weiß ich auch noch nicht.

Gruß
hardlog

Uptime kenne ich :slight_smile:

Ich meinte warum das bei mir so aussieht „SystemUpTime: 18.05 h 05 min 37 sec“. Genauer das „18.05 h“?! Sollte vmtl. „1805 h“ sein!? Muss ich mir zu Hause mal in Ruhe anschauen.

Aber ansonsten wunderbar! Muss mir nur mal die MIB zu meinem NAS anschauen, was es da noch schönes gibt :slight_smile:

Grüße,
Chris

@PeterChrisben

Danke für die Vorlage. Bin schon dran.

Werde mal beobachten, wie sich eine zyklische Abfrage auswirkt.

Abend Wolgang!

SNMP kann in sehr kurzen zyklischen Raten abgefragt werden. In der Firma frage ich teilweise Switche jede Sekunde ab. Auch bei einem NAS ist eine minütliche Abfrage oder kürzer kein Problem!

Wenn du bedenken hast, dann frag einfach mal alle 5 Sekunden über SNMP ab und beobachte die CPU/RAM Auslastung deines NAS. Du wirst merken, das NAS sieht das ganz entspannt :slight_smile: Du solltest nur nicht die Skript-Laufzeit unterschreiten. Wenn du also kurze Zyklen willst, dann solltest du dafür sorgen, dass das Skript nur einmal ausgeführt werden kann und nicht mehrmals gleichzeitig.

Bei mir liegt die SNMP-Abfrage Skriptlaufzeit bei 3-4 Sekunden. Geschuldet dem Aufruf der externen EXE usw…

Grüße,
Chris

So,

die PlattenKapazitätsParameter kann ich jetzt auch auslesen:

$HDUnit=snmp(".1.3.6.1.2.1.25.2.3.1.4.38");
$HDTotal=snmp(".1.3.6.1.2.1.25.2.3.1.5.38");
$HDUsed=snmp(".1.3.6.1.2.1.25.2.3.1.6.38");
$HDFree=round((($HDTotal - $HDUsed) * $HDUnit / 1024 / 1024 / 1024 ));
echo "Totaler Speicher: ".round($HDTotal*$HDUnit/1024/1024/1024). "GB
";
echo "Genutzter Speicher: ".round($HDUsed*$HDUnit/ 1024 / 1024/1024,2). "GB
";
echo "Freier Speicher: ".$HDFree. "GB
";

hardlog

Moin… schon Erkenntnisse zum Sleep Modus des NAS gesammelt?

@Bayaro

Werde mal beobachten, wie sich eine zyklische Abfrage auswirkt.

Damit hatte ich auf Peters Anmerkung angespielt, dass dann

die Festplatten nicht mehr in den Ruhestand gefahren sind

Beim drüber nachdenken hab ich bemerkt, dass die bei mir eh nicht in den Ruhezustand fahren, weil darauf meine MySQL läuft auf die ich permanent logge.

Über CPU-Last hätt ich mir erst mal keine Gedanke gemacht.

@all

Hier gibts den original Synology_DiskStation_MIB_Guide.pdf (Stand 2013). Die die ich ausprobiert habe funktionieren.

Hallo allerseits!

Funktioniert bei euch, mit der aktuellen DSM Version, die Abfrage der Volume-Infos noch?

$HDUnit=snmp(".1.3.6.1.2.1.25.2.3.1.4.38");
$HDTotal=snmp(".1.3.6.1.2.1.25.2.3.1.5.38");
$HDUsed=snmp(".1.3.6.1.2.1.25.2.3.1.6.38");
$HDFree=round((($HDTotal - $HDUsed) * $HDUnit / 1024 / 1024 / 1024 ));
echo "$HDUnit // $HDTotal // $HDUsed // $HDFree"."
";
echo "Totaler Speicher: ".round($HDTotal*$HDUnit/1024/1024/1024). "GB
";
echo "Genutzter Speicher: ".round($HDUsed*$HDUnit/ 1024 / 1024/1024,2). "GB
";
echo "Freier Speicher: ".$HDFree."GB
";

Ergibt bei mir:

 //  //  // 0
Totaler Speicher: 0GB
Genutzter Speicher: 0GB
Freier Speicher: 0GB

War glaube ich schon seit der vorletzten DSM Version :confused:

Bevor ich aber groß auf Fehlersuche gehe, wollte ich bei euch mal nachfragen, damit ich die Fehlerquelle eingrenzen kann.

Grüße,
Chris

Monitore zwar nicht mit IPS aber kurz nach dem Update der DS war aus PRTG das volume auch weg.

Wie von Geisterhand war es einen Tag später wieder da.

Alles andere wird noch korrekt ausgelesen, aber die Volume Infos sind schon seit Wochen weg :frowning: Kam leider nichts von Geisterhand zurück. :confused:

Grüße,
Chris