From f7677f32b90eea37e54b39a3e26e5437924a2ada Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Mon, 5 Feb 2018 20:56:59 +0100 Subject: Version 2.0 --- Makefile.am | 2 +- NEWS | 90 +++++++++++++++++++++++++++++++++++++++++++-- README | 34 ++++++++++++++--- configure.ac | 12 +++--- lib/VarnishMib/HashTable.pm | 16 ++++++++ lib/VarnishMib/MIBTable.pm | 16 ++++++++ src/Makefile.am | 2 +- src/VARNISH-MIB.txt | 6 +-- src/auth.c | 2 +- src/backend.h | 3 +- src/ban.c | 2 +- src/belex.l | 17 +++++++++ src/modconf.c | 17 +++++++++ src/varnish-mib.8 | 85 ++++++++++++++++++++++++++++-------------- src/vcli.c | 2 +- 15 files changed, 254 insertions(+), 52 deletions(-) diff --git a/Makefile.am b/Makefile.am index 30060d5..cea3646 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ # This file is part of varnish-mib -*- automake -*- -# Copyright (C) 2014-2015 Sergey Poznyakoff +# Copyright (C) 2014-2018 Sergey Poznyakoff # # varnish-mib is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/NEWS b/NEWS index f12c539..e447533 100644 --- a/NEWS +++ b/NEWS @@ -1,9 +1,93 @@ -Varnish-mib NEWS -- history of user-visible changes. 2016-04-27 -Copyright (C) 2014-2016 Sergey Poznyakoff +Varnish-mib NEWS -- history of user-visible changes. 2018-02-05 See the end of file for copying conditions. Please send Varnish-mib bug reports to +Version 2.0, 2018-02-05 + +This version is written for Varnish 5.2.0. It will definitely not +compile with Varnish 5.2.1 and later. You'll have to use version 3.0 +for that. + +Most important changes: + +New OIDs: + +** VarnishMIB::objects branch + + objectsCount + + Approximate number of HTTP objects (headers + body, + if present) in the cache. + [Varnish variable MAIN.n_object] + + objectsVampire + Number of unresurrected objects. + [MAIN.n_vampireobject] + + objectsCore + Approximate number of object metadata elements in the cache. Each + object needs an objectcore, extra objectcores are for + hit-for-miss, hit-for-pass and busy objects. + [MAIN.n_objectcore] + + objectsHead + Approximate number of different hash entries in the cache. + [MAIN.n_objecthead] + + objectsExpired + Number of objects that expired from cache because of old age. + [MAIN.n_expired] + + objectsLRUNuked + How many objects have been forcefully evicted from + storage to make room for a new object. + [MAIN.n_lru_nuked] + + objectsLRUMoved + Number of move operations done on the LRU list. + [MAIN.n_lru_moved] + + objectsPurges + Number of purge operations executed. + [MAIN.n_purges] + + objectsObjPurged + Number of purged objects. + [MAIN.n_obj_purged] + + objectsGzip + Number of gzip operations. + [MAIN.n_gzip] + + objectsGunzip + Number of gunzip operations. + [MAIN.n_gunzip] + +** VarnishMIB::vcl branch + + vclTotal + Number of loaded VCLs in total. + [MAIN.n_vcl] + + vclAvail + Number of VCLs available. + [MAIN.n_vcl_avail] + + vclDiscard + Number of discarded VCLs. + [MAIN.n_vcl_discard] + + vclFail + Number of VCL failures. + [MAIN.vcl_fail] + +* Removed OIDs + +Several OIDs have been withdrawn due to changes in the Varnish API. +These are: clientRequests411, clientRequests413, and backendConnUnused. + + Version 1.1.90 (Git) * Support for Varnish 4.1 @@ -21,7 +105,7 @@ Initial release. * Copyright information: -Copyright (C) 2014-2016 Sergey Poznyakoff +Copyright (C) 2014-2018 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the diff --git a/README b/README index 8e68d6a..1917254 100644 --- a/README +++ b/README @@ -1,5 +1,4 @@ Varnish-mib README -Copyright (C) 2014-2015 Sergey Poznyakoff See the end of file for copying conditions. * Introduction @@ -10,17 +9,28 @@ for the documentation, and is provided as a brief reference only. For a detailed documentation, please see the varnish-mib(8) manpage. +If you are building varnish-mib from Git repository, jump to +the section GIT SOURCES, below. + * Overview Varnish-mib is a dynamically loadable object module for net-snmp snmpd, that provides access to Varnish Cache statistics. It uses MIBs from varnishsnmp project (http://varnishsnmp.sourceforge.net). +This and other versions of Varnish-mib is available for download from +. The following table +describes the relation between the release number and the version +of Varnish API version it is written for: + + 1.0 and up to 2.0 Varnish 4.0 and 4.1 + 2.0 (this release) Varnish 5.2.0 + 3.0 Varnish 5.2.1 + * Installation -In order to compile the package you need to have Net-snmp and Varnish -installed. Only Varnish 4.x is supported. The installation sequence -is as usual: +In order to compile the package you need to have Net-SNMP and Varnish +installed. The installation sequence is as usual: ./configure [options] make @@ -40,6 +50,20 @@ $PREFIX/lib/snmp, where $PREFIX stands for the installation prefix. Install MIBs (the file VARNISH-MIB.txt in DIR. By default it is installed in $prefix/share/snmp. +* GIT SOURCES + +If you cloned the sources from GIT, you will need the following +additional tools in order to bootstrap the package: + + + Perl + + mib2c + + Perl module Inline::C + + Flex + +Make sure to check out the branch corresponding to the version of +Varnish you are using. Run ./bootstrap. Then, proceed as discussed +above. + * Bug reporting Send bug reports and suggestions to @@ -47,7 +71,7 @@ Send bug reports and suggestions to * Copyright information: -Copyright (C) 2014 Sergey Poznyakoff +Copyright (C) 2014-2018 Sergey Poznyakoff Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the diff --git a/configure.ac b/configure.ac index 84544b2..917bab5 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ # along with Varnish-mib. If not, see . AC_PREREQ(2.69) -AC_INIT([varnish-mib], 1.1.90, [gray@gnu.org]) +AC_INIT([varnish-mib], 2.0, [gray@gnu.org]) AC_CONFIG_SRCDIR(src/varnish_mib.mib2c) AM_CONFIG_HEADER(config.h) AC_CONFIG_AUX_DIR([build-aux]) @@ -45,17 +45,17 @@ PKG_PROG_PKG_CONFIG # Checks for Varnish PKG_CHECK_MODULES([VARNISHAPI], [varnishapi >= 5.0]) -varnishapi_version() { - AC_DEFINE_UNQUOTED([VARNISHAPI_MAJOR],[$1],[Varnish API major version number]) - AC_DEFINE_UNQUOTED([VARNISHAPI_MINOR],[$2],[Varnish API minor version number]) - AC_DEFINE_UNQUOTED([VARNISHAPI_PATCH],[$3],[Varnish API patchlevel]) +check_minor_number() { + if [ "$2" -gt 1 ]; then + AC_MSG_ERROR([Unsupported Varnish API version; please try varnish_mib 3.0 or newer]) + fi } v=$($PKG_CONFIG --modversion varnishapi) if test -n "$v"; then save_IFS=$IFS IFS='.' - varnishapi_version $v + check_minor_number $v IFS=$save_IFS fi diff --git a/lib/VarnishMib/HashTable.pm b/lib/VarnishMib/HashTable.pm index 1faef96..00224ac 100644 --- a/lib/VarnishMib/HashTable.pm +++ b/lib/VarnishMib/HashTable.pm @@ -1,3 +1,19 @@ +# This file is part of varnish-mib -*- automake -*- +# Copyright (C) 2018 Sergey Poznyakoff +# +# varnish-mib is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# varnish-mib is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with varnish-mib. If not, see . + package VarnishMib::HashTable; use strict; use warnings; diff --git a/lib/VarnishMib/MIBTable.pm b/lib/VarnishMib/MIBTable.pm index 6aa959f..da0ca19 100644 --- a/lib/VarnishMib/MIBTable.pm +++ b/lib/VarnishMib/MIBTable.pm @@ -1,3 +1,19 @@ +# This file is part of varnish-mib -*- automake -*- +# Copyright (C) 2018 Sergey Poznyakoff +# +# varnish-mib is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# varnish-mib is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with varnish-mib. If not, see . + package VarnishMib::MIBTable; use strict; use warnings; diff --git a/src/Makefile.am b/src/Makefile.am index 55cdb85..5c79dfc 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ # This file is part of varnish-mib -*- automake -*- -# Copyright (C) 2014-2015 Sergey Poznyakoff +# Copyright (C) 2014-2018 Sergey Poznyakoff # # varnish-mib is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/VARNISH-MIB.txt b/src/VARNISH-MIB.txt index 6b03f21..b7e77f1 100644 --- a/src/VARNISH-MIB.txt +++ b/src/VARNISH-MIB.txt @@ -20,14 +20,14 @@ IMPORTS FROM SNMPv2-CONF; varnishMIB MODULE-IDENTITY - LAST-UPDATED "201802020845Z" + LAST-UPDATED "201802052024Z" ORGANIZATION "Shared Autonomous sYstems" CONTACT-INFO "Morten Hermanrud Sergey Poznyakoff " DESCRIPTION "This MIB module defines objects for Varnish reverse web proxy." - REVISION "201802020845Z" + REVISION "201802052024Z" DESCRIPTION "Second revision." ::= { varnish 0 } @@ -854,7 +854,7 @@ objectsPurges OBJECT-TYPE MAX-ACCESS read-only STATUS current DESCRIPTION - "Number of purge operations executed" + "Number of purge operations executed." ::= { objects 8 } objectsObjPurged OBJECT-TYPE diff --git a/src/auth.c b/src/auth.c index e9abbe4..2ff6aba 100644 --- a/src/auth.c +++ b/src/auth.c @@ -1,5 +1,5 @@ /* This file is part of varnish-mib -*- c -*- - Copyright (C) 2014-2015 Sergey Poznyakoff + Copyright (C) 2014-2018 Sergey Poznyakoff Varnish-mib is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/backend.h b/src/backend.h index d60f613..b13e644 100644 --- a/src/backend.h +++ b/src/backend.h @@ -5,8 +5,7 @@ typedef struct be_string { typedef void (*regfun_t)(be_string_t *, be_string_t *, be_string_t *, void *); -void read_defs(const char *str, size_t len, regfun_t regfun, void *d); -void varnish_backend_table_timeout_parser(const char *token, char *line); +struct vsm; struct VSC_point; void backend_register(char const *name, size_t len, char const *param, const struct VSC_point *vpt); diff --git a/src/ban.c b/src/ban.c index 1f4583b..a50b5a3 100644 --- a/src/ban.c +++ b/src/ban.c @@ -1,5 +1,5 @@ /* This file is part of varnish-mib -*- c -*- - Copyright (C) 2014-2015 Sergey Poznyakoff + Copyright (C) 2014-2018 Sergey Poznyakoff Varnish-mib is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/belex.l b/src/belex.l index f35f114..bc0bfc0 100644 --- a/src/belex.l +++ b/src/belex.l @@ -1,3 +1,20 @@ +/* This file is part of varnish-mib + Copyright (C) 2018 Sergey Poznyakoff + + Varnish-mib is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Varnish-mib is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with varnish-mib. If not, see . +*/ + %option nounput %option noinput diff --git a/src/modconf.c b/src/modconf.c index 85b2582..64177c1 100644 --- a/src/modconf.c +++ b/src/modconf.c @@ -1,3 +1,20 @@ +/* This file is part of varnish-mib + Copyright (C) 2018 Sergey Poznyakoff + + Varnish-mib is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Varnish-mib is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with varnish-mib. If not, see . +*/ + #include "varnish_mib.h" #include diff --git a/src/varnish-mib.8 b/src/varnish-mib.8 index 8d86f18..77912af 100644 --- a/src/varnish-mib.8 +++ b/src/varnish-mib.8 @@ -1,5 +1,5 @@ .\" This file is part of Varnish-mib -*- nroff -*- -.\" Copyright (C) 2014-2016 Sergey Poznyakoff +.\" Copyright (C) 2014-2018 Sergey Poznyakoff .\" .\" Varnish-mib is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by @@ -13,9 +13,9 @@ .\" .\" You should have received a copy of the GNU General Public License .\" along with Varnish-mib. If not, see . -.TH VARNISH-MIB 8 "February 2, 2018" "varnish-mib" +.TH VARNISH-MIB 8 "February 5, 2018" "varnish-mib" .SH NAME -varnish\-mib \- net-snmp module for obtaining Varnish Cache statistics +varnish\-mib \- Net-SNMP module for Varnish Cache monitoring .SH SYNOPSIS In \fBsnmpd.conf\fR(5): .PP @@ -27,23 +27,49 @@ that provides access to Varnish Cache statistics. The module is loaded into .BR snmpd (8) as shown above (actual path can of course differ, depending on how -the package was configured). The module is written for Varnish -version \fB5.\fIX\fR. +the package was configured). This version is written for Varnish +\fB5.2.0\fR. .PP -The module obtains most of the data using Varnish API, and \fBvarnishd\fR -administrative interface. You should make sure that \fBsnmpd\fR is -able to access both data sources. +The values in the OID branches +.BR client , +.BR total , +.BR master , +.BR session , +.BR threads ", and " +.B objects +are obtained from Varnish API. .PP -The user \fBsnmpd\fR runs as should be able to read contents of the -\fB/var/lib/varnish/\fIHOSTNAME\fB/_.vsm_mgt\fR directory and read -files located in it. It must also have read permission on the varnish -secret file. +The OID branches +.BR backend , +.BR bans ", and " +.B vcl +are obtained using \fBvarnishd\fR administrative interface (similar +to +.BR varnishadm (8)). +.PP +To retrieve this information, the module must +have enough permissions to scan the Varnish management directory and +read files located in it. This directory is normally named +\fB/var/lib/varnish/\fIHOSTNAME\fB/_.vsm_mgt\fR, where \fIHOSTNAME\fR +stands for the server's hostname. Unless +.BR snmpd (8) +is run as root, special measures should be undertaken in order to +grant access rights. For example, if the daemon runs as user +\fBsnmp\fR, running the following two commands after starting +\fBvarnishd\fR will do the trick: + +.EX + setfacl -m u:snmp:rx /var/lib/varnish/$(hostname)/_.vsm_mgt + setfacl -m u:snmp:r /var/lib/varnish/$(hostname)/_.vsm_mgt/* +.EE +.PP + .SH CONFIGURATION OPTIONS Configuration statements specific to .B varnish\-mib must appear in the .B snmpd.conf -file below the +file, after the .B dlmod statement that loads the module. .PP @@ -64,36 +90,38 @@ Update interval for \fBbackendTable\fR. Default is 5 seconds. Sets timeout for I/O operations with Varnish administrative port. Default is 5 seconds. .PP -The following two statements are not normally needed, since -\fBvarnish-mib\fR obtains this information automatically. +The following two statements are not normally needed, but are +provided for completeness sake: .TP \fBvarnishCLISocket\fR \fIADDRESS\fR[:\fIPORT\fR] Sets the address of Varnish administrative interface socket. .TP \fBvarnishCLISecretFile\fR \fIFILE\fR -Pathname of the Varnish secret file. +Sets the pathname of the Varnish secret file. .SH DEBUGGING The module defines the following debugging tokens: .TP .B varnish_mib -General debugging information. +Produces general debugging information. .TP .B varnish_mib:ban -Debug ban table loading. +Outputs verbose report about loading th ban table. .TP .B varnish_mib:vcli -Varnish +Displays additional information regarding varnish .B CLI interaction. .TP .B varnish_mib:vcli:transcript -Enables full transcript of CLI interaction. +Enables full transcript of varnish CLI session. .TP .B varnish_mib:backend -Debug loading the backend information. +Outputs verbose information about loading the backend information. .SH OIDS -The following OIDs are defined: +The following OIDs are defined in the +.B VARNISH-MIB.txt +file: .SS Branch \(dqclient\(dq .TP .B clientAcceptedConnections @@ -122,9 +150,9 @@ A write-only OID. When set, invalidates the cache using the supplied value as argument to ban. When read, returns an empty string. E.g., to invalidate caches of all \fBpng\fR images: -.EE -snmpset \fBhostname\fR VARNISH\-MIB::clientBan.0 s 'req.url ~ \(dq\\.png$\(dq' .EX +snmpset \fIhostname\fR VARNISH\-MIB::clientBan.0 s 'req.url ~ \(dq\\.png$\(dq' +.EE .SS Branch \(dqbackend\(dq .TP .B backendConnSuccess @@ -258,7 +286,8 @@ Number of sessions dropped because session queue was full. Number of sessions closed. .TP .B sessPipeline -Session pipeline. This variable is available only in Varnish version \fR4.0\fR. +This OID was used in Varnish \fR4.1\fR, but disappeared from version +\fB5.0\fR. .TP .B sessReadAhead Session read-ahead. @@ -273,8 +302,8 @@ Number of sessions dropped for thread. Number of session accept failures. .TP .B sessPipeOverflow -Number of session pipe overflows. This variable is available only in -Varnish version \fR4.0\fR. +This OID was used in Varnish \fR4.1\fR, but disappeared in version +\fB5.0\fR. .SS Branch \(dqthreads\(dq .TP .B threadsPools @@ -367,7 +396,7 @@ of \fBbansTotal\fR variable. The default update interval is 60 seconds. It can be configured in the \fBsnmpd.conf\fR file (see the \fBvarnishBanTableTimeout\fR statement above). .SS Branch \(dqagent\(dq -The \fBagent\fR branch is reserved for OIDs for +The \fBagent\fR branch is reserved for implementation-specific management. It is not used currently. .SH NOTES The following OIDs were used in Varnish 4. They are no longer diff --git a/src/vcli.c b/src/vcli.c index 7d6c2b9..94f0eef 100644 --- a/src/vcli.c +++ b/src/vcli.c @@ -1,5 +1,5 @@ /* This file is part of varnish-mib -*- c -*- - Copyright (C) 2014-2015 Sergey Poznyakoff + Copyright (C) 2014-2018 Sergey Poznyakoff Varnish-mib is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -- cgit v1.2.1