InfoGrab Docs

Prometheus로 GitLab 모니터링

요약

Prometheus는 GitLab 및 기타 소프트웨어 제품을 모니터링하기 위한 유연한 플랫폼을 제공하는 강력한 시계열 모니터링 서비스입니다. GitLab은 Prometheus를 통한 즉시 사용 가능한 모니터링을 제공하여 GitLab 서비스의 고품질 시계열 모니터링에 대한 액세스를 제공합니다.

Prometheus는 GitLab 및 기타 소프트웨어 제품을 모니터링하기 위한 유연한 플랫폼을 제공하는 강력한 시계열 모니터링 서비스입니다.

GitLab은 Prometheus를 통한 즉시 사용 가능한 모니터링을 제공하여 GitLab 서비스의 고품질 시계열 모니터링에 대한 액세스를 제공합니다.

Prometheus와 이 페이지에 나열된 다양한 익스포터는 Linux 패키지에 번들로 제공됩니다. 추가된 타임라인은 각 익스포터의 문서를 확인하십시오. 소스 컴파일 설치의 경우 직접 설치해야 합니다. 이후 릴리스에서 추가 GitLab 메트릭이 캡처됩니다.

Prometheus 서비스는 기본적으로 켜져 있습니다.

Prometheus와 익스포터는 사용자를 인증하지 않으며 액세스할 수 있는 모든 사람이 사용할 수 있습니다.

Prometheus 작동 방식#

Prometheus는 주기적으로 데이터 소스에 연결하고 다양한 익스포터를 통해 성능 메트릭을 수집합니다. 모니터링 데이터를 보고 작업하려면 Prometheus에 직접 연결하거나 Grafana와 같은 대시보드 도구를 사용할 수 있습니다.

Prometheus 구성#

소스 컴파일 설치의 경우 직접 설치하고 구성해야 합니다.

Prometheus와 익스포터는 기본적으로 켜져 있습니다. Prometheus는 gitlab-prometheus 사용자로 실행되며 http://localhost:9090에서 수신합니다. 기본적으로 Prometheus는 GitLab 서버 자체에서만 액세스할 수 있습니다. 각 익스포터는 개별적으로 비활성화되지 않는 한 Prometheus의 모니터링 대상으로 자동 설정됩니다.

Prometheus와 모든 익스포터 및 향후 추가될 익스포터를 비활성화하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다

  2. 다음 줄을 추가하거나 찾아서 주석을 제거하고 false로 설정되었는지 확인합니다:

    prometheus_monitoring['enable'] = false
    sidekiq['metrics_enabled'] = false
    
    # Already set to `false` by default, but you can explicitly disable it to be sure
    puma['exporter_enabled'] = false
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.

Prometheus가 수신하는 포트 및 주소 변경#

Warning

Prometheus가 수신하는 포트를 변경할 수 있지만 변경하지 않는 것이 좋습니다. 이 변경은 GitLab 서버에서 실행되는 다른 서비스에 영향을 주거나 충돌할 수 있습니다. 위험을 감수하고 진행하십시오.

GitLab 서버 외부에서 Prometheus에 액세스하려면 Prometheus가 수신하는 주소/포트를 변경합니다:

  1. /etc/gitlab/gitlab.rb를 편집합니다

  2. 다음 줄을 추가하거나 찾아서 주석을 제거합니다:

    prometheus['listen_address'] = 'localhost:9090'
    

    localhost:9090을 Prometheus가 수신할 주소 또는 포트로 교체합니다. localhost 이외의 호스트에서 Prometheus에 대한 액세스를 허용하려면 호스트를 생략하거나 0.0.0.0을 사용하여 공개 액세스를 허용합니다:

    prometheus['listen_address'] = ':9090'
    # or
    prometheus['listen_address'] = '0.0.0.0:9090'
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다

사용자 정의 스크랩 구성 추가#

/etc/gitlab/gitlab.rbprometheus['scrape_configs']를 편집하여 Prometheus 스크랩 대상 구성 구문을 사용하여 Linux 패키지 번들 Prometheus에 대한 추가 스크랩 대상을 구성할 수 있습니다.

다음은 http://1.1.1.1:8060/probe?param_a=test&param_b=additional_test를 스크랩하는 구성 예시입니다:

prometheus['scrape_configs'] = [
  {
    'job_name': 'custom-scrape',
    'metrics_path': '/probe',
    'params' => {
      'param_a' => ['test'],
      'param_b' => ['additional_test'],
    },
    'static_configs' => [
      'targets' => ['1.1.1.1:8060'],
    ],
  },
]

Linux 패키지를 사용한 독립형 Prometheus#

Linux 패키지를 사용하여 Prometheus를 실행하는 독립형 모니터링 노드를 구성할 수 있습니다. 외부 Grafana를 이 모니터링 노드에 구성하여 대시보드를 표시할 수 있습니다.

