divendres, 7 de desembre del 2012

nat pat

d'una conversa sobre nat ha sorgit la necessitat de parlar de firewall hardware que permeten fer nat amb un rang dinàmic de sortida, per ilutar-ho busco enllaços abans de desenvolupar-ho per mi mateix

el nat clàssic fet amb un router cisco

http://www.firewall.cx/cisco-technical-knowledgebase/cisco-routers/260-cisco-router-nat-overload.html

tk-cisco-routers-nat-ovld-1

altre
http://www.mundocisco.com/2009/05/como-configurar-nat-con-overload.html
http://www.cisco.com/en/US/tech/tk648/tk361/technologies_q_and_a_item09186a00800e523b.shtml
http://informatica.uv.es/iiguia/AER/Tema10.pdf
http://en.wikipedia.org/wiki/Network_address_translation

http://informatica.gonzalonazareno.org/plataforma/mod/wiki/view.php?id=3526

http://www.netstorming.com.ar/2010/06/06/tipos-de-nat-y-configuracion-en-cisco/
http://foro.elhacker.net/redes/nat_dinamico_vs_pat-t351392.0.html



dimecres, 5 de setembre del 2012

mysqldump realizar backup y restaurar backup

Para realizar la copia se seguridad de la base de datos moodle al fichero moodle.sql

mysqldump --opt moodle >  moodle .sql

Otro ejemplo más complejo de comando mysqldump para hacer el backup de una base de datos es el siguiente con usario y contraseña:

mysqldump --opt --password=miclave --user=root mibasededatos > archivo.sql

En este último caso estamos indicando un nombre de usuario y una clave para acceder a la base de datos sobre la que se está haciendo el backup: mibasededatos. Las sentencias SQL para reconstruir esa base de datos se volcarán en el fichero archivo.sql.

Inclusive en debian tinc fet un petit script per realitzar el backup de totes les bases de dades


ies:~# more /root/mysql-backups
#!/bin/bash

# Script que fa Backup de les BD's de Mysql

#if [ "$#" -ne "1" ]; then
#       exit
#fi

for i in $(mysql --defaults-file=/etc/mysql/debian.cnf -e"show databases"| grep -v "^Database$" | grep -v "information_schema");
do
        echo $i
        mysqldump --defaults-file=/etc/mysql/debian.cnf $i > /fem-backup/mysql-backup/$i.sql
        echo $(ls -l $i.sql)
done;



Restaurar la base de datos

Si deseamos recuperar la información de un fichero para restaurar una copia de seguridad de la base de datos lo haremos con el comando mysql. Utilizaremos una sintaxis como esta:

mysql mibase < archivo.sql

En este ejemplo se restauraría la base de de datos mibase con el backup almacenado en el fichero archivo.sql.

Otro ejemplo más complejo de comando para restaurar una base de datos es el siguiente:

mysql --password=miclave --user=miuser mibase < archivo.sql

diumenge, 20 de maig del 2012

dummy fork bomb debian squeeze

mirant logs de navegació veig que s'ha consultat switchroot.com, i vaig a veure la pàgina, amb un primer enllaç de How to create a Linux Fork Bomb. dit i fet , connectar al servidor, no fer prova abans en un entorn de prova, 12 de la nit, copy paste, i fi, perdua de connexió al servidor directament
[root@server ~]# :(){ :|: & };:
Details: The above can be explained as -
:( )     # define a function ':' -- so whenever we say ':', execute this function
{        # beginning of what to do when we say ':'
    :    # load another copy of the ':' function into memory...
    |    # ...and pipe its output to...
    :    # ...another copy of ':' function, which has to be loaded into memory
         # (therefore, ':|:' simply gets two copies of ':' loaded whenever ':' is called)
    &    # disown the functions -- if the first ':' is killed,
         #     all of the functions that it has started should NOT be auto-killed
}        # end of what to do when we say ':'
;        # Having defined ':', we should now...
:        # ...call ':', initiating a chain-reaction: each ':' will start two more. 
 
basicament comportament de 'dummy', potser?
 
bé, aprofitant "l'hazaña" per acabar de securitzar-ho poso un limit al fitxer /etc/security/limits.conf
 
 smx2a-11        hard    nproc   100

smx2b-11        hard    nproc   100

asix2-11        hard    nproc   100

dai2-11 hard    nproc   100

smx1a-11        hard    nproc   100

posant un limit de processos a 100 per evitar-ho, de totes maneres ningú no treballa directament al sistema.

Ara sí, faig la prova, procesos, load es dispara a més de 400 i 1000 pero rapidament finalitza i poc a poc es regualitza.


dissabte, 12 de maig del 2012

Veure com funciona un proces que s’està executant de manera pasiva.


Veure com funciona un proces que s’està executant de manera pasiva

