단일 저장소 성능 측정 메트릭
다음 메트릭은 당신의 단일 저장소의 서버 측 성능을 측정하는 데 사용될 수 있습니다. 이러한 메트릭은 단일 저장소 성능에 한정되지 않으며 Gitaly 성능을 측정하는 보다 일반적인 메트릭이지만, 단일 저장소를 실행할 때 특히 관련이 있습니다.
복제 및 가져오기
가장 빈번한 비용이 많이 드는 작업은 복제 및 가져오기입니다. 시스템 자원의 백분율로 볼 때, 이러한 작업들은 종종 Gitaly 노드의 시스템 자원의 90% 이상을 차지합니다. 유용한 신호를 제공할 수 있는 로그 및 메트릭은 다음과 같습니다.
CPU 및 메모리
복제/가져오기를 처리하는 주요 RPC는 두 가지가 있습니다. 다음은 주어진 저장소에 의해 복제/가져오기 작업이 얼마나 많은 시스템 자원을 사용하는지 검사하는 데 사용될 수 있는 로그 항목입니다.
다음은 Gitaly 로그의 로그 항목 필드들이며, 여기에서 필터링할 수 있는 값들입니다:
로그 필드 | 필터링할 값 | 이유 |
---|---|---|
json.grpc.method
| PostReceivePack
| 이것은 HTTP 복제/가져오기를 처리하는 RPC입니다 |
json.grpc.method
| SSHReceivePack | 이것은 SSH 복제/가져오기를 처리하는 RPC입니다 |
json.grpc.code
| OK | RPC가 성공적으로 요청을 처리했음을 나타냅니다 |
json.grpc.code
| Canceled | 종종 클라이언트가 연결을 종료했음을 나타내며, 보통은 어떤 종류의 타임아웃 때문입니다 |
json.grpc.code
| ResourceExhausted | 기계에서 동시에 너무 많은 Git 프로세스들이 생성되고 있음을 나타냅니다 |
json.user_id
| 클론/가져오기를 시작한 user_id . 예: user-22345
| 기계에서 동시에 너무 많은 Git 프로세스들이 생성되고 있음을 나타냅니다 |
json.username
| 클론/가져오기를 시작한 사용자 이름. 예: ilovecoding
| 주어진 사용자에 의한 너무 많은 복제 작업을 찾는 데 도움이 됩니다 |
json.grpc.request.glRepository
| 특정 저장소. project-<project_id> 형식입니다. 예: project-214
| 주어진 저장소에 대한 복제/가져오기가 얼마나 많은지 확인하기 위함입니다 |
json.grpc.request.glProjectPath
| 특정 저장소. 프로젝트 경로 형식입니다. 예: my-org/coolproject
| 주어진 저장소에 대한 복제/가져오기가 얼마나 많은지 확인하기 위함입니다 |
다음은 CPU 및 메모리에 대한 유용한 정보를 제공하는 로그 항목 필드입니다:
검사할 로그 필드 | 의미 |
---|---|
json.command.cpu_time_ms
| 이 RPC가 생성한 서브프로세스에서 사용한 CPU 시간은 얼마나 되는가 |
json.command.maxrss
| 이 RPC가 생성한 서브프로세스에서 사용된 메모리의 양은 어떻게 되는가 |
예시 로그 메시지:
{
"command.count":2,
"command.cpu_time_ms":420,
"command.inblock":0,
"command.majflt":0,
"command.maxrss":3342152,
"command.minflt":24316,
"command.oublock":56,
"command.real_time_ms":626,
"command.spawn_token_fork_ms":4,
"command.spawn_token_wait_ms":0,
"command.system_time_ms":172,
"command.user_time_ms":248,
"component":"gitaly.StreamServerInterceptor",
"correlation_id":"20HCB3DAEPLV08UGNIYT9HJ4JW",
"environment":"gprd",
"feature_flags":"",
"fqdn":"file-99-stor-gprd.c.gitlab-production.internal",
"grpc.code":"OK",
"grpc.meta.auth_version":"v2",
"grpc.meta.client_name":"gitlab-workhorse",
"grpc.meta.deadline_type":"none",
"grpc.meta.method_operation":"mutator",
"grpc.meta.method_scope":"repository",
"grpc.meta.method_type":"bidi_stream",
"grpc.method":"PostReceivePack",
"grpc.request.fullMethod":"/gitaly.SmartHTTPService/PostReceivePack",
"grpc.request.glProjectPath":"r2414/revenir/development/machinelearning/protein-ddg",
"grpc.request.glRepository":"project-47506374",
"grpc.request.payload_bytes":911,
"grpc.request.repoPath":"@hashed/db/ab/dbabf83f57affedc9a001dc6c6f6b47bb431bd47d7254edd1daf24f0c38793a9.git",
"grpc.request.repoStorage":"nfs-file99",
"grpc.response.payload_bytes":54
"grpc.service":"gitaly.SmartHTTPService",
"grpc.start_time":"2023-10-16T20:40:08.836",
"grpc.time_ms":631.486,
"hostname":"file-99-stor-gprd",
"level":"info",
"msg":"finished streaming call with code OK",
"pid":1741362,
"remote_ip":"108.163.136.48",
"shard":"default",
"span.kind":"server",
"stage":"main",
"system":"grpc",
"tag":"gitaly",
"tier":"stor",
"time":"2023-10-16T20:40:09.467Z",
"trace.traceid":"AAB3QAeD8G+H9VNmzOi2CztMAcJv1+g4+l1cAgA=",
"type":"gitaly",
"user_id":"user-14857500",
"username":"ctx_ckottke",
}
읽기 분포
gitaly_praefect_read_distribution
프로메테우스 메트릭은 카운터이며, 어떤 Gitaly 노드로 얼마나 많은 읽기가 발생했는지를 나타냅니다. 이 메트릭에는 두 개의 벡터가 있습니다:
메트릭 이름 | 벡터 | 설명 |
---|---|---|
gitaly_praefect_read_distribution
| 가상 저장소
| 가상 저장소 이름 |
gitaly_praefect_read_distribution
| 저장소
| Gitaly 저장소 이름 |
팩 오브젝트 캐시
팩 오브젝트 캐시는 로그뿐만 아니라 프로메테우스 메트릭을 통해 관찰할 수 있습니다.
로그 필드 이름 | 설명 |
---|---|
pack_objects_cache.hit
| 현재 팩 오브젝트 캐시가 명중되었는지를 나타냅니다 (true 또는 false )
|
pack_objects_cache.key
| 팩 오브젝트 캐시에 사용된 캐시 키 |
pack_objects_cache.generated_bytes
| 작성 중인 새 캐시의 크기(바이트) |
pack_objects_cache.served_bytes
| 제공된 캐시의 크기(바이트) |
pack_objects.compression_statistics
| 팩 오브젝트 생성에 대한 통계 |
pack_objects.enumerate_objects_ms
| 클라이언트가 보낸 오브젝트를 나열하는 데 소요된 총 시간(밀리초) |
pack_objects.prepare_pack_ms
| 클라이언트에게 다시 보내기 전에 팩 파일을 준비하는 데 소요된 총 시간(밀리초) |
pack_objects.write_pack_file_ms
| 클라이언트에게 팩 파일을 다시 보내는 데 소요된 총 시간(밀리초). 클라이언트의 인터넷 연결 상태에 크게 의존합니다 |
pack_objects.written_object_count
| Gitaly가 클라이언트에게 다시 보낸 총 오브젝트 수 |
예시 로그 메시지:
{
"bytes":26186490,
"correlation_id":"01F1MY8JXC3FZN14JBG1H42G9F",
"grpc.meta.deadline_type":"none",
"grpc.method":"PackObjectsHook",
"grpc.request.fullMethod":"/gitaly.HookService/PackObjectsHook",
"grpc.request.glProjectPath":"root/gitlab-workhorse",
"grpc.request.glRepository":"project-2",
"grpc.request.repoPath":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git",
"grpc.request.repoStorage":"default",
"grpc.request.topLevelGroup":"@hashed",
"grpc.service":"gitaly.HookService",
"grpc.start_time":"2021-03-25T14:57:52.747Z",
"level":"info",
"msg":"finished unary call with code OK",
"peer.address":"@",
"pid":20961,
"span.kind":"server",
"system":"grpc",
"time":"2021-03-25T14:57:53.543Z",
"pack_objects.compression_statistics": "Total 145991 (delta 68), reused 6 (delta 2), pack-reused 145911",
"pack_objects.enumerate_objects_ms": 170,
"pack_objects.prepare_pack_ms": 7,
"pack_objects.write_pack_file_ms": 786,
"pack_objects.written_object_count": 145991,
"pack_objects_cache.generated_bytes": 49533030,
"pack_objects_cache.hit": "false",
"pack_objects_cache.key": "123456789",
"pack_objects_cache.served_bytes": 49533030,
"peer.address": "127.0.0.1",
"pid": 8813,
}
프로메테우스 메트릭 이름 | 벡터 | 설명 |
---|---|---|
gitaly_pack_objects_served_bytes_total
| 제공된 캐시의 크기(바이트) | |
gitaly_pack_objects_cache_lookups_total
| result
| 캐시 조회가 캐시 명중 또는 미스로 끝났는지 나타내는 hit 또는 miss
|