독립형 모니터링 노드는 여러 노드가 있는 GitLab 배포에 권장됩니다.

다음 단계는 Linux 패키지를 사용하여 Prometheus를 실행하는 모니터링 노드를 구성하는 데 필요한 최소 구성입니다:

  1. 모니터링 노드에 SSH로 접속합니다.

  2. GitLab 다운로드 페이지의 1단계 및 2단계를 사용하여 원하는 Linux 패키지를 설치하되, 나머지 단계는 따르지 마십시오.

  3. 다음 단계를 위해 Consul 서버 노드의 IP 주소 또는 DNS 레코드를 수집해야 합니다.

  4. /etc/gitlab/gitlab.rb를 편집하고 다음 내용을 추가합니다:

    roles ['monitoring_role']
    
    external_url 'http://gitlab.example.com'
    
    # Prometheus
    prometheus['listen_address'] = '0.0.0.0:9090'
    prometheus['monitor_kubernetes'] = false
    
    # Enable service discovery for Prometheus
    consul['enable'] = true
    consul['monitoring_service_discovery'] = true
    consul['configuration'] = {
       retry_join: %w(10.0.0.1 10.0.0.2 10.0.0.3), # The addresses can be IPs or FQDNs
    }
    
    # Nginx - For Grafana access
    nginx['enable'] = true
    
  5. sudo gitlab-ctl reconfigure를 실행하여 구성을 컴파일합니다.

다음 단계는 다른 모든 노드에 모니터링 노드의 위치를 알려주는 것입니다:

  1. /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가하거나 찾아서 주석을 제거합니다:

    # can be FQDN or IP
    gitlab_rails['prometheus_address'] = '10.0.0.1:9090'
    

    여기서 10.0.0.1:9090은 Prometheus 노드의 IP 주소와 포트입니다.

  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.

consul['monitoring_service_discovery'] = true를 사용하여 서비스 검색을 통한 모니터링을 활성화한 후, prometheus['scrape_configs']/etc/gitlab/gitlab.rb에 설정되어 있지 않은지 확인하십시오. /etc/gitlab/gitlab.rb에서 consul['monitoring_service_discovery'] = trueprometheus['scrape_configs']를 모두 설정하면 오류가 발생합니다.

외부 Prometheus 서버 사용#

Warning

Prometheus와 대부분의 익스포터는 인증을 지원하지 않습니다. 로컬 네트워크 외부에 노출하지 않는 것이 좋습니다.

GitLab을 외부 Prometheus 서버로 모니터링하려면 몇 가지 구성 변경이 필요합니다.

외부 Prometheus 서버를 사용하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다.

  2. 번들된 Prometheus를 비활성화합니다:

    prometheus['enable'] = false
    
  3. 각 번들된 서비스의 익스포터가 네트워크 주소에서 수신하도록 설정합니다. 예를 들어:

    node_exporter['listen_address'] = '0.0.0.0:9100'
    gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"
    
    # Rails nodes
    gitlab_exporter['listen_address'] = '0.0.0.0'
    gitlab_exporter['listen_port'] = '9168'
    registry['debug_addr'] = '0.0.0.0:5001'
    
    # Sidekiq nodes
    sidekiq['listen_address'] = '0.0.0.0'
    
    # Redis nodes
    redis_exporter['listen_address'] = '0.0.0.0:9121'
    
    # PostgreSQL nodes
    postgres_exporter['listen_address'] = '0.0.0.0:9187'
    
    # Gitaly nodes
    gitaly['configuration'] = {
       # ...
       prometheus_listen_addr: '0.0.0.0:9236',
    }
    
    # Pgbouncer nodes
    pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
    
  4. 필요한 경우 공식 설치 지침을 사용하여 전용 Prometheus 인스턴스를 설치하고 설정합니다.

  5. 모든 GitLab Rails(Puma, Sidekiq) 서버에서 Prometheus 서버 IP 주소와 수신 포트를 설정합니다. 예를 들어:

    gitlab_rails['prometheus_address'] = '192.168.0.1:9090'
    
  6. NGINX 메트릭을 스크랩하려면 Prometheus 서버 IP를 허용하도록 NGINX도 구성해야 합니다. 예를 들어:

    nginx['status']['options'] = {
          "server_tokens" => "off",
          "access_log" => "off",
          "allow" => "192.168.0.1",
          "deny" => "all",
    }
    

    여러 Prometheus 서버가 있는 경우 둘 이상의 IP 주소를 지정할 수도 있습니다:

    nginx['status']['options'] = {
          "server_tokens" => "off",
          "access_log" => "off",
          "allow" => ["192.168.0.1", "192.168.0.2"],
          "deny" => "all",
    }
    
  7. Prometheus 서버가 GitLab 메트릭 엔드포인트에서 가져올 수 있도록 Prometheus 서버 IP 주소를 모니터링 IP 허용 목록에 추가합니다:

    gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
    
  8. 각 번들된 서비스의 익스포터를 네트워크 주소에서 수신하도록 설정하고 있으므로, 활성화된 익스포터에 대해 Prometheus IP에서만 트래픽을 허용하도록 인스턴스의 방화벽을 업데이트합니다. 익스포터 서비스 및 각각의 포트의 전체 참조 목록이 있습니다.

  9. 변경 사항을 적용하려면 GitLab을 재구성합니다.

  10. Prometheus 서버의 구성 파일을 편집합니다.

  11. Prometheus 서버의 스크랩 대상 구성에 각 노드의 익스포터를 추가합니다. 예를 들어 static_configs를 사용하는 샘플 스니펫:

    scrape_configs:
      - job_name: nginx
        static_configs:
          - targets:
            - 1.1.1.1:8060
      - job_name: redis
        static_configs:
          - targets:
            - 1.1.1.1:9121
      - job_name: postgres
        static_configs:
          - targets:
            - 1.1.1.1:9187
      - job_name: node
        static_configs:
          - targets:
            - 1.1.1.1:9100
      - job_name: gitlab-workhorse
        static_configs:
          - targets:
            - 1.1.1.1:9229
      - job_name: gitlab-rails
        metrics_path: "/-/metrics"
        scheme: https
        static_configs:
          - targets:
            - 1.1.1.1
      - job_name: gitlab-sidekiq
        static_configs:
          - targets:
            - 1.1.1.1:8082
      - job_name: gitlab_exporter_database
        metrics_path: "/database"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitlab_exporter_sidekiq
        metrics_path: "/sidekiq"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitaly
        static_configs:
          - targets:
            - 1.1.1.1:9236
      - job_name: registry
        static_configs:
          - targets:
            - 1.1.1.1:5001
    

    [!warning] 스니펫의 gitlab-rails 작업은 GitLab이 HTTPS를 통해 접근 가능하다고 가정합니다. 배포에서 HTTPS를 사용하지 않는 경우, 작업 구성은 http 스키마와 포트 80을 사용하도록 조정됩니다.

  12. Prometheus 서버를 다시 로드합니다.

