ASUSのNAS AS-202TEでPrometheusを動かす

だいたいこの記事を参考にした。DigitalOceanはサービスもさることながら、こういった記事を公開してくれるので好き。

www.digitalocean.com

AS-202TEにPrometheusを導入する

それ以前にAS-202TEにSSH接続できるようにする必要があるけど割愛。妙なことをしなくてもWebの画面からポチッとするだけでいいので楽。

今回はprometheusとnode_exporterを使用する。以下のURLからダウンロードすればよい。

prometheus.io

CPUアーキテクチャは386、OSはlinuxを選択する。ダウンロードしたら展開しておく。

$ wget https://github.com/prometheus/prometheus/releases/download/v1.4.1/prometheus-1.4.1.linux-386.tar.gz
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.13.0/node_exporter-0.13.0.linux-386.tar.gz
$ tar xzf prometheus-1.4.1.linux-386.tar.gz
$ tar xzf node_exporter-0.13.0.linux-386.tar.gz

node_exporterを動かす

node_exporter はNode.jsの情報をエクスポートするものではなく、CPU使用率など、対象ノードの基本的なメトリクスをエクスポートしてくれるもの。

Prometheusで監視をしようとしたら必須で使うことになるものだと思う。

github.com

先に紹介した記事ではupstartで起動していたが、遊びでやるので雑に nohup する。

$ cd node_exporter-0.13.0.linux-386/
$ nohup ./node_exporter > node_exporter.log 2>&1 &

curl で動作確認しておくといいかも。

$ curl localhost:9100/metrics

prometheusを動かす

こちらは node_exporter と違って設定ファイルを編集する必要がある。

AS-202TEには vim が入っていないので vi で編集する。

$ cd prometheus-1.4.1.linux-386/
$ vi prometheus.yml

末尾に以下の行を追加する。これは先程起動した node_exporter からメトリクスを取得するためのもの。

# ...省略...
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

編集が終わったら、同梱の promtool で設定ファイルをチェックしておく。

$ ./promtool check-config ./prometheus.yml
Checking ./prometheus.yml
  SUCCESS: 0 rule files found

あとは prometheus を起動するだけ、これは先の記事でも nohup を使っていたので、そのまま利用する。

$ nohup ./prometheus > prometheus.log 2>&1 &

node_exporter と同じく、 curl で動作確認しておく。

$ curl localhost:9090/metrics

動作確認

http://AS-202TEのIPアドレス:9090/graph にアクセスすれば、以下のような画面が表示されるはず。

f:id:ariarijp:20161211203005p:plain

あとは公式ドキュメントなどを参考にいろいろいじってみる。

prometheus.io

感想

Go言語で書かれている監視ツール・監視エージェントはこれからも増えていきそう。クロスプラットフォームで動作し、かつシングルバイナリなのは強いですね。

監視ツールといえば、先日Mackerel Advent Calendar 2016の記事を書いたので、こちらもよろしくお願いします。

ariarijp.hatenablog.com

この記事ではNASにPrometheusをいれてみましたが、最近のNASVMも動いたりするみたいですね、欲しいけどおもちゃにするにはちょっと高いかな。

mackerel-client-goを使ったBotを作る

この記事はMackerel Advent Calendar 2016 9日目の記事です。去年も参加していたので2年連続の参加になりました。

qiita.com

前日はt_mrtさんの「Synology DiskStation DS215j に mackerel-agent をインストールしてディスクの様子を監視する」でした。

blog.yux3.net

作ったもの

github.com

Mackrelにログインするほどでもなく、mkrよりカジュアルにメトリクスを確認できるようなものがあったらいいかな。と思ったのをきっかけに、

Slackでmkr [Mackerel上のホスト名] と発言すると、そのホストの最新のメトリクスを返してくれるBotを作りました。

f:id:ariarijp:20161208220657p:plain

Go言語力はまだまだ弱いので、気になることがあればPRやコメントをいただけたらうれしいです。

使ったもの

Githubで公開されているmackerel-client-goと、Slack Advent Calendarの記事で取り上げられていた nlopes/slackを使っています。

github.com

blog.kaneshin.co

github.com

使い方

READMEのとおりですが、go getして環境変数を2つexportすれば準備完了です。

$ go get -u github.com/ariarijp/sababot
$ export SLACK_API_TOKEN="YOUR_SLACK_API_TOKEN"
$ export MACKEREL_API_KEY="MACKEREL_API_KEY"
$ sababot

事前準備としてSlackのBot作成が必要ですが、先に紹介した記事でも説明されていますので、この記事では割愛します。

