VPC環境で利用できます。
HBaseベースで動作する OpenTSDB(Time Series DataBase)は、分散と拡張可能な時系列データベースです。
OpenTSDBはサーバ、ネットワーク、アプリケーションプログラムから収集されたメトリック情報を保存、インデックス、転送するなどの処理のために作られました。
Secure Hadoopで OpenTSDBを使用するには、通常の Cloud Hadoop環境とは異なり Kerberos認証、LDAPアカウント、HBaseの権限設定、OpenTSDB JVMの JAAS設定が必要となります。OpenTSDBは AsyncHBaseクライアントを介して HBaseと ZooKeeperにアクセスするため、HBase Shellにアクセスできても Time Series Daemon(TSD)の実行時に別途 JAAS設定を行わないと、Kerberos認証に失敗することがあります。
OpenTSDBアーキテクチャ
本ガイドでは、Secure Hadoopを利用して OpenTSDBを構築し、8888番ポートで TSDを起動する方法について説明します。
このガイドで使用する OpenTSDBオープンソースの内容は、OpenTSDBをご参照ください。
- Time Series Daemon(TSD): 入力されたメトリック情報を HBaseストレージに保存するロールを実行します。
- 入力ソース: サーバ、ネットワーク、アプリケーションプログラムなどから送られるメトリック情報です。
- ストレージ: HBaseをデフォルトストレージとして利用し、時系列データを保存します。

