タイトル

Need for Answer

2015年4月23日木曜日

freeboardで華麗にダッシュボードるのまき

いきなりですがダッシュボード作ってますか!KPIとか表示したくないですか!

RubyですとDashingとかあると思うですが、運用つらいです!(ダッシュボード作ってみるとわかるんじゃないかな)

ということで今回オススメするのがfreeboardです。利点は「ブラウザのみで動くので、サーバーが不要」という一言につきます。あとGUIベースで気軽に編集できるとこですかね。

もう少し詳しく説明しますと、freeboardは「HTML+Ajaxで動く静的ページ」です。つまり『freeboardのソースをPCのローカルに置けば、ブラウザが外部データソースを定期的に取得する』という事です。簡単に図解。


ということで「外部データソースを作るだけでダッシュボード作り放題だぜ!」というのがこの話で訴えたいことなのですが、一つ注意する事があります。

それは「外部データソースが出力するレスポンスヘッダにAccess-Control-Allow-Origin:*がないとデータ取得できない」ということです。なんで?と言われますとAjaxの決まりだからとしか言い様がないのですが…。

これさえ気をつければ気軽にデータソースサーバー作れますね!

あえてこのタイミングでPEBBLE WATCHをつかってみたのまき

さて、2015年4月24日といえばAppleWatchの発売日ですね。これでAndroid WearとApple Watchと、スマートウォッチデバイスが揃ったわけですね。

…という2大巨頭の間で、Samsung GearやらSmartWatch(SONY)やらという独自規格が乱立している中で「PEBBLE WATCH」という商品があるのをご存知でしょうか?

実はこの製品は2013年から出荷されているのですが、思ったより話題になってない(気がする)ので紹介してみようかなと。




特徴はこんな感じです。
  • 安い(99USD/送料込)
  • Android、iOS対応
  • 電池が7日間持つ
  • 電子ペーパー採用で、太陽光下でも問題なく閲覧できる
  • 日本語対応(Cryingneko氏のご対応)
  • 防水なので、手洗いや雨など気にしなくていい
  • バイブ、ジャイロセンサーを備えている
  • モノクロ

…という感じで、スマートウォッチとして必要最低限機能を揃えていると思います。スペック紹介おしまい。

実際使ってみた感想としては、『スマートフォン通知を手元で確認できるのは、想像以上に便利』という一言につきます。

『手元のバイブで通知を見逃すことが無い』というのはセールスポイントだと思うのですが、なにより『その通知に反応するべきかどうか』を即座に判断できるのが、ストレスが溜まらないことに気がついたのです。

つまり『通知が来たからスマホを取り出す』『気がついてないかもしれないからスマホを確認する』という、『漠然とした面倒さ』から開放されるんです。

満員電車内とか読書中・PC操作中などのちょっと手が放せない状況で非常に有効ですし、スマートフォンをかばんにいれている人とかも便利に使えるんじゃないかなーと。

正直な話Android WearでもApple Watchでもいいと思うのですが、『ちょっとお試しで使ってみたい』という気軽さで購入できるのがPebble Watchのいいところなんじゃないかな―と思います。

2015年4月17日金曜日

json_rest_serveを公開しましたのまき

GItHUB => json_rest_server

オンメモリKVSサーバーが欲しくなって、コード書きました。
特徴としてはこんな感じです。
  • golang
  • HTTP REST APIなので、クライアントはcurlとかでも大丈夫
  • オンメモリで高速動作
  • スレッドセーフ
  • 一応管理機能もついてる
と、機能を限定してる感じですね。

…で、これで何がしたかったの?という話なのですが、fluentdのデータをダッシュボードで可視化する時のストレージにしたかった、ということなのです。べんり。


2015年4月13日月曜日

fluent-plugin-in_http_healthcheckをリリースしましたのまき

Rubygems => fluent-plugin-in_http_healthcheck
GitHUB => fluent-plugin-in_http_healthcheck

『HTTPリクエストに対し、HTTPステータスコード200を返すだけ』のfluentdプラグインを作りました!