Botが参加しているチャンネルなどでmkr [ホスト名] と発言すると、使用しているMackerelのAPIキーのオーガニゼーションないからホストを検索し、該当するホストがある場合は、そのホストの情報を取得して、発言のあったチャンネルに返信するような感じになっています。

mackerel-client-goについて

mackerel-client-goはMackerelのCLIツール、mkrでも使用されています。

github.com

公式に提供されているCLIツールでも使用されていることもあり、だいたいのAPIを呼び出す操作はmackerel-client-goに任せられるので、Mackerelをちょっとハックして便利にしたいときに重宝しそうです。

mackerel-client-rubyもありますが、個人的にはmackerel-agentやプラグインと同様にGo言語で書いて、どこでもシングルバイナリで動くようにできるほうがうれしいかなと思っています。

まとめ

なんだかリンクをベタベタ張った記事になってしまいましたが、mackrel-client-goやnlopes/slackという既存の部品を組み合わせるだけで、「エンジニアがワクワクする」ことができるツールをサクッと作れるのも、Mackerelの良いところなんじゃないかなと思っています。

いちおうMackerelのリンクも張っておきましょう。まだ触ったことがなければ、とにかく気軽にトライアル利用してみたほうがいいですよ!

mackerel.io

こざっぱりとした内容でしたが、私の記事は以上です。明日はstefafafanさんの「MackerelとGoogle Apps Scriptでオフィスの環境を監視(仮題)」です。エアコンや乾燥でオフィスの環境が気になるこの季節なので、実に気になるタイトルですね!

re:dashのQuery Snippetsについて

re:dash Advent Calendar 2016 2日目の記事です。

qiita.com

Query Snippetsとは

0.12で追加されたre:dashの新機能で、よくあるSQLを文字通りスニペットとして登録することができ、クエリエディター上でSQLを書く際に、特定のキーワードに反応してスニペットを保管してくれます。

今年のre:dash Advent Calendar 1日目の記事でも少し触れられていました。

blog.redash.io

qiita.com

スニペットを登録する

0.12ではSettingsにメニューが追加されていますので、試しにスニペットを登録してみます。

f:id:ariarijp:20161202150141p:plain

Triggerにはどんな文字列が入力されたときにスニペットで補完するかを指定できるので、ここでは__cnt としています。アンダースコア2つを付けたのは、スニペットだとわかるようにするためですが、どんな文字列でもよいと思います。

Descriptionは必須ではないのですが、説明を書いておいたほうがよいでしょう。

Snippetに補完したいSQLを書きます。

ここで ${1:table} という文字列を使用していますが、これについては後述します。

一通り書き終わったら保存しましょう。

f:id:ariarijp:20161202150155p:plain

スニペットを使用する

スニペットを登録したら、クエリエディターで使用してみます。

f:id:ariarijp:20161202150209g:plain

クエリエディター上で __ と入力すると __cnt が補完され、決定すると __cnt でトリガーされるスニペットがエディター上に展開されます。

先程、 ${1:table} と入力した箇所はプレースホルダーになりますので、その箇所をテーブル名で置き換えてクエリーを実行しました。

プレースホルダーは複数記述することができ、エディター上ではTABキーで移動しながら入力できます。

テーブル名やカラム名の補完も相まって、すばやくSQLを書くことができますね。

まとめ

スニペットを使うことで作業の効率化はもとより、エンジニアでなくてもある程度お決まりのSQLが書けるようになるかもしれません。

また、似たようなクエリーを無邪気にForkしていくと、あっという間にクエリーが増えていくので、使い回しの効くものをスニペットにしておくというような運用もよさそうです。

とはいえ、実は現在プロダクションで使用しているバージョンが0.10なので、アップデートから検討しなければいけないというのが、個人的な悩み事です。

re:dash Advent Calendar 2016 について

まだまだ枠が空いているようです。

今年はre:dashが話題にあがることも多かったですし、実際に使われているかたも増えているような印象なので、小ネタでも参加してみてはいかがでしょうか?

supersetをVagrantで起動する

iktakahiro.hatenablog.com

週末にこの記事を読んでsupersetを試してみたくなったので、Vagrantで起動できるようにしてみました。

supersetのお試し環境構築 · GitHub

VagrantfileでShell Provisioningしている環境構築手順は、ほぼ公式ドキュメントのインストール手順通りです。

Installation & Configuration — Superset's documentation documentation

使い方

Gistからシェルスクリプトをダウンロードして実行するだけです。

