Apache Cassandra

Apache Cassandra との統合では、リクエスト、タスク、ストレージの指標を収集し、インスタンスの負荷を分析します。必要に応じて、メモリとガベージ コレクションに関連する一般的な JVM 指標も収集できます。この統合では、システムログ、デバッグログ、ガベージ コレクションのログも収集されます。これらのログが解析され、メッセージ、Java クラス、行番号のフィールドを含む JSON ペイロードが生成されます。

Cassandra の詳細については、http://cassandra.apache.org/ をご覧ください。

前提条件

Cassandra のログと指標を収集して取り込むには、バージョン 2.6.0 以降の Ops エージェントをインストールする必要があります。

このレシーバーは、Apache Cassandra バージョン 3.11 と 4.0 をサポートしています。

Cassandra インスタンスを構成する

JMX エンドポイントを公開するには、JVM の起動時に com.sun.management.jmxremote.port システム プロパティを設定する必要があります。また、com.sun.management.jmxremote.rmi.port システム プロパティも同じポートに設定することをおすすめします。JMX エンドポイントをリモートで公開するには、java.rmi.server.hostname システム プロパティも設定する必要があります。

デフォルトでは、これらのプロパティは Cassandra デプロイの cassandra-env.sh ファイルで設定されています。

コマンドライン引数を使用してシステム プロパティを設定するには、JVM の起動時にプロパティ名の前に -D を付けます。たとえば、com.sun.management.jmxremote.port をポート 7199 に設定するには、JVM の起動時に次のように指定します。

-Dcom.sun.management.jmxremote.port=7199

Cassandra の Ops エージェントを構成する

Ops エージェントの構成のガイドに従って、Cassandra インスタンスからログと指標を収集するために必要な要素を追加して、エージェントを再起動します。

構成の例

次のコマンドは、Cassandra のログと指標を収集して取り込み、Linux で Ops エージェントを再起動するための構成ファイルを作成します。

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
  receivers:
    cassandra_system:
      type: cassandra_system
    cassandra_debug:
      type: cassandra_debug
    cassandra_gc:
      type: cassandra_gc
  service:
    pipelines:
      apache:
        receivers:
          - cassandra_system
          - cassandra_debug
          - cassandra_gc
metrics:
  receivers:
    cassandra:
      type: cassandra
      endpoint: localhost:7199
  service:
    pipelines:
      cassandra:
        receivers:
          - cassandra
EOF
sudo service google-cloud-ops-agent restart

この例では、com.sun.management.jmxremote.portcom.sun.management.jmxremote.rmi.port のシステム プロパティは 7199 に、java.rmi.server.hostname システム プロパティは 127.0.0.1 に設定されています。詳細については、指標の収集を構成するをご覧ください。

ログの収集を構成する

Cassandra からログを取り込むには、Cassandra が生成するログのレシーバーを作成し、新しいレシーバーのパイプラインを作成する必要があります。

cassandra_system ログのレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は cassandra_system を指定してください。
include_paths [/var/log/cassandra/system*.log] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスには、/var/log/cassandra/system*.log のように、ワイルドカード(*)を使用できます。
exclude_paths [] include_paths の照合で除外するファイルシステム パスのパターンのリスト。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。時間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトよりも短い間隔で実施され、ロギングのスループットが高い場合に有用な可能性があります。


cassandra_debug ログのレシーバを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は cassandra_debug を指定してください。
include_paths [/var/log/cassandra/debug*.log] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスには、/var/log/cassandra/system*.log のように、ワイルドカード(*)を使用できます。
exclude_paths [] include_paths の照合で除外するファイルシステム パスのパターンのリスト。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。時間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。


cassandra_gc ログのレシーバを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は cassandra_gc を指定してください。
include_paths [/var/log/cassandra/gc.log.*.current] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスには、/var/log/cassandra/system*.log のように、ワイルドカード(*)を使用できます。
exclude_paths [] include_paths の照合で除外するファイルシステム パスのパターンのリスト。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイルのパスの更新間隔。時間を指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に有用です。

