第2章 ロギングの設定
本章では、Ceph の各種サブシステム向けにロギングを設定する方法について説明します。
ロギングはリソース集約的作業です。また、詳細なロギングは比較的短時間に膨大な量のデータを生成しかねません。クラスターの特定のサブシステム内で問題が発生している場合は、該当するサブシステムのロギングのみを有効にしてください。詳細は、「Ceph サブシステム」 を参照してください。
また、ログファイルのローテーション設定も検討してください。詳細は 「ログローテーションの迅速化」 を参照してください。
問題が解決したら、サブシステムのログとメモリーのレベルをデフォルト値に戻します。Ceph の全サブシステムおよびそれらのデフォルト値については、付録A サブシステムのデフォルトのロギングレベル を参照してください。
Ceph のロギングは以下の方法で設定できます。
-
ランタイムに
ceph
コマンドを使用する。これが一般的なアプローチです。詳細は、「ランタイムのロギング設定」 を参照してください。 - Ceph 設定ファイルを更新する。クラスターの起動時に問題が発生している場合は、このアプローチを使用してください。詳細は、「Ceph 設定ファイルでのロギング設定」 を参照してください。
2.1. Ceph サブシステム
本セクションでは、Ceph サブシステムとそれらのロギングレベルについて説明します。
Ceph サブシステムとロギングレベル
Ceph はいくつかのサブシステムで構成されており、各サブシステムには以下のロギングレベルがあります。
-
出力ログ。これはデフォルトで
/var/log/ceph/
ディレクトリーに保存されます (ログレベル)。 - メモリーキャッシュに保存されるログ (メモリーレベル)。
一般的に、Ceph は以下の場合を除いてメモリーにあるログを出力ログに送信しません。
- 致命的なシグナルが発生した場合。
- リソースコードのアサートが発動された場合。
- ユーザーがリクエストした場合。
Ceph のロギングレベルは、1
から 20
までの値を設定することができます。1
が最も簡潔で、20
が最も詳細になります。
ログレベルとメモリーレベルに単一の値を使用すると、それらに同じ値が設定されます。例えば、debug_osd = 5
とすると、ceph-osd
デーモンのデバッグレベルは 5
に設定されます。
ログレベルとメモリーレベルに異なる値を設定するには、それらの値をスラッシュ (/
) でわけます。例えば、debug_mon = 1/5
とすると、ceph-mon
デーモンのデバッグログレベルは 1
に、メモリーログレベルは 5
に設定されます。
よく使用される Ceph サブシステムとそのデフォルト値
サブシステム | ログレベル | メモリーレベル | 説明 |
---|---|---|---|
|
1 |
5 |
管理ソケット |
|
1 |
5 |
認証 |
|
0 |
5 |
|
|
1 |
5 |
FileStore OSD バックエンド |
|
1 |
5 |
OSD ジャーナル |
|
1 |
5 |
メタデータサーバー |
|
0 |
5 |
モニタークライアントが、Ceph デーモンとモニター間のほとんどの通信を処理します。 |
|
1 |
5 |
モニター |
|
0 |
5 |
Ceph コンポーネント間のメッセージングシステム |
|
0 |
5 |
OSD デーモン |
|
0 |
5 |
モニターが合意を確立するために使用するアルゴリズム |
|
0 |
5 |
Ceph の核となるコンポーネントの Reliable Autonomic Distributed Object Store |
|
0 |
5 |
Ceph ブロックデバイス |
|
1 |
5 |
Ceph オブジェクトゲートウェイ |
ログ出力の例
以下は、モニターおよび OSD 向けのログの詳細度を高めた場合に出力されるログメッセージの例です。
モニターのデバッグ設定
debug_ms = 5 debug_mon = 20 debug_paxos = 20 debug_auth = 20
モニターのデバッグ設定のログ出力例
2016-02-12 12:37:04.278761 7f45a9afc700 10 mon.cephn2@0(leader).osd e322 e322: 2 osds: 2 up, 2 in 2016-02-12 12:37:04.278792 7f45a9afc700 10 mon.cephn2@0(leader).osd e322 min_last_epoch_clean 322 2016-02-12 12:37:04.278795 7f45a9afc700 10 mon.cephn2@0(leader).log v1010106 log 2016-02-12 12:37:04.278799 7f45a9afc700 10 mon.cephn2@0(leader).auth v2877 auth 2016-02-12 12:37:04.278811 7f45a9afc700 20 mon.cephn2@0(leader) e1 sync_trim_providers 2016-02-12 12:37:09.278914 7f45a9afc700 11 mon.cephn2@0(leader) e1 tick 2016-02-12 12:37:09.278949 7f45a9afc700 10 mon.cephn2@0(leader).pg v8126 v8126: 64 pgs: 64 active+clean; 60168 kB data, 172 MB used, 20285 MB / 20457 MB avail 2016-02-12 12:37:09.278975 7f45a9afc700 10 mon.cephn2@0(leader).paxosservice(pgmap 7511..8126) maybe_trim trim_to 7626 would only trim 115 < paxos_service_trim_min 250 2016-02-12 12:37:09.278982 7f45a9afc700 10 mon.cephn2@0(leader).osd e322 e322: 2 osds: 2 up, 2 in 2016-02-12 12:37:09.278989 7f45a9afc700 5 mon.cephn2@0(leader).paxos(paxos active c 1028850..1029466) is_readable = 1 - now=2016-02-12 12:37:09.278990 lease_expire=0.000000 has v0 lc 1029466 .... 2016-02-12 12:59:18.769963 7f45a92fb700 1 -- 192.168.0.112:6789/0 <== osd.1 192.168.0.114:6800/2801 5724 ==== pg_stats(0 pgs tid 3045 v 0) v1 ==== 124+0+0 (2380105412 0 0) 0x5d96300 con 0x4d5bf40 2016-02-12 12:59:18.770053 7f45a92fb700 1 -- 192.168.0.112:6789/0 --> 192.168.0.114:6800/2801 -- pg_stats_ack(0 pgs tid 3045) v1 -- ?+0 0x550ae00 con 0x4d5bf40 2016-02-12 12:59:32.916397 7f45a9afc700 0 mon.cephn2@0(leader).data_health(1) update_stats avail 53% total 1951 MB, used 780 MB, avail 1053 MB .... 2016-02-12 13:01:05.256263 7f45a92fb700 1 -- 192.168.0.112:6789/0 --> 192.168.0.113:6800/2410 -- mon_subscribe_ack(300s) v1 -- ?+0 0x4f283c0 con 0x4d5b440
OSD のデバッグ設定
debug_ms = 5 debug_osd = 20 debug_filestore = 20 debug_journal = 20
OSD のデバッグ設定のログ出力例
2016-02-12 11:27:53.869151 7f5d55d84700 1 -- 192.168.17.3:0/2410 --> 192.168.17.4:6801/2801 -- osd_ping(ping e322 stamp 2016-02-12 11:27:53.869147) v2 -- ?+0 0x63baa00 con 0x578dee0 2016-02-12 11:27:53.869214 7f5d55d84700 1 -- 192.168.17.3:0/2410 --> 192.168.0.114:6801/2801 -- osd_ping(ping e322 stamp 2016-02-12 11:27:53.869147) v2 -- ?+0 0x638f200 con 0x578e040 2016-02-12 11:27:53.870215 7f5d6359f700 1 -- 192.168.17.3:0/2410 <== osd.1 192.168.0.114:6801/2801 109210 ==== osd_ping(ping_reply e322 stamp 2016-02-12 11:27:53.869147) v2 ==== 47+0+0 (261193640 0 0) 0x63c1a00 con 0x578e040 2016-02-12 11:27:53.870698 7f5d6359f700 1 -- 192.168.17.3:0/2410 <== osd.1 192.168.17.4:6801/2801 109210 ==== osd_ping(ping_reply e322 stamp 2016-02-12 11:27:53.869147) v2 ==== 47+0+0 (261193640 0 0) 0x6313200 con 0x578dee0 .... 2016-02-12 11:28:10.432313 7f5d6e71f700 5 osd.0 322 tick 2016-02-12 11:28:10.432375 7f5d6e71f700 20 osd.0 322 scrub_random_backoff lost coin flip, randomly backing off 2016-02-12 11:28:10.432381 7f5d6e71f700 10 osd.0 322 do_waiters -- start 2016-02-12 11:28:10.432383 7f5d6e71f700 10 osd.0 322 do_waiters -- finish
その他の参照先
2.2. ランタイムのロギング設定
ランタイムに Ceph デバッグ出力である dout()
をアクティベートするには、以下を実行します。
ceph tell <type>.<id> injectargs --debug-<subsystem> <value> [--<name> <value>]
上記コマンドで
-
<type>
を Ceph デーモンのタイプ (osd
、mon
、またはmds
) で置き換えます。 -
<id>
を Ceph デーモンの特定 ID で置き換えます。別の方法では、*
を使ってランタイム設定を特定のタイプのデーモンすべてに適用することもできます。 -
<subsystem>
を特定のサブシステムで置き換えます。詳細は 「Ceph サブシステム」 を参照してください。 -
<value>
を1
から20
までの数字で置き換えます。1
が最も簡潔で、20
が最も詳細になります。
例えば、osd.0
という名前の OSD にある OSD サブシステムのログレベルを 0 に、メモリーレベルを 5 に設定するには、以下を実行します。
# ceph tell osd.0 injectargs --debug-osd 0/5
ランタイム設定を確認するには、以下を実行します。
-
ceph-osd
やceph-mon
などの実行中の Ceph デーモンのあるホストにログインします。 設定を表示します。
ceph daemon <name> config show | less
以下のように Ceph デーモンの名前を指定します。
# ceph daemon osd.0 config show | less
その他の参照先
- 「Ceph 設定ファイルでのロギング設定」
- Red Hat Ceph Storage 2 の Configuration Guide に記載の Logging Configuration Reference の章。
2.3. Ceph 設定ファイルでのロギング設定
起動時に Ceph デバッグ出力である dout()
をアクティベートするには、Ceph 設定ファイルにデバッグ設定を追加します。
-
各デーモンで共通のサブシステムの場合は、
[global]
セクションに設定を追加します。 -
特定のデーモンのサブシステムの場合は、
[mon]
、[osd]
、または[mds]
などのデーモンのセクションに設定を追加します。
例を以下に示します。
[global] debug_ms = 1/5 [mon] debug_mon = 20 debug_paxos = 1/5 debug_auth = 2 [osd] debug_osd = 1/5 debug_filestore = 1/5 debug_journal = 1 debug_monc = 5/20 [mds] debug_mds = 1
その他の参照先
- 「Ceph サブシステム」
- 「ランタイムのロギング設定」
- Red Hat Ceph Storage 2 の Configuration Guide に記載の Logging Configuration Reference の章。
2.4. ログローテーションの迅速化
Ceph コンポーネントのデバッグレベルを上げると、大量のデータが生成される可能性があります。ディスクが満杯に近い場合は、/etc/logrotate.d/ceph
にある Ceph ログローテーションファイルを修正することでログのローテーションを早めることができます。Cron ジョブスケジューラーはこのファイルを使用してログのローテーションをスケジュールします。
手順: ログローテーションの迅速化
ログのローテーションファイルでローテーション頻度の後に size 設定を追加します。
rotate 7 weekly size <size> compress sharedscripts
例えば、ログファイルが 500 MB に達したらローテーションするようにします。
rotate 7 weekly size 500 MB compress sharedscripts size 500M
crontab
エディターを開きます。$ crontab -e
/etc/logrotate.d/ceph
ファイルをチェックするようにするエントリーを追加します。Cron が 30 分ごとに/etc/logrotate.d/ceph
をチェックするようにするには、以下のようにします。30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1
その他の参照先
- Red Hat Enterprise Linux 7 システム管理者のガイドの システムタスクの自動化 のセクション。