Agcapa

programador web

Empezar a crear un proyecto con ReactJS

Continuamos nuestra serie de artículos sobre ReactJS, pero nos centramos ya en la parte más práctica de esta librería Javascript y lo hacemos  con un pequeño ejemplo en el que usaremos la herramienta Create React App, que nos permite obtener con un único comando el entorno de desarrollo ya listo para empezar a trabajar.

Uno de los problemas que tenía ReactJS al principio era que en ocasiones había que pelearse un poco con las configuraciones, gestores de paquetes, de tareas, transpiladores, linters, builders etc. Facebook ha resuelto esta complicación con Create React App. Por línea de comandos, nos ahorra la necesidad de configurar todo un entorno de trabajo, por lo que nos permite ponernos directamente a desarrollar sobre esta librería y disfrutar de toda la sencillez y rendimiento de ReactJS.

Instalación

Este comando es CREATE REACT APP y se instala en tres pasos:

Primero instalamos Create React App con el siguiente comando de npm:

npm install -g create-react-app

Una vez lo hemos instalado nos metemos en la carpeta donde deseemos crear nuestro directorio de trabajo para el proyecto, y lanzamos el comando para comenzar la nueva aplicación:

create-react-app nueva-app-react

Mediante el anterior comando se cargan los archivos de un proyecto vacío y todas las dependencias de npm. Una vez terminado el proceso entraremos dentro de la carpeta de nuestra nueva app:

cd nueva-app-react

Ya dentro lanzaremos el comando que iniciará el servidor web y nos abrirá una página en nuestro navegador con un mensaje de bienvenida.

npm start

Con esto ya tendremos nuestro proyecto creado.

El propio terminal nos indicará la URL del servidor web donde está funcionando nuestra app. De manera predeterminada, será el http://localhost:3000/, aunque el puerto podría variar si el 3000 está ocupado.

Estructura del proyecto

Nuestra app React recién creada cuenta con varias carpetas:

  • node_modules: dependencias npm del proyecto
  • public: la raíz de nuestro servidor donde se podrá encontrar el index.html, el archivo principal y el favicon.ico, el icono de la aplicación.
  • src: aquí es donde trabajaremos nuestro proyecto, donde vamos a colocar los archivos de nuestros componentes React.

Además encontrarás estos archivos sueltos, como el readme, el package.json, etc.

Hola Mundo en React

Casi todo nuestro trabajo del día a día lo realizaremos en la carpeta “src”. Para comenzar y no despistarnos en nuestro primer “Hola Mundo”, podríamos obviargran parte del código de nuestro archivo src/App.js y quedarnos con esto:

import React, { Component } from 'react';

class App extends Component {
  render() {
    return (
      <div>
        <h1>Estamos comenzando con ReactJS</h1>
        <h2>Comenzar con Create React App se hace muy sencillo</h2>
      </div>
    );
  }
}
export default App;

En la primera línea import React, se está importando la librería React y la clase Component. Esta clase la usamos para extenderla y crear nuestra propio componente App.

Las clases que usamos para implementar componentes React solo necesitan un método render para poder funcionar. En nuestro caso el componente que estamos creando, llamado App (como el nombre de la clase), solamente tiene ese método render().

Como puedes observar, render devuelve un contenido que es el HTML necesario para pintar el componente en la página. El único detalle es que render debe devolver un único elemento HTML (en nuestro caso un <div>), sobre el que se anidarán cualquier número de elementos para crear la estructura del DOM necesaria para el componente.

Observa también que estamos usando clases de ECMAScript 6 para la creación de componentes. Actualmente es la manera recomendada, aunque no es la única. No necesitaremos preocuparnos porque ese Javascript no sea compatible con todos los navegadores, ya que Create React App configura el transpilador para hacerlo compatible con ECMAScript 5.

Guardando el archivo observamos como el navegador refresca la página automáticamente.

Con esto ya hemos creado nuestro primer componente y tenemos un acercamiento inicial a React, y muy sencillo gracias a Create React App.

Las tablas de la base de datos de WordPress

Las tablas de la base de datos de WordPress

Cuando instalamos WordPress se crean 12 tablas iniciales que son las que vamos a explicar en esta guía.

Nota: Ante de continuar debemos saber que no deberíamos utilizar el prefijo por defecto que nos ofrece WordPress que no es otro que “wp_“. Deberíamos cambiarlo por otro por motivos de seguridad. Para esta guía he utilizado el prefijo por defecto por motivos didácticos.

Tras realizar una instalación de WordPress sin nada más, nos econtraremos estas tablas en nuestro phpMyAdmin:

Esta es la estructura de tablas que nos vamos a encontrar en una nueva instalación de WordPress.

A continuación vamos a resumir un poco cada una de las tablas para más adelante pasar a detallarlas un poco más cada una de ellas.

Las 12 tablas de WordPress
wp_commentmeta Esta tabla contiene contenido adicional sobre los comentarios.
wp_comments Aquí están los datos de los comentarios.
wp_links Esta tabla está obsoleta desde la versión 3.5 de WordPress. Aquí se almacenan o almacenaban los enlaces.
wp_options Aquí se almacenan los datos de configuración de WordPress además de datos sobre configuración de plugins, temas, etc..
wp_postmeta Información relacionada con los posts. Esta tabla está relacionada con la tabla wp_posts.
wp_posts Se almacena todo el contenido de WordPress como entradas, páginas, ficheros, etc…
wp_termmeta Metadados relacionados con las categorías.
wp_terms Aquí se almacenan las categorías y etiquetas.
wp_terms_relationships En esta tabla se establece la relación entre los posts con las categorías, etiquetas, etc..
wp_term_taxonomy Establece las características de las taxonomías como las entradas, páginas, etc…
wp_usermeta Tabla con información adicional sobre los usuarios de la tabla wp_users.
wp_users En esta tabla es donde se almacenan todos los usuarios con su información básica como contraseña, email, etc..

Con esta breve explicación ya nos podemos hacer una idea de la estructura de la base de datos de WordPress y hacerno una idea que dónde se almacenan algunos datos aunque lo veremos un poco mejor más adelante en esta guía.

 

Relaciones entre las tablas de la base de datos

Para comprender un poco mejor la estructura de la base de datos de WordPress debemos entender cómo están relacionas entre ellas.

A continuación podemos ver un esquema de las relaciones entre las tablas obtenido del codex de WordPress.org.

