Sync Gatewayデプロイメント：Prometheus連携

## はじめに

ここでは、Sync GatewayとPrometheusを統合して、Sync Gatewayイベントの効果的な監視とアラートを提供する方法について説明します。



## 概要
Sync GatewayのメトリクスREST APIは、Prometheusと互換性のあるJSON形式で統計情報を公開します。

## 構成
Metrics REST APIは、ポート4986でデフォルトで有効になっています。これを変更するには、ブートストラップ構成ファイルの設定`api.metricsInterface`を編集し、Sync Gateway URLとAPIを提供するポートを定義する必要があります。


#### メトリックインターフェイスエンドポイントの設定


ブートストラップ構成ファイル内：

```JSON
"api.metricsInterface": "127.0.0.1:4986" 
```

ここでは、Sync GatewayのURLと、Metrics REST APIを提供するために必要なポート（この場合は4986）を定義します。

## 統合
Sync GatewayのメトリクスフィードをPrometheusデプロイメントと統合する必要があります。Couchbaseは、Prometheusとのこの統合を容易にするために、構成ファイルとサンプルルールファイルの両方を提供します。

Prometheus構成ファイル（prometheus.yml）とルールファイル（rules/sync-gateway.rules.yml）の両方をSync GatewayのリリースパッケージからPrometheusの/etcディレクトリにコピーします。


```BASH
/etc/prometheus/prometheus.yml  ①
/etc/prometheus/rules/sync-gateway.rules.yml　② 
```

①　Prometheusの起動時にコマンドラインフラグ`--config.file`を使用してパスを指定することで、この場所を変更できます
② `prometheus.yml`構成ファイルの`rule_files`セクションでパスを編集することにより、ルールファイルの別の場所を指定できます。



## 構成
Sync Gatewayで動作するPrometheusの構成は、2つのファイルによって管理され、そのスターターコピーはSync Gatewayで提供されます。

### Prometheus構成ファイル
提供されているprometheus.ymlファイルは、Sync　Gatewayメトリックターゲットをスクレイプするために必要な構成を指定します。この例では、Sync Gatewayの`metricsInterface` を`sync_gateway:4986/_metrics`でアクセス可能として定義しています 。複数のSync Gatewayがある場合は、（`targets`として）ここですべてのエンドポイントを指定できます。

### プロメテウスルールファイル
Prometheusのルールファイルを使用すると、記録ルールとアラートルールの両方を指定できます。Sync Gatewayのすぐに使用可能なルールセットは、必要に応じてカスタマイズできる開始点を提供します。ルールは次のとおりです。

- すべてのクエリ数を合計して保存する合計クエリレコード `sgw::gsi::total_queries`
- アラート

#### サンプルファイルの内容
##### 構成: prometheus.yaml

prometheus.yml構成ファイル（）は、Prometheusサーバーの起動に使用する構成を指定します。

```YAML
global:
  scrape_interval:     5s  ①
  evaluation_interval: 5s

rule_files: ②
  - '/etc/prometheus/rules/*'

scrape_configs:
  - job_name: swg
    metrics_path: /_metrics
    static_configs:
      - targets: ③
          - sync_gateway:4986
```

- ① `scrape_interval` ポーリング間隔を指定します。この間隔は、Prometheusがこのエンドポイントからデータをスクレイピングする頻度を決定します。必要に応じて調整できます。
- ② `rules_filesPrometheus` ルールファイルへのパスを指定します。ルールファイルは、収集された統計に基づいてカスタムアラートを定義します。
- ③ この`targets`プロパティは、Prometheusが統計を利用できるようにするターゲットのリストを指定します。ここでは、Sync Gatewayの`metricsInterface`を指定します。複数のSync Gatewayがある場合は、ここでそれぞれのエンドポイントを指定できます。

##### ルール: sync-gateway-rules.yaml

```yaml
groups:
  - name: sync-gateway.rules
    rules:
      - record: sgw::gsi::total_queries ① 
        expr: sum by (instance, database, job) ({__name__=~"sgw_gsi_views_.*_count"})
      - alert: TooManyAuthFailuresInLastHour
        expr: increase(sgw_security_auth_failed_count[1h]) > 1000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: Too Many Auth Failures in Last Hour
      - alert: TooManyDocumentAccessFailuresInLastHour ②
        expr: increase(sgw_security_num_access_errors[1h]) > 1000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: Too many Document Access Failures in last hour
      - alert: TooManyDocumentRejectionFailuresInLastHour
        expr: increase(sgw_security_num_docs_rejected[1h]) > 1000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: Too many Document Rejection Failures in last hour
      - alert: HighRevCacheMissRate
        expr: sgw_cache_rev_cache_misses / (sgw_cache_rev_cache_misses + sgw_cache_rev_cache_hits) >= 0.8
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: High Rev Cache Miss Rate
      - alert: HighChannelCacheMissRate
        expr: sgw_cache_chan_cache_misses / (sgw_cache_chan_cache_misses + sgw_cache_chan_cache_hits) >= 0.8
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: High Channel Cache Miss Rate
      - alert: HighDeltaCacheMissRate
        expr: sgw_delta_sync_delta_sync_miss / (sgw_delta_sync_delta_sync_miss + sgw_delta_sync_delta_cache_hit) >= 0.8
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: High Delta Cache Miss Rate
      - alert: GlobalErrorCount
        expr: increase(sgw_resource_utilization_error_count[1h]) > 1
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: An error occurred in the last hour
      - alert: WarnXattrSizeCount
        expr: increase(sgw_database_warn_xattr_size_count[1h]) > 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: A document had larger sync data than the maximum allowed by xattrs in the last hour
      - alert: SGRNumDocsFailedToPull
        expr: increase(sgw_replication_sgr_num_docs_failed_to_pull[1h]) > 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: At least one document failed to be pulled with Inter Sync Gateway Replication in the last hour
      - alert: SGRNumDocsFailedToPush
        expr: increase(sgw_replication_sgr_num_docs_failed_to_push[1h]) > 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: At least one document failed to be pushed with Inter Sync Gateway Replication in the last hour
```

- ① ここでは、記録ルールを定義します。記録ルールを使用すると、頻繁に使用される（または計算コストの高い）式の結果を計算して保存できます。
- ② ここでは、アラートルールを定義します。アラートルールを使用すると、式に基づいてアラート条件を定義し、式が満たされたときに通知を送信できます。

## 関連情報

https://docs.couchbase.com/sync-gateway/3.0/stats-prometheus.html