cargas - Configuración de un identificador de seguimiento en el equilibrador de carga nginx
linux balanceo de carga (4)
En la mayoría de los casos, no necesita un módulo personalizado, simplemente puede establecer un encabezado con una combinación de variables incrustadas de http_core_module que es (probablemente) única. Ejemplo:
location / {
proxy_pass http://upstream;
proxy_set_header X-Request-Id $pid-$msec-$remote_addr-$request_length;
}
Esto generaría un ID de solicitud como "31725-1406109429.299-127.0.0.1-1227" y debería ser "lo suficientemente único" para servir como un ID de rastreo.
Estoy usando nginx como un equilibrador de carga frente a varios servidores de aplicaciones ascendentes y quiero configurar un identificador de seguimiento para usar para correlacionar las solicitudes con los registros del servidor de aplicaciones. ¿Cuál es la mejor manera de hacerlo en Nginx, hay un buen módulo de terceros para esto?
De lo contrario, una forma bastante simple sería basarlo en la marca de tiempo (posiblemente más un número aleatorio si no es lo suficientemente preciso) y configurarlo como un encabezado adicional en la solicitud, pero el único comando set_header que veo en la documentación es para configurar un encabezado de respuesta.
En nuestro entorno de producción tenemos un módulo personalizado como este. Puede generar un identificador de seguimiento único y, a continuación, se insertará en los encabezados http que se envían al servidor ascendente. El servidor ascendente verificará si el campo determinado está establecido, obtendrá el valor y lo escribirá en access_log, por lo tanto, podemos rastrear la solicitud.
Y encuentro que un módulo de terceros se ve igual: nginx-operationid , espero que sea útil.
Pregunta antigua, nueva respuesta adecuada para las versiones 1.3.8
, 1.2.5
y superiores de nginx.
Puede usar una combinación de $connection
y $connection_requests
ahora. Solo define tu propia variable en el bloque del server
:
server {
...
set $trace_id $connection-$connection_requests;
...
}
Esta identificación será única en nginx a menos que el servidor se reinicie.
$connection
- El número de serie de la conexión. Este es un número único asignado por nginx a cada conexión. Si se reciben varias solicitudes en una sola conexión, todas tendrán el mismo número de serie de conexión. Los números de serie se restablecen cuando finaliza el proceso maestro nginx, por lo que no serán únicos durante largos períodos de tiempo.
$connection_requests
: el número de solicitudes realizadas a través de esta$connection
.
Luego, en su bloque de location
, establezca el ID de seguimiento real:
location / {
...
proxy_set_header X-Request-Id $trace_id;
...
}
Bonificación: haga que $trace_id
único incluso después de reiniciar el servidor:
set $trace_id $connection-$connection_requests-$msec;
$msec
- La marca de tiempo actual de Unix en segundos, con resolución de milisegundos (flotante).
nginx 1.11.0 agregó la nueva variable $request_id
que es un identificador único, por lo que puede hacer algo como:
location / {
proxy_pass http://upstream;
proxy_set_header X-Request-Id $request_id;
}
Consulte la referencia en http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id