ZBLOG

编写python脚本监控F5的指标,包括cpu,内存,流量,连接数,并按照Prometheus Metrics 标准格式输出

下面是一个使用 Python 脚本监控 F5 指标,并输出 Prometheus Metrics 标准格式的示例代码:

  1. import paramiko
  2. from io import StringIO
  3. # 设置F5 IP地址和用户名密码
  4. F5_IP = '192.168.1.1'
  5. F5_USER = 'admin'
  6. F5_PASS = 'password'
  7. # 建立SSH连接到F5设备
  8. ssh_client = paramiko.SSHClient()
  9. ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  10. ssh_client.connect(F5_IP, username=F5_USER, password=F5_PASS)
  11. # 获取CPU使用率
  12. stdin, stdout, stderr = ssh_client.exec_command('tmsh show sys cpu | grep "System:" | awk \'{print $2}\'')
  13. cpu_usage = float(stdout.read().decode('utf-8').strip())
  14. # 获取内存使用率
  15. stdin, stdout, stderr = ssh_client.exec_command('tmsh show sys memory | grep "Memory usage" | awk \'{print $3}\'')
  16. mem_usage = float(stdout.read().decode('utf-8').strip())
  17. # 获取流量数据
  18. stdin, stdout, stderr = ssh_client.exec_command(
  19. 'tmsh show net interface all-properties | egrep "Net::Interface|ifInOctets|ifOutOctets" | awk \'{print $2,$3}\'')
  20. traffic_stats = [line.strip().split() for line in stdout.readlines()]
  21. in_bytes = sum([float(stat[1]) for stat in traffic_stats if stat[0].startswith('Net::Interface')])
  22. out_bytes = sum([float(stat[2]) for stat in traffic_stats if stat[0].startswith('Net::Interface')])
  23. # 获取连接数信息
  24. stdin, stdout, stderr = ssh_client.exec_command('tmsh show ltm virtual detail | egrep "Virtual server|Current connections"')
  25. connection_stats = [line.strip().split(':')[-1].strip() for line in stdout.readlines()]
  26. current_connections = int(connection_stats[0])
  27. virtual_server_count = len([line for line in connection_stats if line.startswith('Virtual server')])
  28. # 关闭SSH连接
  29. ssh_client.close()
  30. # 输出Prometheus Metrics格式的指标数据
  31. output = StringIO()
  32. output.write('# HELP f5_cpu_usage CPU usage on F5 device\n')
  33. output.write('# TYPE f5_cpu_usage gauge\n')
  34. output.write(f'f5_cpu_usage{{{F5_IP}}} {cpu_usage}\n')
  35. output.write('# HELP f5_mem_usage Memory usage on F5 device\n')
  36. output.write('# TYPE f5_mem_usage gauge\n')
  37. output.write(f'f5_mem_usage{{{F5_IP}}} {mem_usage}\n')
  38. output.write('# HELP f5_in_bytes Inbound traffic on F5 device in bytes\n')
  39. output.write('# TYPE f5_in_bytes counter\n')
  40. output.write(f'f5_in_bytes{{{F5_IP}}} {in_bytes}\n')
  41. output.write('# HELP f5_out_bytes Outbound traffic on F5 device in bytes\n')
  42. output.write('# TYPE f5_out_bytes counter\n')
  43. output.write(f'f5_out_bytes{{{F5_IP}}} {out_bytes}\n')
  44. output.write('# HELP f_count_of_virtual_servers Total number of virtual servers configured \n ')
  45. output.write('# TYPE count_of_virtual_servers gauge \n ')
  46. ouput.writeline(f"f_count_of_virtual_servers{{$F8_IP}} {virtual_server_count} ")
  47. print(output.getvalue())

该脚本通过 Paramiko 模块建立 SSH 连接到 F5 设备,执行命令获取指标数据,并使用 StringIO 将输出写入字符串缓冲区中,最后通过 print() 函数输出字符串缓冲区中的内容。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=4068

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?