Wednesday, September 8th 2010, 2:37am UTC+2

You are not logged in.

  • Login
  • Register

smueller

Trainee

Posts: 58

Birthday: Feb 28th 1981 (29)

Gender: male

Location: koblenz

Occupation: admin

Number of Nagios server: ~

Nagios Versions: 3.02

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: viele

Number of services: viele

OS: ubuntu 8.04

Plugin Versions: letze veriosn

1

Tuesday, July 20th 2010, 12:50pm

[partial SOLVED] NDo in centreon langsam?

Hi, hab hier son kleines Problem
seit einieger zeit gibt es im centreon die möglichkeit nach hostgruppen zu filtern (unter monitoring->services)
an sich ne geile funktion, grade in meinem fall (1,8K host 19k services)
allerdings wenn ich eine davon auswähle und mir alle services anzeigen lasse
schmiert mein db server fast ab, da die queries dazu zuviele zeilen scannen
(allein das querie für die anzahl der services dauert ca 3minuten)
hatt jmd von euch da mal optimierunsgmöglichketen gefunden?
das ist hie schon ein ziemlicher showstopper, da nah so einer abfrage die objects tabelle für knapp 3minuten gelockt ist....
scheint ja nicht so als ob die ndo db sonderlich optimiert wäre, was Schlüssel und ähnliches angeht
In god we trust,
the rest we monitor...

This post has been edited 1 times, last edit by "smueller" (Jul 21st 2010, 9:59am)


dnsmichi

Professional

Posts: 1,099

Birthday: May 30th 1983 (27)

Gender: male

Location: Wien

Occupation: DNS Developer / Monitoring-Admin

Number of Nagios server: 3

Nagios Versions: 3.0.3

Icinga-Version(en): 1.0.3 / GIT

Distributed monitoring: Ja

Redundant monitoring: Ja

Number of hosts: 100-200

Number of services: 1000-2000

OS: RHEL 5.5 x64

Plugin Versions: 1.4.14

NDO Version: 1.4b7 Oracle

IDO-Version: 1.0.3 / GIT MySQL/Postgresql/Oracle

2

Tuesday, July 20th 2010, 1:07pm

myisam? innodb waere ein ansatz. nebst diversen indexes die man auf jeden fall setzen sollte, im falle der objects 4 indexes auf den de facto unique constraint.
Icinga 1.0.3 & Web 1.0.3 using Icinga IDOUtils MySQL,PGSQL,Oracle

Icinga vs. Nagios Webcast: http://bit.ly/coYcr2

Icinga Docs: http://docs.icinga.org

Report bugs/Feature requests: http://bit.ly/bEhso6

* egrep -v "^#|^$" configfile
* check https://dev.icinga.org

Join us online!
irc.freenode.net #icinga #icinga-devel

--
Nagios NDOUtils Problems? Try Icinga IDOUtils :-)

smueller

Trainee

Posts: 58

Birthday: Feb 28th 1981 (29)

Gender: male

Location: koblenz

Occupation: admin

Number of Nagios server: ~

Nagios Versions: 3.02

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: viele

Number of services: viele

OS: ubuntu 8.04

Plugin Versions: letze veriosn

3

Tuesday, July 20th 2010, 1:14pm

hmm,
joar is grad durch einen db-server umzug auf myisam gelandet, manche hier haben auch schonma esagt das wäre schnelller,
kannstu das mit den diversen indexes generu erleutern???