windows

Necessitem tres programes de sysinternals: Filemon, Regmon i Process Explorer.

Filemon en dona l’activitat dels arxius del sistema en temps real.

Regmon mostra en temps real tots els accessos al registre realitzat per la seva aplicació

Process Explorer mostra quines llibreries, descriptors i ports de xarxa té ober el programa. Si només ens interessa els ports que està obrint podem uitlitzar netstat –ano.

Amb filemon si volem seguir només l’activitat de la nostra aplicació, s’ha de fer a Options > Filter /highlight (o control L) i modificar l’asterisc a Include i posar el procés que s’està executant. Després REgmon i filtrar de manera similar. Idem Porcess Explorer....

PER LINUX

lsof ve de LiSt Open Files, llistat d’arxius oberts,
Ens mostra tots els arxius que estan oberts pels processos que s’estant actualment en execució en el sistema i també crea una llista de ports oberts per cada procés.
Normalment el tenim instal·lat a les distribucions de Linux o
http://freshmeat.net/projects/lsof/

descubriment d'objectius

Deepmagic information gathering tool, dmitry

Aporta informació de whois, dades de netcraft (netcrat.com), cerca subdominis i escaneja ports de l’objectiu

 Executar sense analitzar ports
>./dmitry –iwnse xtec.cat

Afegint l’opció –p podem escanegem els ports.

 http://packetstormsecurity.org/files/46342/DMitry-1.3a.tar.gz.html
Trobable a la backtrack i packetstormsecurity.org/UNIX/misc/DMitry-1.2a.tar.gz

./dmitry -iwnspb xtec.cat
Deepmagic Information Gathering Tool
"There be some deep magic going on"

HostIP:213.176.163.147
HostName:xtec.cat

Gathered Inet-whois information for 213.176.163.147
---------------------------------


inetnum:         213.176.160.0 - 213.176.175.255
netname:         XTEC
descr:           Xarxa Telematica Educativa de Catalunya
country:         ES
admin-c:         EC9516-RIPE
tech-c:          MG13134-RIPE
status:          ASSIGNED PA
mnt-by:          XTEC-MNT
source:          RIPE # Filtered

person:         Eduard Cercos
address:        Via Augusta 202, 1C
phone:          +34 934006900
fax-no:         +34 932002921
nic-hdl:        EC9516-RIPE
source:         RIPE # Filtered
mnt-by:         XTEC-MNT

person:         Marc Guri
address:        Via Augusta, 202 1-C
phone:          +34 934006900
fax-no:         +34 932002921
nic-hdl:        MG13134-RIPE
source:         RIPE # Filtered
mnt-by:         XTEC-MNT

% Information related to '213.176.160.0/19AS21193'

route:        213.176.160.0/19
descr:        Network for all schools of Catalonia
origin:       AS21193
mnt-by:       XTEC-MNT
source:       RIPE # Filtered

% This query was served by the RIPE Database Query Service version 1.8.13 (WHOIS1)

Gathered Inic-whois information for xtec.cat
---------------------------------
Domain Name: xtec.cat
Domain Name ACE: xtec.cat
Domain Language: ca
Registrar ID: R-2001 (Nominalia)
Created On: 2006-02-14 08:38:34 GMT
Last Updated On: 2011-09-16 07:50:25 GMT
Expiration Date: 2014-02-14 08:38:34 GMT
Status: ok
Registrant ID: AKMBBC2552-EURO
Registrant Name: Generalitat De Catalunya Departament D'Ensenyament
Registrant Organization: Generalitat De Catalunya Departament D'Ensenyament
Registrant Street: Via Augusta, 202-226
Registrant City: Barcelona
Registrant State/Province: B
Registrant Postal Code: 08021
Registrant Country: ES
Registrant Phone: +34.935516900
Registrant Phone Ext:
Registrant Fax:
Registrant Fax Ext:
Registrant Email: null
Admin ID: NOM_10118901
Admin Name: Orgue' i Bella Jordi
Admin Organization: Generalitat de Catalunya Departament de la Presidencia (2)
Admin Street: Via augusta, 202-226
Admin City: Barcelona
Admin State/Province: B
Admin Postal Code: 08021
Admin Country: ES
Admin Phone: +34.935516900
Admin Phone Ext:
Admin Fax:
Admin Fax Ext:
Admin Email: jordi.orgue@gencat.cat
Tech ID: NIC_CAT_TECH
Tech Name: Technical Department
Tech Organization: Nominalia Internet, S.L.
Tech Street: Josep Pla 2, Torres Diagonal Litoral, Edificio B3, planta 3-D
Tech City: Barcelona
Tech State/Province: Barcelona
Tech Postal Code: 08019
Tech Country: ES
Tech Phone: +34.935074360
Tech Phone Ext:
Tech Fax:
Tech Fax Ext:
Tech Email: tecnico@nominalia.com
Billing ID: NOM_4320802
Billing Name: Jordi Baldrich Rosello
Billing Organization: Departament Educacio Sgti
Billing Street: via augusta 202
Billing City: Barcelona
Billing State/Province: BARCELONA
Billing Postal Code: 08021
Billing Country: ES
Billing Phone: +34.934006900
Billing Phone Ext:
Billing Fax: +34.932002921
Billing Fax Ext:
Billing Email: jfgras@xtec.cat
Name Server: sn2.xtec.cat 85.192.64.252
Name Server ACE: sn2.xtec.cat 85.192.64.252
Name Server: sn1.xtec.cat 85.192.64.244
Name Server ACE: sn1.xtec.cat 85.192.64.244


