Forum Discussion

Tim_Harber's avatar
Jun 05, 2018

Getting active pool member connections using Python

If I want to see all of the client connections connecting to a pool member from the CLI I can do something like a "show sys connection ss-server-addr 1.2.3.4". I can also do this using Postman mapping to ";, but I cannot figure out how to do this via Python.

 

Using Python if I try to connect to "bigip.sys.raw" I do not see a module called "connection" or anything similar. Does anyone know how, or have some sample code on how to accomplish this?

 

Thanks!

 

  • The stats are pulled from the pool or member itself. Try this for an example:

    !/usr/bin/env python3
    
    from f5.bigip import ManagementRoot
    from getpass import getpass
    from pprint import pprint
    
    hostname = 'my.f5.ltm.net'
    username = 'foo'
    
    mgmt = ManagmentRoot(hostname, username, getpass())
    
    pool = mgmt.tm.ltm.pools.pool.load(name='my_pool_name')
    poolstats = pool.stats.load()
    
    pprint(poolstats.raw)
    
    members = pool.members_s.get_collection()
    member0_stats = members[0].stats.load()
    
    pprint(member0_stats.raw)
    
    • Tim_Harber's avatar
      Tim_Harber
      Icon for Cirrus rankCirrus

      Thanks Jason. I am able to get stats the way you describe, but what I am trying to get is the actual connected clients connected to each pool member. For example from the CLI if I do a

       show sys connection cs-server-addr 10.69.67.92
      

      I get the following resuts:'

      Sys::Connections
      192.168.181.163:51952  10.69.67.92:443  10.69.67.15:4822  10.69.65.65:44301  tcp  3  (tmm: 10)  none
      192.168.181.160:62556  10.69.67.92:443  10.69.67.15:21454  10.69.65.64:44301  tcp  2  (tmm: 10)  none
      10.74.10.114:60012  10.69.67.92:443  10.69.67.15:4246  10.69.65.65:44301  tcp  11  (tmm: 11)  none
      192.168.181.162:57199  10.69.67.92:443  10.69.67.15:32841  10.69.65.63:44301  tcp  2  (tmm: 6)  none
      192.168.181.156:58295  10.69.67.92:443  10.69.67.15:57537  10.69.65.64:44301  tcp  1  (tmm: 1)  none
      10.69.53.175:52661  10.69.67.92:443  10.69.67.15:57967  10.69.65.63:44301  tcp  10  (tmm: 7)  none
      Total records returned: 6
      

      I am trying to get this same data using the API. I can get it via REST using Postman, but cannot figure out how to do it using Python.

    • Jason_Nance's avatar
      Jason_Nance
      Icon for Nimbostratus rankNimbostratus

      You're saying pool member but

      cs-server-addr
      is virtual server.

      If you want connections to the virtual server use:

      virtual = mgmt.tm.ltm.pools.pool.load(name='my_vs_name')
      vsstats = virtual.stats.load()
      

      If you want pool member stats they are in the

      member0_stats = members[0].stats.load()
      example above (you will need to iterate the pool members) -
      member0_stats.entries['serverside.curConns']
      .

      Here's a graphical breakdown of the various cs/ss arguments:

      https://worldtechit.com/view-delete-f5-load-balancer-active-connections/

    • Tim_Harber's avatar
      Tim_Harber
      Icon for Cirrus rankCirrus

      That example was a virtual IP, but was just the example IP I had in front on me. In reality I need this for both virtual servers and pool members.

       

      But in any case, when I use your example for pool members I get the output of the value of the number of connected clients instead of the list of client IP's connected to the pool member as I showed above. My results for that code give me:

       

      {'value': 5}

      What I need is the list of those 5 IP's that are currently connected to that pool member which I can get using the CLI command "show sys connection ss-server-addr x.x.x.x"

       

  • The stats are pulled from the pool or member itself. Try this for an example:

    !/usr/bin/env python3
    
    from f5.bigip import ManagementRoot
    from getpass import getpass
    from pprint import pprint
    
    hostname = 'my.f5.ltm.net'
    username = 'foo'
    
    mgmt = ManagmentRoot(hostname, username, getpass())
    
    pool = mgmt.tm.ltm.pools.pool.load(name='my_pool_name')
    poolstats = pool.stats.load()
    
    pprint(poolstats.raw)
    
    members = pool.members_s.get_collection()
    member0_stats = members[0].stats.load()
    
    pprint(member0_stats.raw)
    
    • Tim_Harber's avatar
      Tim_Harber
      Icon for Cirrus rankCirrus

      Thanks Jason. I am able to get stats the way you describe, but what I am trying to get is the actual connected clients connected to each pool member. For example from the CLI if I do a

       show sys connection cs-server-addr 10.69.67.92
      

      I get the following resuts:'

      Sys::Connections
      192.168.181.163:51952  10.69.67.92:443  10.69.67.15:4822  10.69.65.65:44301  tcp  3  (tmm: 10)  none
      192.168.181.160:62556  10.69.67.92:443  10.69.67.15:21454  10.69.65.64:44301  tcp  2  (tmm: 10)  none
      10.74.10.114:60012  10.69.67.92:443  10.69.67.15:4246  10.69.65.65:44301  tcp  11  (tmm: 11)  none
      192.168.181.162:57199  10.69.67.92:443  10.69.67.15:32841  10.69.65.63:44301  tcp  2  (tmm: 6)  none
      192.168.181.156:58295  10.69.67.92:443  10.69.67.15:57537  10.69.65.64:44301  tcp  1  (tmm: 1)  none
      10.69.53.175:52661  10.69.67.92:443  10.69.67.15:57967  10.69.65.63:44301  tcp  10  (tmm: 7)  none
      Total records returned: 6
      

      I am trying to get this same data using the API. I can get it via REST using Postman, but cannot figure out how to do it using Python.

    • Jason_Nance_333's avatar
      Jason_Nance_333
      Icon for Cirrus rankCirrus

      You're saying pool member but

      cs-server-addr

      is virtual server. 

      If you want connections to the virtual server use:

      virtual = mgmt.tm.ltm.pools.pool.load(name='my_vs_name')
      vsstats = virtual.stats.load()

      If you want pool member stats they are in the

      member0_stats = members[0].stats.load()

      example above (you will need to iterate the pool members) -

      member0_stats.entries['serverside.curConns']

      Here's a graphical breakdown of the various cs/ss arguments:

      https://wtit.com/view-delete-f5-load-balancer-active-connections/

    • Tim_Harber's avatar
      Tim_Harber
      Icon for Cirrus rankCirrus

      That example was a virtual IP, but was just the example IP I had in front on me. In reality I need this for both virtual servers and pool members.

       

      But in any case, when I use your example for pool members I get the output of the value of the number of connected clients instead of the list of client IP's connected to the pool member as I showed above. My results for that code give me:

       

      {'value': 5}

      What I need is the list of those 5 IP's that are currently connected to that pool member which I can get using the CLI command "show sys connection ss-server-addr x.x.x.x"