Hi Jean, On Tue, Nov 05, 2019 at 04:33:00PM +0100, Jean Wasilewski wrote: > Hi, > > While using the stats socket with the official HAProxy exporter, I > noticed that some metrics seem erronous. While querying for a specific > frontend, the admin socket reported two differents metrics for the same > frontend. > > I made this small onliner two retrieve values (with here an example on > 2XX calls on our frontend `console-online`): > > ``` > $ while true; do echo "show stat" | socat - /run/haproxy/admin.sock |grep \ > -E '\#|FRONT' |grep -E '\#|console' |cut -d, -f41 |xargs -L2 echo; sleep \ > 1; done > hrsp_2xx 2141807 > hrsp_2xx 136536 > hrsp_2xx 2141819 > hrsp_2xx 2141828 > hrsp_2xx 136536 > hrsp_2xx 2141841 > hrsp_2xx 2141846 > hrsp_2xx 136537 > hrsp_2xx 2141854 > hrsp_2xx 2141856 > hrsp_2xx 2141863 > hrsp_2xx 136537 > ``` > > Is this a bug or a misconfiguration?
It sounds like you're working in multi-process mode (nbproc > 1). If so, this is the expected behavior since stats are per process. This was one of the drivers for the porting to threads. If for any reason you really want to stick to nbproc, then I'd recommend you to use one stats socket per process (use the "process" directive on each line) and to query both of them individually. But frankly this is painful as it may return conflicting server states during some transitions because the checks are per-process as well. You can replace "nbproc 2" with "nbthread 2" in your config, watch for warnings in case you'd already have a few explicit "process" entries, or even remove nbproc and nbthread to let haproxy start one thread per available core. Hoping this helps, Willy