今回は、以前のブログに続いて新しい GridDB クラウドサービスについて紹介します。クラウドサービスの基本については、以前のブログ GridDB Cloudの紹介 をご覧ください。今回は、クラウドサービスのバージョン1.2の新機能について説明します。
GridDBの新バージョンのリリースに伴い、GridDB クラウドに組み込まれた GridDB Web APIが利用可能になりました。WebAPIの基本的な使い方は、こちらで紹介しています。WebAPIの主な利点は、HTTPリクエストを使ってコンテナを作成し、データを直接データベースにプッシュできることです。これにより、Telegrafのような他のサービスを使用して、メトリクスや他のデータをGridDBデータベースに記録することが可能になります。
このブログでは、まずcurl
を使った簡単なWeb APIコマンドを紹介します。その後、Telegrafをクラウドサービスにインストールして使用する方法についても紹介します。
クラウドでGridDB Web APIを使う
Web APIの使い方は非常に簡単です。GridDB クラウドサービスに申し込むと、ダッシュボードへの固有のURLと、HTTP Requestを作成するためのベースとして使用する特定のWeb API Endpointへの別のURLが付与されます。
GridDB ユーザーを作成する
まず始めに、GridDB ユーザー
を新規に作成します。このユーザーとパスワードは、HTTP Web API リクエストを行う際に使用されます。今回の例では、ユーザー名はtest 、パスワードはtest を使用します。
コンテナを作成する
それでは、最初のリクエストを作成しましょう。まず始めに、point01
というコンテナを作成します。
リクエストには、コンテンツタイプを application/json; charset=UTF-8
に設定し、ユーザー名とパスワードをbase64にエンコードしたBasic Authorizationヘッダーを設定する必要があります。例えば、curlを使ったリクエストは次のようになります。
curl --location --request POST 'https://cloud1.griddb.com/trial002/griddb/v2/gs_clustertrial002/dbs/public/containers' \
--header 'Authorization: Basic dGVzdDp0ZXN0Cg==' \
--header 'Content-Type: application/json; charset=UTF-8' \
--data '{
"container_name": "point01",
"container_type": "TIME_SERIES",
"rowkey": true,
"columns": [
{
"name": "timestamp",
"type": "TIMESTAMP"
},
{
"name": "active",
"type": "BOOL"
},
{
"name": "voltage",
"type": "DOUBLE"
}
]
}'
そこでまず、指定された GridDB クラウドWeb API の URL をエンドポイントとして使用します。この"式"でエンドポイントを構築します。 //dbs/public/containers
Authorizationの行は、ユーザ名とパスワードをbase64でエンコードして1つのエンティティとして、次のように記述します。test:test
データカラムは、作成したいコンテナのスキーマを json
で指定します。今回の例では、3 つのカラムを持つ point01 という名前の TIME_SERIES コンテナを作成します。送信すると、HTTP レスポンスコードとして 201 (Created) が返ってくるはずです。
行を登録する
行を登録するために、再び簡単な式を使用してエンドポイントを構築します。/dbs/public/containers//rows 新しく作成したコンテナにデータを送信してみましょう。HTTPリクエストではPOST
ではなくPUT
を使用していることに注意してください。
curl --location --request PUT 'https://cloud1.griddb.com/trial002/griddb/v2/gs_clustertrial002/dbs/public/containers/point03/rows' --header 'Authorization: Basic dGVzdDp0ZXN0Cg==' --header 'Content-Type: application/json;charset=UTF-8' -d '[["2021-06-28T10:30:00.000Z", false, "100"]]''
GridDB クラウド の point03
コンテナに一般的な値を追加します。
行を取得する
行を取得するには、行の登録と同じエンドポイントを使用します。ただし、PUTの代わりにPOSTを使用します。また、リクエストのボディも別のものにします。
また、curl やコマンドラインを使うのが面倒な場合は、VS Code
REST Client extension を使って簡単に変更することができます。VS Codeを使用してデータ行を取得するためのリクエストは以下のようになります。
POST https://cloud1.griddb.com/trial002/griddb/v2/gs_clustertrial002/dbs/public/containers/point03/rows HTTP/1.1
Host: cloud1.griddb.com
Authorization: Basic dGVzdDp0ZXN0Cg==
Content-Type: application/json
Content-Length: 93
{
"limit" : 100,
"condition" : "timestamp >= TIMESTAMP('2021-06-28T04:30:00.000Z')"
}
より簡単にHTTP Requestをしたい場合は、Postmanを利用することも可能です。
以上が、GridDB CloudでWeb APIを利用するための基本的な方法です。次に、InfluxDBとTelegrafを使ってみましょう。
Telegraf
Telegrafはスタック、センサー、システムからメトリクスを収集するのに役立つオープンソースのサーバーエージェントです。簡単に言うと、新しくリリースされたTelegraf用のGridDB OutputプラグインとGridDB Web APIを併用して、HTTPでGridDB クラウドにデータを送信します。
まず、必要な要件をすべてインストールしましょう。
インストール
インストールに必要な条件とは以下の通りです。
- CentOS 7 以上
- Go version 1.15.13 以上
- GridDB Telegraf output プラグイン
Go
Goをインストールするには、同社のウェブサイトから直接ダウンロードすることができます。インストール方法は、こちらを参照してください。インストールが完了したら、$ go version
を実行してインストールできたことを確認します。
TelegrafとGridDB Outletプラグイン
まず、GridDB クラウドのダッシュボード サポートから、Telegraf用GridDB Outletプラグインのソースコードをダウンロードします。
次に、go get
コマンドを使用してTelegraf本体をインストールします。
$ go get -d "github.com/influxdata/telegraf"
注意:もしこの手順通りにいかない場合、Goのホームディレクトリで作業していることを確認してください。また、GO111MODULE
環境設定がon
に設定されていることを確認してください。
$ export GO111MODULE=on
ダウンロードしたら、すべてをgoホームディレクトリ(~/go/src/github.com/influxdata/telegraf
)に配置します。
ここで、ダウンロードしたソースコードからプラグインを influxdata
ディレクトリにコピーしておきます。ダウンロードしたディレクトリからtelegrafディレクトリに移動してください。
$ cp -R ./plugins ./griddb.conf ~/go/src/github.com/influxdata/telegraf
次に、GridDBプラグインをファイル自体に追加します。以下のディレクトリにある all.go
ファイルを探します。 ~/go/src/github.com/influxdata/telegraf/plugins/outputs/all/
そして import セクションに次の行を追加してください。
_ "github.com/influxdata/telegraf/plugins/outputs/griddb"
そして、これでtelegrafをビルドして実行する準備が整いました。telegraf ディレクトリのルートに戻ってください。
$ cd ~/go/src/github.com/influxdata/telegraf
次に、 make
$ make telegraf
ここまでの手順通りに進めば、ディレクトリの中にtelegrafという実行可能な実行ファイルがあるはずです。
使用方法
まず最初に、griddb.conf
ファイルを適切に設定しましょう。このファイルのコピーは、telegrafのルートディレクトリに既にあるはずです。次に、Telegraf のインスタンスが GridDB クラウドに出力されるように、いくつかの変更を加えてみましょう。
始める前に、Telegraf 自体がどのように動くのか、基本的な理解をしておくと良いでしょう。Telegraf は入力を受け取り、すべてのデータを出力に送ります。今回の例では、入力はメトリクスを取得するためにシステムをスクレイピングする influxdb サーバーで、出力は GridDBクラウドインスタンス です。
入力
入力には様々な種類がありますが、このブログの内容に沿って進めば、実用的なシステムを構築することができます。この簡単な例からさらに発展させたい場合は、入力について詳しく説明したこちらを読んでみてください。
今回の例では、シンプルに cpu
入力プラグインを使って、ホストマシンの CPU に関する情報を収集し、GridDB に送信します。構成は以下のようになります。
#[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics
collect_cpu_time = false
## If true, compute and report the sum of all non-idle CPU states
# report_active = false
## The column to extract the name of the metric from
# csv_measurement_column = "name"
## The column to extract time information for the metric
## `csv_timestamp_format` must be specified if this is used
# csv_timestamp_column = "time"
さらに、GridDBのJMSサービスを利用してトピックを提供するactivemqインプットを含めることもできます。
[[inputs.activemq]]
## ActiveMQ WebConsole URL
url = "http://127.0.0.1:8161"
## Required ActiveMQ Endpoint
## deprecated in 1.11; use the url option
# server = "192.168.50.10"
# port = 8161
## Credentials for basic HTTP authentication
username = "admin"
password = "admin"
## Required ActiveMQ webadmin root path
webadmin = "admin"
## Maximum time to receive response.
# response_timeout = "5s"
## Optional TLS Config
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
出力
このブログでは、出力先はGridDB Cloudの1つだけなので、出力セクションは少しシンプルになります。ただし、デバッグが必要な場合は、debugフラグをtrueに設定し、2つ目の出力を設定すると便利です。
[[outputs.file]]
files = [ "stdout" ]
flush_interval = "1s"
flush_jitter = "1s"
metric_batch_size = 10
しかし、主な出力先はGridDB クラウドになります。デフォルトの griddb.conf
ファイルには、すでにそのレイアウトを持っているはずで、そのほとんどは非常にわかりやすいものです。このファイルの内容は以下の通りです。
[[outputs.griddb]]
## The GridDB WebAPI URL.
## # (Required)
api_url = "{your GridDB Web API URL}"
## The database name.
## # (Optional) Default: public
database = "public"
## The cluster name.
## # (Required)
cluster_name = "{clusterName}"
## GridDB administrator username.
## # (Required)
username = "test"
## GridDB administrator password.
## # (Required)
password = "test"
## Delete existing container if exist.
## # (Optional) ; Default: append
## # Accepted Value: replace, append
## - replace: Override the existing container.
## - append: Append new rows into existing container.
update_mode = "replace"
## The list of container that will be transfer to GridDB
## # Example: ["cpu", "ram", "product"]
## # Empty list [] means ALL containers
## # (Optional) ; Default: []
containers = []
## Name the timestamp column. If timestampColumn is empty, it wont add timestamp column to the first column of the container
## # (Optional)
timestamp_column = "timestamp"
もう一つ、エージェントセクションのインターバルの値をデフォルトのファイルから変更することをお勧めします。
[agent]
## Data collection interval for all inputs
## Because of migrating from InfluxDB to GridDB, the interval will be set to a enough large number
## After all data was migrated, we can terminal the telegraf process
interval = "10s"
このようにする理由は、Telegrafがデータを送信してからインターバルの実行を待つのではなく、最初にインターバルの時間枠が一回実行されるまで、データを送信しないと考えられているからです。
実行する
これでようやくすべてを一度に実行できる準備が整いました。
1つのターミナルで influxdb がまだ動作していることを確認し、2つ目のターミナルを開いて telegraf を実行します。
$ ./telegraf --config griddb.conf
すべてがうまくいけば、GridDB Cloudにデータが送られ、Telegrafコンソールがデータを出力しているのが見えるはずです。
2021-12-04T00:12:30Z I! [outputs.griddb] Transaction succeed: 1 containers was updated. 0 containers was error
下の画像は、ホストマシンから送られてくるCPUのデータをグラフ化したものです。このデータは、単純な7zのCPUベンチマークを実行して得られたものです。もちろん、これは非常に単純な例ですが、他の開発者のみなさんはどのような形のメトリクスを得られるのでしょうか。
線グラフ:
棒グラフ:
まとめ
このように、GridDB クラウドのWeb APIが公開されたことで、より簡単にサービスを利用できるようになりました。また、TelegrafのようなHTTPで通信するサービスも利用できるようになりました。
GridDB クラウドのトライアルをご希望の方は、こちらよりお申し込みください。
https://www.global.toshiba/jp/products-solutions/ai-iot/griddb/product/griddb-cloud.html