ELBとかGoogle Cloud Computingのロードバランサー配下に、fluentd配置したいとき使うといいんじゃないかな―と思います!というかそれ以外使い道あるんでしょうか!

…ということで一応解説しますと、fluentd標準の『in_http』プラグインは『jsonまたはmessagepack』以外のデータが投稿されるとエラーを返すのですね。なので、L7レイヤーでサービス監視しているロードバランサーには、何らかの応答(status:200)をする必要があるのです。

ということで、『fluentdとしてはなんのデータも処理しないプラグイン』が必要ということでした。

2015年4月9日木曜日

fluent-plugin-json_serializerをリリースしましたのまき

Rubygems => fluent-plugin-json_serializer
Source => GitHUB

fluentdのレコードを一つのkeyにまとめるだけという、fluentd filter pluginを書きました。Rubygemsに公開しておきましたので、使ってみてください!

…というgem開発にDockerを使うととても便利だったというお話。

  1. 未インストール状態に、簡単に復元できるのでクリーンインストール試験が簡単
  2. とりあえず動かない時、Dockerfile内のソースを修正できる
  3. 「gem使ってみたけど違うな―」という時に未インストール状態に戻せる
  4. 複数バージョンのfluentdでテスト出来る

という感じで『とりあえず手を動かしてみよう!』と気軽に作るにはいいんじゃないかな―と思いました。

2015年4月6日月曜日

awscliでS3バケットにあるファイルを、パターンマッチでダウンロードしたいのまき

AWS S3でバケットに収納したログをダウンロードしたい時、awscliを使う事があると思います!その時、ファイル名を指定してダウンロードしたいなーという時のお話。

下記のようにバケット内にログがいっぱいあるとき、パターンマッチでダウンロードしたいということですね。

2014-01-01.log
2014-01-02.log
2014-01-03.log
2014-01-04.log
(中略)
2015-04-01.log
2015-04-02.log
2015-04-03.log
2015-04-04.log

でこれをダウンロードするときなのですが、excludeオプションで全部除外しないとだめなのです。全ファイルがダウンロード対象になってしまいます。

あとはincludeオプションでパターンマッチかければ大丈夫!

 aws s3 cp s3://[bucket-name] [local-dir] \
    --recursive \
    --exclude "*" \
    --include "*2015-04-*" 

NGiNXのアクセス元を、GoogleMapにレンダリングするのまき

NGiNXのアクセス元を可視化する方法を実験してたら、うまくいったので資料化してみました!結構使い道あるんじゃないかな−と思います!たぶん!


2015年4月1日水曜日

fluentdにHTTPヘルスチェックを返答させるのまき

(2015/04/13:RubyGem化しました)

Google Compute Engineの微妙な困りどころとして、「ロードバランサーのヘルスチェックがHTTPプロトコルかつstatus:200を返答しなくてはならない」というのがあります。

つまり『サーバーがHTTPを返答させる必要が無くても、ヘルスチェックのためにHTTPを返答させる必要がある』ということです。

…ということで、みんな大好きfluentdにヘルスチェックを返答させちゃおう!というおはなし。

方針としてはデフォルトで入っている「in_http」プラグインを使って、サブクラス化しちゃうという作戦です。

 module Fluent
  class HttpHealthCheckInput < HttpInput
    Plugin.register_input('http_healthcheck', self)
    def on_request(path_info, params)
      begin
        return ["200 OK", {'Content-type'=>'text/plain'}, ":) < Hello!"]
      end
    end
  end
end

これをfluentdに読み込ませます!念のため、既存のin_httpも動くか確認します。
 
<source>
  type http_healthcheck
  port 8889
  bind 0.0.0.0
</source>

<source>
  type http
  port 8888
  bind 0.0.0.0
  body_size_limit 32m
  keepalive_timeout 10s
</source>


チェックしてみましょう!
 
root@hoge:/etc/google-fluentd/catch-all-inputs.d# curl http://localhost:8889
:) < Hello!
root@hoge:/etc/google-fluentd/catch-all-inputs.d# curl http://localhost:8888
400 Bad Request
'json' or 'msgpack' parameter is required