Gathered Netcraft information for xtec.cat
---------------------------------

Retrieving Netcraft.com information for xtec.cat
    -      No. Samples
Netcraft.com Information gathered

Gathered Subdomain information for xtec.cat
---------------------------------
Searching Google.com:80...
HostName:proxy.xtec.cat
HostIP:213.176.161.211
HostName:lava2.xtec.cat
HostIP:213.176.161.212
HostName:www.xtec.cat
HostIP:213.176.163.147
HostName:clic.xtec.cat
HostIP:213.176.163.220
HostName:blocs.xtec.cat
HostIP:213.176.163.218
HostName:evifa.xtec.cat
HostIP:213.176.191.82
HostName:phobos.xtec.cat
HostIP:213.176.163.151
HostName:aplitic.xtec.cat
HostIP:213.176.163.141
HostName:webquest.xtec.cat
HostIP:213.176.191.81
HostName:agora-eoi.xtec.cat
HostIP:213.176.163.217
HostName:linkat.xtec.cat
HostIP:213.176.163.218
HostName:apliedu.xtec.cat
HostIP:213.176.163.218
HostName:ioc.xtec.cat
HostIP:213.176.163.218
Searching Altavista.com:80...
Found 13 possible subdomain(s) for host xtec.cat, Searched 0 pages containing 0 results

dimarts, 6 de desembre del 2011

sincronizar via ntp.

Sincronizacion de NTP en Debian Etch fuente http://diegosamuel.blogspot.com/2007/06/sincronizacion-de-ntp-en-debian-etch.html


Primero que todo explico que esto lo realice por una necesidad y que lo hice en una mauina con Debian Etch sobre SPARC, supongo que esto igual sirva para todos, es muy útil cuando tienes un equipo viejito que la pila este como mala para mantener el reloj bien sincronizado.



Lo primero es subir el servicio de NTP, el cual se hace de la siguiente forma:



root@localhost:~#apt-get install ntp ntpdate



Luego se le ingresa el servidor donde deseamos que nuestro sistema quede sincronizado, debido a que el servicio NTP es por estratos uno debe sincronizarce con un servidor estrato 1 o 2 para que funcione bien el sistema, esto se hace asi:



root@localhost:~#ntpdate -u 2.pool.ntp.org



Es importante que se coloque el -u por si existe un firewall que nos bloquee el puerto 123 de UDP y no nos permita la sincronización, el 2.pool.ntp.org es un ejemplo de un servidor de estrato 1 de la pagina principal de NTP.



Para probar que si quedo bien configurado se le da el siguiente comando



root@localhost:~#ntptrace

localhost: stratum 2, offset 0.015174, synch distance 0.159423

octant.coopvgg.com.ar: stratum 1, offset -0.000092, synch distance 0.003071, refid 'GPS'



Esto es lo que se visualiza si quedo bien configurado al darle el ntptrace.

dimecres, 23 de febrer del 2011

articulo monitorización

Monitorización  - fuente http://www.postgresql-es.org/node/582

servidor
Una de las tareas más importantes de un administrador de bases de datos es monitorizar los sistemas a su cargo para saber como están funcionando y planear futuras modificaciones y actualizaciones de los mismos.
Este artículo es una introducción a la monitorización de sistemas de bases de datos en sistemas Linux/Unix y está basado en un entrenamiento especializado que se impartio en el PGDay Latinoamericano 2011 en Cuba. Más adelante escribiremos otros artículos más específicos que nos ayuden a usar e interpretar los datos obtenidos de monitorizar nuestros sistemas.
En nuestro caso, monitorizar significa vigilar el funcionamiento de un sistema, servicio o actividad. Bajo nuestro punto de vista existen dos tipos de monitorización:
  • Ad Hoc: Monitorización específica en caso de problemas o pruebas. Se utiliza generalmente para investigar una situación puntual en la que intentamos encontrar una explicación a un suceso, cambio o problema.
  • Preventiva: Detecta interrupciones de servicios, alerta sobre posibles problemas y crea gráficos con tendencias y datos históricos sobre nuestros sistemas. Este tipo de monitorización está automatizada y nos ayuda a descubrir cambios en nuestros sistemas que provocan o pueden provocar problemas en un futuro cercano.
