Technically you'd probably aggregate all of these into a single variable for production monitoring, but having insight into the individual failure scenarios could prove to be very valuable.
On Tue, Aug 5, 2014 at 12:11 PM, James Peach <jamespe...@me.com> wrote: > What is the use case for these stats? I can see how the logs might be too > noisy, but they don't seem like good candidates for metrics. How would use > these for monitoring? > > > On Aug 5, 2014, at 11:34 AM, bri...@apache.org wrote: > > > > Repository: trafficserver > > Updated Branches: > > refs/heads/master b4343175e -> d9aba01de > > > > > > TS-2986: Adding stats to TLS errors > > > > > > Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo > > Commit: > http://git-wip-us.apache.org/repos/asf/trafficserver/commit/a8070bbb > > Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/a8070bbb > > Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/a8070bbb > > > > Branch: refs/heads/master > > Commit: a8070bbb80f2e709f91d4c8b47d9ded4d55bdcdc > > Parents: b434317 > > Author: Brian Geffon <bri...@apache.org> > > Authored: Tue Aug 5 11:34:07 2014 -0700 > > Committer: Brian Geffon <bri...@apache.org> > > Committed: Tue Aug 5 11:34:07 2014 -0700 > > > > ---------------------------------------------------------------------- > > iocore/net/P_SSLUtils.h | 10 ++++++ > > iocore/net/SSLNetVConnection.cc | 60 +++++++++++++++++++++++++----------- > > iocore/net/SSLUtils.cc | 28 +++++++++++++++++ > > 3 files changed, 80 insertions(+), 18 deletions(-) > > ---------------------------------------------------------------------- > > > > > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a8070bbb/iocore/net/P_SSLUtils.h > > ---------------------------------------------------------------------- > > diff --git a/iocore/net/P_SSLUtils.h b/iocore/net/P_SSLUtils.h > > index b1bf01c..6e44be3 100644 > > --- a/iocore/net/P_SSLUtils.h > > +++ b/iocore/net/P_SSLUtils.h > > @@ -69,6 +69,16 @@ enum SSL_Stats > > ssl_total_tickets_not_found_stat, > > ssl_total_tickets_renewed_stat, > > > > + /* error stats */ > > + ssl_error_want_write, > > + ssl_error_want_read, > > + ssl_error_want_x509_lookup, > > + ssl_error_syscall, > > + ssl_error_read_eos, > > + ssl_error_zero_return, > > + ssl_error_ssl, > > + ssl_sni_name_set_failure, > > + > > ssl_cipher_stats_start = 100, > > ssl_cipher_stats_end = 300, > > > > > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a8070bbb/iocore/net/SSLNetVConnection.cc > > ---------------------------------------------------------------------- > > diff --git a/iocore/net/SSLNetVConnection.cc > b/iocore/net/SSLNetVConnection.cc > > index 0f4a6b3..d3aa858 100644 > > --- a/iocore/net/SSLNetVConnection.cc > > +++ b/iocore/net/SSLNetVConnection.cc > > @@ -140,22 +140,26 @@ ssl_read_from_net(SSLNetVConnection * sslvc, > EThread * lthread, int64_t &ret) > > > > case SSL_ERROR_WANT_WRITE: > > event = SSL_WRITE_WOULD_BLOCK; > > - Debug("ssl", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(write)"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_write); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(write)"); > > break; > > case SSL_ERROR_WANT_READ: > > event = SSL_READ_WOULD_BLOCK; > > - Debug("ssl", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(read)"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_read); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(read)"); > > break; > > case SSL_ERROR_WANT_X509_LOOKUP: > > event = SSL_READ_WOULD_BLOCK; > > - Debug("ssl", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(read/x509 lookup)"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_x509_lookup); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_WOULD_BLOCK(read/x509 lookup)"); > > break; > > case SSL_ERROR_SYSCALL: > > + SSL_INCREMENT_DYN_STAT(ssl_error_syscall); > > if (rres != 0) { > > // not EOF > > event = SSL_READ_ERROR; > > ret = errno; > > - Debug("ssl", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_SYSCALL, underlying IO error: %s", strerror(errno)); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_SYSCALL, underlying IO error: %s", strerror(errno)); > > } else { > > // then EOF observed, treat it as EOS > > event = SSL_READ_EOS; > > @@ -164,13 +168,15 @@ ssl_read_from_net(SSLNetVConnection * sslvc, > EThread * lthread, int64_t &ret) > > break; > > case SSL_ERROR_ZERO_RETURN: > > event = SSL_READ_EOS; > > - Debug("ssl", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_ZERO_RETURN"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_zero_return); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net] > SSL_ERROR_ZERO_RETURN"); > > break; > > case SSL_ERROR_SSL: > > default: > > event = SSL_READ_ERROR; > > ret = errno; > > - SSLErrorVC(sslvc, "[SSL_NetVConnection::ssl_read_from_net]"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_ssl); > > + Debug("ssl.error", "[SSL_NetVConnection::ssl_read_from_net]"); > > break; > > } // switch > > break; > > @@ -432,28 +438,37 @@ SSLNetVConnection::load_buffer_and_write(int64_t > towrite, int64_t &wattempted, i > > case SSL_ERROR_WANT_READ: > > needs |= EVENTIO_READ; > > r = -EAGAIN; > > - Debug("ssl", "SSL_write-SSL_ERROR_WANT_READ"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_read); > > + Debug("ssl.error", "SSL_write-SSL_ERROR_WANT_READ"); > > break; > > case SSL_ERROR_WANT_WRITE: > > - case SSL_ERROR_WANT_X509_LOOKUP: > > + case SSL_ERROR_WANT_X509_LOOKUP: { > > + if (SSL_ERROR_WANT_WRITE == err) > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_write); > > + else if (SSL_ERROR_WANT_X509_LOOKUP == err) > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_x509_lookup); > > + > > needs |= EVENTIO_WRITE; > > r = -EAGAIN; > > - Debug("ssl", "SSL_write-SSL_ERROR_WANT_WRITE"); > > + Debug("ssl.error", "SSL_write-SSL_ERROR_WANT_WRITE"); > > break; > > + } > > case SSL_ERROR_SYSCALL: > > r = -errno; > > - Debug("ssl", "SSL_write-SSL_ERROR_SYSCALL"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_syscall); > > + Debug("ssl.error", "SSL_write-SSL_ERROR_SYSCALL"); > > break; > > // end of stream > > case SSL_ERROR_ZERO_RETURN: > > r = -errno; > > - Debug("ssl", "SSL_write-SSL_ERROR_ZERO_RETURN"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_zero_return); > > + Debug("ssl.error", "SSL_write-SSL_ERROR_ZERO_RETURN"); > > break; > > case SSL_ERROR_SSL: > > default: > > r = -errno; > > - Debug("ssl", "SSL_write-SSL_ERROR_SSL"); > > - SSLErrorVC(this, "SSL_write"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_ssl); > > + Debug("ssl.error", "SSL_write-SSL_ERROR_SSL"); > > break; > > } > > return (r); > > @@ -653,7 +668,8 @@ SSLNetVConnection::sslClientHandShakeEvent(int &err) > > if (SSL_set_tlsext_host_name(ssl, options.sni_servername)) { > > Debug("ssl", "using SNI name '%s' for client handshake", > options.sni_servername); > > } else { > > - SSLError("failed to set SNI name '%s' for client handshake", > options.sni_servername); > > + Debug("ssl.error","failed to set SNI name '%s' for client > handshake", options.sni_servername); > > + SSL_INCREMENT_DYN_STAT(ssl_sni_name_set_failure); > > } > > } > > #endif > > @@ -679,13 +695,18 @@ SSLNetVConnection::sslClientHandShakeEvent(int > &err) > > return EVENT_DONE; > > > > case SSL_ERROR_WANT_WRITE: > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > SSL_ERROR_WANT_WRITE"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_write); > > return SSL_HANDSHAKE_WANT_WRITE; > > > > case SSL_ERROR_WANT_READ: > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_read); > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > SSL_ERROR_WANT_READ"); > > return SSL_HANDSHAKE_WANT_READ; > > > > case SSL_ERROR_WANT_X509_LOOKUP: > > - Debug("ssl", "SSLNetVConnection::sslClientHandShakeEvent, would > block on read or write"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_want_x509_lookup); > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > SSL_ERROR_WANT_X509_LOOKUP"); > > break; > > > > case SSL_ERROR_WANT_ACCEPT: > > @@ -695,12 +716,14 @@ SSLNetVConnection::sslClientHandShakeEvent(int > &err) > > break; > > > > case SSL_ERROR_ZERO_RETURN: > > - Debug("ssl", "SSLNetVConnection::sslClientHandShakeEvent, EOS"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_zero_return); > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > EOS"); > > return EVENT_ERROR; > > > > case SSL_ERROR_SYSCALL: > > err = errno; > > - Debug("ssl", "SSLNetVConnection::sslClientHandShakeEvent, syscall"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_syscall); > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > syscall"); > > return EVENT_ERROR; > > break; > > > > @@ -708,7 +731,8 @@ SSLNetVConnection::sslClientHandShakeEvent(int &err) > > case SSL_ERROR_SSL: > > default: > > err = errno; > > - SSLErrorVC(this, "sslClientHandShakeEvent"); > > + SSL_INCREMENT_DYN_STAT(ssl_error_ssl); > > + Debug("ssl.error", "SSLNetVConnection::sslClientHandShakeEvent, > SSL_ERROR_SSL"); > > return EVENT_ERROR; > > break; > > > > > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a8070bbb/iocore/net/SSLUtils.cc > > ---------------------------------------------------------------------- > > diff --git a/iocore/net/SSLUtils.cc b/iocore/net/SSLUtils.cc > > index 1576c6d..0d85a49 100644 > > --- a/iocore/net/SSLUtils.cc > > +++ b/iocore/net/SSLUtils.cc > > @@ -664,6 +664,34 @@ SSLInitializeStatistics() > > RECD_INT, RECP_PERSISTENT, (int) > ssl_total_tickets_renewed_stat, > > RecRawStatSyncCount); > > > > + > > + /* error stats */ > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_want_write", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_error_want_write, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_want_read", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_error_want_read, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_want_x509_lookup", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_error_want_x509_lookup, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_syscall", > > + RECD_INT, RECP_PERSISTENT, (int) ssl_error_syscall, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_read_eos", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_error_read_eos, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_zero_return", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_error_zero_return, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_error_ssl", > > + RECD_INT, RECP_PERSISTENT, (int) ssl_error_ssl, > > + RecRawStatSyncCount); > > + RecRegisterRawStat(ssl_rsb, RECT_PROCESS, > "proxy.process.ssl.ssl_sni_name_set_failure", > > + RECD_INT, RECP_PERSISTENT, (int) > ssl_sni_name_set_failure, > > + RecRawStatSyncCount); > > + > > + > > // Get and register the SSL cipher stats. Note that we are using the > default SSL context to obtain > > // the cipher list. This means that the set of ciphers is fixed by the > build configuration and not > > // filtered by proxy.config.ssl.server.cipher_suite. This keeps the > set of cipher suites stable across > > >