class NewRelic::F5Plugin::GlobalSsl

Constants

OID_SYS_CLIENTSSL_STAT_ADH_KEYXCHG

Client-side Key Exchanges

OID_SYS_CLIENTSSL_STAT_AESGCM_BULK
OID_SYS_CLIENTSSL_STAT_AES_BULK
OID_SYS_CLIENTSSL_STAT_CUR_CONNS

Client-side Connections

OID_SYS_CLIENTSSL_STAT_DES_BULK
OID_SYS_CLIENTSSL_STAT_DHRSA_KEYXCHG
OID_SYS_CLIENTSSL_STAT_DTLSV1
OID_SYS_CLIENTSSL_STAT_ECDHERSA_KEYXCHG
OID_SYS_CLIENTSSL_STAT_EDHRSA_KEYXCHG
OID_SYS_CLIENTSSL_STAT_IDEA_BULK
OID_SYS_CLIENTSSL_STAT_MD5_DIGEST
OID_SYS_CLIENTSSL_STAT_NOTSSL
OID_SYS_CLIENTSSL_STAT_NULL_BULK

Client-side Bulk

OID_SYS_CLIENTSSL_STAT_NULL_DIGEST

Client-side Digests

OID_SYS_CLIENTSSL_STAT_RC2_BULK
OID_SYS_CLIENTSSL_STAT_RC4_BULK
OID_SYS_CLIENTSSL_STAT_RSA_KEYXCHG
OID_SYS_CLIENTSSL_STAT_SHA_DIGEST
OID_SYS_CLIENTSSL_STAT_SSLV2

Client-side Protocols

OID_SYS_CLIENTSSL_STAT_SSLV3
OID_SYS_CLIENTSSL_STAT_TLSV1
OID_SYS_CLIENTSSL_STAT_TLSV11

Client-side TLS

OID_SYS_CLIENTSSL_STAT_TLSV12
OID_SYS_CLIENTSSL_STAT_TOT_COMPAT_CONNS
OID_SYS_CLIENTSSL_STAT_TOT_NATIVE_CONNS
OID_SYS_GLOBAL_CLIENT_SSL_STAT
OID_SYS_GLOBAL_SERVER_SSL_STAT
OID_SYS_GLOBAL_STATS

Create the OIDs if they do not exist

OID_SYS_SERVERSSL_STAT_ADH_KEYXCHG

Server-side Key Exchanges

OID_SYS_SERVERSSL_STAT_AESGCM_BULK
OID_SYS_SERVERSSL_STAT_AES_BULK
OID_SYS_SERVERSSL_STAT_CUR_CONNS

Server-side Connections

OID_SYS_SERVERSSL_STAT_DES_BULK
OID_SYS_SERVERSSL_STAT_DHRSA_KEYXCHG
OID_SYS_SERVERSSL_STAT_DTLSV1
OID_SYS_SERVERSSL_STAT_ECDHERSA_KEYXCHG
OID_SYS_SERVERSSL_STAT_EDHRSA_KEYXCHG
OID_SYS_SERVERSSL_STAT_IDEA_BULK
OID_SYS_SERVERSSL_STAT_MD5_DIGEST
OID_SYS_SERVERSSL_STAT_NOTSSL
OID_SYS_SERVERSSL_STAT_NULL_BULK

Server-side Bulk

OID_SYS_SERVERSSL_STAT_NULL_DIGEST

Server-side Digests

OID_SYS_SERVERSSL_STAT_RC2_BULK
OID_SYS_SERVERSSL_STAT_RC4_BULK
OID_SYS_SERVERSSL_STAT_RSA_KEYXCHG
OID_SYS_SERVERSSL_STAT_SHA_DIGEST
OID_SYS_SERVERSSL_STAT_SSLV2

Server-side Protocols

OID_SYS_SERVERSSL_STAT_SSLV3
OID_SYS_SERVERSSL_STAT_TLSV1
OID_SYS_SERVERSSL_STAT_TLSV11

Server-side TLS

