ども、 cloudpack の かっぱ (@inokara) です。
はじめに
Sensu のメトリクス要員としてもはやデフォルトな Graphite ですが、バックエンドとなる carbon-cache や whisper のスケールに頭を悩ませている方々は多いようです。そんな中でストレージ部分を Cassandra に置き換える為の cyanite というアプリケーションが公開されているので試してみました。
cyanite とは
プロジェクト、参考
- pyr/cyanite
- Cassandra Summit 2014: Cyanite — Better Graphite Storage with Apache Cassandra
- Graphite at scale with Cassandra
改めて cyanite とは
- 読み方は「サイアナイト」
- Clojure にて実装されている(Clojure とは JVM 上で動作する LISP 言語の一つ?)
- 実行時には jar を利用する
- 設定は YAML で記述する
- graphite-web のプラグインとして graphite-cyanite も存在する
- ざっくり言うと carbon-cache の代替としてメトリクスを受け付けて Cassandra に保存する役目
イメージ
従来の構成と cyanite と Cassandra の組み合わせは以下のようなイメージ。
ストレージ部分を whisper から Cassandra に置き換えることで Cassandra の可用性とスケーラビリティを享受出来るという算段…(多分)
とりあえず使ってみる
今日のゴール
- Cassandra にメトリクスが保存されていることを確認する
環境
- CentOS 6.6
- Cassandra 2.0.12(cyanite は Cassandra 2.0 以上が必要となります)
- JDK 1.7.x 以上(cyanite の JAR を生成する際に 1.6 系だとエラーになります)
- 既に Graphite 環境は構築済み
JDK のセットアップ
yum -y install java-1.7.0-openjdk.x86_64
Cassandra のセットアップ
cat << EOT > /etc/yum.repos.d/datastax.repo [datastax] name = DataStax Repo for Apache Cassandra baseurl = http://rpm.datastax.com/community enabled = 1 gpgcheck = 0 EOT yum -y install dsc20.noarch cassandra20.noarch
Cassandra に Keyspace を定義しておく
事前に Cassandra にスキーマを流し込んでおきましょう。
cat << EOT > /tmp/test.cql CREATE KEYSPACE metric WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '1' }; USE metric; CREATE TABLE metric ( period int, rollup int, tenant text, path text, time bigint, data list, PRIMARY KEY ((tenant, period, rollup, path), time) ) WITH bloom_filter_fp_chance=0.010000 AND caching='KEYS_ONLY' AND comment='' AND dclocal_read_repair_chance=0.000000 AND gc_grace_seconds=864000 AND index_interval=128 AND read_repair_chance=0.100000 AND replicate_on_write='true' AND populate_io_cache_on_flush='false' AND default_time_to_live=0 AND speculative_retry='NONE' AND memtable_flush_period_in_ms=0 AND compaction={'class': 'SizeTieredCompactionStrategy'} AND compression={'sstable_compression': 'LZ4Compressor'}; EOT # cqlsh < /tmp/test.cql
cyanite のビルド
cd /usr/local/bin wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein cd /opt # git がインストールされていない場合には事前にインストールしておきましょう git clone https://github.com/pyr/cyanite.git cd cyanite lein uberjar
lein uberjar
を実行すると target/cyanite-0.1.3-standalone.jar
が生成されます。
cyanite の設定と起動
以下のように cyanite の設定ファイルを YAML 形式で用意します。
carbon: host: "127.0.0.1" port: 2003 rollups: - period: 60480 rollup: 10 - period: 105120 rollup: 600 http: host: "127.0.0.1" port: 8080 logging: level: info console: true files: - "/tmp/cyanite.log" store: cluster: 'localhost' keyspace: 'metric' chan_size: 10000 # defaults to 10000 batch_size: 500 # defaults to 500
事前に carbon-cache
を停止した上で cyanite
を起動します。
sudo service carbon-cache stop cd /opt/cyanite java -jar target/cyanite-0.1.3-standalone.jar &
一応、起動の確認。
$ netstat -an | grep 2003 tcp 0 0 ::ffff:127.0.0.1:2003 :::* LISTEN
メトリクスを飛ばしてみる
以下のようにメトリクスを飛ばしてみます。
echo "`hostname -s`.hoge.huga.test `echo $RANDOM` `date +%s`" | nc 127.0.0.1 2003
以下のようなデバッグが出力されました。
DEBUG [2015-02-14 16:57:22,436] async-dispatch-23 - io.cyanite.store - Batch written
Cassandra にてメトリクスを確認
確認には cqlsh を利用します。
cqlsh
ほぼ SQL ライクにクエリを投げることが出来ます。
use metric; select * from metric;
おお。
ということで…
今日のゴールには
- 到達しました
今日の知見
- Graphite のメトリクスは carbon-cache と whisper の一択ではない
- cyanite というツールを使うことで Cassandra にもメトリクスを保存することが出来る
次回の予定
- Graphite-web との連携
元記事はこちらです。
「graphite のバックエンド(carbon-cache と whisper)を Cassandra に置き換える cyanite を試したメモ(1)」