Couchbase Server 管理者として知っておきたいこと〜ログ管理

# はじめに

データプラットフォーム管理者として押さえておくべきことの一つとして、障害や性能問題が発生した時の原因究明のために、システムからログを収集し、それを製品のサポート窓口や、社外の識者へ提供する際に何を行わなければならないかを把握しておくことがあります。

また、システム監査の観点から、そのような活動において、どのような情報が社外へ流出されるのか（されないのか）、を説明できるようになっておくことも重要です。

本稿では、このような観点から、Couchbase Serverにおけるログの扱いについて解説します。

# ログの外部提供

## ログ・リダクション
Couchbase Serverには、ログ収集時に、機密情報または個人識別情報を削除することのできるオプションがあります。

### 削除される情報
- JSON ドキュメント内の キーとバリュー
- ユーザー名
- クエリ文に含まれるドキュメントのフィールド名
- 製品導入の際に尋ねられた名前とメールアドレス
- ドキュメントの拡張属性 (`xattrs`: extended attributes )　

## ログ収集方法

以下の複数の方法で、サポートへの提供用にログを収集することができます。

### WEB管理コンソールからの実行

WEB管理コンソールから、直感的な操作でログを収集することができます。ネットワーク的に許される場合、直接サポートへログを送付することも可能になっています。

### コマンドによる実行

```
/opt/couchbase/cbcollect_info <options> <output_file>
```
以下が、指定可能なオプションです。

- --tmp-dir
- --log-reduction-level
- --upload-host
- --customer
- --upload-proxy
- --ticket

### コマンドによる実行（バックグラウンド実行）

```
$ couchbase-cli collect-logs-start -c <ip> -u Admin -p password \
--all-nodes --redaction-level partial
```
```
$ couchbase-cli collect-log-status -c <ip> -u Admin -p password
```
```
$ couchbase-cli collect-log-stop -c <ip> -u Admin -p password
```
###  REST APIによる実行例

```
curl -X POST http://localhost:8091/startLogsCollection \
-u Administrator:password \
-d logRedactionLevel =partial \
-d logRedactionSalt =Wl1XrXNuHWzr+ke7gnuUaKAtML6TFIynjhImeMYHEgI= \
-d nodes=*
```

## ログファイル

|ファイル名|ログ内容|
|---|---|
|cbcollect_info.log|cbcollect_infoのパフォーマンスに関する情報を含む|
|couchbase.log|システムレベルの情報を格納。cbcollect_infoコマンド実行によるログ収集時に生成される|
|ddocs.log|JSON 形式の各バケットの設計ドキュメントを含む|
|diag.log|ノードの実行中のサービスから出力されたクラスター・マネージャーの診断情報の要約|
|kv_trace.json|Phosphor(Couchbase Serverで使用するために設計された C++11 アプリケーション用の高性能イベント トレーシングフレームワーク)がキーバリュー操作トレースに使用するメタデータ|
|ini.log|すべての初期構成（ini configuration）ファイルのダンプ|
|master_events.log|バケットの作成やvBucket移動などのリバランス情報など、クラスターに関連する主要なイベントを含む|
|memcached.log|vBucket、レプリカ、データストリーム要求のリバランスなど、コアmemcached コンポーネントに関する情報を含む|
|projector_pprof.log|プロジェクター・プロセス用にキャプチャされた Goルーチンダンプ。Goルーチンダンプは、他の言語でのフルスレッド ダンプと同等であり、その時点でのプロセスの実行に関する貴重な洞察を得ることができる|
|stats.log|cbstatsコマンドからの出力情報を含む。cbcollect_infoコマンド実行によるログ収集時に生成される|
|syslog.tar.gz|各種システムレベルのログのアーカイブ|
|systemd_journal.gz|systemdログ(Linux のみ)|

## `cblogredaction`コマンド

これは、SDKやcbbackupmgrログファイルなど、上記の方法での収集対象ではない、CouchbaseServerのログファイルを編集するためのツールです。編集されたファイルは`redacted-[filename]`という名前で、現在の作業ディレクトリに作成されます。

#### 実行例
```
cblogredaction [-h] (-s <string> | -g) [-t <num>] [-o <path>] [-v]
                 File [File …​]
```
### オプション解説

#### -s <文字列>、-salt <文字列>
データのハッシュに使用するソルトを指定します。ルトをCouchbase Serverで使用されているものと同じにすることでログを簡単に相互参照できるようになります。Couchbase Serverソルトは、`cbcollect_info`によって生成されたzipファイルのcouchbase.logの先頭にあります。

#### -g -generate-salt
データのハッシュに使用されるソルトを自動的に生成します。

#### -t <num> -threads <num>
ファイルを編集するために使用するスレッドの数。このオプションは、スレッド一つ一つが、一度に一つファイルに対してのみ作業するため、複数のファイルが指定されている場合にのみ使用します。

#### -o <パス> -output-dir <パス>
編集済みログを配置するディレクトリを指定します。このオプションを使用しない場合、編集済みログは現在の作業ディレクトリに配置されます。

#### -v -verbose
出力の詳細度を上げると、指定される回数が増えるほど、ログがより詳細になります。

## ログファイルロケーション設定

デフォルトロケーション： `/opt/couchbase/var/couchbase/logs`

設定ファイル： `static_config`

設定項目: `{error_logger_mf_dir, "/cb/couchbase/var/couchbase/"}`

デフォルトのロケーションのみ、Couchbase社によって、サポートされる。

# 参考情報

[cbcollect_info](https://docs.couchbase.com/server/current/cli/cbcollect-info-tool.html)
[cblogredaction](https://docs.couchbase.com/server/current/cli/cbcli/cblogredaction.html)