En la imagen anterior podemos ver graficamente las relaciones entre las tablas de la base de datos de WordPress en sus últimas versiones.

Detallaremos un poco más la relación de cada una de las tablas más adelante en esta guía.

 

Detalle de cada una de las tablas

Tabla wp_commentmeta

Como ya hemos comentado anteriormente, en la tabla wp_commentmeta se almacenan los datos adicionales de o sobre los comentarios que se almacenan en una instalación de WordPress.

Estructura de la tabla wp_commentmeta:

Como podemos ver en la imagen anterior esta tabla es muy sencilla y sólo tiene 4 campos:

Campos tabla wp_commentmeta
meta_id Id principal de la tabla
comment_id Id del comentario (tabla wp_comments)
meta_key Clave del valor
meta_value Meta o valor del campo

Destacaremos que el cambio comment_id hace referencia al id de la tabla wp_comments por lo tanto queda claro que ambas están relacinonada a través de este campo.

Obtener datos de la tabla wp_commentmeta

Para obtener datos de la tabla wp_commentmeta podemo utilizar la función get_comment_meta() que nos devolverá el campo meta de un comentario.

 

Tabla wp_comments

Esta es la tabla donde se almacenan o guardan los comentarios que se han realizado en nuestro WordPress. Tanto los comentarios que se han aprobado como los que no han sido aprovados.

Estructura de la tabla wp_comments:

 

Campos tabla wp_comments
comment_ID Id del comentario
comment_post_ID Id del post (tabla wp_posts)
comment_author Autor del comentario
comment_author_email Email del autor del comentario
comment_author_url Url del autor del comentario
comment_author_IP Ip del autor del comentario
comment_date Fecha y hora del comentario
comment_date_gmt Fecha y hora del comentario (gmt)
comment_content Contenido del comentario
comment_karma Meta o valor del campo
comment_approved Aprobación del comentario (0, 1 o spam)
comment_agent Browser, sistema operativo, etc..
comment_type Tipo (pingback | trackback)
comment_parent Comentario padre del actual
user_id id del usuario si está registrado

Obtener datos de la tabla wp_comments

Para obtener datos de la tabla wp_comments podemo utilizar la función get_comments() que nos devolverá el campo meta de un comentario.

 

Tabla wp_links

Esta tabla se utilizaba en veriones anteriores pero se dejó de utilizar. Antes se utilizaba para la gestión de los enlaces.

Si necesistamos o queresmos volver a utilizar esta característica de WordPress la podemos seguir usando si instalamos el plugin “Link Manager“.

No se muestran detalles de esta tabla por que no se utiliza normalmente.

Para obtener más información sobre la tabla wp_links podemos visitar este enlace.

 

Tabla wp_options

Como ya hemos comentado al principio de esta guía en esta tabla se guardarán y gestionaran las opciones de nuestra instalación de WordPress.

Esta tabla es algo especial puesto que, en principio, no tiene ninguna relación con ningun otra tabla de la base de datos de WordPress.

Enl a siguiente captura podemos ver la tabla completa que crea WordPress tras la instalación.

Estructura de la tabla wp_options:

Esta tabla, como podemos ver, solo tiene 4 campos o filas.

Campos tabla wp_options
option_id Id de la opción
option_name Nombre de la opción
option_value Valor de la opción
autoload Si la opción se carga automaticamente

Obtener datos de la tabla wp_options

Tabla wp_postmeta

Cada meta data de un post se almacena en la tabla wp_postmeta.

Algunos plugins también pueden utilizar esta tabla para guardar su propia información.

Estructura de la tabla wp_postmeta:

Campos tabla wp_postmeta
meta_id Id de la información (meta)
post_id Id del post asociado
meta_key Clave del meta
meta_value Valor del meta (información)

Obtener datos de la tabla wp_postmeta

 

Tabla wp_posts

Aunque todas las tablas de la base de datos son muy importantes, la tabla wp_posts es por lo menos una de las más imporntes sino la más importante.

Debemos tener en cuenta que aquí, en la tabla wp_posts se almacena la información de los posts de WordPress lo que incluye entradas, páginas, etc…

Estructura de la tabla wp_posts:

 

Campos tabla wp_posts
ID Id de la información (meta)
post_author Autor del post
post_date Fecha del post
post_date_gmt Fecha del post (gmt)
post_content Contenido del post
post_title Título del post
post_excerpt Extracto del post
post_status Estado del post (publicado, borrador, etc..)
comment_status Estado comentarios (abiertos?)
ping_status Estado de los pings (abiertos?)
post_password Contraseña del post
post_name Nombre del post
to_ping Url a la que enviar pingback
pinged Url a la que se ha enviado pingback
post_modified Fecha y hora de modificarción del post
post_modified_gmt Fecha y hora de modificarción del post (gmt)
post_content_filtered Usado por algunos plugins de cache para guardar uan versión en caché
guid Url permanente al post
menu_order Número de orden en el menu
post_type Tipo de post (post, page…)
post_mime_type El Mime type de los ficheros subidos
comment_count Número de comentarios del post

Obtener datos de la tabla wp_posts

 

Tabla wp_termmeta

En este tabla se almacenan los metadatos relacionados con las categorías.

Estructura de la tabla wp_termmeta:

Campos tabla wp_termmeta
meta_id Id de la información (meta)
term_id Id del término
meta_key Clave del meta
meta_value Valor del meta (información)

Obtener datos de la tabla wp_termmeta

 

Tabla wp_terms

En la tabla wp_terms se guardan tanto las categorías como las etiquetas para los posts y páginas.

Estructura de la tabla wp_terms:

Campos tabla wp_terms
term_id Id de término
name Nombre del término
slug Slug del término
term_group Agrupación de terminos (alias)

Obtener datos de la tabla wp_terms

 

Tabla wp_term_relationships

Los posts están relacionados con categorías y etiquetas por la tabla wp_terms y esta asociación es mantenida en la tabla wp_term_relationships.

Estructura de la tabla wp_term_relationships:

Campos tabla wp_term_relationships
obtect_id Id de término
term_taxonomy_id Nombre del término
term_order Slug del término

Obtener datos de la tabla wp_term_relationships

 

Tabla wp_term_taxonomy

Esta tabla almacena la información que describe la taxonomía como categorías, tags, cpt... para las entradas de la tabla wp_terms.

Estructura de la tabla wp_term_taxonomy:

 

Campos tabla wp_term_taxonomy
term_taxonomy_id Id del témino de taxonomía
term_id Id del término
taxonomy Nombre de la taxonomía
description Descripción
parent Padre
count Número

 

