{"id":599,"date":"2011-03-18T11:07:14","date_gmt":"2011-03-18T09:07:14","guid":{"rendered":"http:\/\/blog.sfsoft.it\/?p=599"},"modified":"2014-10-01T16:26:57","modified_gmt":"2014-10-01T14:26:57","slug":"monitorare-il-traffico-di-rete-con-pmacct-su-ubuntu","status":"publish","type":"post","link":"http:\/\/www.sfsoft.it\/blog\/2011\/03\/18\/monitorare-il-traffico-di-rete-con-pmacct-su-ubuntu\/","title":{"rendered":"Monitorare il traffico di rete con pmacct su Ubuntu"},"content":{"rendered":"<p>Di <a href=\"http:\/\/www.ubuntugeek.com\/bandwidth-monitoring-tools-for-linux.html\" target=\"_blank\">sistemi per il monitoraggio della rete<\/a> ce ne sono molti e ne ho anche provati tanti ( <em>ntop<\/em> e <em>ulogd<\/em> per citarne un paio di cui ho anche postato le prove tempo fa ) ma nessuno faceva quello che mi serviva attualmente, ovvero un sistema poco invasivo e discretamente semplice che permettesse di tenere uno storico dell&#8217;uso del traffico internet con possibilit\u00e0 di processare i dati anche in seguito a seconda delle esigenze.<\/p>\n<p>Sinceramente non ricordo nemmeno come in mezzo a tanti risultati, articoli e forum vari ho poi sentito nominare un programma che si chiama <em>pmacct<\/em> di un certo Paolo Lucente, molto grezzamente si tratta di uno sniffer di rete che registra il traffico su <em>MySQL<\/em> o <em>PostgreSQL<\/em> o <em>SQLite<\/em>.<\/p>\n<p>La cosa bizzarra \u00e8 che \u00e8 un sistema che ha notevoli potenzialit\u00e0 ma di cui non si trova quasi documentazione o traccia in rete, sembra un prodotto di nicchia.<\/p>\n<p>Innanzi tutto procediamo all&#8217;installazione di <em>MySQL<\/em> se ancora manca ( o <em>PostgreSQL<\/em> o <em>SQLlite<\/em> se preferite, io conosco un pelo meglio <em>MySQL<\/em> e uso questo ):<\/p>\n<pre class=\"lang:default decode:true \">sudo apt-get install mysql-server<\/pre>\n<p>Ora non sto a riprendere la configurazione di <em>MySQL<\/em> in quanto in rete c&#8217;\u00e8 abbastanza documentazione in merito.<\/p>\n<p>Installiamo il programma:<\/p>\n<pre class=\"lang:default decode:true \">sudo apt-get install pmacct<\/pre>\n<p>Stoppiamo il demone per configurarlo:<\/p>\n<pre class=\"lang:default decode:true \">sudo \/etc\/init.d\/pmacct stop<\/pre>\n<p>Creiamo il database con la tabella versione 7 che al momento in cui scrivo \u00e8 l&#8217;ultima, se no basta cambiare il numero:<\/p>\n<pre class=\"lang:default decode:true \">mysql -h host -u root -p &lt; \/usr\/share\/doc\/pmacct\/sql\/pmacct-create-db_v7.mysql<\/pre>\n<p>Impostiamo i permessi standard ( utente <em>pmacct@localhost <\/em> e password <em>arealsmartpwd<\/em> ):<\/p>\n<pre class=\"lang:default decode:true \">mysql -h host -u root -p &lt; \/usr\/share\/doc\/pmacct\/sql\/pmacct-grant-db.mysql<\/pre>\n<p>Cambiamo eventualmente la password:<\/p>\n<pre class=\"lang:default decode:true\">mysql -h host -u root -p<\/pre>\n<pre class=\"lang:default decode:true \">USE pmacct;\r\nUPDATE mysql.user SET Password=PASSWORD('nuova-password') WHERE User='pmacct';\r\nFLUSH PRIVILEGES;<\/pre>\n<p>Ora configuriamo il programma:<\/p>\n<pre class=\"lang:default decode:true \">sudo nano \/etc\/pmacct\/pmacct.conf<\/pre>\n<p>Questo \u00e8 un esempio di configurazione:<\/p>\n<pre class=\"lang:default decode:true  \">! pmacctd configuration\r\n!\r\n!\r\n!\r\ndaemonize: true\r\npidfile: \/var\/run\/pmacctd.pid\r\nsyslog: daemon\r\n!\r\n! interested in in and outbound traffic\r\naggregate: src_host,dst_host,src_port,dst_port\r\n! on this network\r\npcap_filter: net 192.168.1.0\/24\r\n! on this interface\r\ninterface: eth0\r\n!\r\n! storage methods\r\nplugins: mysql\r\nsql_host: localhost\r\nsql_user: pmacct\r\nsql_passwd: nuova-password\r\nsql_db: pmacct\r\nsql_table_version: 7\r\n!\r\n! refresh the db every 5 minutes\r\nsql_refresh_time: 300\r\n! reduce the size of the insert\/update clause\r\nsql_optimize_clauses: true\r\n! accumulate values in each row for up to 5 minutes\r\nsql_history: 5m\r\n! create new rows on the minute, hour, day boundaries\r\n!sql_history_roundoff: mhd\r\nsql_history_roundoff: m\r\n! in case of emergency, log to this file\r\nsql_recovery_logfile: \/var\/lib\/pmacct\/recovery_log\r\n! try to use only INSERT\r\nsql_dont_try_update: true<\/pre>\n<p>Ora non ci basta che avviare di nuovo il demone e controllare sul nostro database i record che vengono inseriti.<\/p>\n<pre class=\"lang:default decode:true \">sudo \/etc\/init.d\/pmacct start<\/pre>\n<p><strong>Aggiornamento<\/strong>: ho notato che su reti diciamo discrete la mole di dati generata influisce notevolmente sulle prestazioni richieste dal server MySQL, ogni tanto \u00e8 cosigliato spostare i dati storici su una copia della tabella o meglio ancora usare le <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/compressed-format.html\" target=\"_blank\">tabelle compresse<\/a> e lasciare la principale con solo qualche centinaia di migliaia di record.<\/p>\n<p><strong>Aggiornamento 2<\/strong>: se il traffico \u00e8 elevato e si usa il raggruppamento \u00e8 possibile che venga richiesto un server MySQL con alte prestazioni di CPU e di I\/O su disco in quanto le istruzioni di UPDATE sono molte, in tal caso ridurre il periodo di raggruppamento ( es. da 30m a 5m ) e usare l&#8217;istruzione &#8220;<em>sql_dont_try_update: true<\/em>&#8221; che usa la memoria per limitare al massimo le istruzioni di UPDATE, appoggiandosi a versioni InnoDB invece che MyISAM delle tabelle.<\/p>\n<p><strong>Aggiornamento 3<\/strong>: Nel caso servisse recuperare i dati dal file di recupero ( <em>recovery_log<\/em> ) serve utilizzare il comando <em>pmmplay<\/em>:<\/p>\n<pre class=\"lang:default decode:true \">pmmplay -d -f \/var\/lib\/pmacct\/recovery_log -U &lt;utentemysql&gt; -P &lt;passwordmysql&gt;<\/pre>\n<p>Se serve solo testare cosa c&#8217;\u00e8 nel file senza fare modifiche al DB basta aggiungere il parametro <em>-t<\/em>.<\/p>\n<p>Sul <a href=\"http:\/\/wiki.pmacct.net\/\" target=\"_blank\">wiki ufficiale<\/a> per\u00f2 sconsigliano di utilizzare il file di recupero dicendo che sar\u00e0 dismesso ma di urilizzare eventualmente un DB di backup:<\/p>\n<blockquote><p>While planning for a recovery method, consider that the logfile method is being discontinued and you are encouraged to use the backup DB option.<\/p><\/blockquote>\n<p>Le fonti da cui ho attinto e dove si trovano molte altre informazioni utili:<\/p>\n<p><a href=\"http:\/\/wiki.pmacct.net\/\" target=\"_blank\">http:\/\/wiki.pmacct.net\/<\/a><\/p>\n<p><a href=\"http:\/\/www.generationip.com\/docs\/0004\/docs-pmacct-howto-bandwidth-analyser.html\" target=\"_blank\">http:\/\/www.generationip.com\/docs\/0004\/docs-pmacct-howto-bandwidth-analyser.html<\/a><\/p>\n<p><a href=\"http:\/\/www.mail-archive.com\/pmacct-discussion@pmacct.net\/info.html\" target=\"_blank\">http:\/\/www.mail-archive.com\/pmacct-discussion@pmacct.net\/info.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Di sistemi per il monitoraggio della rete ce ne sono molti e ne ho anche provati tanti ( ntop e ulogd per citarne un paio di cui ho anche postato le prove tempo fa ) ma nessuno faceva quello che mi serviva attualmente, ovvero un sistema poco invasivo e discretamente semplice che permettesse di tenere [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,3,23],"tags":[16,8,205,20,5],"_links":{"self":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/599"}],"collection":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=599"}],"version-history":[{"count":14,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/599\/revisions"}],"predecessor-version":[{"id":1665,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/599\/revisions\/1665"}],"wp:attachment":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=599"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}