Existen numerosos programas que nos pueden ayudar a realizar la monitorización de nuestros sistemas PostgreSQL. A continuación teneis los mas usados en el mundo de programas de código abierto.
  • Ad Hoc: vmstat, iostat, sar, ps, top, iotop, htop, etc en la linea de comandos de vuestro sistema operativo, e información interna de vuestra instalacion postgreSQL via las vistas y tablas de sistema en la base de datos.
  • Preventiva: "Nagios" para detectar y alertar sobre posibles problemas y "Munin" para crear gráficas históricas con las tendencias y uso de nuestros sistemas.
Los elementos a monitorizar son todos aquellos que nos puedan dar información sobre como nuestro sistema está funcionando y comportandose. Tendremos que monitorizar los componentes de la infraestructura necesaria para que nuestro sistema funcione, los servidores que estamos utilizando, el uso de los recursos que se están utilizando y la información interna en la base de datos que nos de datos sobre como se está usando PostgreSQL.



Algunos de los elementos más importantes que se suelen monitorizar son los siguientes:
  • Servidor: Disponibilidad y posibles problemas del hardware
  • CPU: Carga del sistema y uso de la CPU
  • Memoria: Carga y uso de la memoria, uso de la memoria de intercambio (swap)
  • Red: Disponibilidad de los componentes de red, tráfico de entrada y salida.
  • Discos / almacenamiento: Espacio utilizado, I/O (Input/Output) del sistema
  • PostgreSQL: Número de conexiones, número de transacciones, transacciones abiertas, bloqueos, espacio usado, tipo de comandos usados, etc, etc
Ademas de estos elementos, suelen existir características específicas a cada sistema que cada administrador deberá identificar y monitorizar de la mejor manera posible.

Monitorización Ad Hoc

Como ya hemos comentado, este tipo de monitorización se utiliza generalmente para investigar una situacion puntual, en la que entramos en el sistema, recogemos los datos deseados por un periodo de tiempo y pasamos a su posterior análisis para intentar encontrar una explicación a la situación o problema que estamos intentado resolver.

Herramientas del sistema operativo

