Datadog agent(以後DD-agent)が、Raspberry Piであっさり動いてしまったので、流行のIntel Galileo(以降Galileo)でもあっさり動くのではと思い挑戦してみました。
結果から言うと「問題なく出来ます」 、しかし、Raspberry Pi(Rasbian)の時のように、Datadogが用意してくれている1行コマンド行を実行すれば完成ということには成りませんでした。
こういう時こそ情報の供給がだいじだと思うのでインストール方法を書き残しておくとにします。尚今回は、DD-agentとDogtatsDを起動させ、メトリックスをDatadogに送信しするところまでの手順を書きます。これらのスクリプトをGalileoの起動時に自動で起動する方法やGPIOからの情報を読み込み送信する方法は、後編で書こうと思います。
起動用のSDイメージについて
個人的に利用頻度が最も多いTokoro’s Tech-Note で公開されているSDフルイメージ を利用します。
このイメージの特徴は、arduino IDEは使えなくなるものの、linux系のlibでちょっとこれがあると便利かもというものがrepoから簡単に入手できることです。(Tokoro氏の善意に感謝します。)
先のSDフルイメージ をPCにダウンロードし解凍後、fat32でフォーマットした4G SDカート(4G以上のSDの場合は、4Gのパーティションを作成してください)に書き込めば、起動用のSDカードの準備は完了です。
以下が解凍したSDフルイメージ の中身です。
準備ができたSDカードをGalileに差し込んで、LANケーブルと電源を指すとYocto linux が起動してきます。LAN(eth0)は、IP addressを自動で取得する設定に成っているので、Galileoを接続したネットワークにDHCPサーバーが存在している必要があります。IP addressは、OSが起動したのを見計らってIPスキャナーLanScan などでIntel GalileoのMACアドレスを探してIP addressを確認します。MACアドレスの情報は、LANコネクター口の上にシールで張られています。
OSが起動しIP addressが分かったら、sshでGalileoに接続していきます。
rootにはpasswordは設定されてないので、sshの接続手順が完了すると、一気に管理者権限のコンソールが表示されます。
1
2
3
4
5
The authenticity of host '192.168.8.171 (192.168.8.171)' can't be established.
RSA key fingerprint is 4d:5e:57:43:b0:02:6e:f3:ae:3c:1e:2c:7a:55:f5:4b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'X.X.X.X' (RSA) to the list of known hosts.
root@clanton:~#
DD-agent起動に足りないPackageのインストール
sshで接続ができたところで、まず最初にする作業は、Tokoroさんが提供してくれているPackageをopkgコマンドでインストールするためのrepo情報の追記です。
既にrepo情報が追記された設定ファイルも公開されているので、下記のコマンドを実行して既存のrepo設定ファイルをTokoroさんのrepoの設定情報が記載された設定ファイルに置き換えます。
1
wget http://storage.tokor.org/pub/galileo/packages/opkg.conf -O /etc/opkg/opkg.conf
詳細に関しては、「IntelのGalileoでパッケージマネージャopkgを使う」 を参照してください。
次に、Package情報を更新し、新しいバージョンのパッケージがあるものは最新に入れ替えておくことにします。
1
2
opkg update
opkg upgrade
起動時にDateコマンドで毎回時間を設定するのは非常に手間なので、簡単に時間が設定されるようにします。自動で時間を設定してくれるntpdateをPackageインストールします。
1
2
opkg install ntpdate
ntpdate ntpdate ntp.nict.jp
次に、ntpdもインストールして設定しておきます。
ntpの設定ファイルを編集します。
# server time.server.example.com と書かれている行をコメントアウトし、次のように公開されているntpサーバー名を記載します。
1
2
3
# server time.server.example.com
server ntp.nict.jp
server 0.asia.pool.ntp.org
次に、システムの状態を定期的に監視するためのsysstatをPackageインストールします。
DD-agentを起動するためのPackageの追加インストールは、これで終了です。
DD-agentのダウンロード
OSの準備ができたので、DD-agentをGithubから取得し、Galileoに設置します。
Githubのサイトで、DD-agent を検索すると、次のような検索結果が表示されます。
赤枠で囲った項目をダブルクリックして、Datadogが管理しているdd-agentのページに移動します。
Download ZIP
ボタンを見つけ、右クリックを使ってリンク先URLをクリップボードに保存ます。
Galileoのwgetコマンドでは、githubのCAの情報がうまく処理でないようなので—no-check-certificate をコマンドオプションに追記し実行します。
1
wget --no-check-certificate https://github.com/DataDog/dd-agent/archive/master.zip
ダウンロードが終わったらファイルを解凍し、起動の準備に入ります。
master.zipは、dd-agent-master
というディレクトリ以下に展開されます。
ディレクトリをls
で表示してみると次の様になっているはずです。
1
2
3
4
5
6
7
8
9
10
11
12
root@clanton:~/dd-agent-master# ls
CHANGELOG.md aggregator.py dogstream requirements.txt
LICENSE checks emitter.py resources
LICENSE-boto checks.d ez_setup.py setup.py
LICENSE-httplib2 compat graphite.py supervisord.dev.conf
LICENSE-minjson conf.d httplibproxy.py tests
LICENSE-ntplib config.py jmxfetch.py transaction.py
MANIFEST.in daemon.py migration.py urllib2proxy.py
README.markdown datadog-cert.pem minjson.py util.py
Rakefile datadog.conf.example modules.py win32
Vagrantfile ddagent.py packaging yaml
agent.py dogstatsd.py pup
API keyの取得
DatadogのAPIアクセスは、API keyを使って認証しています。このkey(文字列)情報は、DD-agentの起動時に設定ファイルから読み込む仕様になっているので、設置ファイルに事前に記述しておく必要があります。
設定ファイルのサンプルが、dd-agent-masterディレクトリにあるので、このサンプルファイルをコピーして作業を始めます。
1
cp datadog.conf.example datadog.conf
次に、設定ファイルに書き込むためのAPI keyをDatadog APIs ページから取得します。
API keyの文字列が分かったところで、設定ファイルの編集をします
設定ファイルの18行目にある、api_key:
の後ろに先のページで取得したAPI keyをペーストします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Main]
# The host of the Datadog intake server to send Agent data to
dd_url: https://app.datadoghq.com
# If you need a proxy to connect to the Internet, provide the settings here
# proxy_host: my-proxy.com
# proxy_port: 3128
# proxy_user: user
# proxy_password: password
# If you run the agent behind haproxy, you might want to set this to yes
# skip_ssl_validation: no
# The Datadog api key to associate your Agent's data with your organization.
# Can be found here:
# https://app.datadoghq.com/account/settings
api_key:
これで設定ファイルの追記も完了です。
Agentの動作確認
Agentを起動する前にdatadog関連のデーモンがlogを出力する先のディレクトリーを準備しておきます。
それでは、Agentを起動してみます。
1
2
cd ~/dd-agent-master
python agent.py start
しばらくすると、DatadogのInfrastrucure ページ上にclanton (Galileoに設定したホスト名)というホスト名が追加されます。
ホスト名をダブルクリックすると、sysstatが収集しているGalileoの基本メトリックスがグラフ化されて表示されるはずです。
DogtatsDの動作確認
次に、任意のメトリックスを手軽に転送するためにDogStatsを起動することにします。
DogStatsD は、NYC発祥の物販サイトEtsy がFOSS化しているStatsD のプロトコルを利用した派生バージョンです。StatsDは、DevOpsを実践している欧米企業で各種のメトリックスを収集するために広く使われているソフトウェアです。
同様の目的でDogStatsDを使うことで、プログラムの中からDatadogのサービスに任意のメトリックスを簡単に転送することができます。メトリックスさえ転送できてしまえば、後はDatadogのダッシュボード機能を使って、集めたメトリックスをリアルタイムに処理&可視化できるという文脈になります。
既に設定ファイルへのAPI keyの追記は済んでいるので、次のように起動します。
1
2
cd ~/dd-agent-master
python dogstatsd.py start
任意のメトリックスをプログラムの中からDogStatsDを介してDatadogに送信ができたかを確認するためには、次のような簡単なプログムを書きます。
pythonの場合は、Datadogが提供しているDogStatsDのラッパーライブラリーがPIPにあるので次のようにインストールすることにします。
1
2
3
4
cd ~/dd-agent-master
python ez_setup.py
easy_isntall pip
pip install dogstatsd-python
dogstatsd-pythonのインストールが無事インストールが成功したら、dogstatsd-test.py などのファイル名で次のファイルのようなpythonスクリプトを書きます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#! /usr/bin/env python
from statsd import statsd
import time
import random
def mysleep ():
statsd . increment ( 'myapp.testsleep' )
sleep_time = random . uniform ( 0.0 , 0.9 )
print "sleep: %f " % sleep_time
time . sleep ( sleep_time )
if __name__ == "__main__" :
while ( 1 ):
mysleep ();
pythonスクリプトが書き上がったところで実行してみます。
1
python dogstatsd - test . py
コンソールに大量のsleep 文字列が出力されます。バックグラウンドではsleepが表示された回数をカウントして、一定時間ごとにそのカウント値をDatadogに転送しています。
先に見たDatadogのInfrastrucure ページのclanton の行の右端にmyappという青いラベルが増えていることが確認できたら、ダブルクリックしmyappの名前スペースのメトリックスを表示するページに移動します。
今は、myappの名前スペースに1種類のメトリックスしかないので、次のようなグラフが表示されれば、動作確認は完了です。
まとめ
ここまでで前編は終わりです。内容が理解できれば30分以内でできてしまうインストール作業ではないかと思います。こんな簡単な作業で、GPIOで集めた情報も可視化できるなんて素晴しいと思いませんか。後半では、GalileoのGPIO関連ライブラリーと任意のメトリックスの取り扱いに関して書いていこうと思います。
2014/04/18 ntpdate、及びntpの設定に関連する記述を変更しました。