Hi Thiago,

Am 09.02.2011 22:55, schrieb Thiago Figueiro:

> I believe varnishlog has all you need:
>
>    54 BackendOpen  b backend_name source_ip source_port dest_ip dest_port
>
> Just track the id on the left (54 in this case) for the request and response and you should be able to find the culprit.


That's correct - in my case the following (example):

  417 VCL_call     c recv
  417 VCL_return   c lookup
  417 VCL_call     c hash
  417 VCL_return   c hash
  417 VCL_call     c miss
  417 VCL_return   c fetch
   31 BackendClose - cmsweb5f3cae1
   31 BackendOpen  b cmsweb5f3cae1 10.40.XXX.YYY 37607 10.40.XXX.ZZZ 80
  417 Backend      c 31 group5cae1 cmsweb5f3cae1
   31 TxRequest    b GET


Unfortunately the inline-C expression VRT_backend_string(sp) gives me only the director name, which is 'group5cae1'.

What I need to get in my inline C is the specific backend choosen from the director, 'cmsweb5f3cae1' in this example.
How to get this? Any VRT_something for this?

-- stefan


> From: [email protected] [mailto:[email protected]] On Behalf Of Stefan Pommerening
> Sent: Wednesday, 9 February 2011 9:47 PM
> To: [email protected]
> Subject: How to find out a single failing backend from a round-robin director?(Inline-C)
>
>
>
> Hi all,
>
> I'm working with a set of varnish-caches (2.1.3) in front of some round-robin director configured backends. > Sometimes I experience a 503 error due to some unforseeable circumstances like network hiccups, content server problems and other magic... ;-) > Nevertheless all backends are healthy regarding the large majority of other requests (and watchdog of course), we deal with sporadic failures here.
>
> Obviously I don't want those 503's to go through to the user.
>
> I inserted the following code in my vcl_fetch:
>
> if (beresp.status == 503) {
>    set beresp.saintmode = 2s;
>    restart;
> }
>
> This works quite well, the failed (503 delivering) request is forwarded to the next backend in the director and is successfully served then.
>
> What I am missing is the exact backend information which backend did not serve the request or better said: where did the 503 come from? > I already included some inline-C in order to send info to syslog, but I am missing some VRT_(r_)something to find out the failing backend without searching the backend's logfiles directly.
>
> My current syslog()-msg is:
>
> syslog (LOG_LOCAL7 | LOG_INFO, "VarnishLog(vcl_fetch): %s/%s[%s] [REST=%02d] %s http://%s%s";, > VRT_backend_string(sp), VRT_r_server_hostname(sp), VRT_IP_string(sp,VRT_r_server_ip(sp)), > VRT_r_req_restarts(sp), VRT_r_req_request(sp), VRT_GetHdr(sp, HDR_REQ, "\005host:"), VRT_r_req_url(sp));
>
> I managed to get the backend definition, but not the specific backend machine name (or IP) from the backend director.
>
> ... and: is there some sort of overview on which VRT_magic fields (for use with inline-C) exists?
>
> Thanks in advance,
> Stefan


--

Dipl.-Inform. Stefan Pommerening
Informatik-Büro: IT-Dienste & Projekte, Consulting & Coaching
http://www.dmsp.de



_______________________________________________
varnish-misc mailing list
[email protected]
http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc

Reply via email to