#!/usr/bin/python
# -*- coding: UTF-8 -*-
#===========================================================#
#该脚本根据匹配到的Deployment进入到每个Pod下面抓取Nginx的QPS
#zabbixServer端可以获取到值
#主要用于zabbix获取kubernetes中pod的qps
#===========================================================#
import os,commands,time,sys,re
#定义命名空间
namespace="apm"
#获取输入值,这里是监控的域名,输入域名
host=str(sys.argv[1])
if host == "m":
deployment="ywf-html5-nginx-online"
else:
deployment="ywf-"+host+"-nginx-online"
#该命令解决zabbix无法调用kubernetes命令问题
base_command = "export KUBECONFIG=/var/lib/zabbix/.kube/config > /dev/null && kubectl config get-contexts > /dev/null && kubectl config use-context cls-f5kd5v85-context-default > /dev/null && "
#匹配Deploymen下面对应的POD
get_pod_command = base_command + "kubectl get pods -n " + namespace +"|grep ^" + deployment + "|awk {'print $1'} "
get_pod_str = commands.getstatusoutput(get_pod_command)[1]
def get_nginx_qps(get_pod_str,namespace,host):
#用来存储多台POD的qps总数和
num = 0
get_pods = get_pod_str.split("\n")
for pod in get_pods:
#进入到容器获取qps
get_qps_command = base_command + "kubectl exec -it -n " + namespace +" "+ pod + " -c " + deployment +" -- curl http://"+host+".test.com/nginx_status| awk NR==3 | awk '{print $3}'"
#exit()
get_qps1 = commands.getstatusoutput(get_qps_command)[1]
get_qps = int(get_qps1.split("\n")[-1])
num = num + get_qps
return num
#进行5s统计之后计算平均值
num_first = get_nginx_qps(get_pod_str,namespace,host)
time.sleep(5)
num_second = get_nginx_qps(get_pod_str,namespace,host)
qps =int(num_second - num_first)/5
print(qps)