A continuación teneis una breve introducción a las herramientas del sistema operativo usadas más a menudo en esta monitorización. Todas estas herramientas se pueden usar con multitud de opciones y parámetros, para obtener información detallada sobre los mismos usar el comando "man programa"
vmstat: Este comando se suele usar para obtener, entre otras cosas, información sobre el uso de memoria, swap, I/O total y cpu del sistema. La primera fila del resultado por defecto da los valores medios desde la última vez que se arranco el sistema. Es un programa que te da información global e instantanea del sistema en un momento determinado.
En sistemas debian/ubuntu este programa esta incluido en el paquete procps y si no esta instalado se puede instalar con el siguiente comando:
$ sudo apt-get install procps
Un resultado típico de ejecutar este comando podria ser el siguiente:
$ vmstat -n 1 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0   1368 401736 529112 4844136    0    0    15    26   24    6  5  1 94  1
0  0   1368 397884 529112 4844140    0    0     0   124  523 1399  1  0 99  0
0  0   1368 401976 529112 4844140    0    0     0     0  566 1648  1  0 99  0
0  0   1368 398752 529112 4844140    0    0     0     0  488 1447  1  0 99  0
0  0   1368 403588 529112 4844140    0    0     0     0  520 1550  2  0 98  0
0  0   1368 398720 529112 4844140    0    0     0     0  565 1525  1  0 99  0
0  0   1368 400232 529116 4844144    0    0     0   124  551 1609  1  0 99  0
0  0   1368 396132 529116 4844144    0    0     0     0  519 1395  1  0 99  0
0  0   1368 400720 529116 4844144    0    0     0   440  673 1892  1  0 98  1
1  0   1368 397076 529116 4844144    0    0     0     0  500 1443  1  1 99  0
El tamaño de bloque por defecto es 1024 bytes (1Kb) y el significado de las distintas columnas es el siguiente:
r: Procesos esperando por tiempo de ejecución (run time)
b: Procesos en estado de espera sin interrupciones(uninterruptible sleep)
swpd: Cantidad de memoria virtual en uso
free: Cantidad de memoria ociosa
buff: Cantidad de memoria usada por buffers
cache: Cantidad de memoria usada caches
si: Cantidad de memoria grabada en disco (swap-in)
so: Cantidad de memoria leida del disco (swap-out)
bi: Bloques recibidos por los dispositivos de bloques (bloques/s)
bo: Bloques enviados por los dispositivos de bloques (bloques/s)
in: Número de interrupciones por segundo
cs: Número de cambios de contexto por segundo (context switches)
us: Tiempo de cpu de procesos de usuario (nice incluido)
sy: Tiempo de cpu de procesos del kernel
id: Tiempo de cpu ocioso
wa: Tiempo de cpu esperando por I/O
st: Tiempo de cpu "robado" a una maquina virtual
iostat: Este comando se suele utilizar para obtener información sobre la entrada/salida de datos de todos los dispositivos, particiones y sistemas de ficheros NFS. Por defecto, el primer resultado da los valores medios desde la última vez que se arranco el sistema. Es un programa que te da información sobre el I/O del sistema para todos los dispositivos en un momento determinado.
En sistemas debian/ubuntu este programa está incluido en el paquete sysstat y si no esta instalado se puede instalar con el siguiente comando:
$ sudo apt-get install sysstat
Un resultado típico de ejecutar este comando podria ser el siguiente:
$ iostat -k -p 1 2
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.78    0.19    0.60    0.79    0.00   93.64

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               5.50        59.00       106.86   19921681   36081584
sda1              1.62         6.75        17.93    2279650    6053108
sda2              0.08         3.05         0.02    1031003       7032
sda3              3.80        49.19        88.91   16610176   30020076
sda4              0.00         0.00         0.00        740       1368
sdb               0.00         0.01         0.00       3460         44
sdb1              0.00         0.01         0.00       3340         44

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.99    0.10    0.54    0.00    0.00   98.37

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.20        25.60         0.00        128          0
sda1              0.00         0.00         0.00          0          0
sda2              0.20        25.60         0.00        128          0
sda3              0.00         0.00         0.00          0          0
sda4              0.00         0.00         0.00          0          0
sdb               0.00         0.00         0.00          0          0
sdb1              0.00         0.00         0.00          0          0
El tamaño de bloque por defecto usado por este programa es 512 bytes. El parámetro -k nos cambia el valor de bloque a 1024 bytes (1Kb). El significado de las distintas columnas es el siguiente:
tps: Número de peticiones I/O (transferencias) a un dispositivo
kB_read/s: kB por segundo leidos del dispositivo
kB_wrtn/s: kB por segundo escritos en el dispositivo
kB_read: Número total de kB leidos del dispositivo
kB_wrtn: Número total de kB escritos en el dispositivo
sar: Este programa se suele utilizar para recolectar y grabar información sobre nuestro sistema durante un periodo de tiempo.
En sistemas debian/ubuntu este programa está incluido en el paquete sysstat y si no esta instalado se puede instalar con el siguiente comando:
$ sudo apt-get install sysstat
La recolección de datos se llama desde cron (/etc/cron.d/sysstat), y por defecto no está activado. Para activar la recolección de datos una vez instalado deberemos cambiar un parámetro en el fichero /etc/default/sysstat y arrancar el servicio:
ENABLE="TRUE" en /etc/default/sysstat
$ sudo /etc/init.d/sysstat restart
Un resultado típico de ejecutar este comando despues de un tiempo desde que se activa la recolección de datos podria ser el siguiente:
$ sar
Linux 2.6.35-24-generic (core2)  01/29/2011  _x86_64_ (4 CPU)

12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:05:01 AM     all      0.72      0.14      0.95      0.19      0.00     97.99
12:15:01 AM     all      0.74      0.15      0.95      0.09      0.00     98.07
12:25:01 AM     all      0.73      0.15      0.90      0.05      0.00     98.17
12:35:01 AM     all      0.74      0.14      0.93      0.15      0.00     98.05
12:45:01 AM     all      1.08      4.80      3.27      0.07      0.00     90.78
12:55:01 AM     all      0.96      3.67      2.59      0.10      0.00     92.68
01:05:01 AM     all      0.72      0.14      0.90      0.19      0.00     98.04
01:15:01 AM     all      0.76      0.13      0.97      0.07      0.00     98.06
01:25:01 AM     all      0.70      0.15      0.90      0.06      0.00     98.20
01:35:01 AM     all      0.70      0.13      0.89      0.11      0.00     98.17
01:45:01 AM     all      0.68      0.14      0.90      0.10      0.00     98.18
ps: Este programa nos da información sobre los procesos que se están ejecutando en nuestro sistema. En el caso de procesos PostgreSQL nos puede dar información muy valiosa sobre cuantos procesos PostgreSQL se están ejecutando y que están haciendo.
Un resultado típico de ejecutar este comando para obtener los procesos PostgreSQL del sistema, ordenados por el momento en que empezaron a ejecutarse, podria ser el siguiente:
$ ps auxww | grep "postgres: " | sort -k 9