스토리지 보존 크기 구성#

Prometheus에는 로컬 스토리지를 구성하는 몇 가지 사용자 정의 플래그가 있습니다:

  • storage.tsdb.retention.time: 이전 데이터를 제거할 시기. 기본값은 15d입니다. 이 플래그가 기본값이 아닌 값으로 설정된 경우 storage.tsdb.retention을 재정의합니다.
  • storage.tsdb.retention.size: (실험적) 보존할 스토리지 블록의 최대 바이트 수. 오래된 데이터가 먼저 제거됩니다. 기본값은 0(비활성화)입니다. 이 플래그는 실험적이며 향후 릴리스에서 변경될 수 있습니다. 지원되는 단위: B, KB, MB, GB, TB, PB, EB. 예를 들어 512MB.

스토리지 보존 크기를 구성하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다:

    prometheus['flags'] = {
      'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data",
      'storage.tsdb.retention.time' => "7d",
      'storage.tsdb.retention.size' => "2GB",
      'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml"
    }
    
  2. GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

성능 메트릭 보기#

Prometheus가 기본으로 제공하는 대시보드는 http://localhost:9090에서 방문할 수 있습니다.

같은 FQDN을 사용하는 경우 HSTS로 인해 GitLab 인스턴스에서 SSL이 활성화된 경우 GitLab과 같은 브라우저에서 Prometheus에 액세스하지 못할 수 있습니다. GitLab 테스트 프로젝트가 있어 액세스를 제공하지만 그 동안에는 몇 가지 해결책이 있습니다: 별도의 FQDN 사용, 서버 IP 사용, Prometheus에 별도의 브라우저 사용, HSTS 재설정, 또는 NGINX 프록시 사용.

Prometheus가 수집한 성능 데이터는 Prometheus 콘솔에서 직접 보거나 호환 가능한 대시보드 도구를 통해 볼 수 있습니다. Prometheus 인터페이스는 출력을 시각화할 수 있는 수집된 데이터로 작업하는 유연한 쿼리 언어를 제공합니다. 더 완전한 기능의 대시보드를 위해 Grafana를 사용할 수 있으며 Prometheus에 대한 공식 지원이 있습니다.

Prometheus 샘플 쿼리#

다음은 사용할 수 있는 몇 가지 샘플 Prometheus 쿼리입니다.

Note