Tabla wp_usermeta

En la tabla wp_usermeta se almacenan datos adicionales de los usuarios.

A continuación podemos ver el contenido de la tabla wp_usermeta tras la instalación de WordPress:

Estructura de la tabla wp_usermeta

 

Campos tabla wp_usermeta
umeta_id Id de la tabla
user_id Id del usuario (tabla wp_users)
meta_key Clave de la información o meta
meta_value Valor de la información o meta

Obtener datos de la tabla wp_usermeta

 

Tabla wp_users

Como su nombre indica, aquí se almacenan los datos de los usuarios: nombre, email, etc

Esta tabla está directamente relacionada con la tabla wp_usermeta.

Estructura de la tabla wp_users:

Campos tabla wp_users
ID Id del usuario
user_login Login o username para acceder
user_pass Contraseña del usuario (encriptada)
user_nicename Nombre del usuario que se muestra
user_email Email del usuario
user_url Campo url del usuario
user_registered Fecha y hora en que se registró el usuario
user_activation_key Se usa para reestablecer las contraseñas
user_status Se usaba antes
display_name nombre del usuario elegido para mostrar (user_login, user_nicename…)

Obtener datos de la tabla wp_users

 

Solución al problema de rango de precios en WooCommerce

Cómo sustituir el formato de rango de precios en WooCommerce para variaciones de productos.

En la anterior versión 2.0 de WooCommerce, cuando se trabajaba con variaciones de productos, se mostraba el siguiente formato de precio: “Desde: 60€“, donde 60€ era el precio de la variación de productos más barata. Al actualizar a la nueva versión 2.1 de WooCommerce, el precio para las variaciones de productos se muestra en formato de rango de valores, algo así: “60€ – 80€“, ahora 80€ sería el precio de la variación de producto más cara.

Rango de precios WooCommerce

El problema del rango de precios es que es muy confuso a primera vista y puede hacer que el cliente tome el mayor precio como referencia y acabe abandonando la compra. Para evitar que esto ocurra y mostrar de nuevo el formato de precio de la versión 2.0, Gerhard Potgieter publicó hace poco en su blog una solución muy sencilla que te presento a continuación.

La solución consiste en pegar el siguiente código snippet al final del archivo function.php de tu plantilla de WooCommerce.