postgres 30758 .... 07:10 0:00 postgres: autovacuum launcher process         
postgres 30759 .... 07:10 0:00 postgres: stats collector process             
postgres 30757 .... 07:10 0:00 postgres: wal writer process                  
postgres 30756 .... 07:10 0:01 postgres: writer process                      
postgres   862 .... 07:59 0:00 postgres: postgres postgres [local] idle in transaction
postgres  1921 .... 09:22 0:00 postgres: postgres postgres 127.0.0.1(39475) idle 
postgres 21074 .... 14:14 0:04 postgres: postgres pgbench [local] COMMIT     
postgres 21073 .... 14:14 0:04 postgres: postgres pgbench [local] UPDATE waiting
Los que nos suelen interesar en este caso son los procesos creados por conexiones de clientes a nuestro servidor PostgreSQL. Estos procesos se muestran con el siguiente formato:
postgres: usuario  dbase  maquina(puerto)  actividad
Como podeis ver, podemos obtener información sobre que usuario está utilizando el cliente para conectarse, a que base de datos se está conectando, desde que máquina y puerto (o socket [local]) se ha conectado y que está haciendo. Los valores de la actividad que está realizando podrán ser:
idle in transaction: El proceso ha abierto una transacción pero no la ha cerrado todavia.
idle: El proceso está conectado pero sin hacer nada.
COMANDO: El proceso está ejecutando el comando COMANDO
COMANDO waiting: El proceso quiere ejecutar el comando COMANDO, pero está bloqueado y esperando a poder ejecutarse

Vistas y tablas de sistema internas en PostgreSQL

Además podemos obtener información sobre como esta funcionando PostgreSQL internamente a través de las vistas y tablas de sistema en la base de datos. En sucesivos artículos iremos viendo que tipo de información contienen y como interpretar estas vista/tablas de sistema.
Para que muchas de estas vistas/tablas funcionen debemos tener activados estos parámetros en nuestro sistema, track_counts, track_functions, track_activities, bien en el fichero postgresql.conf o definidos con SET / ALTER DATABASE en la sesión o base de datos de la que queremos obtener información.
Existen muchas vistas y tablas internas pero las que se usan mas comunmente para obtener información de PostgreSQL son las siguientes:
pg_roles: Información sobre todos los roles y usuarios definidos en la base de datos.
postgres=# SELECT * from pg_roles ;

 rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid 
----------+----------+------------+---------------+-------------+--------------+-------------+--------------+-------------+---------------+-----------+-----
 postgres | t        | t          | t             | t           | t            | t           |           -1 | ********    |               |           |  10
(1 row)
pg_database Información sobre todas las bases de datos definidas en nuestro sistema.
postgres=# SELECT * from pg_database ;

  datname  | datdba | encoding | datcollate  |  datctype   | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace |               datacl                
-----------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+---------------+-------------------------------------
 template1 |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | t            |           -1 |         11866 |          654 |          1663 | {=c/postgres,postgres=CTc/postgres}
 template0 |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | f            |           -1 |         11866 |          654 |          1663 | {=c/postgres,postgres=CTc/postgres}
 postgres  |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         11866 |          654 |          1663 | 
 pgbench   |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         11866 |          654 |          1663 | 
(4 rows)
pg_locks: Información sobre los bloqueos activos en nuestras bases de datos. Vista complicada de entender pero muy valiosa en ciertas situaciones.
postgres=# SELECT * from pg_locks ;

   locktype    | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid  |       mode       | granted 
---------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+------------------+---------
 relation      |    16385 |    16392 |      |       |            |               |         |       |          | 3/2666             | 2711 | AccessShareLock  | t
 relation      |    16385 |    16392 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 virtualxid    |          |          |      |       | 4/2692     |               |         |       |          | 4/2692             | 2710 | ExclusiveLock    | t
 relation      |    11874 |    10985 |      |       |            |               |         |       |          | 2/19               | 2401 | AccessShareLock  | t
 relation      |    16385 |    16399 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 relation      |    16385 |    16392 |      |       |            |               |         |       |          | 4/2692             | 2710 | AccessShareLock  | t
 relation      |    16385 |    16392 |      |       |            |               |         |       |          | 4/2692             | 2710 | RowExclusiveLock | t
 relation      |    16385 |    16403 |      |       |            |               |         |       |          | 4/2692             | 2710 | AccessShareLock  | t
 relation      |    16385 |    16403 |      |       |            |               |         |       |          | 4/2692             | 2710 | RowExclusiveLock | t
 relation      |    16385 |    16403 |      |       |            |               |         |       |          | 3/2666             | 2711 | AccessShareLock  | t
 relation      |    16385 |    16403 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 virtualxid    |          |          |      |       | 3/2666     |               |         |       |          | 3/2666             | 2711 | ExclusiveLock    | t
 relation      |    16385 |    16401 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 relation      |    16385 |    16386 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 relation      |    16385 |    16401 |      |       |            |               |         |       |          | 4/2692             | 2710 | RowExclusiveLock | t
 tuple         |    16385 |    16389 |   22 |    97 |            |               |         |       |          | 4/2692             | 2710 | ExclusiveLock    | t
 relation      |    16385 |    16389 |      |       |            |               |         |       |          | 4/2692             | 2710 | RowExclusiveLock | t
 relation      |    16385 |    16395 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 relation      |    16385 |    16389 |      |       |            |               |         |       |          | 3/2666             | 2711 | RowExclusiveLock | t
 transactionid |          |          |      |       |            |       2793613 |         |       |          | 4/2692             | 2710 | ExclusiveLock    | t
 virtualxid    |          |          |      |       | 2/19       |               |         |       |          | 2/19               | 2401 | ExclusiveLock    | t
 transactionid |          |          |      |       |            |       2793614 |         |       |          | 3/2666             | 2711 | ExclusiveLock    | t
 transactionid |          |          |      |       |            |       2793609 |         |       |          | 4/2692             | 2710 | ShareLock        | t