OID_SYS_SERVERSSL_STAT_TLSV12
OID_SYS_SERVERSSL_STAT_TOT_COMPAT_CONNS
OID_SYS_SERVERSSL_STAT_TOT_NATIVE_CONNS

Attributes

snmp_manager[RW]

Public Class Methods

new(snmp = nil) click to toggle source

Init

# File lib/newrelic_f5_plugin/global_ssl.rb, line 90
def initialize(snmp = nil)
  if snmp
    @snmp_manager = snmp
  else
    @snmp_manager = nil
  end
end

Public Instance Methods

get_connections(snmp = nil) click to toggle source

Gather Global connection related metrics and report them in conn

# File lib/newrelic_f5_plugin/global_ssl.rb, line 133
def get_connections(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp
    res = gather_snmp_metrics_array([ OID_SYS_CLIENTSSL_STAT_CUR_CONNS, OID_SYS_SERVERSSL_STAT_CUR_CONNS], snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    metrics["Connections/Current/Client SSL"] = res[0]
    metrics["Connections/Current/Server SSL"] = res[1]
  end

  return metrics
end
get_ssl_bulk(snmp = nil) click to toggle source

Global SSL Bulk Stats in trans/sec

# File lib/newrelic_f5_plugin/global_ssl.rb, line 258
def get_ssl_bulk(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp

    res = gather_snmp_metrics_array([OID_SYS_CLIENTSSL_STAT_NULL_BULK, OID_SYS_CLIENTSSL_STAT_AES_BULK, OID_SYS_CLIENTSSL_STAT_DES_BULK, OID_SYS_CLIENTSSL_STAT_IDEA_BULK,
                                     OID_SYS_CLIENTSSL_STAT_RC2_BULK, OID_SYS_CLIENTSSL_STAT_RC4_BULK, OID_SYS_CLIENTSSL_STAT_AESGCM_BULK, OID_SYS_SERVERSSL_STAT_NULL_BULK,
                                     OID_SYS_SERVERSSL_STAT_AES_BULK, OID_SYS_SERVERSSL_STAT_DES_BULK, OID_SYS_SERVERSSL_STAT_IDEA_BULK, OID_SYS_SERVERSSL_STAT_RC2_BULK,
                                     OID_SYS_SERVERSSL_STAT_RC4_BULK, OID_SYS_SERVERSSL_STAT_AESGCM_BULK],
                                     snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    vals = res.map { |i| i.to_i }

    metrics["SSL/Global/Bulk/Client/Null"]   = vals[0]
    metrics["SSL/Global/Bulk/Client/AES"]    = vals[1]
    metrics["SSL/Global/Bulk/Client/DES"]    = vals[2]
    metrics["SSL/Global/Bulk/Client/IDEA"]   = vals[3]
    metrics["SSL/Global/Bulk/Client/RC2"]    = vals[4]
    metrics["SSL/Global/Bulk/Client/RC4"]    = vals[5]
    metrics["SSL/Global/Bulk/Client/AESGCM"] = vals[6]

    metrics["SSL/Global/Bulk/Server/Null"]   = vals[7]
    metrics["SSL/Global/Bulk/Server/AES"]    = vals[8]
    metrics["SSL/Global/Bulk/Server/DES"]    = vals[9]
    metrics["SSL/Global/Bulk/Server/IDEA"]   = vals[10]
    metrics["SSL/Global/Bulk/Server/RC2"]    = vals[11]
    metrics["SSL/Global/Bulk/Server/RC4"]    = vals[12]
    metrics["SSL/Global/Bulk/Server/AESGCM"] = vals[13]
  end

  return metrics
end
get_ssl_conns(snmp = nil) click to toggle source

Global SSL Connection Stats in trans/sec

# File lib/newrelic_f5_plugin/global_ssl.rb, line 155
def get_ssl_conns(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp
    res = gather_snmp_metrics_array([OID_SYS_CLIENTSSL_STAT_TOT_NATIVE_CONNS, OID_SYS_CLIENTSSL_STAT_TOT_COMPAT_CONNS,
                                     OID_SYS_SERVERSSL_STAT_TOT_NATIVE_CONNS, OID_SYS_SERVERSSL_STAT_TOT_COMPAT_CONNS],
                                     snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    vals = res.map { |i| i.to_i }

    metrics["SSL/Global/Client/Native"] = vals[0]
    metrics["SSL/Global/Client/Compat"] = vals[1]
    metrics["SSL/Global/Server/Native"] = vals[2]
    metrics["SSL/Global/Server/Compat"] = vals[3]
    metrics["SSL/Global/Total/Client"]  = (vals[0] + vals[1])
    metrics["SSL/Global/Total/Server"]  = (vals[2] + vals[3])
    metrics["SSL/Global/Total/All"]     = vals.inject(0) { |t,i| t + i }
  end

  return metrics
end
get_ssl_digests(snmp = nil) click to toggle source

Global SSL Digest Stats in trans/sec

# File lib/newrelic_f5_plugin/global_ssl.rb, line 300
def get_ssl_digests(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp

    res = gather_snmp_metrics_array([OID_SYS_CLIENTSSL_STAT_NULL_DIGEST, OID_SYS_CLIENTSSL_STAT_MD5_DIGEST, OID_SYS_CLIENTSSL_STAT_SHA_DIGEST, OID_SYS_CLIENTSSL_STAT_NOTSSL,
                                     OID_SYS_SERVERSSL_STAT_NULL_DIGEST, OID_SYS_SERVERSSL_STAT_MD5_DIGEST, OID_SYS_SERVERSSL_STAT_SHA_DIGEST, OID_SYS_SERVERSSL_STAT_NOTSSL],
                                     snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    vals = res.map { |i| i.to_i }

    metrics["SSL/Global/Digest/Client/Null"]   = vals[0]
    metrics["SSL/Global/Digest/Client/MD5"]    = vals[1]
    metrics["SSL/Global/Digest/Client/SHA"]    = vals[2]
    metrics["SSL/Global/Digest/Client/NotSSL"] = vals[3]
    metrics["SSL/Global/Digest/Server/Null"]   = vals[4]
    metrics["SSL/Global/Digest/Server/MD5"]    = vals[5]
    metrics["SSL/Global/Digest/Server/SHA"]    = vals[6]
    metrics["SSL/Global/Digest/Server/NotSSL"] = vals[7]
  end

  return metrics
end
get_ssl_key_exchanges(snmp = nil) click to toggle source

Global SSL Key Exchanges Stats in trans/sec

# File lib/newrelic_f5_plugin/global_ssl.rb, line 223
def get_ssl_key_exchanges(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp

    res = gather_snmp_metrics_array([OID_SYS_CLIENTSSL_STAT_ADH_KEYXCHG, OID_SYS_CLIENTSSL_STAT_DHRSA_KEYXCHG, OID_SYS_CLIENTSSL_STAT_RSA_KEYXCHG, OID_SYS_CLIENTSSL_STAT_EDHRSA_KEYXCHG, OID_SYS_CLIENTSSL_STAT_ECDHERSA_KEYXCHG,
                                     OID_SYS_SERVERSSL_STAT_ADH_KEYXCHG, OID_SYS_SERVERSSL_STAT_DHRSA_KEYXCHG, OID_SYS_SERVERSSL_STAT_RSA_KEYXCHG, OID_SYS_SERVERSSL_STAT_EDHRSA_KEYXCHG, OID_SYS_SERVERSSL_STAT_ECDHERSA_KEYXCHG],
                                     snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    vals = res.map { |i| i.to_i }

    metrics["SSL/Global/KeyExchange/Client/Adh"]      = vals[0]
    metrics["SSL/Global/KeyExchange/Client/DhRSA"]    = vals[1]
    metrics["SSL/Global/KeyExchange/Client/RSA"]      = vals[2]
    metrics["SSL/Global/KeyExchange/Client/EdhRsa"]   = vals[3]
    metrics["SSL/Global/KeyExchange/Client/EcdheRsa"] = vals[4]
    metrics["SSL/Global/KeyExchange/Server/Adh"]      = vals[5]
    metrics["SSL/Global/KeyExchange/Server/DhRSA"]    = vals[6]
    metrics["SSL/Global/KeyExchange/Server/RSA"]      = vals[7]
    metrics["SSL/Global/KeyExchange/Server/EdhRsa"]   = vals[8]
    metrics["SSL/Global/KeyExchange/Server/EcdheRsa"] = vals[9]
  end

  return metrics
end
get_ssl_protocols(snmp = nil) click to toggle source

Global SSL Protocol Stats in trans/sec

# File lib/newrelic_f5_plugin/global_ssl.rb, line 186
def get_ssl_protocols(snmp = nil)
  metrics = { }
  snmp    = snmp_manager unless snmp

  if snmp

    res = gather_snmp_metrics_array([OID_SYS_CLIENTSSL_STAT_SSLV2,  OID_SYS_CLIENTSSL_STAT_SSLV3,  OID_SYS_CLIENTSSL_STAT_TLSV1,
                                     OID_SYS_SERVERSSL_STAT_SSLV2,  OID_SYS_SERVERSSL_STAT_SSLV3,  OID_SYS_SERVERSSL_STAT_TLSV1,
                                     OID_SYS_CLIENTSSL_STAT_TLSV11, OID_SYS_CLIENTSSL_STAT_TLSV12, OID_SYS_SERVERSSL_STAT_TLSV11,
                                     OID_SYS_SERVERSSL_STAT_TLSV12],
                                     snmp)

    # Bail out if we didn't get anything
    return metrics if res.empty?

    vals = res.map { |i| i.to_i }

    metrics["SSL/Global/Protocol/Client/SSLv2"]   = vals[0]
    metrics["SSL/Global/Protocol/Client/SSLv3"]   = vals[1]
    metrics["SSL/Global/Protocol/Client/TLSv1"]   = vals[2]
    metrics["SSL/Global/Protocol/Client/TLSv1.1"] = vals[6]
    metrics["SSL/Global/Protocol/Client/TLSv1.2"] = vals[7]
    metrics["SSL/Global/Protocol/Server/SSLv2"]   = vals[3]
    metrics["SSL/Global/Protocol/Server/SSLv3"]   = vals[4]
    metrics["SSL/Global/Protocol/Server/TLSv1"]   = vals[5]
    metrics["SSL/Global/Protocol/Server/TLSv1.1"] = vals[8]
    metrics["SSL/Global/Protocol/Server/TLSv1.2"] = vals[9]
  end

  return metrics
end
poll(agent, snmp) click to toggle source

Perform polling and reportings of metrics

# File lib/newrelic_f5_plugin/global_ssl.rb, line 103
def poll(agent, snmp)
  @snmp_manager = snmp

  ssl_total_connections = get_connections
  ssl_total_connections.each_key { |m| agent.report_metric m, "conn", ssl_total_connections[m] } unless ssl_total_connections.nil?

  ssl_conns = get_ssl_conns
  ssl_conns.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_conns[m] } unless ssl_conns.nil?

  ssl_conns = get_ssl_conns
  ssl_conns.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_conns[m] } unless ssl_conns.nil?

  ssl_protocols = get_ssl_protocols
  ssl_protocols.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_protocols[m] } unless ssl_protocols.nil?

  ssl_key_exchanges = get_ssl_key_exchanges
  ssl_key_exchanges.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_key_exchanges[m] } unless ssl_key_exchanges.nil?

  ssl_bulk = get_ssl_bulk
  ssl_bulk.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_bulk[m] } unless ssl_bulk.nil?

  ssl_digests = get_ssl_digests
  ssl_digests.each_key { |m| agent.report_counter_metric m, "trans/sec", ssl_digests[m] } unless ssl_digests.nil?
end