On Mon, Jul 25, 2016 at 2:02 AM, Pavlos Parissis <pavlos.paris...@gmail.com>
wrote:

> On 22/07/2016 11:53 πμ, Willy Tarreau wrote:
> > Hi Cyrus,
> >
> > On Thu, Jul 21, 2016 at 11:22:06PM -0700, Cyrus Katrak wrote:
> >> Greetings from Slack Technologies,
> >>
> >> We are evaluating HAProxy as a load balancing solution and so far are
> quite pleased with
> >> it. One feature we require is the ability to log when a connection
> started (option
> >> logasap), and again when it is terminated. We have many long lived
> websocket connections,
> >> and this level of introspection is invaluable for debugging.
> >>
> >> We are currently accomplishing this with the following patch: diff -u -r
> >> haproxy-1.6.5-orig/src/proto_http.c haproxy-1.6.5/src/proto_http.c ---
> >> haproxy-1.6.5-orig/src/proto_http.c 2016-05-10 06:42:00.000000000 -0700
> +++
> >> haproxy-1.6.5/src/proto_http.c      2016-07-21 14:19:10.131437264 -0700
> @@ -6926,6 +6926,7
> >> @@ s->logs.bytes_out = txn->rsp.eoh; s->do_log(s); s->logs.bytes_out =
> 0; +
> >> s->logs.logwait |= LW_BYTES; } return 1; }
> >>
> >> Questions: 1. Is this correct? Are there unforeseen consequences of
> this change?
> >
> > No, no bad consequences, it will work for you in this situation.
> >
> >> 2. Would this functionality be welcomed upstream? If so, I can look
> into creating a
> >> separate option for this.
> >
> > We found that there are various situations where people would like to
> have different places
> > to produce logs. The most common demands I've collected over the years
> were : - after
> > request is full received - after server starts to respond - after server
> finishes.
> >
> > I had an experimental patch adding up to 6 locations (more or less
> similar to yours above).
> > But I found that a side effect of this was that logformat doesn't play
> nicely with it since
> > some elements are not necessarily present. So either we stop emitting
> warnings for bad log
> > formats (I'd prefer not), or better, we plan on having different log
> formats for each step,
> > which requires different configuration settings.
> >
>
> For those setups which forward logs to ElasticSearch/druid/similar
> products it may mess up dashboards as information for single request is
> spread across multiple
> log lines.
>
>
Not good but can still be fixed with the multiline module in Logstash like
we do with Java exceptions.


> For the past 3 weeks I have been working on 'dashboarding' HAProxy logs
> using Graphite and ElasticSearch (soon with druid).
> I combine time series and event based information, thus I have a lot of
> data available to me.
> I am now in the process to go beyond simply measuring num of req/secs and
> apply 'behavioral
> analytics'. The limiting factor for doing this is *not* HAProxy logs but
> how Graphite and
> ElasticSearch work/store data. Druid should help on this, I hope...
>

Have done the same with Logstash, Statsd, Graphite and Grafana. Collecting
request/response time, status codes and bytes transfer from Haproxy.
Grafana UI makes a big difference compared to the Graphite charts.


>
> What is 'behavioral analytics' in the context of HAProxy logs?
> Let's say you enable support for ECC and RSA SSL certs, you know by fact
> the less CPU cycles
> will be utilized. But, what else is effected by that, either positively or
> negatively.
> Right now, you can't easily answer this question.
>
> Why do you care to know about it ?
> For multiple reasons:
>
> #1 You want to measure ROI of the change
> #2 You want to reduce the 'surprise' factor. That is, a change occurred in
> area that
> you didn't think of.
>
> To sum up, HAProxy logs are very reach in information and any effort to
> make them to
> provide more information will be very much appreciated.
>
> > In addition, some people would like to be able to emit a log from an
> http-request rule,
> > which also comes with the idea of a separate log format description.
> >
>
> +1 as it very handy during debug sessions.
>
> > And the last point is that we definitely need to be able to log the step
> we're in to
> > distinguish the various log lines. But it could simply be a log format
> tag so that users
> > place it where they want.
>
> I am doing that to separate logs between TCP and HTTP frontends:
>
>    mode tcp
>    option  tcplog
>    log-tag haproxy-tcp
>
> and I have template on rsyslogd to pass fields to ElasticSearch based on
> the mode.
> Adding another tag is an easy win.
>
>
> Cheers,
> Pavlos
>
>

Reply via email to