통합(Integrations)

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 12.4에서 도입되었습니다.
  • GitLab 12.8에서 GitLab Ultimate에서 GitLab Free로 이동되었습니다.

GitLab는 웹훅 수신기를 통해 모든 소스로부터 알림을 수락할 수 있습니다. 알림 통지페이징을 트리거할 수 있거나 사건을 생성할 수 있습니다.

통합 디렉터리

최소한 Maintainer 역할로, 프로젝트의 사이드바 메뉴에서 Settings > Monitor로 이동하여 구성된 알림 통합 디렉터리을 볼 수 있습니다. 디렉터리에는 통합 이름, 유형 및 상태(활성화 또는 비활성화)이 표시됩니다:

Current Integrations

구성(Configuration)

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에서는 JSON 형식의 외부 소스에서 여러 고유한 HTTP 엔드포인트를 만들고 페이로드를 사용자 정의할 수 있습니다.

  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과 인증 키를 입력해야 합니다.
    5. 선택 사항. 모니터링 도구의 알림을 GitLab 필드에 매핑하려면 샘플 페이로드를 입력하고 Parse payload for custom mapping을 선택합니다. 유효한 JSON이 필요합니다. 샘플 페이로드를 업데이트하는 경우 필드도 다시 매핑해야 합니다.

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

새 HTTP Endpoint는 통합 디렉터리에 표시됩니다. 통합 디렉터리에서 오른쪽에 있는 설정 아이콘을 선택하여 통합을 편집할 수 있습니다.

커스텀 알림에서 필드 매핑

모니터링 도구의 알림 형식을 GitLab 알림과 통합할 수 있습니다. HTTP 엔드포인트를 생성할 때, 알림 디렉터리과 Alert Details 페이지에서 올바른 정보를 표시하기 위해 알림 필드를 GitLab 필드에 매핑하세요.

Alert Management List

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 } } }
note
요청이 페이로드 애플리케이션 제한보다 작도록 합니다.

예시 요청 본문

예시 페이로드:

{
  "title": "인시던트 제목",
  "description": "인시던트에 대한 간단한 설명",
  "start_time": "2019-09-12T06:00:55Z",
  "service": "영향을 받는 서비스",
  "monitoring_tool": "값",
  "hosts": "값",
  "severity": "높음",
  "fingerprint": "d19381d4e8ebca87b55cda6e8eee7385",
  "foo": {
    "bar": {
      "baz": 42
    }
  }
}

프로메테우스 엔드포인트

필수 조건:

  • 프로젝트에 대한 유지보수자 역할이 있어야 합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 모니터를 선택합니다.
  3. 알림 섹션을 확장하고 새 통합 추가를 선택합니다.
  4. 통합 유형 선택 드롭다운 디렉터리에서 프로메테우스를 선택합니다.
  5. 활성화 토글을 켭니다.
  6. 프로메테우스 API 기본 URL을 입력하세요. 이 필드를 사용하는 기능은 폐기(예정)되었으며 GitLab 16.0에서 제거 예정입니다.
  7. 통합 저장을 선택합니다.

웹훅 구성에 대한 URL 및 인가 키는 자격 증명 보기 탭에서 사용할 수 있습니다.

URL 및 인가 키를 외부 서비스에 입력합니다. 또한, 통합의 테스트 알림 보내기 탭에서 테스트 알림을 보낼 수 있습니다.

프로메테우스 Alertmanager에 통합 자격 증명 추가

프로메테우스 경고 알림을 GitLab에 보내려면 프로메테우스 통합에서 URL 및 인가 키를 카피하여 프로메테우스 Alertmanager 구성의 webhook_configs 섹션에 붙여넣습니다.

수신자:
  - 이름: gitlab
    webhook_configs:
      - http_config:
          인가:
            유형: Bearer
            자격 증명: 1234567890abdcdefg
        send_resolved: true
        url: http://IP_ADDRESS:PORT/root/manual_prometheus/prometheus/alerts/notify.json
        # 구성의 나머지는 생략
        # ...

예상되는 요청 속성

알림은 Prometheus 웹훅 수신기에 대한 형식으로 제공되어야 합니다.

상위 수준 필수 속성:

  • 알림
  • 공통주석
  • 공통 레이블
  • 외부 URL
  • 그룹 키
  • 그룹 레이블
  • 수신자
  • 상태
  • 버전

Prometheus 페이로드의 알림에서 배열의 각 항목에 대해 GitLab 알림이 생성됩니다. 아래 나열된 중첩된 매개변수를 수정하여 GitLab 알림을 구성할 수 있습니다.

