Posts marcats amb munin
Optimitzar Munin amb tmpfs
Oct 24
Al servidor on allotgem les webs, l’Apache cada vegada anava més lent.
Un apachectl fullstatus
ens mostrava molts workers en estat L (“Logging”) esperant obtenir accés a disc.
Vam descobrir que el problema era el Munin, a mida que havíem anat afegint nodes i gràfiques, el rendiment havia anat baixant. Cada node té unes 80 bases de dades RRD, depenent del nombre de gràfiques; si monitoritzem uns 50 nodes, són uns 4000 fitxers RRD a actualitzar cada 5 minuts i l’accés a disc comença a ser un problema.
Per solucionar-ho vam moure les bases de dades a la memòria RAM
a la gràfica es veu clarament com va desaparèixer l’espera per accedir al disc (iowait)
Configurar munin + tmpfs
per reduir l’espai usat, no esta de més esborrar els RRD antics que ja no s’utilitzin
# du -sh /var/lib/munin
305M /var/lib/munin
fem una còpia de la carpeta
afegim a /etc/fstab una partició tmpfs prou gran per posar-hi /var/lib/munin i amb l’uid i gid de l’usuari munin
la muntem i hi copiem les dades
# mount /var/lib/munin
# cp -ra /var/lib/munin-cache/* /var/lib/munin/
ara tenim les bases de dades RRD a la RAM, l’accés a disc ja no hauria de ser un problema, però si s’apaga el servidor es perden les dades de la RAM, per tant cal programar un cron que vagi copiant les dades a disc
posem a /etc/cron.hourly/munin-cache
# hem posat /var/lib/munin a la RAM, cal copiar-ho a /var/lib/munin-cache
# per no perdre les dades en cas de reiniciar.
cp -ra /var/lib/munin/* /var/lib/munin-cache/
i ho fem executable
per que es restauri automàticament la còpia a l’engegar, afegim a /etc/rc.local
Mesurar l’ample de banda amb Munin i Shorewall
Oct 17
Ens trobem que l’ADSL d’un client no dóna a coll i tota l’empresa es queixa de la lentitud de la connexió.
La sortida és a través de dues línies ADSL i el tallafocs reparteix el trànsit segons tipus: consultes DNS, HTTP i HTTPS per una, la resta per l’altre. A la LAN hi ha varis servidors (web, correu, vpn, terminal server…) als quals s’accedeix des de fora.
Com que mesurem el rendiment del tallafocs amb Munin, a les gràfiques de xarxa es veu clarament que es satura la pujada de la primera ADSL (DNS, HTTP, HTTPS), però quina aplicació l’està saturant? Ens cal una gràfica més detallada. Per sort el Shorewall i el Munin ens ho posen fàcil.
Configurant Shorewall
Primer dividirem el trànsit en les categories que volem que apareixin a la gràfica. Per començar, volem tenir visibilitat de l’ample de banda de navegació web dels usuaris, i del consumit per el servidor1 (www) i el servidor2 (correu), que són els que s’hi accedeix per aquesta ADSL.
Al Shorewall farem ús del “Traffic Accounting” que permet definir unes regles i comptar tot el trànsit que hi coincideixi.
Editem /etc/shorewall/accounting i afegim les regles (eth1 és la tarja de la ADSL)
http_up:COUNT - - eth1 tcp 80
http_down:COUNT - eth1 - tcp - 80
http_up:COUNT - - eth1 tcp 443
http_down:COUNT - eth1 - tcp - 443
# trànsit cap al server1
server1_down:COUNT - eth1 192.168.1.19 tcp 80
server1_info_up:COUNT - 192.168.1.19 eth1 tcp - 80
# trànsit cap al server2
server2_down:COUNT - eth1 192.168.1.18 tcp -
server2_up:COUNT - 192.168.1.18 eth1 tcp -
comprovem la configuració
i l’apliquem
ara podem consultar el volum de dades de cada regla
Chain accounting (3 references)
pkts bytes target prot opt in out source destination
3451 141931 http_up tcp -- * eth1 0.0.0.0/0 0.0.0.0/0 multiport dports 80
4284168 5869787661 http_down tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 multiport sports 80
955172 387608054 http_up tcp -- * eth1 0.0.0.0/0 0.0.0.0/0 multiport dports 443
963938 547990542 http_down tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 multiport sports 443
(...)
Configurant Munin
Ja tenim les dades. Ara cal un plugin de Munin que les reculli per fer-ne una gràfica. Nosaltres hem descarregat aquest plugin i hem fet una petita modificació per a que el trànsit de pujada (tot el que el nom acabi en “_up”) apareixi en negatiu, sota l’eix X de la gràfica.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/usr/bin/python # shorewall_accounting # A munin plugin for tracking traffic as recorded by shorewall accounting rules # Written by Chris AtLee <chris@atlee.ca> # Released under the GPL v2 import sys, commands, re accountingLineExp = re.compile(r"^\s*\d+\s+(\d+)\s+(\w+).*$") negativeValueExp = re.compile(r".*_up$") def getBytesByChain(): status, output = commands.getstatusoutput("shorewall -x show accounting") if status != 0: raise OSError("Error running command (%s)[%i]: %s" % (trafficCmd, status, output)) chains = {} for line in output.split("\n"): m = accountingLineExp.match(line) if m is not None: target = m.group(2) bytes = int(m.group(1)) if target in chains: chains[target] += bytes else: chains[target] = bytes retval = [] chainNames = chains.keys() chainNames.sort() for name in chainNames: mm = negativeValueExp.match(name) if mm is not None: value = chains[name] * -1 else: value = chains[name] retval.append((name, value)) return retval if len(sys.argv) > 1: if sys.argv[1] == "autoconf": print "yes" sys.exit(0) elif sys.argv[1] == "config": print "graph_title Shorewall accounting" print "graph_category network" print "graph_vlabel bits per ${graph_period}" for chain,bytes in getBytesByChain(): neg_val = negativeValueExp.match(chain) if neg_val is not None: print "%s.max 0" % chain else: print "%s.min 0" % chain print "%s.type DERIVE" % chain print "%s.label %s" % (chain, chain) print "%s.cdef %s,8,*" % (chain, chain) sys.exit(0) for chain, bytes in getBytesByChain(): print "%s.value %i" % (chain, bytes) |
Ho posem al directori de plugins del Munin (/usr/share/munin/plugins/shorewall_accounting) i l’activem
Per a accedir a l’iptables calen permisos de root, configurem el plugin a /etc/munin/plugin-conf.d/shorewall_accounting
user root
reiniciem el munin-node i comprovem que tot funcioni
[root@fw1 ~]# munin-run shorewall_accounting
Finalment amb la gràfica que se’ns genera podem veure el consum d’ample de banda de cada categoria: