서버 요청 한도 모니터링
서버 요청 한도 모니터링 (Rate Limit Server Limits - Monitor)
Consul 기능 중 네트워크에서 발생하는 읽기 및 쓰기 요청 작업을 모니터링할 수 있게 해주는 기능을 설명하는 문서예요. 이를 통해 일반 워크로드를 이해하고 Consul 클라이언트 에이전트와 서비스가 Consul 서버에 만들 수 있는 요청 수에 대한 안전한 한도를 설정할 수 있어요.
출처: 문서
본문
이 주제는 네트워크에서 발생하는 읽기 및 쓰기 요청 작업을 모니터링할 수 있게 해주는 Consul 기능을 설명해요. 이 기능을 사용해 일반 워크로드를 이해하고 Consul 클라이언트 에이전트와 서비스가 Consul 서버에 할 수 있는 요청 수에 안전한 한도를 설정할 수 있어요.
rate limit 로그 접근 (Access rate limit logs)
Consul은 각 rate limit 요청에 대해 로그 줄을 출력해요. 이 로그는 요청의 출처와 구성된 한도를 식별하는 데 필요한 정보를 제공해요. Consul은 이 로그를 DEBUG 로그 레벨로 출력하며, 서버 상태에 영향을 주지 않기 위해 로그를 버릴(drop) 수 있어요. 로그 줄을 버리면 rpc.rate_limit.log_dropped 메트릭이 증가해요.
다음 예시 로그는 127.0.0.1:53562에서 KVS.Apply로 보낸 RPC 요청이 한도를 초과했음을 보여줘요:
2023-02-17T10:01:15.565-0500 [DEBUG] agent.server.rpc-rate-limit: RPC
exceeded allowed rate limit: rpc=KVS.Apply source_addr=127.0.0.1:53562
limit_type=global/write limit_enforced=false
로그 파일을 어디에서 가져오는지에 대한 정보는 log_file을 참고하세요.
rate limit 메트릭 검토 (Review rate limit metrics)
Consul은 rate limit과 관련된 다음 메트릭을 수집해요:
- 한도 유형 (Type of limit)
- 작업 (Operation)
- rate limit 모드 (Rate limit mode)
rate limit과 관련된 메트릭을 보려면 /agent/metrics API 엔드포인트를 호출해요. API 사용법은 메트릭 보기를 참고하세요. 다음 예시에서 Consul은 consul 서비스에 대한 호출이 한 번 초과했기 때문에 호출을 버렸어요:
$ curl http://127.0.0.1:8500/v1/agent/metrics
{
. . .
"Counters": [
{
"Name": "consul.rpc.rate_limit.exceeded",
"Count": 1,
"Sum": 1,
"Min": 1,
"Max": 1,
"Mean": 1,
"Stddev": 0,
"Labels": {
"service": "consul"
}
},
{
"Name": "consul.rpc.rate_limit.log_dropped",
"Count": 1,
"Sum": 1,
"Min": 1,
"Max": 1,
"Mean": 1,
"Stddev": 0,
"Labels": {}
}
],
. . .
}
추가 정보는 텔레메트리(Telemetry)를 참고하세요.
요청 거부 (Request denials)
rate limiting 이유로 HTTP 요청이 거부되면 Consul은 다음 오류 중 하나를 반환해요:
- 429 Resource Exhausted: 서버가 요청을 수행할 수 없지만 다른 서버가 잠재적으로 이를 충족할 수 있음을 나타내요. 이 오류는 어떤 서버든 stale read 요청을 충족할 수 있기 때문에 stale read에서 가장 흔해요. 이 유형의 오류를 해결하려면 다른 서버로 요청을 즉시 재시도할 것을 권장해요. 요청이 Consul 클라이언트 에이전트에서 온 것이라면 에이전트는
rpc_hold_timeout구성에 설정된 한도까지 요청을 자동으로 재시도해요. - 503 Service Unavailable: 서버가 요청을 수행할 수 없고 다른 서버도 요청을 충족할 수 없음을 나타내요. 이는 보통 일관된 읽기(consistent reads)나 쓰기에서 발생해요. 이 경우 지수 백오프(backoff) 일정에 따라 재시도할 것을 권장해요. 요청이 Consul 클라이언트 에이전트에서 온 것이라면 에이전트는
rpc_hold_timeout구성에 따라 요청을 자동으로 재시도해요.
추가 정보는 서버의 rate limit 도달을 참고하세요.