통합

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab은 웹후크 수신기를 통해 모든 소스에서 알림을 수신할 수 있습니다. 알림 알림
페이지를 트리거할 수 있으며, 대기 중인 회전 또는 사고를 생성하는 데 사용될 수 있습니다.

통합 목록

최소한 Maintainer 역할이 있는 경우, Settings > Monitor로 이동하여
프로젝트의 사이드바 메뉴에서 구성된 알림 통합 목록을 볼 수 있으며,
Alerts 섹션을 확장할 수 있습니다. 목록은 통합 이름, 유형 및 상태(활성화 또는 비활성화)를 표시합니다:

현재 통합

구성

GitLab은 구성한 HTTP 엔드포인트를 통해 알림을 수신할 수 있습니다.

단일 HTTP 엔드포인트

GitLab 프로젝트에서 HTTP 엔드포인트를 활성화하면 알림 페이로드를 JSON 형식으로 수신할 수 있게 됩니다.
언제든지 페이로드를 사용자 지정할 수 있습니다.

  1. 프로젝트에 대해 Maintainer 역할을 가진 사용자로 GitLab에 로그인합니다.

  2. 프로젝트의 Settings > Monitor로 이동합니다.

  3. Alerts 섹션을 확장하고, Select integration type 드롭다운 목록에서
    HTTP Endpoint를 선택합니다.

  4. Active 알림 설정을 전환합니다. 웹후크 구성에 대한 URL 및 인증 키는
    통합을 저장한 후 View credentials 탭에서 사용할 수 있습니다.
    외부 서비스에서도 URL 및 인증 키를 입력해야 합니다.

HTTP 엔드포인트

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab Premium에서는
여러 개의 고유한 HTTP 엔드포인트를 생성하여 외부 소스에서 JSON 형식으로 알림을 수신할 수 있으며,
페이로드를 사용자 지정할 수 있습니다.

  1. 프로젝트에 대해 Maintainer 역할을 가진 사용자로 GitLab에 로그인합니다.

  2. 프로젝트의 Settings > Monitor로 이동합니다.

  3. Alerts 섹션을 확장합니다.

  4. 생성할 각 엔드포인트에 대해:

    1. Add new integration를 선택합니다.
    2. Select integration type 드롭다운 목록에서 HTTP Endpoint를 선택합니다.
    3. 통합의 이름을 입력합니다.
    4. Active 알림 설정을 전환합니다. 웹후크 구성에 대한 URLAuthorization Key
      통합을 저장한 후 View credentials 탭에서 사용할 수 있습니다.
      외부 서비스에서도 URL 및 Authorization Key를 입력해야 합니다.
    5. 선택 사항. 모니터링 도구의 알림에서 GitLab 필드로 매핑하려면 샘플
      페이로드를 입력하고 Parse payload for custom mapping을 선택합니다. 유효한 JSON이 필요합니다.
      샘플 페이로드를 업데이트하면 필드도 다시 매핑해야 합니다.

    6. 선택 사항. 유효한 샘플 페이로드를 제공한 경우, Payload alert key의 각 값을 선택하여
      GitLab alert key에 매핑합니다.
    7. 통합을 저장하려면 Save Integration를 선택합니다.
      원하는 경우, 통합이 생성된 후 Send test alert 탭에서 테스트 알림을 보낼 수 있습니다.

새로운 HTTP 엔드포인트는 통합 목록에 표시됩니다.
통합 목록의 오른쪽에 있는 설정 아이콘을 선택하여 통합을 편집할 수 있습니다.

맞춤 알림에서 필드 매핑

모니터링 도구의 알림 형식을 GitLab 알림으로 통합할 수 있습니다.

알림 목록알림 세부 정보 페이지에 올바른 정보를 표시하려면 알림의 필드를 GitLab 필드에 매핑하십시오. HTTP 엔드포인트를 생성할 때:

알림 관리 목록

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 기능이 활성화되면 페이로드를 기반으로 지문이 자동으로 생성됩니다( start_time, end_time, 및 hosts 매개변수는 제외).
gitlab_environment_name 문자열 관련된 GitLab 환경의 이름입니다. 대시보드에 알림을 표시하려면 필요합니다.

알림의 페이로드에 사용자 지정 필드를 추가할 수도 있습니다. 추가 매개변수의 값은 기본 데이터 유형(문자열 또는 숫자 등)에 국한되지 않으며, 중첩된 JSON 객체일 수 있습니다. 예를 들어:

{ "foo": { "bar": { "baz": 42 } } }
note
요청이 페이로드 애플리케이션 한도보다 작도록 하세요.

예제 요청 본문

예제 페이로드:

{
  "title": "Incident title",
  "description": "Short description of the incident",
  "start_time": "2019-09-12T06:00:55Z",
  "service": "service affected",
  "monitoring_tool": "value",
  "hosts": "value",
  "severity": "high",
  "fingerprint": "d19381d4e8ebca87b55cda6e8eee7385",
  "foo": {
    "bar": {
      "baz": 42
    }
  }
}

프로메테우스 엔드포인트

필수 조건:

  • 프로젝트에 대해 최소한 유지 관리자(Maintainer) 역할이 있어야 합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.

  2. 설정 > 모니터를 선택합니다.

  3. 알림 섹션을 확장하고 새 통합 추가를 선택합니다.

  4. 통합 유형 선택 드롭다운 목록에서 Prometheus를 선택합니다.

  5. 활성화 토글을 켭니다.

  6. Prometheus API 기본 URL을 입력합니다. 이 필드는 더 이상 사용되지 않음제거 예정입니다.

  7. 통합 저장을 선택합니다.