OpenTSDBの詳細は、OpenTSDBホームページをご参照ください。
事前タスク
OpenTSDBをインストールするサーバを作成します。例では、Linuxサーバで使用する方法を説明します。
- サーバ作成の詳細は、Server を開始するガイドをご参照ください。
- Linuxサーバにアクセスする方法は、サーバアクセスガイドをご参照ください。
- Secure Hadoopのアカウント管理に関する詳細は、Secure Hadoop のアカウント管理ガイドをご参照ください。
- 外部サービスから Secure Hadoopにアクセスする方法については、Secure Hadoopへの外部サービスからのアクセスガイドをご参照ください。
Secure Hadoopでは、単に Linux OSのアカウントを useraddで作成しただけでは、HBaseへのアクセス権は付与されません。OpenTSDBを実行するアカウントは、Kerberos principal、keytab、LDAPユーザー、HBaseの権限がすべて用意されている必要があります。
OpenTSDB を使用する
サーバに OpenTSDBオープンソースをインストールする際に必要なシステム要件は、次の通りです。
- Java SE 8(JDK)
- Gnuplot
- OpenTSDBオープンソース
- Kerberos principalおよび keytab
- LDAPユーザー
- HBaseクライアント設定
- HBaseテーブルの作成権限
1.Secure Hadoopアカウント作成
Secure Hadoopで OpenTSDBを使用するには、Kerberos principalと LDAPユーザーを作成する必要があります。Kerberosと LDAPに登録されるユーザー IDは、同じように設定することをお勧めします。
-
マスターノードから Kerberos admin shellにアクセスします。
kadmin.local -
OpenTSDB用の principalを作成します。
addprinc -randkey opentsdb@USER.GUIDE -
OpenTSDB用の keytabファイルを作成します。
ktadd -k /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE -
keytabファイルの権限を設定します。
chown opentsdb:hadoop /etc/security/keytabs/opentsdb.keytab chmod 400 /etc/security/keytabs/opentsdb.keytab参考OpenTSDBを Secure Hadoopクラスタ外のサーバで実行する場合は、作成した keytabファイルを OpenTSDBサーバの安全なパスにコピーしてください。
-
keytabに含まれる principalを確認します。
klist -kte /etc/security/keytabs/opentsdb.keytab出力例は次の通りです。
Keytab name: FILE:/etc/security/keytabs/opentsdb.keytab KVNO Timestamp Principal ---- ------------------- ---------------------- 1 06/12/2026 13:00:00 opentsdb@USER.GUIDE注意JAASの設定および
kinitコマンドには、keytabに実際に含まれている principalをそのまま入力する必要があります。keytabにhbase-<cluster>@USER.GUIDEのようなクラスタ用の headless principalが含まれている場合、principal="opentsdb@USER.GUIDE"には設定できません。 -
LDAPユーザーを作成します。
ldif=/tmp/add-opentsdb.ldif HASH_USER_PW=$(slappasswd -h "{SSHA}" -s "新規_パスワード") cat <<EOF | tee $ldif dn: uid=opentsdb,ou=users,dc=USER,dc=GUIDE objectClass: inetOrgPerson objectClass: posixAccount objectClass: top cn: opentsdb sn: opentsdb uid: opentsdb uidNumber: 30001 gidNumber: 20004 homeDirectory: /home/opentsdb loginShell: /bin/bash userPassword: ${HASH_USER_PW} EOF ldapadd \ -H ldap://localhost:389 \ -D "cn=root,dc=USER,dc=GUIDE" \ -w "Kerberos_パスワード" \ -f "$ldif" -
必要なグループに
opentsdbユーザーを追加します。ldif=/tmp/modify-opentsdb-group.ldif cat <<EOF | tee $ldif dn: cn=グループ名,ou=groups,dc=USER,dc=GUIDE changetype: modify add: memberUid memberUid: opentsdb EOF ldapmodify \ -H ldap://localhost:389 \ -D "cn=root,dc=USER,dc=GUIDE" \ -w "Kerberos_パスワード" \ -f "$ldif" -
LDAPユーザーが正常に登録されているか確認します。
ldapsearch \ -H ldap://localhost:389 \ -D "cn=root,dc=USER,dc=GUIDE" \ -w "Kerberos_パスワード" \ -b "dc=USER,dc=GUIDE" \ "(uid=opentsdb)"
2.OpenTSDBのインストール
サーバに OpenTSDBをインストールする方法は、次の通りです。
-
以下のコマンドを使用して OpenJDKをサーバにインストールします。
sudo -s yum install java-1.8.0-openjdk-devel.x86_64 -
yumパッケージ管理者を利用して、OpenTSDBのグラフの作成に必要な
gnuplotパッケージをインストールします。yum -y install gnuplot -
OpenTSDBを実行するユーザーを作成し、ソースをインストールします。
useradd opentsdb su - opentsdb git clone https://github.com/OpenTSDB/opentsdb cd opentsdb -
OpenTSDBソースをビルドします。
./build.sh
3.HBaseクライアントのインストール
HBaseクライアントをインストールする方法は、次の通りです。
-
以下のコマンドを使用して HBase binaryをダウンロードします。
- Cloud Hadoop 2.0以上のバージョン
wget https://archive.apache.org/dist/hbase/2.2.6/hbase-2.2.6-bin.tar.gz tar xvfz hbase-2.2.6-bin.tar.gz ln -s hbase-2.2.6 hbase- Cloud Hadoop 1.9以下のバージョン
wget https://archive.apache.org/dist/hbase/2.0.2/hbase-2.0.2-bin.tar.gz tar xvfz hbase-2.0.2-bin.tar.gz ln -s hbase-2.0.2 hbase参考Cloud Hadoop Classicの場合、HBase 1.1.2をダウンロードします。
-
Ambari UIで以下の手順を順に実行します。
- [ACTIONS] > Download Client Configsメニューを順にクリックします。
- HBaseクライアントの設定情報ファイル名を確認します。
- OpenTSDBサーバのターミナルでコマンドを実行し、設定ファイル(
HBASE_CLIENT-configs.tar.gz)をダウンロードします。
- Ambari UIへのアクセスや使用に関する詳細は、Ambari UIガイドをご参照ください。

