{"id":1463,"date":"2010-03-22T11:04:02","date_gmt":"2010-03-22T10:04:02","guid":{"rendered":"http:\/\/blog.it4sport.de\/?p=1463"},"modified":"2010-03-22T11:04:02","modified_gmt":"2010-03-22T10:04:02","slug":"opennms-uberwacht-ntp","status":"publish","type":"post","link":"https:\/\/gmbd.de\/wordpress\/index.php\/2010\/03\/22\/opennms-uberwacht-ntp\/","title":{"rendered":"OpenNMS \u00fcberwacht NTP"},"content":{"rendered":"<p>\t\t\t\tNTP zu \u00fcberwachen ist relativ komplex. Dabei ist die \u00dcberwachung der Zeitdifferenz zu einer NTP Quelle relativ einfach. Was das ganze komplex macht ist NTP selbst. D.h. die beste NTP \u00dcberwachung n\u00fctzt nichts, wenn man NTP nicht verstanden hat und NTP auf den jeweiligen Servern nicht richtig konfiguriert hat. Hier geht&#8217;s aber nur um die Basis\u00fcberwachung von NTP per OpenNMS.<\/p>\n<p>Bei der NTP-\u00dcberwachung nehme ich <em>ntpq<\/em>. Dabei nutze ich, dass das Tool  den aktuell besten peer mit einem Stern &#8222;*&#8220; markiert. Das ganze packe ich in ein kleines Skript <em>\/usr\/local\/bin\/ntp-time.sh<\/em> :<\/p>\n<pre lang=\"bash\">\n#!\/bin\/sh\nntpq -pn localhost | \/usr\/bin\/awk 'BEGIN { delay=1000; offset=1000; jitter=1000; stratum=16 } $1 ~ \/\\*\/ { delay=$8; offset=$9; jitter=$10; stratum=$3 } END { print int(delay)\"\\n\"int(offset)\"\\n\"int(jitter)\"\\n\"stratum }'\n<\/pre>\n<p>Dieses Skript wiederum integriere ich in den snmp daemon (snmpd.conf):<\/p>\n<pre lang = \"ini\">\nextend ntp-time \/usr\/local\/bin\/ntp-tim.sh \n<\/pre>\n<p>Kurzer lokaler Test nach dem &#8222;<em>\/etc\/init.d\/snmpd reload<\/em>&#8220; ob es funktioniert:<\/p>\n<pre lang=\"bash\">\nsnmpwalk -v2c -cpublic localhost -On .1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101\n.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101.1 = STRING: 14\n.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101.2 = STRING: 0\n.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101.3 = STRING: 0\n.1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101.4 = STRING: 2\n<\/pre>\n<p>Funktioniert das, dann kann es in OpenNMS eingebaut werden:<br \/>\n<em>datacollection-config.xml<\/em><\/p>\n<pre lang=\"xml\">\n            <group name=\"NTP\" ifType=\"ignore\">\n                <mibObj oid=\".1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101\" instance=\"1\" alias=\"NTPdelay\" type=\"integer\" \/>\n                <mibObj oid=\".1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101\" instance=\"2\" alias=\"NTPoffset\" type=\"integer\" \/>\n                <mibObj oid=\".1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101\" instance=\"3\" alias=\"NTPjitter\" type=\"integer\" \/>\n                <mibObj oid=\".1.3.6.1.4.1.8072.1.3.2.4.1.2.8.110.116.112.45.116.105.109.101\" instance=\"4\" alias=\"NTPstratum\" type=\"integer\" \/>\n            <\/group>\n<\/pre>\n<p>snmp-graph.properties<\/p>\n<pre lang=\"ini\">\nreports=ntp.overview, ntp.stratum \\\n\nreport.ntp.overview.name=NTP Overview\nreport.ntp.overview.columns=NTPdelay, NTPoffset, NTPjitter\nreport.ntp.overview.type=nodeSnmp\nreport.ntp.overview.command=--title=\"NTP Overview\" --units-exponent=0 \\\n --vertical-label=\"miliseconds\" \\\n DEF:delay={rrd1}:NTPdelay:AVERAGE \\\n DEF:mindelay={rrd1}:NTPdelay:MIN \\\n DEF:maxdelay={rrd1}:NTPdelay:MAX \\\n DEF:offset={rrd2}:NTPoffset:AVERAGE \\\n DEF:minoffset={rrd2}:NTPoffset:MIN \\\n DEF:maxoffset={rrd2}:NTPoffset:MAX \\\n DEF:jitter={rrd3}:NTPjitter:AVERAGE \\\n DEF:minjitter={rrd3}:NTPjitter:MIN \\\n DEF:maxjitter={rrd3}:NTPjitter:MAX \\\n LINE2:delay#0000ff:\"Delay \" \\\n GPRINT:delay:AVERAGE:\"Avg \\\\: %10.2lf\" \\\n GPRINT:delay:MIN:\"Min \\\\: %10.2lf\" \\\n GPRINT:delay:MAX:\"Max \\\\: %10.2lf\\\\n\" \\\n LINE2:offset#00ff00:\"Offset\" \\\n GPRINT:offset:AVERAGE:\"Avg \\\\: %10.2lf\" \\\n GPRINT:offset:MIN:\"Min \\\\: %10.2lf\" \\\n GPRINT:offset:MAX:\"Max \\\\: %10.2lf\\\\n\" \\\n LINE2:jitter#ff0000:\"Jitter\" \\\n GPRINT:jitter:AVERAGE:\"Avg \\\\: %10.2lf\" \\\n GPRINT:jitter:MIN:\"Min \\\\: %10.2lf\" \\\n GPRINT:jitter:MAX:\"Max \\\\: %10.2lf\\\\n\" \n\nreport.ntp.stratum.name=NTP Stratum\nreport.ntp.stratum.columns=NTPstratum\nreport.ntp.stratum.type=nodeSnmp\nreport.ntp.stratum.command=--title=\"NTP Stratum\" --units-exponent=0 \\\n --vertical-label=\"stratum\" \\\n DEF:stratum={rrd1}:NTPstratum:AVERAGE \\\n DEF:minstratum={rrd1}:NTPstratum:MIN \\\n DEF:maxstratum={rrd1}:NTPstratum:MAX \\\n LINE2:stratum#0000ff:\"Stratum\" \\\n GPRINT:stratum:AVERAGE:\"Avg \\\\: %10.2lf\" \\\n GPRINT:stratum:MIN:\"Min \\\\: %10.2lf\" \\\n GPRINT:stratum:MAX:\"Max \\\\: %10.2lf\\\\n\" \n\n<\/pre>\n<p>Fertig!<\/p>\n<p>Ein paar Bemerkungen dazu:<\/p>\n<ol>\n<li>Ich bin mittlerweile ein Fan von SNMP. Ruckzuck ist der lokale snmp daemon erweitert und dank <strong>extend<\/strong> muss man sich nicht um OIDs sorgen. Die OID f\u00fcr &#8222;extend ntp-time&#8220; bekommt man mit\n<pre lang=\"bash\">\nsnmptranslate NET-SNMP-EXTEND-MIB::nsExtendOutLine.\"ntp-time\"\n<\/pre>\n<\/li>\n<li>Thresholds und damit die Alarme muss man nat\u00fcrlich wie gewohnt in OpenNMS anlegen<\/li>\n<li>Mit dem Skript \u00fcberwache ich nur auf Milisekunden genau. Das Reicht mir<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>NTP zu \u00fcberwachen ist relativ komplex. Dabei ist die \u00dcberwachung der Zeitdifferenz zu einer NTP Quelle relativ einfach. Was das ganze komplex macht ist NTP selbst. D.h. die beste NTP \u00dcberwachung n\u00fctzt nichts, wenn man NTP nicht verstanden hat und NTP auf den jeweiligen Servern nicht richtig konfiguriert hat. Hier geht&#8217;s aber nur um die\u2026 <span class=\"read-more\"><a href=\"https:\/\/gmbd.de\/wordpress\/index.php\/2010\/03\/22\/opennms-uberwacht-ntp\/\">Weiterlesen &raquo;<\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[65],"tags":[237,258,262,329],"_links":{"self":[{"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1463"}],"collection":[{"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=1463"}],"version-history":[{"count":0,"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1463\/revisions"}],"wp:attachment":[{"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=1463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=1463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gmbd.de\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=1463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}