(23 rows)
pg_stat_activity: Información sobre todos los procesos clientes conectados a la base de datos.
postgres=# SELECT * from pg_stat_activity ;

 datid | datname  | procpid | usesysid | usename  | application_name | client_addr | client_port |         backend_start         |          xact_start           |          query_start          | wa
iting |                             current_query                             
-------+----------+---------+----------+----------+------------------+-------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+-----------------------------------------------------------------------
 11874 | postgres |    2401 |       10 | postgres | psql             |             |          -1 | 2011-02-17 22:48:08.090603+01 | 2011-02-17 22:52:31.297037+01 | 2011-02-17 22:52:31.297037+01 | f       | SELECT * from pg_stat_activity ;
 16385 | pgbench  |    2711 |       10 | postgres |                  |             |          -1 | 2011-02-17 22:51:12.209724+01 | 2011-02-17 22:52:31.296394+01 | 2011-02-17 22:52:31.296873+01 | f       | END;
 16385 | pgbench  |    2710 |       10 | postgres |                  |             |          -1 | 2011-02-17 22:51:12.1963+01   | 2011-02-17 22:52:31.295193+01 | 2011-02-17 22:52:31.29542+01  | t       | UPDATE pgbench_tellers SET tbalance = tbalance + -4443 WHERE tid = 1;
 16385 | pgbench  |    2811 |       10 | postgres |                  |             |             | 2011-02-17 22:52:27.549785+01 | 2011-02-17 22:52:31.247453+01 | 2011-02-17 22:52:31.247453+01 | f       | autovacuum: ANALYZE public.pgbench_history
(4 rows)
pg_stat_database: Información global de uso de todas las bases de datos.
postgres=# SELECT * from pg_stat_database ;

 datid |  datname  | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted 
-------+-----------+-------------+-------------+---------------+-----------+----------+--------------+-------------+--------------+-------------+-------------
     1 | template1 |           0 |        3612 |             0 |      2840 |   100341 |       935386 |       33760 |            0 |           0 |           0
 11866 | template0 |           0 |           0 |             0 |         0 |        0 |            0 |           0 |            0 |           0 |           0
 11874 | postgres  |           1 |        4859 |             0 |      1304 |   132667 |      1425972 |       38209 |            0 |           0 |           0
 16385 | pgbench   |           2 |     2978446 |             1 |    659578 | 82868995 |     41262336 |    11863286 |      3178023 |     8934189 |           0
(4 rows)
pg_stat_user_tables: Información de uso de todas las tablas de usuario en una base de datos
pgbench=# SELECT * from pg_stat_user_tables ;

 relid | schemaname |     relname      | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup |          last_vacuum          |        last_autovacuum        |         last_analyze          |       last_autoanalyze        
-------+------------+------------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------
 16395 | public     | pgbench_history  |        0 |            0 |          |               |   3074221 |         0 |         0 |             0 |     283308 |          0 | 2011-01-29 12:31:54.208813+01 |                               | 2011-01-29 12:31:54.209202+01 | 2011-02-17 22:53:34.126245+01
 16386 | public     | pgbench_branches |    38821 |        62452 |  3042999 |       3042999 |         2 |   3074222 |         0 |       3072054 |         75 |        493 | 2011-02-17 22:51:12.172321+01 | 2011-02-17 22:53:27.711111+01 | 2011-01-29 12:31:53.945088+01 | 2011-02-17 22:53:27.748393+01
 16389 | public     | pgbench_tellers  |    32474 |       621300 |  3043158 |       3043158 |        20 |   3074222 |         0 |       3052868 |         55 |        810 | 2011-02-17 22:51:12.175635+01 | 2011-02-17 22:53:27.870574+01 | 2011-01-29 12:31:53.946838+01 | 2011-02-17 22:53:27.871727+01
 16392 | public     | pgbench_accounts |        1 |       200000 |  6148444 |       6148444 |    200000 |   3074222 |         0 |       3033380 |     199999 |      10091 | 2011-01-29 12:31:54.049578+01 | 2011-01-29 12:59:29.982391+01 | 2011-01-29 12:31:54.204138+01 | 2011-02-17 22:53:31.476969+01