-
HBaseクライアントの設定情報の圧縮を展開します。
tar xvfz HBASE_CLIENT-configs.tar.gz -C ~/opentsdb/hbase/conf sed -i -e 's|\(^export JAVA_HOME=.*\)|#\1|' ~/opentsdb/hbase/conf/hbase-env.sh -
opentsdbユーザーの.bash_profileを変更します。echo 'export HBASE_HOME=~/opentsdb/hbase' >> ~/.bash_profile echo 'export PATH=$PATH:${HBASE_HOME}/bin' >> ~/.bash_profile echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bash_profile source ~/.bash_profile -
Ambari UI > Hostsメニューを順にクリックし、Secure Hadoopクラスタのホスト名と Private IPアドレス情報を確認します。

-
以下のコマンドを使用して
/etc/hosts情報を追加します。- 前のステップで確認した Secure Hadoopクラスタのホスト名と Private IPアドレス情報を追加します。
# rootユーザー # echo 'IP ホスト名' >> /etc/hosts echo '1**.**.*.* e-001-*****-**' >> /etc/hosts echo '1**.**.*.* m-001-*****-**' >> /etc/hosts echo '1**.**.*.* m-002-*****-**' >> /etc/hosts echo '1**.**.*.* d-001-*****-**' >> /etc/hosts echo '1**.**.*.* d-002-*****-**' >> /etc/hosts -
HBaseクライアントの設定で、ZooKeeper quorumと znode parent値を確認します。
grep -E "hbase.zookeeper.quorum|hbase.zookeeper.property.clientPort|zookeeper.znode.parent|hbase.security.authentication" \ $HBASE_HOME/conf/hbase-site.xml注意Ambari Web UI > HBase > Configsまたは Secure Hadoop VM内で
hbase-site.xmlのzookeeper.znode.parent値をご確認ください。 -
OpenTSDBの実行アカウントで Kerberos認証を行います。
kinit -kt /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE klist -
以下のコマンドを使用して
hbase shellアクセスをテストします。hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell hbase(main):001:0> whoami hbase(main):002:0> exitHBase Shellアクセスに失敗した場合、Secure Hadoopの ACGに OpenTSDBサーバを追加します。- ACG設定については、ファイアウォール設定(ACG)ガイドをご参照ください。
4.HBaseの権限付与
OpenTSDBテーブルを作成するには、OpenTSDBアカウントに HBaseテーブル作成の権限が必要です。
-
HBase Shellにアクセスします。
sudo -u hbase hbase shellあるいは、kinitを実行した後、HBase shellにアクセスします。
kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-<CLUSTER_NAME>@USER.GUIDE -
OpenTSDBアカウントに権限を付与します。
grant 'opentsdb@USER.GUIDE', 'RWXCA' -
OpenTSDBがクラスタ用の headless principalを使用するように構成されている場合は、keytabに含まれる実際の principalにも権限を付与します。
grant 'hbase-<CLUSTER_NAME>', 'RWXCA' grant 'hbase-<CLUSTER_NAME>@USER.GUIDE', 'RWXCA'参考HBaseの権限は、Linux実行ユーザー名ではなく Kerberos認証後に HBaseが認識したユーザー名に適用されます。
klist -kte <KEYTAB>とhbase shellのwhoami結果に基づき、権限を付与してください。 -
権限を確認します。
user_permission '.*' exitopentsdb、opentsdb@USER.GUIDEまたは実際に使用する principalにREAD、WRITE、EXEC、CREATE、ADMINの権限が表示されている必要があります。
Rangerを通じて HBaseの権限を管理する環境では、Rangerのポリシーにおいても同じユーザーに HBaseテーブルの作成権限を付与する必要があります。
5.OpenTSDBテーブル作成
OpenTSDBテーブルを作成する方法は、次の通りです。
-
OpenTSDBの実行アカウントで Kerberos認証を行います。
kinit -kt /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE klist -
以下のコマンドを使用して
TSDBテーブルを作成します。export HBASE_HOME=~/opentsdb/hbase export COMPRESSION=SNAPPY export DATA_BLOCK_ENCODING=FAST_DIFF export TSDB_TTL=2147483647 sh ~/opentsdb/src/create_table.sh参考OpenTSDBのデフォルトテーブル作成スクリプトでは、デフォルトの圧縮コーデックとして
LZOを使用できます。Secure Hadoop環境に LZO codecがない場合、ClassNotFoundException: com.hadoop.compression.lzo.LzoCodecエラーが発生することがあります。その場合は、COMPRESSION=SNAPPYまたはCOMPRESSION=NONEを使用してください。 -
以下のコマンドでテーブルリストを確認します。
hbase shell hbase(main):001:0> list TABLE tsdb tsdb-meta tsdb-tree tsdb-uid 4 row(s) => ["tsdb", "tsdb-meta", "tsdb-tree", "tsdb-uid"] hbase(main):002:0> exit
6.OpenTSDB設定
TSDの起動前に、OpenTSDBの設定ファイルと JAASの設定ファイルを作成します。
-
OpenTSDBの設定ディレクトリとファイルを作成します。
mkdir /home1/opentsdb/opentsdb/conf vi /home1/opentsdb/opentsdb/conf/opentsdb.conf -
以下の項目を環境に合わせて設定します。
hbase.security.auth.enable = true hbase.security.authentication = kerberos hbase.kerberos.regionserver.principal = hbase/_HOST@USER.GUIDE hbase.sasl.clientconfig = Client tsd.network.port = 8888 tsd.http.staticroot = build/staticroot tsd.http.cachedir = /home1/opentsdb/opentsdb/build/tmp tsd.storage.hbase.zk_quorum = m-001-*****-**:2181,m-002-*****-**:2181,d-001-*****-**:2181 tsd.storage.hbase.zk_basedir = /hbase-unsecure注意tsd.storage.hbase.zk_basedirには、HBaseクライアント設定のzookeeper.znode.parent値を入力する必要があります。値を推定して/hbase-secureまたは/hbase-unsecureに固定しないでください。 -
JAASの設定ファイルを作成します。
vi /home1/opentsdb/opentsdb/conf/opentsdb-jaas.conf3-1.クラスタ用の headless keytabを使用する場合、以下のように設定します。
Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true doNotPrompt=true useTicketCache=false keyTab="/etc/security/keytabs/hbase.headless.keytab" principal="hbase-<CLUSTER_NAME>@USER.GUIDE"; };3-2.OpenTSDB専用の keytabを使用する場合、keytabに含まれる principalを確認し、表示された値をそのまま入力します。
klist -kte /etc/security/keytabs/opentsdb.keytab- 出力例が次の通りである場合、JAASの設定を作成します。
KVNO Timestamp Principal ---- ------------------- ---------------------- 1 06/09/2026 21:42:13 opentsdb@USER.GUIDE- JAAS設定は以下のように作成します。
Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true doNotPrompt=true useTicketCache=false keyTab="/etc/security/keytabs/opentsdb.keytab" principal="opentsdb@USER.GUIDE"; }; -
keytabでの Kerberos認証可否を確認します。
4-1.hbase.headless.keytabを使用する場合の認証確認
kdestroy kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-<CLUSTER_NAME>@USER.GUIDE klist4-2.opentsdb.keytabを使用する場合の認証確認
kdestroy kinit -kt /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE klist注意kinitに失敗すると、TSDも起動できません。この場合は、OpenTSDBの設定ではなく keytabファイル、principal値、KDCとの時刻同期有無をまずご確認ください。
7.OpenTSDB起動
以下のコマンドを使用して TSDを 8888番ポートで起動します。
-
OpenTSDBの実行アカウントに切り替えます。
su - opentsdb cd /home1/opentsdb/opentsdb -
OpenTSDBの JVMに JAASの設定を指定します。
export JVMARGS="-Djava.security.auth.login.config=/home1/opentsdb/opentsdb/conf/opentsdb-jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dzookeeper.sasl.client=true -Dzookeeper.sasl.clientconfig=Client" -
TSDを起動します。
./build/tsdb tsd --config=/home1/opentsdb/opentsdb/conf/ -
バックグラウンドで起動するには、以下のように実行します。
nohup ./build/tsdb tsd --config=/home1/opentsdb/opentsdb/conf/opentsdb.conf > /var/log/opentsdb/opentsdb.log 2>&1 & -
8888番ポートが正常に開いているか確認します。ss -lntp | grep 8888 -
OpenTSDB APIのレスポンスを確認します。
curl -s http://localhost:8888/api/version正常レスポンス例は、次の通りです。
{ "version": "2.5.0" }
8.OpenTSDBに時系列データを保存
OpenTSDBに時系列データを保存する方法は、次の通りです。
-
以下のコマンドを使用して
cpu.utilメトリックを作成します。export JVMARGS="-Djava.security.auth.login.config=/home1/opentsdb/opentsdb/conf/opentsdb-jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dzookeeper.sasl.client=true -Dzookeeper.sasl.clientconfig=Client" ./build/tsdb mkmetric cpu.util --config=/home1/opentsdb/opentsdb/conf/opentsdb.conf -
以下のコマンドを使用して
cpu.utilメトリックの収集スクリプトを作成します。(sar-data-input.sh)- スクリプトの出典: Effective Monitoring and Alerting原書を参照
#!/bin/bash # Ignore sar's header. LC_ALL=en sar -u 1 | sed -u -e '1,3d' | while read time cpu usr nice sys io steal idle; do NOW=$(date +%s) echo put cpu.util $NOW $usr time=user echo put cpu.util $NOW $sys time=system echo put cpu.util $NOW $io time=io echo put cpu.util $NOW $idle time=idle # Report values to standard error. echo timestamp:$NOW user:$usr sys:$sys io:$io idle:$idle >&2 done | nc -w 30 localhost 8888 -
以下のコマンドを使用してメトリックデータを OpenTSDBに転送します。
sh sar-data-input.sh
9.OpenTSDBグラフの確認
OpenTSDBグラフを確認する方法は、次の通りです。
- サーバコンソールで OpenTSDBサーバのパブリック IPアドレスを確認します。