ログの内容

cassandra_systemcassandra_debugcassandra_gc ログの logName は、構成で指定されたレシーバー ID から取得されます。LogEntry 内の詳細なフィールドは、次のとおりです。

cassandra_systemcassandra_debug
これらのログでは、LogEntry に次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.module 文字列 ログが発生した Cassandra のモジュール
jsonPayload.javaClass 文字列 ログが発生した Java クラス
jsonPayload.lineNumber 数値 ログが発生したソースファイルの行番号
jsonPayload.message 文字列 ログ メッセージ(指定した場合の詳細なスタックトレースを含む)
severity 文字列(LogSeverity ログエントリ レベル(翻訳済み)
timestamp 文字列(Timestamp リクエストを受信した時刻

ログエントリに空白や欠落しているフィールドは含まれません。

cassandra_gc
ログでは、LogEntry に次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.uptime 数値 JVM がアクティブであった秒数
jsonPayload.timeStopped 数値 ガベージ コレクションのために JVM が停止された秒数
jsonPayload.timeStopping 数値 JVM がガベージ コレクションの前にスレッドを停止するのに要した秒数
jsonPayload.message 文字列 ログ メッセージ
timestamp 文字列(Timestamp エントリがログに記録された時刻

指標の収集を構成する

Cassandra ノードから指標を収集するには、Cassandra 指標のレシーバーを作成し、それから新しいレシーバーのパイプラインを作成する必要があります。Cassandra 指標のレシーバーを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は cassandra を指定してください。
endpoint localhost:7199 サービス URL の作成に使用される JMX サービス URL またはホストとポート。この値は、service:jmx:<protocol>:<sap> または host:port の形式にする必要があります。host:port フォームの値は、service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi というサービス URL を作成するために使用されます。
collect_jvm_metrics true サポートされている JVM 指標も収集するようにレシーバーを構成します。
username JMX が認証を要求するように構成されている場合、構成されたユーザー名。
password JMX が認証を要求するように構成されている場合、構成されたパスワード。
collection_interval 60s time.Duration 値(例: 30s5m)。

モニタリング対象

次の表に、Ops エージェントが Cassandra インスタンスから収集する指標の一覧を示します。

指標タイプ
種類、タイプ
モニタリング対象リソース
ラベル
workload.googleapis.com/cassandra.client.request.count
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/cassandra.client.request.error.count
CUMULATIVEINT64
gce_instance
operation
status
workload.googleapis.com/cassandra.client.request.range_slice.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.compaction.tasks.completed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.compaction.tasks.pending
GAUGEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.load.count
GAUGEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.in_progress.count
GAUGEINT64
gce_instance
 

ダッシュボードの例

サンプルの Cloud Monitoring ダッシュボードを使用して、この統合からの指標を表示できます。サンプル ダッシュボードのインストール手順を完了して、サンプル ライブラリから Cassandra GCE の概要ダッシュボードをインポートし、Cassandra 指標を表示するグラフを表示します。

構成を確認する

ログ エクスプローラと Metrics Explorer を使用して、Cassandra レシーバーが正しく構成されていることを確認できます。Ops エージェントがログと指標の収集を開始するまでに 1~2 分かかる場合があります。

ログが取り込まれていることを確認するには、ログ エクスプローラに移動し、次のクエリを実行して Cassandra のログを表示します。

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/cassandra_system" OR "projects/PROJECT_ID/logs/cassandra_debug" OR "projects/PROJECT_ID/logs/cassandra_gc")


指標が取り込まれていることを確認するには、Metrics Explorer に移動し、[MQL] タブで次のクエリを実行します。

fetch gce_instance
| metric 'workload.googleapis.com/cassandra.client.request.count'
| align rate(1m)
| every 1m

次のステップ

Ansible を使用して Ops エージェントをインストールし、サードパーティ アプリケーションを構成してサンプル ダッシュボードをインストールする方法については、Ops エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。