/**
* Use WC 2.0 variable price format, now include sale price strikeout
*
* @param string $price
* @param object $product
* @return string
*/
function wc_wc20_variation_price_format( $price, $product ) {
// Main Price
$prices = array( $product->get_variation_price( ‘min’, true ), $product->get_variation_price( ‘max’, true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( ‘From: %1$s’, ‘woocommerce’ ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

// Sale Price
$prices = array( $product->get_variation_regular_price( ‘min’, true ), $product->get_variation_regular_price( ‘max’, true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( ‘From: %1$s’, ‘woocommerce’ ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

if ( $price !== $saleprice ) {
$price = ‘<del>’ . $saleprice . ‘</del> <ins>’ . $price . ‘</ins>’;
}

return $price;
}
add_filter( ‘woocommerce_variable_sale_price_html’, ‘wc_wc20_variation_price_format’, 10, 2 );
add_filter( ‘woocommerce_variable_price_html’, ‘wc_wc20_variation_price_format’, 10, 2 );

 

Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)

En previos artículos, casi siempre hemos utilizado librerías de terceros para implementar diversos elementos de nuestra web. Esta vez lo implementaremos nosotros desde cero.

Se trata de un elemento muy usual en las web, donde al pulsar en un determinado sitio, barra, botón, etc, se expande más información relacionada que previamente estaba oculta, lo que se conoce como estilo acordeón. Muy parecido a lo que hace la librería Jquery UI y sus accordions https://jqueryui.com/accordion/

Para implementar este interesante elemento utilizaremos la librería de javascript Jquery, html y css.

Este sería el resultado final:

Es muy sencillo de implementar. Sólo debemos saber lo básico de html, css, y un poco de las animaciones de jquery.

Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)

Codigo HTML:

Codigo CSS:

Como vemos en el código HTML, tenemos dos contenedores <div> con clase accordion-container,  que contendrán toda la información de ese ítem, característica, sección, etc. En concreto tenemos un elemento <a> que representa el título, y es la barra horizontal con el nombre del jugador, y otro elemento div con clase accordion-content que en principio está oculta y que contiene una imagen del jugador y texto.

En este ejemplo se trata de un listado con dos jugadores, que al hacer click en cada uno de ellos se expande información relacionada. Si nos fijamos, también se cambia el icono de la derecha de la barra con “+” y “-“según este cerrado o abierto, esto lo logramos con código css.

Por último, queda lo más importante, implementar mediante jquery la acción de hacer click en la barra de título y como consecuencia se visualice u oculte la información según se encuentre visible o no el contenedor de información .accordion-content”

Codigo Jquery:

En primer lugar guardamos en la variable “contenido” el objeto div que contiene la información, en este caso de uno de los jugadores, según donde hayamos pulsado, a través de la función next(), que coge el primer elemento hermano con clase .accordion-content

Seguidamente comprobamos si está oculto o no, y dependiendo del caso mostramos u ocultamos a través de dos funciones de jquery, con el objetivo de que el cambio no se produzca de forma brusca, sino animada.

slideDown() => Muestra el contenido de forma animada (slide).

slideUp() => Esconde el contenido de forma animada (slide).

Así de fácil es implementar nuestra propio estilo acordeón sin tener que recurrir a librerías externas como Jquery UI.

Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?

Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?

Article ID: 114845, created on Sep 26, 2012, last review on Dic 18, 2015

APLICABLE A:

  • Plesk for Linux/Unix
  • Plesk Automation 11.5

Symptoms

Many email messages are being sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?

Resolution

Note: This article is for Postfix. If you are using the Qmail mail server, see article
1711: Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running?

There is a way to determine from which folder the PHP script that sends mail was run.

Note: Depending on your operating system and Plesk version, the paths can differ slightly from those listed below.

  1. Create a /usr/sbin/sendmail.postfix-wrapper script with the following content:

    Create a file and open it for editing:

    #touch /usr/sbin/sendmail.postfix-wrapper
    #vi /usr/sbin/sendmail.postfix-wrapper
    

    Add the following content:

    #!/bin/sh
    (echo X-Additional-Header: $PWD ;cat) | tee -a /var/tmp/mail.send|/usr/sbin/sendmail.postfix-bin "$@"
    

    Note that this should be two lines, including #!/bin/sh.

  2. Create a log file, /var/tmp/mail.send, and grant it a+rw rights. Make the wrapper executable, rename the old sendmail, and link it to the new wrapper. Then run the commands below:
    ~# touch /var/tmp/mail.send
    ~# chmod a+rw /var/tmp/mail.send
    ~# chmod a+x /usr/sbin/sendmail.postfix-wrapper
    ~# mv /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix-bin
    ~# ln -s /usr/sbin/sendmail.postfix-wrapper /usr/sbin/sendmail.postfix
    
  3. Wait for an hour and change the sendmail back:
    ~# rm -f /usr/sbin/sendmail.postfix
    ~# mv /usr/sbin/sendmail.postfix-bin /usr/sbin/sendmail.postfix
    

Check the /var/tmp/mail.send file. There should be lines starting with X-Additional-Header: pointing to the domain folders where the scripts that sent the mail are located.

You can see all the folders from which mail PHP scripts were run with the following command:

    ~# grep X-Additional /var/tmp/mail.send | grep `cat /etc/psa/psa.conf | grep HTTPD_VHOSTS_D | sed -e 's/HTTPD_VHOSTS_D//' `

NOTE: If you see no output from the above command, it means no mail was sent using the PHP mail() function from the Plesk virtual hosts directory.

Usually, that means one of the mail accounts has been compromised. Check the login attempt count:

# zgrep -c 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog*
/usr/local/psa/var/log/maillog:221000
/usr/local/psa/var/log/maillog.processed:362327
/usr/local/psa/var/log/maillog.processed.1.gz:308956

If you see an unusually high number of login attempts, it is very likely accounts were compromised. You can try identifying these accounts in the following way:

# zgrep 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog* | awk '{print $9}' | sort | uniq -c | sort -nr | head
891574 sasl_username=admin@example.com

To stop spam from being sent, change passwords for the compromised accounts and restart the Postfix service.

For Plesk 12 also visit Administrator’s Guide page

Palabras de búsqueda:

Deferred E-Mails In Queue Not Delivering

wrapper

Spam on PPA Node

Mail Spamming

spam from external domain

11

pleskfatalexception

sending email name of someone else

SPam

mail

Script can be send mail but the option was disable on hosting plan

Suspicious E-Mail Headers In Mail Queue

Hello, Since last update to plesk12 have many problems of spam received as sent. We have verified that the settings wrapper in plesk 11.5 is not equal in plesk 12. I followed the steps in the kb http://kb.sp.parallels.com/1711 but not correct for plesk12. Could you install wrapper to ples12, please? Thanks.

php ini plesk

apache

spam

spam issue

mail queue spam

mail queue

error wrapper

mails rdns do not match to SMTP banner

Nonostante sia stato attivata la’utentificazione smtp, da giorni in coda mail ci sono svariate mail inviate da WORLDST-UQ3K9Q0

thousands of spam for an email address that doesn’t exist

postfix/smtp: certificate verification failed for gmail Equifax Secure Certificate Authority

outgoing spam

Spam mails getting sent

Spam being sent to our SMTP

plesk server mail not nbeing sent

DNS Flood Analysis

sql

spammer

plesk panel running slow

Mail Spmming

script

Aumentar la swap en GNU/Linux

En algunas ocasiones es necesario que nuestro GNU/Linux tenga mas swap, ya sea porque tiene mas aplicaciones o lo que fuese, entonces lo que podemos hacer es aumentar el tamaño de la swap, antes de empezar comprobamos cuanto de swap tenemos con el siguiente comando:

# grep SwapTotal /proc/meminfo
SwapTotal:     2096440 kB

Ahora empezemos a asiganrle mas swap, para ello creamos un archivo con el comnado dd, dicho archivo actuara como swap, claro seria recomendable tener una particion, pero bueno asumimos que ya no tenemos mas particiones.

# dd if=/dev/zero of=/mnt/swap_extra bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2,1 GB) copied, 25,3026 seconds, 84,9 MB/s

Donde:

  • count -> define el tamaño del fichero
  • bs -> define el tamaño del bloque

Hemos creado un archivo de 2GB dentro del directorio /mnt, ahora modificamos los permisos

# chmod 600 /mnt/swap_extra

Formateamos el fichero swap_extra para que actue como swap

# mkswap /mnt/swap_extra
Configurando espacio de intercambio versión 1, tamaño = 2147479 kB

Ahora solo nos queda activarlo

# swapon /mnt/swap_extra

SI quisiremoas desactivarlo simplemente ejecutamos

# swapoff /mnt/swap_extra

Ahora debemos editar el fstab para que cuando la maquina se inicie carge la swap adicional, para ello agregamos  al final del archivo lo siguiente:

/mnt/swap_extra         none                    swap    sw              0 0

Con esto ya tenemos 2GB mas de swap … y lo verificamos con el comando

siguiente

# grep SwapTotal /proc/meminfo
SwapTotal:     4193584 kB

Linux: Listar procesos por % cpu o uso de memoria

Con estas dos secuencias de comandos podréis ver de un modo rápido y sencillo los procesos ordenados por uso (%) de CPU y memoria. Por supuesto no es necesario (ni práctico) escribir el comando completo en la shell cada vez que lo queráis ejecutar, os recomiendo crear un alias específico para cada uno de ellos.

Listar procesos por % cpu, veréis que eliminamos aquellos que usan 0.0 de CPU con sed (sed ‘/^ 0.0 /d):

ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'

Ejemplo:

$ ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'
%CPU CPU  NI S     TIME COMMAND
0.2   -   0 S 00:00:24 metacity
0.2   -   0 S 00:00:00 /usr/bin/python /usr/bin/terminator
0.2   -   0 S 00:00:28 gnome-screensaver
0.2   -   0 S 00:00:31 gnome-panel
4.6   -   0 S 00:08:23 /usr/bin/pulseaudio --start
7.4   -   0 S 00:13:24 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
7.5   -   0 S 00:04:31 rhythmbox
14.4   -   0 S 00:08:50 /usr/lib/firefox-3.5.4/firefox-3.5

Listar procesos por uso de memoria (en KB):

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

Ejemplo (reducido):

$ ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
23964 gnome-panel
26168 nautilus
26256 /usr/bin/python /usr/bin/terminator
58340 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
58728 rhythmbox
128736 /usr/lib/firefox-3.5.4/firefox-3.5

Uso de Ajax muy sencillo con jQuery

Es muy fácil desarrollar Ajax en jQuery. En este artículo veremos el ejemplo más sencillo de Ajax con el framework Javascript jQuery.
Ha llegado el momento de hacer una primera aproximación a Ajax, en la serie de artículos que estamos publicando   para mostrar el uso de este framework (léase el Manual de jQuery).Una de las ventajas de los frameworks Javascript es que nos permiten desarrollar scripts que hacen uso de Ajax de una manera muy fácil y encima, sin tener que complicarnos la vida con la compatibilidad entre distintos navegadores. Sin duda, cualquier persona que sepa un poco de Javascript, podría en poco tiempo empezar a utilizar Ajax con alguno de estos frameworks. Nosotros vamos a demostrar cómo es de sencillo en jQuery.La primera impresión que he tenido sobre el uso de Ajax en jQuery es realmente grata, por la facilidad con la que se puede realizar un primer ejemplo. Se trata de un ejemplo extremadamente sencillo, pero sirve para abrirnos las puertas a muchas aplicaciones interesantes. Habíamos visto en otros frameworks Javascript ejemplos similares, como en el artículo Ajax con Mootools, pero tenemos que quitarnos el sombrero ante la extremada sencillez con la que se puede hacer un ejemplo similar en jQuery. Sea suficiente decir que en este ejemplo de Ajax utilizaremos tan sólo 4 líneas de código, de las cuales sólo 1 es para ejecutar la propia llamada al servidor por Ajax.

Traer un contenido con Ajax al pulsar un enlace

En este sencillo ejemplo haremos llamada a Ajax, para traer un contenido, cuando se pulse un enlace. Esto lo hemos puesto en marcha en el servidor de DesarrolloWeb.com y lo puedes ver en una página aparte.Aquí podemos ver el enlace, al que ponemos un identificador (atributo id) para seleccionarlo desde jQuery.

<a href=”#” id=”enlaceajax”>Haz clic!</a>

Si hemos leído hasta aquí el Manual de jQuery podremos saber cómo asignar un evento a un enlace. No obstante, recordemos cómo asignar una función para cuando se haga clic en el enlace:

$(document).ready(function(){
$(“#enlaceajax”).click(function(evento){
//elimino el comportamiento por defecto del enlace
evento.preventDefault();
//Aquí pondría el código de la llamada a Ajax
});
})

Ya se trata sólo de poner en marcha Ajax dentro de la función del evento “click” sobre el enlace. Pero antes voy a necesitar una capa donde mostrar el contenido que vamos a recibir del servidor con la llamada Ajax. Le pondremos id=”destino” para poder referirnos a ella desde jQuery:

Y ahora la parte más interesante, donde podemos ver qué tan fáciles son las cosas con este framework Javascript. Una única línea de código será suficiente:

$(“#destino”).load(“contenido-ajax.html”);

Con esta simple sentencia estamos realizando una llamada a Ajax con jQuery. Es una simple invocación al método load() de un elemento de la página, en concreto el que habíamos puesto con id=”destino”. Al método load() le pasamos como parámetro la ruta de la página que queremos cargar dentro del elemento.

El archivo que cargamos con load() en este ejemplo es “contenido-ajax.html” y simplemente le hemos colocado un texto cualquiera. Lo hemos guardado en el mismo directorio que la página web donde está el script jQuery.

Nota: para que este ejemplo funcione debe colocarse en un servidor web, puesto que la llamada por Ajax se hace por http y el archivo que se carga entonces tiene que recibirse por un servidor web, que lo mande con ese protocolo al navegador. Si pones los archivos en tu disco duro y los ejecutas tal cual, no te funcionará. Puedes utilizar cualquier espacio de hosting que tengas o bien un servidor web que puedas tener instalado en tu ordenador.

Así de simple! Podemos ver el código completo de este ejemplo: <html>
<head>
<title>Ajax Simple</title>
<script src=”jquery-1.3.2.min.js” type=”text/javascript”></script>
<script>
$(document).ready(function(){
$(“#enlaceajax”).click(function(evento){
evento.preventDefault();
$(“#destino”).load(“contenido-ajax.html”);
});
})
</script>
</head>
<body>

<a href=”#” id=”enlaceajax”>Haz clic!</a>
<br>
<div id=”destino”></div>

</body>
</html>

Podemos ver el ejemplo en marcha en una página aparte.

Cabría comentar que jQuery tiene muchos otros métodos de realizar conexiones por Ajax, que pueden servir para muchos otros casos de trabajo que podemos encontrarnos. Nosotros hemos escogido el más sencillo para dar una primera demostración de las posibilidades.

Pasar parámetros y ejecutar acciones después de la llamada a Ajax

El método load() que hemos visto en el ejemplo anterior tiene otros dos parámetros opcionales que podemos utilizar si fuera necesario:Parámetros a pasar a la página: la página que carguemos con Ajax puede recibir parámetros por la URL, que se especifican con la típica notación de propiedades y valores de jQuery.

{nombre: “Pepe”, edad: 45}

Por ejemplo, con ese código estaríamos enviando a la página los datos nombre y edad, con los valores “pepe” y 45. Esos datos viajarían en la URL, por el método “POST”.

Nota: Desde jQuery 1.3 también se pueden enviar los parámetros a la página a cargar con Ajax por medio de una variable de tipo string, en lugar de una notación de objetos como hemos comentado. Cuando se use un string para especificar los parámetros a enviar en el request http, éstos viajan por el método GET. Cuando se utiliza una notación de objetos como la que hemos visto, los datos viajan por el método POST.

Función callback: como otros métodos de jQuery, podemos especificar opcionalmente una función a ser ejecutada cuando se termine de ejecutar el método. En este caso, cuando se termine la llamada Ajax, se pueden hacer acciones, como borrar un mensaje típico de “cargando…”.

Nota: En un artículo anterior ya comentamos el habitual uso de funciones callback en jQuery.

Ahora veamos un código donde hacemos uso de estos dos parámetros: $(document).ready(function(){
$(“#enlaceajax”).click(function(evento){
evento.preventDefault();
$(“#destino”).load(“recibe-parametros.php”, {nombre: “Pepe”, edad: 45}, function(){
alert(“recibidos los datos por ajax”);
});
});
})

En este caso estamos cargando con load() una página PHP llamada “recibe-parametros.php”. Estamos pasando los parámetros “nombre” y “edad” a una página, que podremos recoger por GET. Además, hemos colocado una función callback en la que simplemente hacemos un alert(), que se ejecutará cuando la llamada a Ajax haya terminado.

Este sería el código fuente de “recibe-parametros.php”:

Recibido el siguiente dato:
<br>
Nombre: <?php echo $_POST[“nombre”];?>
<br>
Edad: <?php echo $_POST[“edad”];?>

Podemos ver este ejemplo en una página aparte.

Con esto hemos podido comprobar lo sencillo que es realizar con jQuery una carga de contenidos que se reciben por Ajax. Como decía, existen muchas otras maneras de hacer conexiones Ajax con jQuery, como el ejemplo del artículo siguiente que nos enseña a mostrar un mensaje de carga miestrás esperamos la respuesta Ajax del servidor. Además, para complementar esta información, también podéis ver el vídeo de Ajax con jQuery.

Archivos de configuración y registros de servicios de Parallels Plesk para Linux

APLICABLE A:

  • Plesk for Linux/Unix

Notas de la versión

En este artículo se proporciona información relacionada con los servicios con los que interactúa Parallels Plesk. A continuación se muestran las ubicaciones de los archivos de registro y la configuración de estos servicios, lo que puede resultar útil para la resolución de incidencias.

Consulte la versión previa de este artículo:

  • 122458 Archivos de configuración y registros de servicios de Parallels Plesk para Linux (Plesk 11.5)

Servicios

Panel de control

  • Registros
    • Registro de errores: /var/log/sw-cp-server/error_log y /var/log/sw-cp-server/sw-engine.log
    • Registro de accesos: /usr/local/psa/admin/logs/httpsd_access_log
    • Registro de Plesk: /usr/local/psa/admin/logs/panel.log
  • Servicios
    • Detener: /etc/init.d/psa stop
    • Iniciar: /etc/init.d/psa start
    • Reiniciar: /etc/init.d/psa restart
  • Configuración
    • Configuración PHP: /usr/local/psa/admin/conf/php.ini
    • Configuración de Plesk: /usr/local/psa/admin/conf/panel.ini
    • Configuración del servidor web: /etc/sw-cp-server/conf.d/plesk.conf

Web Presence Builder

  • Registros
    • Registro de errores: /usr/local/psa/admin/logs/sitebuilder.log
    • Registros de instalación o actualización: /usr/local/sb/tmp/
  • Ningún control del servicio (operando mediante el servicio sw-cp-server)
  • Configuración
    • /usr/local/sb/config
    • /etc/sw-cp-server/conf.d/plesk.conf
    • /usr/local/psa/admin/conf/php.ini

SSO

  • Registros
    • Registro de errores: /var/log/sw-cp-server/error_log
    • Registro de SSO: /var/log/sso/sso.log
  • Servicios
    • Ningún control del servicio (opera mediante el servicio sw-cp-server)
    • Configuración de gestión: /usr/local/psa/bin/sso
  • Configuración
    • /etc/sso/sso_config.ini
    • /etc/sw-cp-server/conf.d/sso.inc

Administrador de backups

  • Registros
    • Registros de backup: /usr/local/psa/PMM/logs/backup-<datetime>
    • Registro de restauraciones: /usr/local/psa/PMM/logs/restore-<datetime>
  • La funcionalidad es controlada por el servicio de panel de control de Plesk
  • Configuración
    • /etc/psa/psa.conf

Administrador de migraciones

  • Registros
    • /usr/local/psa/PMM/logs/migration-<datetime>
  • La funcionalidad es controlada por el servicio de panel de control de Plesk.

Administrador de Health Monitor (control de estado del servidor)

  • Registros
    • /usr/local/psa/admin/logs/health-alarm.log
  • Servicios
    • Detener: /etc/init.d/sw-collectd stop
    • Iniciar: /etc/init.d/sw-collectd start
    • Reiniciar: /etc/init.d/sw-collectd restart
  • Configuración
    • /usr/local/psa/admin/conf/health-config.xml
    • /usr/local/psa/var/custom-health-config.xml
    • /etc/sw-collectd/collectd.conf

Daemon de notificaciones de Health Monitor

  • Registros
    • /usr/local/psa/admin/logs/health-alarm.log
  • Servicios
    • Detener: /etc/init.d/psa-health-monitor-notificationd stop
    • Iniciar: /etc/init.d/psa-health-monitor-notificationd start
    • Reiniciar: /etc/init.d/psa-health-monitor-notificationd restart
  • Configuración
    • /usr/local/psa/admin/conf/health-config.xml
    • /usr/local/psa/var/custom-health-config.xml

MySQL

  • Registros
    • /var/log/mysqld.log
  • Servicios
    • Detener: /etc/init.d/mysqld stop
    • Iniciar: /etc/init.d/mysqld start
    • Reiniciar: /etc/init.d/mysqld restart
  • Configuración
    • /etc/my.cnf
    • /etc/mysql/my.cnf (Debian/Ubuntu)

PostgreSQL

  • Registros
    • /var/lib/pgsql/pgstartup.log
  • Servicios
    • Detener: /etc/init.d/postgresql stop
    • Iniciar: /etc/init.d/postgresql start
    • Reiniciar: /etc/init.d/postgresql restart
  • Configuración
    • /var/lib/pgsql/data/postgresql.conf

Apache

  • Registros
    • Registros de errores y acceso global: /var/log/httpd/
    • Registros de dominio: /var/www/vhosts/<domain>/logs
  • Servicios
    • Detener: /etc/init.d/httpd stop
    • Iniciar: /etc/init.d/httpd start
    • Reiniciar: /etc/init.d/httpd restart
  • Configuración
    • /etc/httpd/conf/httpd.conf
    • /etc/httpd/conf.d/zz010_psa_httpd.conf (incluye los archivos de configuración generados con la configuración del servidor y del resto de hosts virtuales)
  • NOTA: En SuSE, Debian y Ubuntu, el servicio se denomina “apache2”. La ruta a estos registros es /var/log/apache2 y la ruta a sus archivos de configuración es /etc/apache2.

NGINX

  • Registros
    • Registro de errores: /var/log/nginx/error.log
    • Registro de accesos: /var/log/nginx/access.log
    • Registros de dominio: /var/www/vhosts/<domain>/logs/proxy_access*_log
  • Servicios
    • Detener: /etc/init.d/nginx stop
    • Iniciar: /etc/init.d/nginx start
    • Reiniciar: /etc/init.d/nginx restart
    • NOTA: Para desactivar nginx, vaya a "Herramientas y configuración > Administración de servicios" y detenga nginx desde allí.
  • Configuración
    • /etc/nginx/nginx.conf
    • /etc/nginx/conf.d/zz010_psa_nginx.conf (incluye los archivos de configuración generados con la configuración del servidor y del resto de hosts virtuales)

Tomcat

  • Registros
    • /var/log/tomcat5/*
  • Servicios
    • Detener: /etc/init.d/tomcat5 stop
    • Iniciar: /etc/init.d/tomcat5 start
    • Reiniciar: /etc/init.d/tomcat5 restart
  • Configuración
    • /etc/tomcat5/server.xml

FTP

  • Registros
    • /usr/local/psa/var/log/xferlog
    • /var/log/secure
  • Ningún control de servicios (opera mediante el servicio xinetd)
  • Configuración
    • /etc/xinetd.d/ftp_psa
    • /etc/proftpd.conf
    • /etc/proftpd.include

xinetd

  • Registros
    • /var/log/messages
  • Servicios
    • Detener: /etc/init.d/xinetd stop
    • Iniciar: /etc/init.d/xinetd start
    • Reiniciar: /etc/init.d/xinetd restart
  • Configuración
    • /etc/xinetd.conf
    • /etc/xinetd.d/* (se ignoran los archivos que contengan "." en el nombre)

BIND

  • Registros
    • /var/log/messages
  • Servicios
    • Detener: /etc/init.d/named stop
    • Iniciar: /etc/init.d/named start
    • Reiniciar: /etc/init.d/named restart
  • Configuración
    • /etc/named.conf
  • NOTA: En Debian y Ubuntu, el servicio se denomina "bind9."

Courier-IMAP

  • Registros
    • /usr/local/psa/var/log/maillog
  • Servicios
    • Detener: /etc/init.d/courier-imap stop
    • Iniciar: /etc/init.d/courier-imap start
    • Reiniciar: /etc/init.d/courier-imap restart
  • Configuración
    • /etc/courier-imap/imapd
    • /etc/courier-imap/imapd-ssl
    • /etc/courier-imap/pop3d
    • /etc/courier-imap/pop3d-ssl

Postfix

  • Registros
    • /usr/local/psa/var/log/maillog
  • Servicios
    • Detener: /etc/init.d/postfix stop
    • Iniciar: /etc/init.d/postfix start
    • Reiniciar: /etc/init.d/postfix restart
  • Configuración
    • /etc/postfix/master.cf
    • /etc/postfix/main.cf

Qmail

  • Registros
    • /usr/local/psa/var/log/maillog
  • Servicios
    • Detener: /etc/init.d/qmail stop
    • Iniciar: /etc/init.d/qmail start
    • Reiniciar: /etc/init.d/qmail restart
  • Configuración
    • Archivos de control en /var/qmail/control/
    • /etc/xinetd.d/smtp_psa
    • /etc/xinetd.d/smtps_psa
    • /etc/xinetd.d/submission_psa

Horde

  • Registros
    • Registro de errores: /var/log/psa-horde/psa-horde.log
  • Ningún control de servicios (opera mediante el servidor web Apache)
  • Configuración
    • /etc/psa-webmail/horde/horde.conf
    • /etc/psa-webmail/horde/horde/conf.php

Roundcube

  • Registros
    • Registro de errores: /var/log/plesk-roundcube/errors
  • Ningún control de servicios (opera mediante el servidor web Apache)
  • Configuración
    • /etc/psa-webmail/roundcube/*

Mailman

  • Registros
    • /var/log/mailman/*
  • Servicios
    • Detener: /etc/init.d/mailman stop
    • Iniciar: /etc/init.d/mailman start
    • Reiniciar: /etc/init.d/mailman restart
  • Configuración
    • /etc/httpd/conf.d/mailman.conf
    • /usr/lib/mailman/Mailman/mm_cfg.py
    • /etc/mailman/sitelist.cfg

SpamAssassin

  • Registros
    • /usr/local/psa/var/log/maillog
  • Servicios
    • Detener: /etc/init.d/spamassassin stop
    • Iniciar: /etc/init.d/spamassassin start
    • Reiniciar: /etc/init.d/spamassassin restart
  • Configuración
    • /etc/spamassassin/local.cf
    • /var/qmail/mailnames/<domain>/<mailbox>/.spamassassin/user_prefs

Parallels Premium Antivirus

  • Registros:
    • /usr/local/psa/var/log/maillog
    • /var/drweb/log/*
  • Control de servicios:
    • Detener: /etc/init.d/drwebd stop
    • Iniciar: /etc/init.d/drwebd start
    • Reiniciar: /etc/init.d/drwebd restart
  • Configuración:
    • /etc/drweb/*

Kaspersky antivirus

  • Registros:
    • /usr/local/psa/var/log/maillog
  • Control de servicios:
    • Detener: /etc/init.d/kavehost stop
    • Iniciar: /etc/init.d/kavehost start
    • Reiniciar: /etc/init.d/kavehost restart
  • Configuración:
    • /opt/kav/sdk8l3/etc/kav-handler.cfg
    • /etc/kavehost.xml

phpMyAdmin

  • Registros:
    • Registro de errores: /var/log/sw-cp-server/error_log
  • Ningún control del servicio (operando mediante el servicio sw-cp-server).
  • Configuración:
    • /usr/local/psa/admin/htdocs/domains/databases/phpMyAdmin/libraries/config.default.php

phpPGAdmin

  • Registros
    • Registro de errores: /var/log/sw-cp-server/error_log
  • Ningún control del servicio (operando mediante el servicio sw-cp-server).
  • Configuración:
    • /usr/local/psa/admin/htdocs/domains/databases/phpPgAdmin/conf/config.inc.php

Logrotate

  • Ningún control de servicios. Ejecutado por la tarea diaria de mantenimiento: /etc/cron.daily/50plesk-daily
  • Configuración
    • /usr/local/psa/etc/logrotate.conf
    • /usr/local/psa/etc/logrotate.d/*

Webalizer

  • Ningún control de servicios. Ejecutado por la tarea diaria de mantenimiento: /etc/cron.daily/50plesk-daily
  • Configuración
    • /srv/www/vhosts/system/<domain>/conf/webalizer.conf

AWstats

  • Ningún control de servicios. Ejecutado por la tarea diaria de mantenimiento: /etc/cron.daily/50plesk-daily
  • Configuración
    • /usr/local/psa/etc/awstats/awstats.<domain>-*.conf

Watchdog (monit)

  • Registros:
    • /usr/local/psa/var/modules/watchdog/log/wdcollect.log
    • /usr/local/psa/var/modules/watchdog/log/monit.log
  • Control de servicios:
    • Detener: /usr/local/psa/admin/bin/modules/watchdog/wd --stop
    • Iniciar: /usr/local/psa/admin/bin/modules/watchdog/wd --start
    • Reiniciar: /usr/local/psa/admin/bin/modules/watchdog/wd --restart
  • Configuración:
    • /usr/local/psa/etc/modules/watchdog/monitrc
    • /usr/local/psa/etc/modules/watchdog/wdcollect.inc.php

Watchdog (rkhunter)

  • Registros:
    • /var/log/rkhunter.log
  • Control de servicios:
    • Iniciar: /usr/local/psa/admin/bin/modules/watchdog/rkhunter
  • Configuración:
    • /usr/local/psa/etc/modules/watchdog/rkhunter.conf

Firewall de Plesk

  • Control de servicios:
    • Detener: /etc/init.d/psa-firewall stop
    • Iniciar: /etc/init.d/psa-firewall start
    • Reiniciar: /etc/init.d/psa-firewall restart
  • Configuración:
    • /usr/local/psa/var/modules/firewall/firewall-active.sh
    • /usr/local/psa/var/modules/firewall/firewall-emergency.sh
    • /usr/local/psa/var/modules/firewall/firewall-new.sh

Firewall de Plesk (Redireccionamiento de IP)

  • Control de servicios:
    • Detener: /etc/init.d/psa-firewall-forward stop
    • Iniciar: /etc/init.d/psa-firewall-forward start
    • Reiniciar: /etc/init.d/psa-firewall-forward restart
  • Configuración:
    • /usr/local/psa/var/modules/firewall/ip_forward.active
    • /usr/local/psa/var/modules/firewall/ip_forward.saved

Prohibición de direcciones IP (Fail2Ban)

  • Control de servicios:
    • Detener: /etc/init.d/fail2ban stop
    • Iniciar: /etc/init.d/fail2ban start
    • Reiniciar: /etc/init.d/fail2ban restart
  • Configuración: grupo de reglas IPTables, predeterminadas:-
    • iptables -N fail2ban-plesk-login
    • iptables -A fail2ban-plesk-login -j RETURN
    • iptables -A INPUT -p tcp -m multiport --dports 8880,8443 -j fail2ban-plesk-login

Varnish Nagios Performance Plugin

Varnish is a web application accelerator and sits in front of your web server. It speeds up your application by caching some, if not all of the content meaning it reduces the load on your web server and can reduce the load on you backend as less lookups will be needed by the frontend.

As varnish is the first thing users hit it is imperative it is working properly and you have statistics on how it is performing. This plugin can give you a better insight into how affectively varnish is running and tell you if its having problems.

You can download the latest version here:
check_varnish-v1.0.tar

Install

To use this plugin you need to have varnishstat installed which is installed by default when you install varnish.

Perl is also required for this plugin. If you don’t have Perl installed you can install in by running the command below

1 sudo apt-get install perl
2
3 or
4
5 sudo yum install perl

Now you can download the file above and extract it:

Now you should have a file “check_varnish.pl” make sure that it has execute permissions:

1 chmod u+x check_varnish.pl

You now need to copy this file to your nagios plugins folder. You should consult your nagios config to find out where this is. Mine was ‘/usr/lib/nagios/plugin’

1 mv check_varnish.pl /usr/lib/nagios/plugins/.

How To

check_varnish.pl – Monitor and report on varnish usage

check_varnish.pl [-c|–cache] [-b|–bin <varnishstatbinary>] [-d|–backend <total|ratio>] [-s|–stats <varnish statfield>]  [-t|–technique <lt|gt>] [-w|–warning <number>] [-c|–critical <number>] [-h|–help]

DESCRIPTION

This script will report on various varnish stats including: varnish cache hit ratio backend error count (Total or Ratio) Any other counter in varnishstat If no counters are required the script will ensure the varnish binary is running

OPTIONS

-a –cache – this will make the script output cache_hit ratio perfdata

-b –bin <varnishstat> – to specify a different location of the default varnishstat binary location. Default is ‘/usr/bin/varnishstat’

-d –backend <all|success|unhealthy|busy|fail|reuse|toolate|recycle|retry> – specify script to output backend data you can output ratio, total or both

-h –help – output this message

-w –warning <number> – specify the warning threshold. Required for cache and backend checks

-c –critical <number> – specify the critical threshold. Required for cache and backend checks

-s –stats <varnishstat field> – specify a comma separated list of all the stats you wish to check Critical and Warning can be specified and all values will be compared to these values.

-t –technique <lt|gt> – when specifying stats you can also specify what technique you wish to use to compare the values to the thresholds. specify lt for less than and gt for greater than. Default is gt

EXAMPLES

Check varnish is running

./check_varnish.pl

Check varnish Cache Hit Ratio and warn if ratio is below 0.8

./check_varnish.pl -a -w 0.8 -c 0.6

Check varnish Backends

./check_varnish.pl -d all

Check varnish client requests and drops

./check_varnish.pl -s client_drop,client_req

Nagios Set Up

Once you have run the command in the CLI and all is working you can add the command:

1 define command {
2 command_name                    check_varnish
3 command_line                    $USER1$/check_varnish.pl $ARG1$
4 register                        1
5 }

$USER1$ is your variable pointing to your nagios plugins folder and $ARG1$ are any command line arguments you specify in the service.

1 define service {
2 host_name                       localhost
3 service_description             Varnish
4 check_command                   check_varnish!--cache -w 0.6 -c 0.4
5 register                        1
6 }

The service above will give a warning if the hit ratio goes below 0.6 and critical if the ratio goes below 0.4

NRPE

The below is a line that can be used in the NRPE configuration for remote monitoring:

1 command[check_varnish_cache_hit]=/usr/lib/nagios/plugins/check_varnish.pl --cache -w 0.6 -c 0.4

The NRPE service could look like this:

1 define service {
2 host_name                  varnishserver
3 service_description             Varnish Cache Hit Ratio
4 check_command                   check_nrpe!check_varnish_cache_hit
5 register                        1
6 }
« Siguientes entradas

© 2018 Agcapa

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies