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 >