속성 유형 필수 설명
주석/제목, 주석/요약 또는 레이블/alertname 중 하나 문자열 알림 제목입니다.
startsAt 날짜/시간 알림의 시작 시간입니다.
주석/설명 문자열 아니오 문제의 요약입니다.
주석/gitlab_incident_markdown 문자열 아니오 해당 알림으로 생성된 모든 인시던트에 추가 될 GitLab Flavored Markdown입니다.
주석/runbook 문자열 아니오 이 알림을 관리하는 데 사용되는 문서 또는 지침에 대한 링크입니다.
endsAt 날짜/시간 아니오 알림의 해결 시간입니다.
g0.expr의 쿼리 매개변수를 generatorUrl에 넣으세요 문자열 아니오 관련 메트릭의 쿼리입니다.
labels/gitlab_environment_name 문자열 아니오 연관된 GitLab 환경의 이름입니다. 대시보드에 알림 표시하는 데 필요합니다.
labels/severity 문자열 아니오 알림의 심각도입니다. 이 값은 Prometheus 심각도 옵션 중 하나여야 합니다. 누락되었거나 이 디렉터리에 없는 경우 critical으로 기본 설정됩니다.
status 문자열 아니오 Prometheus의 알림 상태입니다. 값이 ‘resolved’인 경우 알림이 해결됩니다.
주석/gitlab_y_label, 주석/제목, 주석/요약 또는 레이블/alertname 중 하나 문자열 아니오 GitLab Flavored Markdown에서 이 알림의 지표를 표시할 때 사용될 Y-축 라벨입니다.

주석 하위에 포함된 추가 속성은 알림 상세 정보 페이지에서 사용할 수 있습니다. 기타 속성은 무시됩니다.

속성은 기본 유형(문자열 또는 숫자와 같은)에만 국한되지 않으며, 중첩된 JSON 객체일 수 있습니다. 예:

{
    "대상": {
        "사용자": {
            "id": 42
        }
    }
}
note
요청이 페이로드 응용 프로그램 제한보다 작아야 합니다.

Prometheus 심각도 옵션

  • GitLab 13.9에 도입되었습니다.

Prometheus의 알림에서 알림 심각도로 다음 값 중 하나를 제공할 수 있습니다 (대소문자를 구분하지 않음):

  • 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

예시 요청 페이로드:

{
  "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>

기본 인증

인가 키를 비밀번호로 사용할 수 있습니다. 사용자 이름은 비워둡니다:

  • 사용자 이름: <비어 있음>
  • 비밀번호: <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>
caution
인가 키를 URL에 사용하는 것은 보안상 취약하며 서버 로그에 표시됩니다. 도구에서 지원하는 경우 위의 헤더 옵션 중 하나를 사용하는 것이 좋습니다.

응답 본문

JSON 응답 본문에는 요청 내에서 생성된 어떠한 경보의 디렉터리이 포함되어 있습니다:

[
  {
    "iid": 1,
    "title": "사건 제목"
  },
  {
    "iid": 2,
    "title": "두 번째 사건 제목"
  }
]

성공적인 응답은 200 응답 코드를 반환합니다.

테스트 경보 활성화하기

프로젝트 관리자 또는 소유자 가 통합을 구성한 후, 통합이 올바르게 작동하는지 확인하려면 테스트 경보를 트리거할 수 있습니다.

  1. 적어도 개발자 역할을 갖는 사용자로서 로그인합니다.
  2. 프로젝트에서 설정 > 모니터로 이동합니다.
  3. 섹션을 확장하려면 경보를 선택합니다.
  4. 디렉터리에서 통합의 오른쪽에 있는 설정 아이콘을 선택합니다.
  5. 테스트 경보 보내기 탭을 선택하여 엽니다.
  6. 유효한 JSON 페이로드를 페이로드 필드에 입력합니다.
  7. 보내기를 선택합니다.

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

동일한 경보의 자동 그룹화

Tier: Premium, Ultimate Offering: GitLab.com, 온프레미스, GitLab Dedicated

GitLab 버전 13.2 이상에서 GitLab은 페이로드에 동일한 경보가 포함되면 (start_timehosts 속성을 제외하고) 이러한 경보를 그룹화하고 경보 관리 디렉터리 및 세부 페이지에 카운터를 표시합니다.

기존 경보가 이미 해결됨 상태인 경우 GitLab은 새로운 경보를 생성합니다.

경보 관리 디렉터리

복구 경보

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

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

경보가 해결되면 연결된 사건도 자동으로 닫힐 수 있도록 구성할 수도 있습니다.

Opsgenie 경보 링크

Tier: Premium, Ultimate Offering: GitLab.com, 온프레미스, GitLab Dedicated
caution
저희는 Opsgenie 및 기타 경보 도구들과의 깊은 통합을 구축하고 있으며, HTTP 엔드포인트 통합을 통해 GitLab 인터페이스에서 경보를 볼 수 있습니다. 따라서 GitLab 버전 13.8 이상에서은 이전에 GitLab 경보 디렉터리에서 Opsgenie 경보로 직접 연결되던 링크는 폐기됩니다.

Opsgenie와의 깊은 통합을 통해 GitLab에서 경보를 모니터링할 수 있습니다.

Opsgenie 통합을 활성화하면 다른 GitLab 경보 서비스를 동시에 활성화할 수 없습니다.

Opsgenie 통합을 활성화하려면:

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

통합을 활성화한 후, Monitor > Alerts 페이지에서 Opsgenie에서 경보 보기를 선택합니다.