$ mkdir superset
$ cd superset
$ wget https://gist.githubusercontent.com/ariarijp/f04c51feff8bfff73a53e7958474a942/raw/db67ddac46e53dbd3db139c3e7abdf8a4f70f504/run.sh
$ chmod +x run.sh
$ ./run.sh

VMが起動したら、ブラウザで http://localhost:8088/ にアクセスすると、以下のような画面が表示されます。

f:id:ariarijp:20161128232758p:plain

ユーザー名とパスワードは admin / superset としていますので、それらを入力してログインします。

f:id:ariarijp:20161128232923p:plain

ログインできました。あとはサンプルのダッシュボードを見たりしてみましょう。

まとめ

DockerではなくVagrantを使ってみましたが、ドキュメント通りで特に困ること無く環境構築できました。

FullPageOSでRaspberry Piをキオスク端末にする

なぜか家に2つも転がっているRaspberry PI 2を見て、ふと思い立ったのでキオスク端末にしてみました。あまり使わないけれど、Raspberry Pi 3がなんとなく欲しいです。

Raspberry Pi Kiosk」で検索すると、起動時にChromiumを自動的に実行するように設定するのが一般的なようですが、FullPageOSというそれっぽい名前のRaspbian派生OSを見つけました。

github.com

FullPageOSも起動時にChromiumをキオスクモードで起動しているだけではあるのですが、インストールするだけで目的が達成できそうなので、これを使ってみることにしました。

インストール

READMEに記載されているミラーサイトからダウンロードします。

2016/11/14現在は「2016-07-20_2016-05-27-fullpageos-jessie-lite-0.7.0.zip」が最新版のようです。

ダウンロードしたファイルをunzipなどで展開すると、2016-05-27-fullpageos-jessie-lite-0.7.0.imgファイルができるので、このファイルをRaspbian導入時と同じようにddコマンドなどでSDカードに書き込みます。

www.raspberrypi.org

起動

起動については特に他のOSと変わらず、MicroSDを挿した状態で電源ケーブルを差し込むだけです。

ディスプレイを繋いでも表示されない場合は、HDMIケーブルを挿した状態で電源ケーブルを挿し直してみてください。

起動が完了するとChromiumでWelcomeページが表示されます。

f:id:ariarijp:20161128134337p:plain

SSHでログイン

FullPageOSはBonjourを使って fullpageos.local でアクセスできるようになっているので、このアドレスを使ってSSHログインすることができます。

デフォルトのユーザー名/パスワードはRaspbian同様に pi / raspberry です。

無線LANの設定

無線LANの環境があれば配線も楽なので、Raspberry Piも無線で使いたい場合が多いと思います。

FullPageOSは起動時にChromiumがフルスクリーンで起動されるため、GUIで設定をすることは(おそらく)できません。

代わりに、ネットワークなどの主要な設定はテキストファイルに記述することができます。

無線LANの設定は /boot/fullpageos-network.txt を書き換えることで設定できます。

...
## WPA/WPA2 secured
iface wlan0-fullpageos inet manual
    wpa-ssid "アクセスポイントのSSID"
    wpa-psk "パスワード"
...

表示される画面の設定

FullPageOSには、いくつかの画面をローテーション表示する仕組みがデフォルトで備わっています。

github.com

仕組みと言っても、中身は登録されたURLをiframeで表示し、一定時間で切り替えるだけの簡素なものですが、ブラウザ上でタブの追加・削除ができるようになっており、画面を表示するだけなら特に不自由もないと思います。

また、 http://fullpageos.local/FullPageDashboardRaspberry Pi以外のブラウザからもアクセスすることができます。

以下の例はDashingのデモページを表示するようにしてみたものです。

f:id:ariarijp:20161128134814p:plain

不便なところ

外部のブラウザからFullPageDashboardで設定を書き換えたときに、画面を再読込することができないため、毎回 reboot などで再起動することになります。

多少不便ではありますが、そんなに画面を追加・削除するものでもないですし、起動も数分で済むのでこれは気にしないようにしていますが、少し不便です。

Raspberry Piにキーボードを繋げてしまえばそれで済む話なのですが、それなら再起動してしまったほうが楽かなと思ってそうしています。

まとめ

執務室内にダッシュボード的に大型のディスプレイを置く会社も増えてきていますが、最近のディスプレイはUSB端子もあるので、USB給電が可能という点でもRaspberry Piを使用するというのもよいかもしれません。

その場合、Raspberry Pi 3は電源を選ぶので、あえてRaspberry Pi 2というのもありですね。