웹후크 구성의 URL 및 인증 키는 자격 증명 보기 탭에서 확인할 수 있습니다.

URL 및 인증 키를 외부 서비스에 입력하세요.

또한 통합의 테스트 알림 보내기 탭에서 테스트 알림을 보낼 수 있습니다.

프로메테우스 알림 관리자에 통합 자격 증명 추가

프로메테우스 알림을 GitLab에 보내려면, Prometheus 통합에서 URL 및 인증 키를 복사하여 프로메테우스 알림 관리자 구성의 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

alerts의 Prometheus 페이로드에서 GitLab 알림은 배열의 각 항목에 대해 생성됩니다.

아래 나열된 중첩 매개변수를 수정하여 GitLab 알림을 구성할 수 있습니다.

속성 유형 필수 여부 설명
annotations/title, annotations/summary 또는 labels/alertname 중 하나 문자열 알림의 제목입니다.
startsAt 날짜/시간 알림의 시작 시간입니다.
annotations/description 문자열 아니오 문제에 대한 높은 수준의 요약입니다.
annotations/gitlab_incident_markdown 문자열 아니오 알림에서 생성된 사건에 추가될 GitLab Flavored Markdown입니다.
annotations/runbook 문자열 아니오 이 알림을 관리하는 방법에 대한 문서 또는 지침 링크입니다.
endsAt 날짜/시간 아니오 알림의 해결 시간입니다.
g0.expr 쿼리 매개변수는 generatorUrl에 있습니다. 문자열 아니오 연결된 메트릭의 쿼리입니다.
labels/gitlab_environment_name 문자열 아니오 연관된 GitLab 환경의 이름입니다. 대시보드에서 알림을 표시하는 데 필요합니다.
labels/severity 문자열 아니오 알림의 심각도입니다. Prometheus 심각도 옵션 중 하나여야 합니다. 누락되거나 이 목록에 값이 없으면 기본값은 critical입니다.
status 문자열 아니오 Prometheus에서 알림의 상태입니다. 값이 ‘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로 설정됩니다.

예제 프로메테우스 알림

예제 알림 규칙:

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

예제 요청 페이로드:

{
  "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 응답 코드를 반환합니다.

테스트 경고 트리거링

프로젝트 유지 관리자 또는 소유자가 통합을 구성한 후, 통합이 제대로 작동하는지 확인하기 위해 테스트 경고를 트리거할 수 있습니다.

  1. 최소 개발자 역할을 가진 사용자로 로그인합니다.
  2. 프로젝트의 설정 > 모니터로 이동합니다.
  3. 경고를 선택하여 해당 섹션을 확장합니다.
  4. 목록에서 통합의 오른쪽에 있는 설정 아이콘을 선택합니다.
  5. 테스트 경고 전송 탭을 선택하여 엽니다.
  6. 페이로드 필드에 테스트 페이로드를 입력합니다(유효한 JSON이 필요합니다).
  7. 전송을 선택합니다.

GitLab은 테스트의 결과에 따라 오류 또는 성공 메시지를 표시합니다.

동일한 경고의 자동 그룹화

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab은 페이로드를 기반으로 경고를 그룹화합니다. 수신 경고의 페이로드가 다른 경고와 동일한 경우( start_timehosts 속성 제외), GitLab은 이러한 경고를 함께 그룹화하여 경고 관리 목록 및 세부 정보 페이지에 카운터를 표시합니다.

기존 경고가 이미 해결됨인 경우, GitLab은 대신 새로운 경고를 생성합니다.

경고 관리 목록

복구 경고

GitLab의 경고는 HTTP 엔드포인트가 설정된 경고의 종료 시간으로 페이로드를 수신하면 자동으로 해결됩니다. 커스텀 매핑이 없는 HTTP 엔드포인트의 경우, 예상되는 필드는 end_time입니다. 커스텀 매핑을 사용하면 예상 필드를 선택할 수 있습니다.

GitLab은 페이로드의 일부로 제공될 수 있는 fingerprint 값을 기반으로 어떤 경고를 해결할지 결정합니다. 경고 속성 및 매핑에 대한 자세한 내용은 GitLab 외부에서 경고 페이로드 사용자화하기를 참조하세요.

경고가 해결될 때 연결된 사고를 자동으로 닫도록 설정할 수도 있습니다.

Opsgenie 경고 링크

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

경고: Opsgenie 및 기타 경고 도구와의 더 깊은 통합을 위해 HTTP 엔드포인트 통합을 통해 GitLab 인터페이스에서 경고를 볼 수 있습니다.

GitLab 통합을 사용하여 Opsgenie에서 경고를 모니터링할 수 있습니다.

Opsgenie 통합을 활성화하면 동시에 다른 GitLab 경고 서비스가 활성 상태일 수 없습니다.

Opsgenie 통합을 활성화하려면:

  1. 유지 관리자 또는 소유자 역할을 가진 사용자로 로그인합니다.
  2. 모니터 > 경고로 이동합니다.
  3. 통합 선택 상자에서 Opsgenie를 선택합니다.
  4. 활성 토글을 선택합니다.
  5. API URL 필드에 Opsgenie 통합을 위한 기본 URL을 입력합니다 (예: https://app.opsgenie.com/alert/list).
  6. 변경 사항 저장을 선택합니다.

통합을 활성화한 후, 모니터 > 경고경고 페이지로 이동한 다음 Opsgenie에서 경고 보기를 선택합니다.