Diferencia entre revisiones de «Sensu»
(→Configuración) |
|||
Línea 135: | Línea 135: | ||
</pre> | </pre> | ||
− | En este caso le decimos que los datos de respuesta los mande a un exchange de rabbitmq que se llama | + | En este caso le decimos que los datos de respuesta los mande a un exchange de rabbitmq que se llama [[Graphite]]. Al otro extremo de la cola estará graphite recogiendo los datos y meteniendolos en su DB (Carbon) |
Otro ejemplo más sencillo es mandar los resultados a un fichero | Otro ejemplo más sencillo es mandar los resultados a un fichero |
Última revisión de 08:23 20 mar 2013
Introducción
Herramienta para la monitorización de grandes plataformas y con posibilidad de desbordamiento y elasticidad.
Referencias
- Para la instalación existe esta página que explica como comenzar
- La página oficial de sonian para el producto de monitorización
Instalación
En mi caso la instalación la he realizado con el modulo de puppet sensu/sensu. Este módulo contempla la instalación tanto del servidor como del cliente.
Tiene dependencia de Rabbitmq y de redis. Para ambos dos hay módulos para realizar la instalación.
En el caso del manifiesto que instala el servidor de sensu, en mi ejemplo es como sigue:
sensu::server { "${::hostname}" : rabbitmq_host => 'Centos1.ardemans.int', rabbitmq_port => '5673', rabbitmq_user => 'sensu-user', rabbitmq_password => 'secret', rabbitmq_vhost => 'sensu', redis_host => 'Centos1.ardemans.int', redis_port => '6379', dashboard_host => '0.0.0.0', dashboard_port => '8088',
Donde se especifican los datos para conectar a rabbitmq y a redis. También levanta el servicio dashboard y le especificas el puerto por el que quieres acceder a él.
La instalación la realiza en /opt/sensu. La configuración la ubica en /etc/sensu y los logs en /var/log/sensu.
Configuración
La configuración está dividida en unos cuantos directorios. El fichero principal de configuracion es /etc/sensu/config.json y es como esta:
{ "redis": { "host": "Centos1.ardemans.int", "port": 6379 }, "rabbitmq": { "vhost": "sensu", "host": "Centos1.ardemans.int", "password": "secret", "user": "sensu-user", "port": 5673 }, "api": { "host": "localhost", "port": 4567 }, "dashboard": { "host": "0.0.0.0", "password": "~#@~|€~#", "user": "admin", "port": 8088 } }
Este fichero es el generado por el módulo de puppet.
Después hay un directorio /etc/sensu/conf.d donde hay varios ficheros con la configuración propia de las monitorizaciones.
checks_cpu-metrics.json checks_disk-capacity-metrics.json checks_disk-metrics.json client.json handlers_default.json handlers_graphite.json handlers_stdout.json
El fichero client.json es el que se usa cuando se levanta el servicio cliente de las máquinas que queremos monitorizar. Su contenido es sencillo:
{ "client": { "address": "192.168.2.52", "name": "Centos3", "subscriptions": [ "generico" ] } }
Se especifica el nombre y las subscripciones a las que está unido para monitorización
Después hay varios ficheros con chequeos y otros con los handler.
Los de chequeo solo los encontramos en el servidor de sensu, y son los que especifican que se va a ejecutar en el cliente:
{ "checks": { "cpu-metrics": { "type": "metric", "command": "/etc/sensu/plugins/system/cpu-metrics.rb --scheme cpu-metrics.:::name:::", "interval": 60, "handlers": [ "graphite" ], "subscribers": [ "generico" ] } } }
En este caso se le dice que es un chequeo de tipo métrica, y que forma parte de la suscripción "generico". Todos los clientes que estén unidos a esta subscripción ejecutarán este chequeo.
El servidor, cada cierto tiempo (interval) mandará a la cola de rabbitmq una petición de chequeo, que ejecutaran todos los subscriptores y devolverán los datos en la cola de resultados de rabbitmq. Sensu server los recogerá y procesara.
Para saber que hacer con los datos de respuesta están los handler. Uno muy típico es el que manda los datos a graphite:
{ "handlers": { "graphite": { "type": "amqp", "exchange": { "type": "topic", "name": "graphite", "durable": "true" }, "mutator": "only_check_output" } } }
En este caso le decimos que los datos de respuesta los mande a un exchange de rabbitmq que se llama Graphite. Al otro extremo de la cola estará graphite recogiendo los datos y meteniendolos en su DB (Carbon)
Otro ejemplo más sencillo es mandar los resultados a un fichero
{ "handlers": { "stdout": { "type": "pipe", "command": "/etc/sensu/handlers/debug/stdout.sh", "mutator": "only_check_output" } } }
El mutator "only_check_output" es para que, de la respuesta que se manda a la cola de resultados, solo coja el campo que realmente tiene la salida del script, ya que además manda otros datos.