통합

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

GitLab은 웹훅 수신기를 통해 모든 소스에서 경고를 수락할 수 있습니다. 알림 통지는 근무 교대를 위한 호출을 트리거하거나 사건을 만들기 위해 사용될 수 있습니다.

통합 목록

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

현재 통합

구성

GitLab은 구성한 HTTP 엔드포인트를 통해 경보를 받을 수 있습니다.

단일 HTTP 엔드포인트

GitLab 프로젝트에서 HTTP 엔드포인트를 활성화하면 JSON 형식의 경보 페이로드를 수신할 수 있습니다. 항상 페이로드를 사용자 정의할 수 있습니다.

  1. 프로젝트의 유지자 역할을 가진 사용자로 GitLab에 로그인합니다.
  2. 프로젝트에서 Settings > Monitor로 이동합니다.
  3. Alerts 섹션을 확장하고 Select integration type 드롭다운 목록에서 HTTP Endpoint를 선택합니다.
  4. Active 경보 설정을 토글합니다. 웹훅 구성을 저장한 후 View credentials 탭에서 URL 및 인증 키를 확인할 수 있습니다. 또한 외부 서비스에 URL 및 인증 키를 입력해야 합니다.

HTTP 엔드포인트

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

GitLab Premium에서는 JSON 형식의 어떤 외부 소스에서든 경고를 받을 수 있도록 고유한 여러 개의 HTTP 엔드포인트를 생성할 수 있습니다. 또한 페이로드를 사용자 정의할 수 있습니다.

  1. 프로젝트의 유지자 역할을 가진 사용자로 GitLab에 로그인합니다.
  2. 프로젝트에서 Settings > Monitor로 이동합니다.
  3. Alerts 섹션을 확장합니다.
  4. 생성하려는 각 엔드포인트에 대해:

    1. Add new integration을 선택합니다.
    2. Select integration type 드롭다운 목록에서 HTTP Endpoint를 선택합니다.
    3. 통합에 이름을 지정합니다.
    4. Active 경보 설정을 토글합니다. 웹훅 구성을 저장한 후 View credentials 탭에서 URLAuthorization Key를 확인할 수 있습니다. 또한 외부 서비스에 URL 및 인증 키를 입력해야 합니다.
    5. 선택 사항. 감시 도구의 경보를 GitLab 필드에 매핑하려면 샘플 페이로드를 입력하고 Parse payload for custom mapping을 선택합니다. 유효한 JSON이 필요합니다. 샘플 페이로드를 업데이트하는 경우 필드도 다시 매핑해야 합니다.

    6. 선택 사항. 유효한 샘플 페이로드를 제공한 경우 Payload alert key에서 각 값을 GitLab alert key에 매핑할 수 있습니다.
    7. 통합을 저장하려면 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 권한이 있어야 합니다.
  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 모니터를 선택합니다.
  3. 알림 섹션을 확장하고 새 통합 추가를 선택합니다.
  4. 통합 유형 선택 드롭다운 목록에서 프로메테우스를 선택합니다.
  5. Active 토글을 켭니다.
  6. 프로메테우스 API 기본 URL을 입력하세요. 이 필드를 사용하는 기능은 폐기 예정이며 GitLab 16.0에서 제거 예정입니다.
  7. 통합 저장을 선택합니다.

웹훅 구성에 대한 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 응답 코드를 반환합니다.

테스트 경보 트리거

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

  1. 적어도 개발자 역할을 가진 사용자로서 로그인합니다.
  2. 프로젝트에서 Settings > Monitor로 이동합니다.
  3. 섹션을 확장하려면 Alerts를 선택합니다.
  4. 목록에서 통합 오른쪽에 있는 설정 아이콘을 선택합니다.
  5. 테스트 경보 보내기 탭을 선택합니다.
  6. 페이로드 필드에 테스트 payload를 입력합니다(유효한 JSON이 필요합니다).
  7. 보내기를 선택합니다.

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

동일한 경보의 자동 그룹화

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

GitLab은 경보를 페이로드에 기반하여 그룹화합니다. 수신된 경보에 start_timehosts 속성을 제외한 동일한 페이로드가 포함되면 GitLab은 이러한 경보를 함께 그룹화하고 경보 관리 목록 및 상세 페이지에 카운터를 표시합니다.

기존 경보가 이미 resolved된 경우, GitLab은 새 경보를 만듭니다.

Alert Management List

복구 경보

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

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

또한, 경보가 해결될 때 연결된 사건을 자동으로 닫을 수 있습니다.

Opsgenie 경보로의 링크

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

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

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에서 경보 보기를 선택합니다.