- OpenTSDBサーバの
8888番ポートでアクセスして収集されたグラフを確認します。

トラブルシューティング
Kerberos TGTエラー
以下のエラーが発生した場合は、Kerberos認証が行われていない状態であることを示します。
Failed to find any Kerberos tgt
次のコマンドで認証を行ってください。
kinit -kt /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE
klist
keytabファイルがない
以下のエラーが発生した場合は、keytabファイルが存在しないか、パスが間違っていることを示します。
Key table file '/etc/security/keytabs/opentsdb.keytab' not found
マスターノードで keytabを作成した後、OpenTSDBを実行するサーバに配置してください。
ktadd -k /etc/security/keytabs/opentsdb.keytab opentsdb@USER.GUIDE
HBaseテーブルの作成権限なし
以下のエラーが発生した場合は、HBaseの権限が不足している状態であることを示します。
AccessDeniedException: Insufficient permissions for user 'opentsdb@USER.GUIDE' (action=create)
HBase管理者アカウントの権限を付与してください。
grant 'opentsdb', 'RWXCA'
grant 'opentsdb@USER.GUIDE', 'RWXCA'
権限が short nameである opentsdbにのみ設定されており、実際のリクエスタが opentsdb@USER.GUIDEとして認識された場合、権限の照合が行われないことがあります。この場合、full principalにも権限を付与する必要があります。
LZO codecエラー
以下のエラーが発生した場合は、HBase classpathに LZO codecが存在しない状態であることを示します。
ClassNotFoundException: com.hadoop.compression.lzo.LzoCodec
テーブルを作成する前に、圧縮コーデックを変更してください。
export COMPRESSION=SNAPPY
あるいは、圧縮は使用しないでください。
export COMPRESSION=NONE
HBase Shellは実行されるが、createに失敗する場合
hbase shellが実行されるということは、Kerberos認証が成功したことを意味します。ただし、テーブルの作成には別途 HBaseの権限が必要です。
次の項目を確認します。
klist
whoami
user_permission '.*'
whoami の結果が opentsdb@USER.GUIDEであるにもかかわらず、権限が opentsdbにのみ付与されている場合、テーブルの作成に失敗することがあります。この場合、full principalにも権限を追加してください。
grant 'opentsdb@USER.GUIDE', 'RWXCA'
TSD起動時の No LoginModules configured for Clientエラー
以下のエラーが発生した場合は、OpenTSDBの JVMが JAAS設定ファイルを読み込めなかった状態であることを示します。
javax.security.auth.login.LoginException: No LoginModules configured for Client
エラーが発生した場合は、以下の項目をご確認ください。
/home1/opentsdb/opentsdb/conf/opentsdb-jaas.confファイルが存在するか確認します。- JAASファイルに
Client { ... };セクションがあるか確認します。 - TSDの起動前に、
JVMARGSに-Djava.security.auth.login.configオプションが設定されているか確認します。
起動例は次の通りです。
export JVMARGS="-Djava.security.auth.login.config=/home1/opentsdb/opentsdb/conf/opentsdb-jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dzookeeper.sasl.client=true -Dzookeeper.sasl.clientconfig=Client"
./build/tsdb tsd --config=/home1/opentsdb/opentsdb/conf/opentsdb.conf
TSD起動時の No password providedエラー
以下のエラーが発生した場合は、JAASファイルは読み込まれたものの、keytab認証に失敗して password promptに切り替わった状態であることを示します。
javax.security.auth.login.LoginException: No password provided
エラーが発生した場合は、以下の項目をご確認ください。
-
keytabに含まれた principalを確認します。
klist -kte /etc/security/keytabs/hbase.headless.keytab -
JAASの
principal値がklist -kteの出力と正確に一致しているか確認します。 -
JAASに
doNotPrompt=trueが含まれているか確認します。 -
keytabによる直接認証が可能か確認します。
kdestroy kinit -kt /home1/opentsdb/opentsdb/conf/hbase.headless.keytab hbase-<CLUSTER_NAME>@USER.GUIDE klist -
kinitに失敗した場合は、keytabファイルまたは principalの値が不正であることになります。正しい keytabを再作成するか、JAASのkeyTab、principal値を変更してください。
ZooKeeper AuthFailedエラー
以下のエラーが発生した場合は、ZooKeeperの SASL認証に失敗した状態であることを示します。
WatchedEvent state:AuthFailed type:None path:null
エラーが発生した場合は、以下の項目をご確認ください。
-Dzookeeper.sasl.client=trueオプションが設定されているか確認します。-Dzookeeper.sasl.clientconfig=Clientオプションが設定されているか確認します。- JAASファイルの
Clientセクションが、正しい keytabと principalを使用しているか確認します。 kinit -kt <KEYTAB> <PRINCIPAL>に成功するか確認します。
TSDは起動したが、8888ポートが開かない場合
次のコマンドで、TSDプロセスとポートを確認します。
ps -ef | grep '[t]sdb tsd'
ss -lntp | grep 8888
TSDプロセスがない場合は、OpenTSDBのログを確認します。
tail -200 /var/log/opentsdb/opentsdb.log
HBase meta regionがオンライン状態でない場合
OpenTSDBは、HBaseの hbase:meta regionにアクセスできる必要があります。HBase Masterがリセット中である場合や、HBase region数が 0と表示されている場合、OpenTSDBの起動も失敗することがあります。
以下のコマンドで HBaseのステータスを確認します。
echo "status 'simple'" | hbase shell -n
正常ステータスでは live region serverが表示され、少なくとも hbase:meta regionがオンライン状態である必要があります。以下のようなログが繰り返し表示される場合は、まず HBase管理者またはサービス担当者を通じて HBase meta regionのステータスを復旧してください。
hbase:meta,,1.1588230740 is NOT online
Master startup cannot progress
PleaseHoldException: Master is initializing
ZooKeeper上の HBase znodeを直接変更または削除するタスクは、HBaseのサービスステータスに悪影響を及ぼす可能性があります。HBase meta regionの復旧タスクは、HBase管理者またはサービス担当者の指示に従って行ってください。