2016-06-06 3 views
1

VCL에서 varnish-counters를 사용할 수 있습니까?Varnish-counters 사용 MAIN. * in VCL

내가 MAIN.backend_conn의 현재 값을 기준으로 조건을 작성하려하지만

현재 솔루션

이제 나는 심지어 인라인 C에서 VCL 통계를 사용할 수 있는지 여부를 내가 알아낼 수 없습니다

-이 추천하여 구성 이상의 활성 연결이있는 경우, 활성 연결하고 에러를 유발

backend default { 
    .host = "192.168.122.11"; 
    .probe = { 
     .url = "/check-connections.php"; 
     .interval = 1s; 
     .threshold = 4; 
    } 
} 

backend sessionWorker { 
    .host = "192.168.122.11"; 
    .probe = { 
     .url = "/other-probe"; 
     .interval = 5s; 
     .threshold = 2; 
    } 
} 

sub vcl_recv { 
    if (req.http.cookie ~ "(^|;\s*)(SESS=)" || std.healthy(req.backend_hint)) { 
     set req.backend_hint = sessionWorker; 
    } else { 
     return (synth(503, "Server overloaded")); 
    } 
} 

체크 connections.php는 Nginx의 상태를 읽어 691,363,210

if ($active > 10) { 
    http_response_code(502); 
} else { 
    http_response_code(200); 
} 
나는 VCL에서 직접 백엔드에 현재 연결 (VBE.conn)와 std.healty (req.backend_hint)를 교체하는 방법을 해결책을 찾기 위해 싶습니다

.

답변

0

이미 구현 된 일부 카운터가 있습니다. bereq.retries처럼 : 어쩌면

sub vcl_backend_response { 
    if (beresp.status == 503 && bereq.retries < 5) { 
    return(retry); 
    } 
} 

sub vcl_backend_error { 
    if (beresp.status == 503 && bereq.retries == 5) { 
    synthetic(std.fileread("/path/to/my/file/varnish503.html")); 
    return(deliver); 
    } 
} 

이 당신이 필요로 이미있다. 그렇지 않으면 here은 다른 빌드 카운터 목록입니다.

+0

bereq.retries는 내가 찾고있는 것이 아닙니다. VCL에서 사용할 수있는 변수가 거의 없다는 것을 알고 있습니다. (https://www.varnish-cache.org/docs/trunk/reference/vcl.html#variables) [VBE.conn]을 사용하고 싶습니다. (사용 가능한 카운터 목록에서 https://www.varnish-cache.org/docs/trunk/reference/varnish-counters.html#per-backend-counters-vbe)를 클릭하십시오. 그러나 VCL에서 해당 카운터를 사용하는 방법을 알지 못합니다. – adrive