Hello Andrei,

No offense taken ;) that's the reason we talk to find the best solution!

and I think you are right. It's better to have one instance of varnishncsa and shift the log writing away.

I tried piping varnishncsa to the apache split-logfile perl script:

/usr/sbin/varnishncsa -f /etc/varnish/varnishncsa-log-format-string -P /var/run/varnishlog.pid | sed -e 's#^www\.##g' | /usr/bin/split-logfile &

and split-logfile started creating different log files for the vhosts.

but still having a bit of an issue with this approach as most of the data just gets written to the logs once I kill the background process. the different log files for the vhosts get created but are mostly empty and start filling up on killing the varnishncsa main process

perhaps the apache split-logfile is not the same as the splitlogs from cpanel?
where could I download a version to test?

another thing is the naming of the vhosts. you actually never know what clients are requesting? so Baidu spider requests URL like 333.domain.com ... or ww3.domain.com ... wwq.domain.com

in your pipe command I see sed removing the www. subdomain but you can actually never know what comes in?

in apache I can easily filter all those subdomains and redirect to the proper domain.

even in varnish VCL I can normalize the host

not sure how to do this in varnishncsa? is there a way to do that?

anyway, I think a single varnishncsa process and shifting the log writing away is the way to go!
but still needs a bit of tweaking if you ask me ;)

thanks & greetings
becki


Am 13.11.2016 um 16:01 schrieb Andrei:
Hello,

By not using splitlogs or an intermediary script, you will be forced to run multiple instances of varnishncsa, which isn't optimal if you host multiple domains. The more traffic/domains you have, the more resources you will consume on parsing the same data across multiple channels. Yes, varnishncsa supports VSL, however I think your approach is a bit off (no offense). As in, you need to shift the log writing process away from varnishncsa. By doing so, you only have one instance of varnishncsa using resources to gather the data, which is then fed to a parser that handles the per domain log splits and writes. That's where 'splitlogs' came into play.

As your question does raise some interest in the cPanel community (myself and Miguel González on this list for example), I threw together a quick Perl script that will in short, pipe and parse data between varnishncsa and the splitlogs binary for cache hits. This lets splitlogs handle the queued log writes which are later parsed for cPanel bandwidth usage and graphs, webalizer, awstats, logaholic, etc - https://github.com/AndreiG6/vscp



On Sun, Nov 13, 2016 at 12:18 PM, Admin Beckspaced <[email protected] <mailto:[email protected]>> wrote:

    Same Hello here ;)

    did have a more in depth look in the manual and figured out that
    varnishncsa does support VSL query.
    so someone could filter on the Request Header and Host

    varnishncsa -q "ReqHeader ~ '^Host: .*example.com
    <http://example.com>'"

    which would produce a log for a specific domain only

    it then would need multiple varnishncsa instances for logging per
    domain, which I found here:

    https://kevops.com/2015/11/varnish-logging-per-host-with-init-script/
    <https://kevops.com/2015/11/varnish-logging-per-host-with-init-script/>

    I use varnish version 5 and then there would be no need for
    splitlog and the logs would be created directly.

    please correct me if I'm wrong?

    thanks for your time & help
    Becki


    Am 12.11.2016 um 17:05 schrieb Andrei:

        Hello again,

        My apologies for not explaining my thoughts better earlier
        then. Afaik,
        varnishncsa does not have a native method to split output based on
        different parameters. The method I was thinking of was based
        on piping
        varnishncsa output through splitlogs (or similar) for the log
        processing
        and writeouts. Since replying earlier, I've got this working
        on a cPanel
        server with piped logging enabled for Apache using the
        following two for
        example (X-Port is a custom header set in vcl_recv related to SSL
        offloading, but you can use a static value or similar custom
        header):

        varnishncsa -F "%{HOST}i:%{X-Port}i %h %l %u %t \"%m %U%q %H\"
        %s %b
        \"%{Referer}i\" \"%{User-agent}i\""|sed -e
        's#^www\.##g'|/usr/local/cpanel/bin/splitlogs --main=`hostname`
        --mainout=/usr/local/apache/logs/access_log
        varnishncsa -F "%{HOST}i %{%s}t %b ."|sed -e
        's#^www\.##g'|/usr/local/cpanel/bin/splitlogs --main=`hostname`
        --suffix=-bytes_log

        The above pipes the requests to the splitlogs binary which
        queues then
        writes to separate logs per domain, that are later processed
        by the
        cPanel log stats apps. Either way, I believe you need an
        intermediary
        script to queue and write the log entries per domain. While
        looking into
        this process, I ran across this little tidbit which you may
        find of use
        https://gist.github.com/garlandkr/4954272
        <https://gist.github.com/garlandkr/4954272> for logstash style
        output.




    _______________________________________________
    varnish-misc mailing list
    [email protected] <mailto:[email protected]>
    https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
    <https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc>




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

Reply via email to