통합
GitLab은 웹훅 수신기를 통해 모든 소스에서 경고를 수락할 수 있습니다. 알림 통지는 근무 교대를 위한 호출을 트리거하거나 사건을 만들기 위해 사용될 수 있습니다.
통합 목록
유지자 역할이 최소한 하나 있으면 프로젝트의 사이드바 메뉴에서 Settings > Monitor로 이동하여 구성된 알림 통합 목록을 볼 수 있습니다. 목록에는 통합 이름, 유형 및 상태(활성화 또는 비활성화)이 표시됩니다.
구성
GitLab은 구성한 HTTP 엔드포인트를 통해 경보를 받을 수 있습니다.
단일 HTTP 엔드포인트
GitLab 프로젝트에서 HTTP 엔드포인트를 활성화하면 JSON 형식의 경보 페이로드를 수신할 수 있습니다. 항상 페이로드를 사용자 정의할 수 있습니다.
- 프로젝트의 유지자 역할을 가진 사용자로 GitLab에 로그인합니다.
- 프로젝트에서 Settings > Monitor로 이동합니다.
- Alerts 섹션을 확장하고 Select integration type 드롭다운 목록에서 HTTP Endpoint를 선택합니다.
- Active 경보 설정을 토글합니다. 웹훅 구성을 저장한 후 View credentials 탭에서 URL 및 인증 키를 확인할 수 있습니다. 또한 외부 서비스에 URL 및 인증 키를 입력해야 합니다.
HTTP 엔드포인트
GitLab Premium에서는 JSON 형식의 어떤 외부 소스에서든 경고를 받을 수 있도록 고유한 여러 개의 HTTP 엔드포인트를 생성할 수 있습니다. 또한 페이로드를 사용자 정의할 수 있습니다.
- 프로젝트의 유지자 역할을 가진 사용자로 GitLab에 로그인합니다.
- 프로젝트에서 Settings > Monitor로 이동합니다.
- Alerts 섹션을 확장합니다.
-
생성하려는 각 엔드포인트에 대해:
- Add new integration을 선택합니다.
- Select integration type 드롭다운 목록에서 HTTP Endpoint를 선택합니다.
- 통합에 이름을 지정합니다.
- Active 경보 설정을 토글합니다. 웹훅 구성을 저장한 후 View credentials 탭에서 URL 및 Authorization Key를 확인할 수 있습니다. 또한 외부 서비스에 URL 및 인증 키를 입력해야 합니다.
-
선택 사항. 감시 도구의 경보를 GitLab 필드에 매핑하려면 샘플 페이로드를 입력하고 Parse payload for custom mapping을 선택합니다. 유효한 JSON이 필요합니다. 샘플 페이로드를 업데이트하는 경우 필드도 다시 매핑해야 합니다.
- 선택 사항. 유효한 샘플 페이로드를 제공한 경우 Payload alert key에서 각 값을 GitLab alert key에 매핑할 수 있습니다.
- 통합을 저장하려면 Save Integration을 선택합니다. 원하는 경우 통합이 생성된 후 통합의 Send test alert 탭에서 테스트 경보를 보낼 수 있습니다.
새로운 HTTP 엔드포인트는 통합 목록에 표시됩니다. 통합은 통합 목록 오른쪽에 있는 설정 아이콘을 선택하여 편집할 수 있습니다.
사용자 정의 경보 페이로드 매핑
귀하의 모니터링 도구의 경보 형식을 GitLab 경보와 통합할 수 있습니다. HTTP 엔드포인트를 생성할 때 경보 필드를 GitLab 필드에 매핑하여 경보 목록 및 경보 상세 페이지에 올바른 정보가 표시되도록 할 수 있습니다:
GitLab 외에서 경보 페이로드 사용자 정의
사용자 지정 매핑 없는 HTTP 엔드포인트에서 다음 매개변수를 보내어 페이로드를 사용자 정의할 수 있습니다. 모든 필드는 선택 사항입니다. 수신된 경보에 Title
필드의 값이 포함되어 있지 않은 경우, 기본값인 New: Alert
가 적용됩니다.
속성 | 유형 | 설명 |
---|---|---|
title
| 문자열 | 경보 제목입니다. |
description
| 문자열 | 문제의 간략한 요약. |
start_time
| 날짜시간 | 경보 시간입니다. 제공되지 않은 경우 현재 시간이 사용됩니다. |
end_time
| 날짜시간 | 경보의 해결 시간. 제공된 경우 경보가 해결됩니다. |
service
| 문자열 | 영향을 받는 서비스입니다. |
monitoring_tool
| 문자열 | 연관된 모니터링 도구의 이름입니다. |
hosts
| 문자열 또는 배열 | 문제가 발생한 하나 이상의 호스트. |
severity
| 문자열 | 경보의 심각도입니다. 대소문자를 구분하지 않습니다. critical , high , medium , low , info , unknown 중 하나일 수 있습니다. 누락되었거나 이 목록에 값이 없는 경우 critical 로 기본 설정됩니다.
|
fingerprint
| 문자열 또는 배열 | 경보의 고유 식별자입니다. 동일한 경보의 발생을 그룹화하는 데 사용될 수 있습니다. generic_alert_fingerprinting 기능이 활성화된 경우, 페이로드를 기반으로한 자동적 생성된 fingerprint가 사용됩니다(start_time , end_time , hosts 매개변수는 제외됨).
|
gitlab_environment_name
| 문자열 | GitLab 환경의 이름입니다. 대시보드에 프로젝트를 추가하려면 필수입니다. |
경보의 페이로드에 사용자 정의 필드도 추가할 수 있습니다. 추가 매개변수의 값은 원시 유형(문자열 또는 숫자 등)으로만 제한되지 않고 중첩된 JSON 객체일 수도 있습니다. 예를 들어:
{ "foo": { "bar": { "baz": 42 } } }
참고: 귀하의 요청이 payload application limits보다 작아야 합니다.
예시 요청 본문
예시 payload:
{
"title": "사건 제목",
"description": "사건에 대한 간단한 설명",
"start_time": "2019-09-12T06:00:55Z",
"service": "영향을 받은 서비스",
"monitoring_tool": "value",
"hosts": "value",
"severity": "높음",
"fingerprint": "d19381d4e8ebca87b55cda6e8eee7385",
"foo": {
"bar": {
"baz": 42
}
}
}
프로메테우스 엔드포인트
전제 조건:
- 프로젝트에 대한 최소한의 Maintainer 권한이 있어야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 모니터를 선택합니다.
- 알림 섹션을 확장하고 새 통합 추가를 선택합니다.
- 통합 유형 선택 드롭다운 목록에서 프로메테우스를 선택합니다.
- Active 토글을 켭니다.
- 프로메테우스 API 기본 URL을 입력하세요. 이 필드를 사용하는 기능은 폐기 예정이며 GitLab 16.0에서 제거 예정입니다.
- 통합 저장을 선택합니다.
웹훅 구성에 대한 URL 및 인증 키 View credentials 탭에서 확인할 수 있습니다.
외부 서비스에 URL과 인증 키를 입력하세요. 또한 통합의 테스트 알림 보내기 탭에서 테스트 알림을 보낼 수 있습니다.
프로메테우스 Alertmanager에 통합 자격 증명 추가
프로메테우스 알림을 GitLab으로 보내려면 프로메테우스 통합에서 URL과 인증 키를 복사하여
프로메테우스 Alertmanager 구성의 webhook_configs
섹션에 붙여넣으세요:
receivers:
- name: gitlab
webhook_configs:
- http_config:
authorization:
type: Bearer
credentials: 1234567890abdcdefg
send_resolved: true
url: http://IP_ADDRESS:PORT/root/manual_prometheus/prometheus/alerts/notify.json
# 나머지 구성은 생략
# ...
예상 요청 속성
알림은 프로메테우스 웹훅 수신기에 맞게 포맷팅되어야 합니다.
최상위 필수 속성:
alerts
commonAnnotations
commonLabels
externalURL
groupKey
groupLabels
receiver
status
version
프로메테우스 payload의 alerts
에서, 배열의 각 항목에 대해 GitLab 알림이 생성됩니다.
아래에 나열된 중첩 파라미터를 수정하여 GitLab 알림을 구성할 수 있습니다.
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
annotations/title , annotations/summary 또는 labels/alertname 중 하나
| 문자열 | 예 | 알림의 제목. |
startsAt
| 날짜/시간 | 예 | 알림의 시작 시간. |
annotations/description
| 문자열 | 아니요 | 문제에 대한 고수준 요약. |
annotations/gitlab_incident_markdown
| 문자열 | 아니요 | GitLab Flavored Markdown로서 알림에서 생성된 이슈에 추가할 수 있습니다. |
annotations/runbook
| 문자열 | 아니요 | 이 알림을 관리하는 방법에 대한 문서 또는 지침에 대한 링크. |
endsAt
| 날짜/시간 | 아니요 | 알림의 해결 시간. |
g0.expr generatorUrl 에서 query 파라미터
| 문자열 | 아니요 | 관련 메트릭의 쿼리. |
labels/gitlab_environment_name
| 문자열 | 아니요 | 연관된 GitLab 환경의 이름. 대시보드에 알림 표시를 위해 필요합니다. |
labels/severity
| 문자열 | 아니요 | 알림 심각도. Prometheus 심각도 옵션 중 하나여야 합니다. 누락되거나 이 목록에 없는 경우 critical 로 기본 설정됩니다.
|
status
| 문자열 | 아니요 | 프로메테우스의 알림 상태. 값이 ‘resolved’라면 알림이 해결됨을 의미합니다. |
annotations/gitlab_y_label , annotations/title , annotations/summary , 또는 labels/alertname 중 하나
| 문자열 | 아니요 | GitLab Flavored Markdown에서 이 알림의 메트릭에 임베드될 때 사용할 Y-축 라벨. |
annotations
하위에 포함된 추가 속성은 알림 상세 페이지에서 확인할 수 있습니다.
다른 어떤 속성도 무시됩니다.
속성은 원시 유형(문자열 또는 숫자 등)에만 국한되지 않고 중첩된 JSON 객체일 수도 있습니다. 예를 들어:
{
"target": {
"user": {
"id": 42
}
}
}
참고: 요청이 페이로드 애플리케이션 한도보다 작은지 확인하십시오.
프로메테우스 심각도 옵션
프로메테우스의 알림은 알림 심각도에 대해 대소문자를 구분하지 않는 다음과 같은 값 중 하나를 제공할 수 있습니다:
-
Critical:
critical
,s1
,p1
,emergency
,fatal
-
High:
high
,s2
,p2
,major
,page
-
Medium:
medium
,s3
,p3
,error
,alert
-
Low:
low
,s4
,p4
,warn
,warning
-
Info:
info
,s5
,p5
,debug
,information
,notice
값이 누락되었거나 이 목록에 없는 경우 심각도는 기본으로 critical
로 설정됩니다.
Prometheus 경보 예시
경보 규칙 예시:
groups:
- name: example
rules:
- alert: ServiceDown
expr: up == 0
for: 5m
labels:
severity: high
annotations:
title: "예시 제목"
runbook: "http://example.com/my-alert-runbook"
description: "서비스가 5분 이상 다운되었습니다."
gitlab_y_label: "y-축 라벨"
foo:
bar:
baz: 42
요청 Payload 예시:
{
"version": "4",
"groupKey": null,
"status": "firing",
"receiver": "",
"groupLabels": {},
"commonLabels": {},
"commonAnnotations": {},
"externalURL": "",
"alerts": [
{
"startsAt": "2022-010-30T11:22:40Z",
"generatorURL": "http://host?g0.expr=up",
"endsAt": null,
"status": "firing",
"labels": {
"gitlab_environment_name": "production",
"severity": "high"
},
"annotations": {
"title": "예시 제목",
"runbook": "http://example.com/my-alert-runbook",
"description": "서비스가 5분 이상 다운되었습니다.",
"gitlab_y_label": "y-축 라벨",
"foo": {
"bar": {
"baz": 42
}
}
}
}
]
}
권한 부여
다음 권한 부여 방법을 허용합니다:
- Bearer 인증 헤더
- 기본 인증
<authorization_key>
및 <url>
값은 경보 통합을 구성할 때 찾을 수 있습니다.
Bearer 인증 헤더
인증 키는 Bearer 토큰으로 사용할 수 있습니다:
curl --request POST \
--data '{"title": "사건 제목"}' \
--header "Authorization: Bearer <authorization_key>" \
--header "Content-Type: application/json" \
<url>
기본 인증
인증 키는 password
로 사용할 수 있습니다. username
은 비워둡니다:
- username:
<blank>
- password:
<authorization_key>
curl --request POST \
--data '{"title": "사건 제목"}' \
--header "Authorization: Basic <base_64_encoded_credentials>" \
--header "Content-Type: application/json" \
<url>
기본 인증은 URL에 직접 자격 증명을 사용할 수도 있습니다:
curl --request POST \
--data '{"title": "사건 제목"}' \
--header "Content-Type: application/json" \
<username:password@url>
경고: URL에 인증 키를 사용하면 서버 로그에서 확인할 수 있어 보안상 취약합니다. 도구가 지원하는 경우 위의 헤더 옵션 중 하나를 사용하는 것이 좋습니다.
응답 본문
JSON 응답 본문에는 요청 내에서 생성된 경보 목록이 포함됩니다:
[
{
"iid": 1,
"title": "사건 제목"
},
{
"iid": 2,
"title": "두 번째 사건 제목"
}
]
성공적인 응답은 200
응답 코드를 반환합니다.
테스트 경보 트리거
프로젝트 유지보수자 또는 소유자 가 통합을 구성한 후에는 테스트 경보를 트리거하여 통합이 올바르게 작동하는지 확인할 수 있습니다.
- 적어도 개발자 역할을 가진 사용자로서 로그인합니다.
- 프로젝트에서 Settings > Monitor로 이동합니다.
- 섹션을 확장하려면 Alerts를 선택합니다.
- 목록에서 통합 오른쪽에 있는 설정 아이콘을 선택합니다.
- 테스트 경보 보내기 탭을 선택합니다.
- 페이로드 필드에 테스트 payload를 입력합니다(유효한 JSON이 필요합니다).
- 보내기를 선택합니다.
GitLab은 테스트 결과에 따라 오류 또는 성공 메시지를 표시합니다.
동일한 경보의 자동 그룹화
GitLab은 경보를 페이로드에 기반하여 그룹화합니다. 수신된 경보에 start_time
및 hosts
속성을 제외한 동일한 페이로드가 포함되면 GitLab은 이러한 경보를 함께 그룹화하고 경보 관리 목록
및 상세 페이지에 카운터를 표시합니다.
기존 경보가 이미 resolved
된 경우, GitLab은 새 경보를 만듭니다.
복구 경보
GitLab의 경보는 HTTP 엔드포인트가 경보의 종료 시간이 설정된 payload를 받으면 자동으로 해결됩니다. 사용자 정의 맵핑이 없는 HTTP 엔드포인트의 경우, 예상 필드는 end_time
입니다. 사용자 정의 맵핑을 사용하면 예상 필드를 선택할 수 있습니다.
GitLab은 제공된 payload의 일부로 제공할 수 있는 fingerprint
값을 기반으로 어떤 경보를 해결할지 결정합니다.
경보 속성 및 매핑에 대한 자세한 정보는
GitLab 외부에서 경보 페이로드 사용자 정의를 참조하십시오.
또한, 경보가 해결될 때 연결된 사건을 자동으로 닫을 수 있습니다.
Opsgenie 경보로의 링크
경고: GitLab은 단일 HTTP 엔드포인트를 통한 Opsgenie 및 기타 경보 도구와의 더 깊은 통합을 구축 중입니다. 이를 통해 GitLab 인터페이스에서 경보를 볼 수 있습니다.
Opsgenie 통합을 사용하여 GitLab 경보를 모니터링할 수 있습니다.
Opsgenie 통합을 활성화하면 다른 GitLab 경보 서비스를 동시에 사용할 수 없습니다.
Opsgenie 통합을 활성화하려면:
- 소유자 또는 유지보수자 역할을 가진 사용자로서 로그인합니다.
- Monitor > Alerts로 이동합니다.
- Integrations 선택 상자에서 Opsgenie를 선택합니다.
- Active 토글을 선택합니다.
-
API URL 필드에 Opsgenie 통합의 기본 URL을 입력합니다(예:
https://app.opsgenie.com/alert/list
). - 변경 사항 저장을 선택합니다.
통합을 활성화한 후 Monitor > Alerts 페이지로 이동한 다음 Opsgenie에서 경보 보기를 선택합니다.