(4 rows)
pg_stat_user_indexes: Información de uso de todos los índices de usuarios en una base de datos
pgbench=# SELECT * from pg_stat_user_indexes ;

 relid | indexrelid | schemaname |     relname      |     indexrelname      | idx_scan | idx_tup_read | idx_tup_fetch 
-------+------------+------------+------------------+-----------------------+----------+--------------+---------------
 16386 |      16399 | public     | pgbench_branches | pgbench_branches_pkey |  3088826 |     10145852 |       2902404
 16389 |      16401 | public     | pgbench_tellers  | pgbench_tellers_pkey  |  3088985 |     24680003 |       2378762
 16392 |      16403 | public     | pgbench_accounts | pgbench_accounts_pkey |  6240098 |      6319966 |       6240098
pg_stat_user_functions: Información sobre estadísticas de uso de las funciones en uso.
pg_statio_user_tables: Información de acceso a disco y memoria cache de todas las tablas de usuario en una base de datos.
pgbench=# SELECT * from pg_statio_user_tables ;

 relid | schemaname |     relname      | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit 
-------+------------+------------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
 16392 | public     | pgbench_accounts |         547836 |       9289403 |          1361 |     19151376 |                 |                |                |              
 16395 | public     | pgbench_history  |         135074 |       3208010 |               |              |                 |                |                |              
 16386 | public     | pgbench_branches |           7587 |      17015504 |             6 |      3138237 |                 |                |                |              
 16389 | public     | pgbench_tellers  |           7160 |      28805005 |            25 |      6021187 |                 |                |                |              
(4 rows)

pg_statio_user_indexes: Información de acceso a disco y memoria cache de todos los índices de usuario en una base de datos.
pgbench=# SELECT * from pg_statio_user_indexes ;

 relid | indexrelid | schemaname |     relname      |     indexrelname      | idx_blks_read | idx_blks_hit 
-------+------------+------------+------------------+-----------------------+---------------+--------------
 16386 |      16399 | public     | pgbench_branches | pgbench_branches_pkey |             6 |      3163169
 16389 |      16401 | public     | pgbench_tellers  | pgbench_tellers_pkey  |            25 |      6076626
 16392 |      16403 | public     | pgbench_accounts | pgbench_accounts_pkey |          1361 |     19301010
(3 rows)
pg_stat_bgwriter: Información global sobre el proceso "background writer"
pgbench=# SELECT * from pg_stat_bgwriter ;

 checkpoints_timed | checkpoints_req | buffers_checkpoint | buffers_clean | maxwritten_clean | buffers_backend | buffers_alloc 
-------------------+-----------------+--------------------+---------------+------------------+-----------------+---------------
               474 |              81 |             223942 |        554746 |              573 |           85369 |        555848
(1 row)

Monitorización preventiva

Como hemos comentado al principio, este tipo de monitorización se utiliza para detectar interrupciones de servicios, alertar sobre posibles problemas y crea gráficos con tendencias y datos históricos sobre nuestros sistemas. Los dos programas de código abierto mas utilizados para este tipo de monitorización son:
  • Nagios: Se utiliza para detectar interrupciones de servicios y alertar sobre posibles problemas o situaciones que necesitan una atención especial por parte de los administradores del sistema. Su instalación y configuración se escapa al objetivo de este documento. Más adelante escribiremos un artículo sobre como utilizar Nagios. Aquí teneis un ejemplo de una de la pantallas de este programa:



  • Munin: Se utiliza para crear gráficas históricas con las tendencias y uso de nuestros sistemas. Imprescindible para ver como nuestros sistemas se están utilizando en el tiempo y si existen tendencias en el uso que van a requerir nuestra intervención en el futuro. Su instalación y configuración se escapa al objetivo de este documento. Más adelante escribiremos un artículo sobre como utilizar Munin. Aquí teneis algunos ejemplos de lo que se puede hacer con este programa:

Más información

http://www.nagios.org/
http://munin-monitoring.org/
http://www.postgresql.org/docs/current/interactive/catalogs.html
http://www.postgresql.org/docs/current/interactive/monitoring.html
http://www.postgresql.org/docs/9.0/interactive/sql-set.html
http://www.postgresql.org/docs/9.0/interactive/sql-alterdatabase.html