이 예시는 모든 설정에서 작동하지 않을 수 있습니다. 추가 조정이 필요할 수 있습니다.

  • % CPU 사용률: 1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
  • % 사용 가능한 메모리: ((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100
  • 전송된 데이터: rate(node_network_transmit_bytes_total{device!="lo"}[5m])
  • 수신된 데이터: rate(node_network_receive_bytes_total{device!="lo"}[5m])
  • 디스크 읽기 IOPS: sum by (instance) (rate(node_disk_reads_completed_total[1m]))
  • 디스크 쓰기 IOPS: sum by (instance) (rate(node_disk_writes_completed_total[1m]))
  • GitLab 트랜잭션 수를 통한 RPS: sum(irate(gitlab_transaction_duration_seconds_count{controller!~'HealthController|MetricsController'}[1m])) by (controller, action)

Grafana 데이터 소스로서의 Prometheus#

Grafana를 사용하면 Prometheus 성능 메트릭을 데이터 소스로 가져오고 메트릭을 그래프와 대시보드로 렌더링할 수 있어 시각화에 도움이 됩니다.

단일 서버 GitLab 설정에 Prometheus 대시보드를 추가하려면:

  1. Grafana에서 새 데이터 소스를 생성합니다.
  2. 유형에서 Prometheus를 선택합니다.
  3. 데이터 소스 이름을 지정합니다(예: GitLab).
  4. Prometheus 서버 URL에 Prometheus 수신 주소를 추가합니다.
  5. HTTP 메서드GET으로 설정합니다.
  6. 저장하고 테스트하여 작동하는지 확인합니다.

GitLab 메트릭#

GitLab은 자체 내부 서비스 메트릭을 모니터링하고 /-/metrics 엔드포인트에서 사용할 수 있게 합니다. 다른 익스포터와 달리 이 엔드포인트는 사용자 트래픽과 동일한 URL 및 포트에서 사용 가능하기 때문에 인증이 필요합니다.

GitLab 메트릭에 대해 자세히 읽어보십시오.

번들 소프트웨어 메트릭#

Linux 패키지에 번들된 많은 GitLab 종속성은 Prometheus 메트릭을 내보내도록 사전 구성되어 있습니다.

노드 익스포터#

노드 익스포터를 사용하면 메모리, 디스크 및 CPU 사용률과 같은 다양한 머신 리소스를 측정할 수 있습니다.

노드 익스포터에 대해 자세히 읽어보십시오.

웹 익스포터#

웹 익스포터는 성능과 가용성을 향상시키기 위해 최종 사용자와 Prometheus 트래픽을 두 개의 별도 애플리케이션으로 분리할 수 있는 전용 메트릭 서버입니다.

웹 익스포터에 대해 자세히 읽어보십시오.

Redis 익스포터#

Redis 익스포터를 사용하면 다양한 Redis 메트릭을 측정할 수 있습니다.

Redis 익스포터에 대해 자세히 읽어보십시오.

PostgreSQL 익스포터#

PostgreSQL 익스포터를 사용하면 다양한 PostgreSQL 메트릭을 측정할 수 있습니다.

PostgreSQL 익스포터에 대해 자세히 읽어보십시오.

PgBouncer 익스포터#

PgBouncer 익스포터를 사용하면 다양한 PgBouncer 메트릭을 측정할 수 있습니다.

PgBouncer 익스포터에 대해 자세히 읽어보십시오.

레지스트리 익스포터#

레지스트리 익스포터를 사용하면 다양한 레지스트리 메트릭을 측정할 수 있습니다.

레지스트리 익스포터에 대해 자세히 읽어보십시오.

GitLab 익스포터#

GitLab 익스포터를 사용하면 Redis 및 데이터베이스에서 가져온 다양한 GitLab 메트릭을 측정할 수 있습니다.

GitLab 익스포터에 대해 자세히 읽어보십시오.

문제 해결#

/var/opt/gitlab/prometheus가 디스크 공간을 너무 많이 사용합니다#

Prometheus 모니터링을 사용하지 않는 경우:

  1. Prometheus를 비활성화합니다.
  2. /var/opt/gitlab/prometheus 아래의 데이터를 삭제합니다.

Prometheus 모니터링을 사용하는 경우:

  1. Prometheus를 중지합니다(실행 중에 데이터를 삭제하면 데이터 손상이 발생할 수 있습니다):

    gitlab-ctl stop prometheus
    
  2. /var/opt/gitlab/prometheus/data 아래의 데이터를 삭제합니다.

  3. 서비스를 다시 시작합니다:

    gitlab-ctl start prometheus
    
  4. 서비스가 실행 중인지 확인합니다:

    gitlab-ctl status prometheus
    
  5. 선택 사항. 스토리지 보존 크기를 구성합니다.

모니터링 노드가 데이터를 수신하지 않습니다#

모니터링 노드가 데이터를 수신하지 않는 경우 익스포터가 데이터를 캡처하고 있는지 확인합니다:

curl "http[s]://localhost:/metrics"

또는

curl "http[s]://localhost:/-/metrics"

Prometheus로 GitLab 모니터링

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

Prometheus는 GitLab 및 기타 소프트웨어 제품을 모니터링하기 위한 유연한 플랫폼을 제공하는 강력한 시계열 모니터링 서비스입니다. GitLab은 Prometheus를 통한 즉시 사용 가능한 모니터링을 제공하여 GitLab 서비스의 고품질 시계열 모니터링에 대한 액세스를 제공합니다.

Prometheus는 GitLab 및 기타 소프트웨어 제품을 모니터링하기 위한 유연한 플랫폼을 제공하는 강력한 시계열 모니터링 서비스입니다.

GitLab은 Prometheus를 통한 즉시 사용 가능한 모니터링을 제공하여 GitLab 서비스의 고품질 시계열 모니터링에 대한 액세스를 제공합니다.

Prometheus와 이 페이지에 나열된 다양한 익스포터는 Linux 패키지에 번들로 제공됩니다. 추가된 타임라인은 각 익스포터의 문서를 확인하십시오. 소스 컴파일 설치의 경우 직접 설치해야 합니다. 이후 릴리스에서 추가 GitLab 메트릭이 캡처됩니다.

Prometheus 서비스는 기본적으로 켜져 있습니다.

Prometheus와 익스포터는 사용자를 인증하지 않으며 액세스할 수 있는 모든 사람이 사용할 수 있습니다.

Prometheus 작동 방식#

Prometheus는 주기적으로 데이터 소스에 연결하고 다양한 익스포터를 통해 성능 메트릭을 수집합니다. 모니터링 데이터를 보고 작업하려면 Prometheus에 직접 연결하거나 Grafana와 같은 대시보드 도구를 사용할 수 있습니다.

Prometheus 구성#

소스 컴파일 설치의 경우 직접 설치하고 구성해야 합니다.

Prometheus와 익스포터는 기본적으로 켜져 있습니다. Prometheus는 gitlab-prometheus 사용자로 실행되며 http://localhost:9090에서 수신합니다. 기본적으로 Prometheus는 GitLab 서버 자체에서만 액세스할 수 있습니다. 각 익스포터는 개별적으로 비활성화되지 않는 한 Prometheus의 모니터링 대상으로 자동 설정됩니다.

Prometheus와 모든 익스포터 및 향후 추가될 익스포터를 비활성화하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다

  2. 다음 줄을 추가하거나 찾아서 주석을 제거하고 false로 설정되었는지 확인합니다:

    prometheus_monitoring['enable'] = false
    sidekiq['metrics_enabled'] = false
    
    # Already set to `false` by default, but you can explicitly disable it to be sure
    puma['exporter_enabled'] = false
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.

Prometheus가 수신하는 포트 및 주소 변경#

Warning

Prometheus가 수신하는 포트를 변경할 수 있지만 변경하지 않는 것이 좋습니다. 이 변경은 GitLab 서버에서 실행되는 다른 서비스에 영향을 주거나 충돌할 수 있습니다. 위험을 감수하고 진행하십시오.

GitLab 서버 외부에서 Prometheus에 액세스하려면 Prometheus가 수신하는 주소/포트를 변경합니다:

  1. /etc/gitlab/gitlab.rb를 편집합니다

  2. 다음 줄을 추가하거나 찾아서 주석을 제거합니다:

    prometheus['listen_address'] = 'localhost:9090'
    

    localhost:9090을 Prometheus가 수신할 주소 또는 포트로 교체합니다. localhost 이외의 호스트에서 Prometheus에 대한 액세스를 허용하려면 호스트를 생략하거나 0.0.0.0을 사용하여 공개 액세스를 허용합니다:

    prometheus['listen_address'] = ':9090'
    # or
    prometheus['listen_address'] = '0.0.0.0:9090'
    
  3. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다

사용자 정의 스크랩 구성 추가#

/etc/gitlab/gitlab.rbprometheus['scrape_configs']를 편집하여 Prometheus 스크랩 대상 구성 구문을 사용하여 Linux 패키지 번들 Prometheus에 대한 추가 스크랩 대상을 구성할 수 있습니다.

다음은 http://1.1.1.1:8060/probe?param_a=test&param_b=additional_test를 스크랩하는 구성 예시입니다:

prometheus['scrape_configs'] = [
  {
    'job_name': 'custom-scrape',
    'metrics_path': '/probe',
    'params' => {
      'param_a' => ['test'],
      'param_b' => ['additional_test'],
    },
    'static_configs' => [
      'targets' => ['1.1.1.1:8060'],
    ],
  },
]

Linux 패키지를 사용한 독립형 Prometheus#

Linux 패키지를 사용하여 Prometheus를 실행하는 독립형 모니터링 노드를 구성할 수 있습니다. 외부 Grafana를 이 모니터링 노드에 구성하여 대시보드를 표시할 수 있습니다.

독립형 모니터링 노드는 여러 노드가 있는 GitLab 배포에 권장됩니다.

다음 단계는 Linux 패키지를 사용하여 Prometheus를 실행하는 모니터링 노드를 구성하는 데 필요한 최소 구성입니다:

  1. 모니터링 노드에 SSH로 접속합니다.

  2. GitLab 다운로드 페이지의 1단계 및 2단계를 사용하여 원하는 Linux 패키지를 설치하되, 나머지 단계는 따르지 마십시오.

  3. 다음 단계를 위해 Consul 서버 노드의 IP 주소 또는 DNS 레코드를 수집해야 합니다.

  4. /etc/gitlab/gitlab.rb를 편집하고 다음 내용을 추가합니다:

    roles ['monitoring_role']
    
    external_url 'http://gitlab.example.com'
    
    # Prometheus
    prometheus['listen_address'] = '0.0.0.0:9090'
    prometheus['monitor_kubernetes'] = false
    
    # Enable service discovery for Prometheus
    consul['enable'] = true
    consul['monitoring_service_discovery'] = true
    consul['configuration'] = {
       retry_join: %w(10.0.0.1 10.0.0.2 10.0.0.3), # The addresses can be IPs or FQDNs
    }
    
    # Nginx - For Grafana access
    nginx['enable'] = true
    
  5. sudo gitlab-ctl reconfigure를 실행하여 구성을 컴파일합니다.

다음 단계는 다른 모든 노드에 모니터링 노드의 위치를 알려주는 것입니다:

  1. /etc/gitlab/gitlab.rb를 편집하고 다음 줄을 추가하거나 찾아서 주석을 제거합니다:

    # can be FQDN or IP
    gitlab_rails['prometheus_address'] = '10.0.0.1:9090'
    

    여기서 10.0.0.1:9090은 Prometheus 노드의 IP 주소와 포트입니다.

  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 재구성합니다.

consul['monitoring_service_discovery'] = true를 사용하여 서비스 검색을 통한 모니터링을 활성화한 후, prometheus['scrape_configs']/etc/gitlab/gitlab.rb에 설정되어 있지 않은지 확인하십시오. /etc/gitlab/gitlab.rb에서 consul['monitoring_service_discovery'] = trueprometheus['scrape_configs']를 모두 설정하면 오류가 발생합니다.

외부 Prometheus 서버 사용#

Warning

Prometheus와 대부분의 익스포터는 인증을 지원하지 않습니다. 로컬 네트워크 외부에 노출하지 않는 것이 좋습니다.

GitLab을 외부 Prometheus 서버로 모니터링하려면 몇 가지 구성 변경이 필요합니다.

외부 Prometheus 서버를 사용하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다.

  2. 번들된 Prometheus를 비활성화합니다:

    prometheus['enable'] = false
    
  3. 각 번들된 서비스의 익스포터가 네트워크 주소에서 수신하도록 설정합니다. 예를 들어:

    node_exporter['listen_address'] = '0.0.0.0:9100'
    gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"
    
    # Rails nodes
    gitlab_exporter['listen_address'] = '0.0.0.0'
    gitlab_exporter['listen_port'] = '9168'
    registry['debug_addr'] = '0.0.0.0:5001'
    
    # Sidekiq nodes
    sidekiq['listen_address'] = '0.0.0.0'
    
    # Redis nodes
    redis_exporter['listen_address'] = '0.0.0.0:9121'
    
    # PostgreSQL nodes
    postgres_exporter['listen_address'] = '0.0.0.0:9187'
    
    # Gitaly nodes
    gitaly['configuration'] = {
       # ...
       prometheus_listen_addr: '0.0.0.0:9236',
    }
    
    # Pgbouncer nodes
    pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
    
  4. 필요한 경우 공식 설치 지침을 사용하여 전용 Prometheus 인스턴스를 설치하고 설정합니다.

  5. 모든 GitLab Rails(Puma, Sidekiq) 서버에서 Prometheus 서버 IP 주소와 수신 포트를 설정합니다. 예를 들어:

    gitlab_rails['prometheus_address'] = '192.168.0.1:9090'
    
  6. NGINX 메트릭을 스크랩하려면 Prometheus 서버 IP를 허용하도록 NGINX도 구성해야 합니다. 예를 들어:

    nginx['status']['options'] = {
          "server_tokens" => "off",
          "access_log" => "off",
          "allow" => "192.168.0.1",
          "deny" => "all",
    }
    

    여러 Prometheus 서버가 있는 경우 둘 이상의 IP 주소를 지정할 수도 있습니다:

    nginx['status']['options'] = {
          "server_tokens" => "off",
          "access_log" => "off",
          "allow" => ["192.168.0.1", "192.168.0.2"],
          "deny" => "all",
    }
    
  7. Prometheus 서버가 GitLab 메트릭 엔드포인트에서 가져올 수 있도록 Prometheus 서버 IP 주소를 모니터링 IP 허용 목록에 추가합니다:

    gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
    
  8. 각 번들된 서비스의 익스포터를 네트워크 주소에서 수신하도록 설정하고 있으므로, 활성화된 익스포터에 대해 Prometheus IP에서만 트래픽을 허용하도록 인스턴스의 방화벽을 업데이트합니다. 익스포터 서비스 및 각각의 포트의 전체 참조 목록이 있습니다.

  9. 변경 사항을 적용하려면 GitLab을 재구성합니다.

  10. Prometheus 서버의 구성 파일을 편집합니다.

  11. Prometheus 서버의 스크랩 대상 구성에 각 노드의 익스포터를 추가합니다. 예를 들어 static_configs를 사용하는 샘플 스니펫:

    scrape_configs:
      - job_name: nginx
        static_configs:
          - targets:
            - 1.1.1.1:8060
      - job_name: redis
        static_configs:
          - targets:
            - 1.1.1.1:9121
      - job_name: postgres
        static_configs:
          - targets:
            - 1.1.1.1:9187
      - job_name: node
        static_configs:
          - targets:
            - 1.1.1.1:9100
      - job_name: gitlab-workhorse
        static_configs:
          - targets:
            - 1.1.1.1:9229
      - job_name: gitlab-rails
        metrics_path: "/-/metrics"
        scheme: https
        static_configs:
          - targets:
            - 1.1.1.1
      - job_name: gitlab-sidekiq
        static_configs:
          - targets:
            - 1.1.1.1:8082
      - job_name: gitlab_exporter_database
        metrics_path: "/database"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitlab_exporter_sidekiq
        metrics_path: "/sidekiq"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitaly
        static_configs:
          - targets:
            - 1.1.1.1:9236
      - job_name: registry
        static_configs:
          - targets:
            - 1.1.1.1:5001
    

    [!warning] 스니펫의 gitlab-rails 작업은 GitLab이 HTTPS를 통해 접근 가능하다고 가정합니다. 배포에서 HTTPS를 사용하지 않는 경우, 작업 구성은 http 스키마와 포트 80을 사용하도록 조정됩니다.

  12. Prometheus 서버를 다시 로드합니다.

스토리지 보존 크기 구성#

Prometheus에는 로컬 스토리지를 구성하는 몇 가지 사용자 정의 플래그가 있습니다:

  • storage.tsdb.retention.time: 이전 데이터를 제거할 시기. 기본값은 15d입니다. 이 플래그가 기본값이 아닌 값으로 설정된 경우 storage.tsdb.retention을 재정의합니다.
  • storage.tsdb.retention.size: (실험적) 보존할 스토리지 블록의 최대 바이트 수. 오래된 데이터가 먼저 제거됩니다. 기본값은 0(비활성화)입니다. 이 플래그는 실험적이며 향후 릴리스에서 변경될 수 있습니다. 지원되는 단위: B, KB, MB, GB, TB, PB, EB. 예를 들어 512MB.

스토리지 보존 크기를 구성하려면:

  1. /etc/gitlab/gitlab.rb를 편집합니다:

    prometheus['flags'] = {
      'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data",
      'storage.tsdb.retention.time' => "7d",
      'storage.tsdb.retention.size' => "2GB",
      'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml"
    }
    
  2. GitLab을 재구성합니다:

    sudo gitlab-ctl reconfigure
    

성능 메트릭 보기#

Prometheus가 기본으로 제공하는 대시보드는 http://localhost:9090에서 방문할 수 있습니다.

같은 FQDN을 사용하는 경우 HSTS로 인해 GitLab 인스턴스에서 SSL이 활성화된 경우 GitLab과 같은 브라우저에서 Prometheus에 액세스하지 못할 수 있습니다. GitLab 테스트 프로젝트가 있어 액세스를 제공하지만 그 동안에는 몇 가지 해결책이 있습니다: 별도의 FQDN 사용, 서버 IP 사용, Prometheus에 별도의 브라우저 사용, HSTS 재설정, 또는 NGINX 프록시 사용.

Prometheus가 수집한 성능 데이터는 Prometheus 콘솔에서 직접 보거나 호환 가능한 대시보드 도구를 통해 볼 수 있습니다. Prometheus 인터페이스는 출력을 시각화할 수 있는 수집된 데이터로 작업하는 유연한 쿼리 언어를 제공합니다. 더 완전한 기능의 대시보드를 위해 Grafana를 사용할 수 있으며 Prometheus에 대한 공식 지원이 있습니다.

Prometheus 샘플 쿼리#

다음은 사용할 수 있는 몇 가지 샘플 Prometheus 쿼리입니다.

Note

이 예시는 모든 설정에서 작동하지 않을 수 있습니다. 추가 조정이 필요할 수 있습니다.

  • % CPU 사용률: 1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
  • % 사용 가능한 메모리: ((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100
  • 전송된 데이터: rate(node_network_transmit_bytes_total{device!="lo"}[5m])
  • 수신된 데이터: rate(node_network_receive_bytes_total{device!="lo"}[5m])
  • 디스크 읽기 IOPS: sum by (instance) (rate(node_disk_reads_completed_total[1m]))
  • 디스크 쓰기 IOPS: sum by (instance) (rate(node_disk_writes_completed_total[1m]))
  • GitLab 트랜잭션 수를 통한 RPS: sum(irate(gitlab_transaction_duration_seconds_count{controller!~'HealthController|MetricsController'}[1m])) by (controller, action)

Grafana 데이터 소스로서의 Prometheus#

Grafana를 사용하면 Prometheus 성능 메트릭을 데이터 소스로 가져오고 메트릭을 그래프와 대시보드로 렌더링할 수 있어 시각화에 도움이 됩니다.

단일 서버 GitLab 설정에 Prometheus 대시보드를 추가하려면:

  1. Grafana에서 새 데이터 소스를 생성합니다.
  2. 유형에서 Prometheus를 선택합니다.
  3. 데이터 소스 이름을 지정합니다(예: GitLab).
  4. Prometheus 서버 URL에 Prometheus 수신 주소를 추가합니다.
  5. HTTP 메서드GET으로 설정합니다.
  6. 저장하고 테스트하여 작동하는지 확인합니다.

GitLab 메트릭#

GitLab은 자체 내부 서비스 메트릭을 모니터링하고 /-/metrics 엔드포인트에서 사용할 수 있게 합니다. 다른 익스포터와 달리 이 엔드포인트는 사용자 트래픽과 동일한 URL 및 포트에서 사용 가능하기 때문에 인증이 필요합니다.

GitLab 메트릭에 대해 자세히 읽어보십시오.

번들 소프트웨어 메트릭#

Linux 패키지에 번들된 많은 GitLab 종속성은 Prometheus 메트릭을 내보내도록 사전 구성되어 있습니다.

노드 익스포터#

노드 익스포터를 사용하면 메모리, 디스크 및 CPU 사용률과 같은 다양한 머신 리소스를 측정할 수 있습니다.

노드 익스포터에 대해 자세히 읽어보십시오.

웹 익스포터#

웹 익스포터는 성능과 가용성을 향상시키기 위해 최종 사용자와 Prometheus 트래픽을 두 개의 별도 애플리케이션으로 분리할 수 있는 전용 메트릭 서버입니다.

웹 익스포터에 대해 자세히 읽어보십시오.

Redis 익스포터#

Redis 익스포터를 사용하면 다양한 Redis 메트릭을 측정할 수 있습니다.

Redis 익스포터에 대해 자세히 읽어보십시오.

PostgreSQL 익스포터#

PostgreSQL 익스포터를 사용하면 다양한 PostgreSQL 메트릭을 측정할 수 있습니다.

PostgreSQL 익스포터에 대해 자세히 읽어보십시오.

PgBouncer 익스포터#

PgBouncer 익스포터를 사용하면 다양한 PgBouncer 메트릭을 측정할 수 있습니다.

PgBouncer 익스포터에 대해 자세히 읽어보십시오.

레지스트리 익스포터#

레지스트리 익스포터를 사용하면 다양한 레지스트리 메트릭을 측정할 수 있습니다.

레지스트리 익스포터에 대해 자세히 읽어보십시오.

GitLab 익스포터#

GitLab 익스포터를 사용하면 Redis 및 데이터베이스에서 가져온 다양한 GitLab 메트릭을 측정할 수 있습니다.

GitLab 익스포터에 대해 자세히 읽어보십시오.

문제 해결#

/var/opt/gitlab/prometheus가 디스크 공간을 너무 많이 사용합니다#

Prometheus 모니터링을 사용하지 않는 경우:

  1. Prometheus를 비활성화합니다.
  2. /var/opt/gitlab/prometheus 아래의 데이터를 삭제합니다.

Prometheus 모니터링을 사용하는 경우:

  1. Prometheus를 중지합니다(실행 중에 데이터를 삭제하면 데이터 손상이 발생할 수 있습니다):

    gitlab-ctl stop prometheus
    
  2. /var/opt/gitlab/prometheus/data 아래의 데이터를 삭제합니다.

  3. 서비스를 다시 시작합니다:

    gitlab-ctl start prometheus
    
  4. 서비스가 실행 중인지 확인합니다:

    gitlab-ctl status prometheus
    
  5. 선택 사항. 스토리지 보존 크기를 구성합니다.

모니터링 노드가 데이터를 수신하지 않습니다#

모니터링 노드가 데이터를 수신하지 않는 경우 익스포터가 데이터를 캡처하고 있는지 확인합니다:

curl "http[s]://localhost:/metrics"

또는

curl "http[s]://localhost:/-/metrics"