ps. hier übrigens der aufruf(der erste den ich gefunden hab,
der die maschine killt:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT count(DISTINCT UPPER(CONCAT(no.name1,';', no.name2))) FROM nagios_objects no, nagios_servicestatus nss WHERE 
no.object_id = nss.service_object_id   
AND 
no.name1 NOT LIKE '_Module_%'  
AND 
no.name1 
   IN 
   (SELECT no.name1 FROM nagios_hostgroup_members hm, nagios_objects no 
   WHERE 
	no.object_id = hm.host_object_id 
   AND 
	hm.hostgroup_id 
  	IN          
  	(SELECT hostgroup_id FROM nagios_hostgroups WHERE alias LIKE 'Tolle Hostgroup'));

und hier das explain dazu:

Source code

1
2
3
4
5
6
7
8
9
10
+----+--------------------+-------------------+-----------------+-----------------------+-------------+---------+------------------------------+-------+--------------------------+
| id | select_type    	| table         	| type        	| possible_keys     	| key     	| key_len | ref                      	| rows  | Extra                	|
+----+--------------------+-------------------+-----------------+-----------------------+-------------+---------+------------------------------+-------+--------------------------+
|  1 | PRIMARY        	| nss           	| index       	| object_id         	| object_id   | 4   	| NULL                     	| 19843 | Using index          	|
|  1 | PRIMARY        	| no            	| eq_ref      	| PRIMARY           	| PRIMARY 	| 4   	| db_ndo.nss.service_object_id | 	1 | Using where          	|
|  2 | DEPENDENT SUBQUERY | hm            	| index       	| NULL              	| instance_id | 8   	| NULL                     	|  2970 | Using where; Using index |
|  2 | DEPENDENT SUBQUERY | no            	| eq_ref      	| PRIMARY           	| PRIMARY 	| 4   	| db_ndo.hm.host_object_id 	| 	1 | Using where          	|
|  3 | DEPENDENT SUBQUERY | nagios_hostgroups | unique_subquery | PRIMARY,alias_2,alias | PRIMARY 	| 4   	| func                     	| 	1 | Using where          	|
+----+--------------------+-------------------+-----------------+-----------------------+-------------+---------+------------------------------+-------+--------------------------+
5 rows in set (0.00 sec)


leider binich schon zulang nicht mehr an mysql dran gewesen um daraus tiefergehende erkenntnisse zu ziehen
allerdings sieht es so aus als ob er 19k mal 2900 zeilen scannen würde (bisl stressig)
müsste man drt nicht was mit foreign keys anrichten können?
In god we trust,
the rest we monitor...

dnsmichi

Professional

Posts: 1,099

Birthday: May 30th 1983 (27)

Gender: male

Location: Wien

Occupation: DNS Developer / Monitoring-Admin

Number of Nagios server: 3

Nagios Versions: 3.0.3

Icinga-Version(en): 1.0.3 / GIT

Distributed monitoring: Ja

Redundant monitoring: Ja

Number of hosts: 100-200

Number of services: 1000-2000

OS: RHEL 5.5 x64

Plugin Versions: 1.4.14

NDO Version: 1.4b7 Oracle

IDO-Version: 1.0.3 / GIT MySQL/Postgresql/Oracle

4

Tuesday, July 20th 2010, 6:57pm

hmm naja, ich meinte damit die columns, die de facto am oeftesten verwendet werden innerhalb der ndo2db aka *_objects mit instance_id, objecttype_id, name1, name2 - hat aber hier eh keine relevanz.
wie es sich bei den centreon select verhaelt, musst du selbst herausfinden - allerdings sind die where clauses ein heisser tipp, sofern die column nicht schon PK ist (no.object_id ist bspweise PK und braucht keinen zusaetzlichen index). sind aber auch gesetzt, wie das explain zeigt.

bezueglich foreign keys - nice to have, aber mehrwert bringts keinen fuer die performance. vgl auch hier: http://stackoverflow.com/questions/50717…ery-performance

prinzipiell ist die query an sich extrem heftig, die subqueries mit dem roundtrip *puh* wenn ich das mal richtig interpretiere, wird da die anzahl der services ausgegeben, die unique einem host zugeordnet sind (zeile 1 und 2), sowie der hostname kein _MODULE_% sein darf (name1=hostname, name2=servicename respektive auch contacts, commands, timeperiods, etc). davon muss der hostname auch in den hostgroup_members sein sowie diese hostgroup dann einen tollen namen haben.
an sich logisch, nur die query an sich ist ein greuel - kannst du das ding mal nehmen und haendisch laufen lassen?

und noch kurz ad innodb - myisam lockt dir die objects table bei dem langen select, weswegen die ndo2db sich anspeibt, und ndomod 'error writing to datasink' generieren duerfte. probiers doch fuers erste, indem du alle tables auf die dbengine innodb umstellt. dann wird die query vermutlich auch gleich lange brauchen, aber zumindest ist die table nicht gelockt fuer den (produktiven) rest.

http://kedar.nitty-witty.com/blog/choosi…torage-engines/
Icinga 1.0.3 & Web 1.0.3 using Icinga IDOUtils MySQL,PGSQL,Oracle

Icinga vs. Nagios Webcast: http://bit.ly/coYcr2

Icinga Docs: http://docs.icinga.org

Report bugs/Feature requests: http://bit.ly/bEhso6

* egrep -v "^#|^$" configfile
* check https://dev.icinga.org

Join us online!
irc.freenode.net #icinga #icinga-devel

--
Nagios NDOUtils Problems? Try Icinga IDOUtils :-)

