Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第2章 ロギングの設定

本章では、Ceph の各種サブシステム向けにロギングを設定する方法について説明します。

重要

ロギングはリソース集約的作業です。また、詳細なロギングは比較的短時間に膨大な量のデータを生成しかねません。クラスターの特定のサブシステム内で問題が発生している場合は、該当するサブシステムのロギングのみを有効にしてください。詳細は、「Ceph サブシステム」 を参照してください。

また、ログファイルのローテーション設定も検討してください。詳細は 「ログローテーションの迅速化」 を参照してください。

問題が解決したら、サブシステムのログとメモリーのレベルをデフォルト値に戻します。Ceph の全サブシステムおよびそれらのデフォルト値については、付録A サブシステムのデフォルトのロギングレベル を参照してください。

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 サブシステムとそのデフォルト値

サブシステムログレベルメモリーレベル説明

asok

1

5

管理ソケット

auth

1

5

認証

client

0

5

librados を使ってクラスターに接続するアプリケーションまたはライブラリー

filestore

1

5

FileStore OSD バックエンド

journal

1

5

OSD ジャーナル

mds

1

5

メタデータサーバー

monc

0

5

モニタークライアントが、Ceph デーモンとモニター間のほとんどの通信を処理します。

mon

1

5

モニター

ms

0

5

Ceph コンポーネント間のメッセージングシステム

osd

0

5

OSD デーモン

paxos

0

5

モニターが合意を確立するために使用するアルゴリズム

rados

0

5

Ceph の核となるコンポーネントの Reliable Autonomic Distributed Object Store

rbd

0

5

Ceph ブロックデバイス

rgw

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 デーモンのタイプ (osdmon、または 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

ランタイム設定を確認するには、以下を実行します。

  1. ceph-osdceph-mon などの実行中の Ceph デーモンのあるホストにログインします。
  2. 設定を表示します。

    ceph daemon <name> config show | less

    以下のように Ceph デーモンの名前を指定します。

    # ceph daemon osd.0 config show | less

その他の参照先

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

その他の参照先

2.4. ログローテーションの迅速化

Ceph コンポーネントのデバッグレベルを上げると、大量のデータが生成される可能性があります。ディスクが満杯に近い場合は、/etc/logrotate.d/ceph にある Ceph ログローテーションファイルを修正することでログのローテーションを早めることができます。Cron ジョブスケジューラーはこのファイルを使用してログのローテーションをスケジュールします。

手順: ログローテーションの迅速化

  1. ログのローテーションファイルでローテーション頻度の後に size 設定を追加します。

    rotate 7
    weekly
    size <size>
    compress
    sharedscripts

    例えば、ログファイルが 500 MB に達したらローテーションするようにします。

    rotate 7
    weekly
    size 500 MB
    compress
    sharedscripts
    size 500M
  2. crontab エディターを開きます。

    $ crontab -e
  3. /etc/logrotate.d/ceph ファイルをチェックするようにするエントリーを追加します。Cron が 30 分ごとに /etc/logrotate.d/ceph をチェックするようにするには、以下のようにします。

    30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1

その他の参照先