在Kubernetes中,REST API服务器(apiserver)公开了许多内部指标,以便管理员和开发人员可以监控其性能和健康状况。其中包括rest_client_requests_total和apiserver_request_total两个指标,它们的区别如下:
以下是Python中使用prometheus-client库获取rest_client_requests_total和apiserver_request_total指标的代码示例:
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
from kubernetes import client, config
from kubernetes.client.rest import ApiException
import time
config.load_kube_config()
v1 = client.CoreV1Api()
apiserver_url = v1.api_client.configuration.host
registry = CollectorRegistry()
rest_client_requests = Gauge(
'rest_client_requests_total',
'Number of client requests to the Kubernetes API server',
['method', 'resource'],
registry=registry,
)
apiserver_requests = Gauge(
'apiserver_request_total',
'Total number of requests processed by the Kubernetes API server',
registry=registry,
)
while True:
try:
# 获取rest_client_requests_total指标
rest_client_request_metrics = v1.list_resource_quota()
for item in rest_client_request_metrics.items:
rest_client_requests.labels('GET', 'ResourceQuota').inc()
# 获取apiserver_request_total指标
response = v1.list_node()
apiserver_requests.inc()
time.sleep(30) # 每隔30秒收集一次指标
except ApiException as e:
print("Exception when calling CoreV1Api->list_node: %s\n" % e)
# 推送到Prometheus
push_to_gateway(apiserver_url, job='apiserver_monitor', registry=registry)