smueller

Trainee

Posts: 58

Birthday: Feb 28th 1981 (29)

Gender: male

Location: koblenz

Occupation: admin

Number of Nagios server: ~

Nagios Versions: 3.02

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: viele

Number of services: viele

OS: ubuntu 8.04

Plugin Versions: letze veriosn

5

Wednesday, July 21st 2010, 9:52am

hmm besten dank für die tipps,
hab mich gestern ma n bisl durch "explain EXPLAIN" und n bisl durch indize gelesen.
und eineteilweise lösug gefunden:
INDEX auf nagios_objects.name1 und nagios_objects.name2 gesetzt (seltsamerweise funktioniert der nur gut, wenn man den index von (obecttype,name1 und name2) löscht und nacher wieder einführt.
senkt die Anzahl der ubqierie zeilen ziemlich:

Source code

1
2
3
4
5
6
7
8
9
10
+----+--------------------+-------------------+-----------------+-----------------------+----------------+---------+---------------------+-------+-------------+
| id | select_type    	| table         	| type        	| possible_keys     	| key        	| key_len | ref             	| rows  | Extra   	|
+----+--------------------+-------------------+-----------------+-----------------------+----------------+---------+---------------------+-------+-------------+
|  1 | PRIMARY        	| no            	| ALL         	| PRIMARY,objecttype_id | NULL       	| NULL	| NULL            	| 16460 | Using where |
|  1 | PRIMARY        	| nss           	| eq_ref      	| object_id         	| object_id  	| 4   	| db_ndo.no.object_id | 	1 | Using index |
|  2 | DEPENDENT SUBQUERY | no            	| ref         	| PRIMARY,names     	| names      	| 130 	| func            	|	11 | Using where |
|  2 | DEPENDENT SUBQUERY | hm            	| ref         	| host_object_id    	| host_object_id | 4   	| db_ndo.no.object_id | 	2 | Using where |
|  3 | DEPENDENT SUBQUERY | nagios_hostgroups | unique_subquery | PRIMARY,alias_2,alias | PRIMARY    	| 4   	| func            	| 	1 | Using where |
+----+--------------------+-------------------+-----------------+-----------------------+----------------+---------+---------------------+-------+-------------+
5 rows in set (3.59 sec)


und führt zu ner ausführungzeit von 25sekunde (gegeüber vorher 3,5Minuten)


ZU dem query....
ist vorallem nur der count der so abartig, wenn der durch ist passiert danach nix schlimmes(zeitaufwendiges mehr),
also keine Ahnung was die da wirklich bauen, der Centreon code ist schon manchmal n bischen hart...

Das mit der Umtellung auf Innodb werdich nacherma testen,
hab zwar kein auf innodb angepasstes system mehr (benutz imemer gerne raw partitions dafür)
aber sollte auch so gehen
In god we trust,
the rest we monitor...

Iralein

Intermediate

Posts: 576

Birthday: Nov 11th 1979 (30)

Gender: female

Location: KL

Occupation: B.Sc. Informatik schimpft sich das, heißt aber auch nix weiter, als prämierter IT-Futzi in weiblicher Form (weiß jemand, wie das dann heißt?)

Number of Nagios server: 3

Nagios Versions: 3.0.3

Distributed monitoring: Nein

Redundant monitoring: Ja

Number of hosts: ~1043

Number of services: ~3368

OS: SuSE 10.1/SLES 10

Plugin Versions: diverse

NagVis Version: 1.1

NDO Version: 1.4b7

Other Addons: Eigene und Centreon 2.x , NTOP, SPLUNK, syslog-php, BASE, ...

6

Wednesday, July 21st 2010, 10:34am

Also auf innodb würde ich das auch setzen. Was die Indizies angeht, klar ist das Ganze schneller, wenn du den nochmal neu anlegst. Ein Index muss gepflegt werden, wenn die Tabelle durch inserts/deletes bearbeitet wird.
An was du noch drehen kannst, ist die Datenmenge ein wenig kleiner zu gestalten: die Halte-Zeit innerhalb NDO (ndo2db.conf Zeitraum zur Aufbewahrung ändern) verkleinern. Auch solltest du dir vielleicht mal das tuning-primer Skript runterladen und überprüfen lassen, ob deine Konfiguration auch zu deinem Nutzungsprofil passt. Oft liefert dieses gute Hinweise (SErver muss aber 48h uptime haben)

Grüße,

Ira
Fische sind Freunde - KEIN Futter !

dnsmichi

Professional

Posts: 1,099

Birthday: May 30th 1983 (27)

Gender: male

Location: Wien

Occupation: DNS Developer / Monitoring-Admin

Number of Nagios server: 3

Nagios Versions: 3.0.3

Icinga-Version(en): 1.0.3 / GIT

Distributed monitoring: Ja

Redundant monitoring: Ja

Number of hosts: 100-200

Number of services: 1000-2000

OS: RHEL 5.5 x64

Plugin Versions: 1.4.14

NDO Version: 1.4b7 Oracle

IDO-Version: 1.0.3 / GIT MySQL/Postgresql/Oracle

7

Wednesday, July 21st 2010, 11:06am

INDEX auf nagios_objects.name1 und nagios_objects.name2 gesetzt (seltsamerweise funktioniert der nur gut, wenn man den index von (obecttype,name1 und name2) löscht und nacher wieder einführt.


seltsam empfinde ich das nicht... sind ja unterschiedliche indexes.

Source code

1
KEY `objecttype_id` (`objecttype_id`,`name1`,`name2`)


hilft dir, wenn du die where clause mit den dreien aufbaust. wenn du nur einen index verwenden willst, brauchst du separierte indexes.

bspweise

Source code

1
2
3
4
CREATE INDEX objects_objtype_id_idx ON icinga_objects(objecttype_id);
CREATE INDEX objects_name1_idx ON icinga_objects(name1);
CREATE INDEX objects_name2_idx ON icinga_objects(name2);
CREATE INDEX objects_inst_id_idx ON icinga_objects(instance_id);


was sich dann in folgendem niederschlaegt:

Source code

1
2
3
4
  KEY `objects_objtype_id_idx` (`objecttype_id`),
  KEY `objects_name1_idx` (`name1`),
  KEY `objects_name2_idx` (`name2`),
  KEY `objects_inst_id_idx` (`instance_id`)


und führt zu ner ausführungzeit von 25sekunde (gegeüber vorher 3,5Minuten)


naja, hat mich damals stark gewundert warum niemand die indexes im mysql schema der ndoutils per default gesetzt hat. in den idoutils sind sie das nunmehr (wovon auch der auszug oben stammt).

ist vorallem nur der count der so abartig, wenn der durch ist passiert danach nix schlimmes(zeitaufwendiges mehr),


der count distinct mit einem to_upper und string concatenation ist ein wenig abartig. aber naja.
Icinga 1.0.3 & Web 1.0.3 using Icinga IDOUtils MySQL,PGSQL,Oracle

Icinga vs. Nagios Webcast: http://bit.ly/coYcr2

Icinga Docs: http://docs.icinga.org

Report bugs/Feature requests: http://bit.ly/bEhso6

* egrep -v "^#|^$" configfile
* check https://dev.icinga.org

Join us online!
irc.freenode.net #icinga #icinga-devel

--
Nagios NDOUtils Problems? Try Icinga IDOUtils :-)

smueller

Trainee

Posts: 58

Birthday: Feb 28th 1981 (29)

Gender: male

Location: koblenz

Occupation: admin

Number of Nagios server: ~

Nagios Versions: 3.02

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: viele

Number of services: viele

OS: ubuntu 8.04

Plugin Versions: letze veriosn

8

Wednesday, July 21st 2010, 12:19pm

ja nochmals besten dank euch beiden

die lifetime habich in ndo schon auf 2h runtergestellt, seitem ist meine db auch in einer nanehmbaren größe unterwegs

umstellung auf innodb:
klaptt ganz passabel, allerdings istmeine systemlast ziemlich angesprungen (nich so schlimm, hab noch 20 kerne frei) aber:
seit der umstellung dauert ein nagios restart signifikant länger als bei myisam,
(ist noch ertragbar aber immerhin)
zu zeoten als die DB noch auf einem remote server unterweg war,
hat das mitunter dazu geführt das nagios sich garnichtmehr restarten lies, einziger weg war
nagios stoppen, ndo2db killen
nagios starten
ndo2db starten, dann liefs
ansosnten stand nagios ca 20minuten ohne was zu machen

letzter log eintrag:
Event broker module '/opt/moso/bin/ndomod.o' initialized successfully.
aber finished deamonizing kam nie...

(mag auch an dem bescheidenen Netzwerk Packet Durchsatz gelegen haen)



edit:
so tool wars wohl dochnicht,
meine check latenz ist von 0.08 sekunden auf 19 sekunden gestiegen.....
damn

@iralein: mysqltuner.pl
sagt mir ich soll ein 64Bit OS einsetzen....
für den ram
geht nur leider nicht, da ich meine packete noch nicht portiert hab....
In god we trust,
the rest we monitor...

Posts: 74

Birthday: Jan 29th 1966 (44)

Gender: male

Location: Löffingen

Occupation: Datentechniker

Number of Nagios server: 3

Hobbies: fahrrad fahren, schwimmen, wandern, Open Source Software

Nagios Versions: 3.2.1

Distributed monitoring: Ja

Redundant monitoring: Nein

Number of hosts: 245

Number of services: 2312

OS: Linux (REDHAT 5.5), Windows

Plugin Versions: 1.4.14

NagVis Version: 1.5.1

NDO Version: 1.4b9

Other Addons: snmptt, centreon 2.1.8, mklivestatus

9

Wednesday, July 21st 2010, 11:18pm

hmm besten dank für die tipps,
hab mich gestern ma n bisl durch "explain EXPLAIN" und n bisl durch indize gelesen.
und eineteilweise lösug gefunden:
INDEX auf nagios_objects.name1 und nagios_objects.name2 gesetzt (seltsamerweise funktioniert der nur gut, wenn man den index von (obecttype,name1 und name2) löscht und nacher wieder einführt.
senkt die Anzahl der ubqierie zeilen ziemlich:


und führt zu ner ausführungzeit von 25sekunde (gegeüber vorher 3,5Minuten)




Kannst du die create index statements hier mal posten, würde gerne mal versuchen ob das bei unserem centreon auch solche performance vorteile bringt
danke und gruss
Reinhard

smueller

Trainee

Posts: 58

Birthday: Feb 28th 1981 (29)

Gender: male

Location: koblenz

Occupation: admin

Number of Nagios server: ~

Nagios Versions: 3.02

Distributed monitoring: Nein

Redundant monitoring: Nein

Number of hosts: viele

Number of services: viele

OS: ubuntu 8.04

Plugin Versions: letze veriosn

10

Thursday, July 22nd 2010, 10:50am

klar gerne,
bringt aber nur was bei der auswahl der hostgruppen
original:

Source code

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `nagios_objects` (
  `object_id` int(11) NOT NULL auto_increment,
  `instance_id` smallint(6) NOT NULL default '0',
  `objecttype_id` smallint(6) NOT NULL default '0',
  `name1` varchar(128) NOT NULL default '',
  `name2` varchar(128) default NULL,
  `is_active` smallint(6) NOT NULL default '0',
  PRIMARY KEY  (`object_id`),
  KEY `objecttype_id` (`objecttype_id`,`name1`,`name2`),
  KEY `object_id` (`object_id`,`name1`,`is_active`)
) ENGINE=InnoDB


zu

Source code

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE IF NOT EXISTS `nagios_objects` (
  `object_id` int(11) NOT NULL auto_increment,
  `instance_id` smallint(6) NOT NULL default '0',
  `objecttype_id` smallint(6) NOT NULL default '0',
  `name1` varchar(128) NOT NULL default '',
  `name2` varchar(128) default NULL,
  `is_active` smallint(6) NOT NULL default '0',
  PRIMARY KEY  (`object_id`),
KEY `names` (`name1`,`name2`),
  KEY `objecttype_id` (`objecttype_id`,`name1`,`name2`),
  KEY `object_id` (`object_id`,`name1`,`is_active`)
) ENGINE=InnoDB


wiegesagt, das bringts auch nur, wenn der key an der position steht, sonst versucht mysql den objecttype_id key, und der bringt ihm nix....
In god we trust,
the rest we monitor...