이 가이드에서는 지정된 필터 조건을 충족하는 가상 머신(VM)에서 실행되는 프로세스 수를 집계하는 방법을 설명합니다. Cloud Monitoring API 또는 Google Cloud Console을 사용하여 프로세스 수를 집계하는 알림 정책 및 차트를 만들 수 있습니다.
특정 프로세스의 CPU 사용률을 확인하려는 경우와 같이 실행 중인 프로세스에 대한 정보를 확인하려면 프로세스 측정항목을 참조하세요.
프로세스 수를 집계하는 데 사용되는 모니터링 필터의 구조는 이러한 필터를 사용하여 모니터링 리소스 또는 측정항목 유형을 지정할 때 사용되는 구조와 유사합니다. 일반적인 정보는 모니터링 필터를 참조하세요.
시작하기 전에
측정항목, 시계열, 모니터링 리소스에 익숙하지 않은 경우 측정항목, 시계열, 리소스를 참조하세요.
계산되는 프로세스
Monitoring에서는 프로세스를 호출한 명령줄에 정규 표현식을 적용하여 프로세스 수를 집계합니다. 프로세스에 사용 가능한 명령줄 필드가 없으면 프로세스 수가 집계되지 않습니다.
프로세스를 계산할 수 있는지 확인하는 방법 중 하나는 Linux ps
명령어의 출력을 보는 것입니다.
ps aux | grep nfs
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1598 0.0 0.0 0 0 ? S< Oct25 0:00 [nfsd4]
root 1639 0.0 0.0 0 0 ? S Oct25 2:33 [nfsd]
root 1640 0.0 0.0 0 0 ? S Oct25 2:36 [nfsd]
COMMAND
열의 항목이 대괄호로 래핑된 경우(예: [nfsd]
) 프로세스의 명령줄 정보를 사용할 수 없으므로 프로세스가 계산되지 않습니다.
프로세스 상태 필터 구조
프로세스 상태 필터는 계산할 프로세스와 프로세스를 계산할 리소스 하나 이상을 식별합니다. 예를 들어 다음 JSON은 Compute Engine VM 인스턴스의 프로세스 수가 30개 미만인 경우에 알림을 보내는 알림 정책을 설명합니다.
{ "displayName": "Count all processes", "conditionThreshold": { "aggregations": [], "comparison": "COMPARISON_LT", "duration": "0s", "filter": "select_process_count(\"*\") resource.type=\"gce_instance\"", "thresholdValue": 30, "trigger": { "count": 1 } } }
이 예시에서 filter
문의 값은 2개의 절로 이루어진 문자열입니다. 첫 번째 절인 select_process_count(\"*\")
는 모든 프로세스가 집계되도록 지정합니다. 두 번째 절인 resource.type=\"gce_instance\"
에서는 Compute Engine VM을 모니터링할 것을 식별합니다.
Google Cloud 콘솔을 사용하는 경우 직접 필터 모드를 사용하여 Monitoring 필터 값을 입력합니다. 단, 하위 문자열을 보호하는 이스케이프는 삭제해야 합니다. 예를 들어 Compute Engine VM의 모든 프로세스 수를 집계하려면 다음을 입력합니다.
select_process_count("*") resource.type="gce_instance"
측정항목 탐색기를 사용하거나 대시보드에서 알림 정책 또는 차트를 만들 때 직접 필터 모드에 액세스하는 방법은 다음 문서를 참조하세요.
리소스 식별자
프로세스 상태 필터는 resource.type
필드를 설정하여 프로세스가 계산되는 VM을 지정해야 합니다. 이 필터 값은 다음 중 하나여야 합니다.
gce_instance
aws_ec2_instance
resource.type
필드만 지정하면 모든 VM의 프로세스 수가 집계됩니다.
- 단일 VM 인스턴스를 선택하려면
metric.labels.instance_name
필터 객체를 추가합니다. - VM 그룹을 선택하려면
group.id
필터 객체를 추가합니다.
resource.type
필드에 대한 자세한 내용은 모니터링 필터를 참조하세요.
프로세스 식별자
프로세스 상태 필터에서 select_process_count
함수를 호출해야 합니다.
이 함수의 인수는 계산할 프로세스를 식별합니다.
select_process_count
호출에서 지정할 수 있는 3개의 필터 객체는 다음과 같습니다.
command_line
(또는metric.labels.command_line
): 이 필터는 프로세스를 시작하는 데 사용되는 명령줄에 적용됩니다. 명령줄은 1,024자 이후부터 잘리므로 이 한도를 초과하는 명령줄의 텍스트는 대조할 수 없습니다.command
(또는metric.labels.command
): 이 필터는 프로세스를 시작하는 데 사용되는 명령줄에 적용됩니다. 명령줄은 1,024자 이후부터 잘리므로 이 한도를 초과하는 명령어의 텍스트는 대조할 수 없습니다.user
(또는metric.labels.user
): 이 필터는 프로세스를 시작한 사용자에게 적용됩니다.
select_process_count
호출에서 위치 인수나 이름이 지정된 인수를 사용할 수 있습니다. 이름이 지정된 인수를 사용하는 경우 필터 객체, 등호 문, =
, 값을 지정해야 합니다. 위치 인수를 사용하는 경우 값만 지정합니다.
대소문자를 구분하는 문자열 테스트에서 프로세스가 필터와 일치하는지 여부를 결정합니다.
필터 객체 값은 다음 중 하나일 수 있습니다.
- (정확히 일치하는) 문자열
*
(와일드 카드)has_substring(string)
starts_with(string)
ends_with(string)
monitoring.regex.full_match(string)
필터를 여러 개 지정하면 다음 규칙이 적용됩니다.
command_line
은 논리합에 의해command
에 조인됩니다. 두 필터 중 하나와 일치하면 프로세스가 집계됩니다.user
는 논리곱에 의해command_line
(command
)에 조인됩니다.user
필터 및command_line
(command
) 필터와 일치하는 경우에만 프로세스가 일치합니다.- 모든 필터를 적용하면
user
필터와 일치하고command_line
또는command
필터와 일치할 때 프로세스가 집계됩니다.
이름이 지정된 인수
이름이 지정된 인수를 사용하려면 필터 이름, 등호 문, =
, 필터 값을 차례로 지정합니다. 순서에 관계없이 이름이 지정된 인수를 지정할 수 있습니다.
예를 들어 다음은 명령줄에 문자열 nginx
가 포함된 경우 루트에서 시작된 모든 프로세스와 일치합니다.
select_process_count("command_line=has_substring(\"nginx\")","user=root")
이 예시에서는 명령줄에 정규 표현식 일치를 사용합니다.
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
이 예시에서는 명령줄이 /bin/bash
인 모든 프로세스를 집계합니다.
select_process_count("command=/bin/bash")
이 예시는 명령줄이 /bin/bash
로 시작하는 사용자 www
가 시작한 모든 프로세스를 집계합니다.
select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")
위치 인수
위치 인수를 사용하려면 필터 값만 제공합니다. 위치 인수에 다음 규칙이 적용됩니다.
- 단일 인수를 제공하면 해당 인수가 명령줄 필터 객체로 해석됩니다.
select_process_count("*") select_process_count("/sbin/init") select_process_count("starts_with(\"/bin/bash -c\")") select_process_count("ends_with(\"--alsologtostderr\")") select_process_count("monitoring.regex.full_match(\".*nginx.*\")")
- 인수를 2개 제공하면 첫 번째 인수가 명령줄 필터로 해석되고 두 번째 인수가 사용자 필터입니다. 두 필터 객체와 일치하면 프로세스가 집계됩니다.
select_process_count("/sbin/init", "root")