mackerel meetup #2 に参加しました

mackerel meetup #2に参加しています

Mackerel Current Status @stanaka

  • Overview & Update
  • 正式化と今後の予定

Overview & Update

監視

  • ホスト/ロール単位:来月そうそう
  • サービスメトリクス:来月早々

アラート通知(チャンネル)

  • メール
  • Webhook
  • sladk 来週くらい

正式化と今後の予定

  • ベータリリース(5/8)
  • 正式リリース(9/19)

  • 2000円/ホスト/月(台数20+でディスカウントあり)

  • 無料トライアルあり

    • 5台, ログ24h, サービスメトリクス・監視数に制限
  • 個人・小規模ユーザ向けプラン

  • GitHubログイン
  • Monitor対象の詳細化(ロール単位)
  • サービスメトリクス監視
  • カスタムメトリックプラグイン拡充
  • Slack連携など通知先拡充

イベント機能

  • アラート・デプロイなど
  • グラフ改善
  • アラート改善
  • ダッシュボードカスタマイズ

ヌーラボがMackerelに移行した3つの理由 @tksmd

まとめ

id:stanaka さん, id:songmu さん、はじめhatenaの皆様、会場のフリークアウトの皆様ありがとうございました!

Travis CI Meetup Tokyoに参加しました

Travis CI Meetup Tokyo

Hiro Asari さんの Travis CI の demo

Travis-CI のライフサイクル

Setup -> Services
 |
 v
before_install
 |
 v
install
 |
 v
before_script
 |
 v
script
 |
 v
after_success   after_failure
 |                    |
 v                    |
 before_deploy        |
 |                    |
 v                    |
 after_deploy         |
 |                    |
 v                    v
after_script

.travis.yml

# build地にsudoを利用しない設定
sudo: false # アカウントに依存して、通常は動かない設定

language: ruby

bash の wait というオプションで標準出力がない場合に殺されないで済む

110+ vms 68+ servers heroku

openvz and docker

82000 jobs 125,435 jobs per day 7,000 repositories

|node.js | 2800| | python |1900| | ruby |1600| |php| 1500| |default (=ruby)|1000| ...

in COM, ruby is top usage.

team

  • team teal: ui ux
  • team blue: infrastructure
  • BIWOMM but it works on my machine

points

  1. Case sensitive
  2. inode deference
  3. Package difference dev and travis CI
  4. Services which are slow to start or configured differently
  5. 'apt get update' system packages change and are removed overtime
  6. test ordering and isolation
  7. time zone dependent test and timing differences
  8. capabilities turned off in container based virtualization systems

tachikoma.io

  • 依存関係とかのチェックを実現する

travisselenium

  • travisならxvfbもfirefoxjavaも入ってる!
  • screenshopを撮るAPIもある!→エクセルの証跡も作れる!

YAPC::ASIA 2014に参加しました

YAPC::ASIA 2014に参加しました。

当然個人スポンサーチケットです! パーカーが欲しかったので。。。

また、29日のみでしたが、昨年に引き続き「YAPC::Asia 2014 スペシャルレポート」のレポーターとしても参加しました。

ですので内容のレポートは上記を見ていただければ。。。 個人的には

@toritori0318 さんのTV連携の運用改善の話と、 @deeeet さんのツールを作る話、 @aoneko さんの自動デプロイが本質的なところで面白かったです。 両者ともに共通していたのが、「いま現状の課題に全力で取り組む一方、(自分の身を守るという意味での)エゴからくる利他精神」だと思いました。 共通化する、ドキュメント化する、自動化する、頻繁に利用するものだからこそ準備をする(プロセスにする、README/USAGE/MANPAGEを書く)、これはまさに「楽をするために苦労を厭わない」というエンジニアスピリッツにあふれたものだなぁと思いました。

あ、あと、レポーターはどんなに混んでいても一番いい席に座れるので皆様本当にお勧めです。 また、毎年参加の id:hiratara さんやその他素晴らしい人と事前にお会いしてYAPCのワクワク感を高められることも嬉しい事です。 ぜひ、来年のYAPCやその他のイベントでもレポーター枠があれば参加することをおすすめします

切り戻しの話

懇親会で @koemu さんと @risou さん、あと id:papix さんと話していたのですが、アプリケーションレイヤのデプロイ/切り戻しは楽になっている(自動化やスクリプト化で)とは思うのですが、DBの切り戻しがどうにも楽になっていない気がします。

どうしてもここだけはデプロイプロセスに人手を介入させ、ターミナルのフォントサイズを上げ、「いいですか?」「ダイジョブです」みたいなやりとりを経て実施しているので、とても辛いです。

例えば、onreadyみたいなコマンドで、新しいDBホストが立ち上がってマスターへの書き込み時にクエリを新しいアプリ向けに書き換えて流し込んでいき、launchで旧DBから新DBへの切り替えがされ、そのタイミングで今度は新DBへの書き込みのクエリを旧DBのクエリに書き換えて流しこみを続けてくれて、いつでも切り戻しができるようになってて、ここぞというタイミングで切り離す、などができる様になってくれると嬉しいなと思っています。

YAPCの優しさ

こうなって

YAPC最高や!

LLDiverの見どころ

久しぶりに書くのですが今年で14回目のLLイベント LL Diver をお手伝いしております。

スタッフを申し込んだ時点ではこんなに忙しくなるとは思っておらず、あまりお手伝いできなかったのですが「ご紹介」という形で3つのセッションにご協力することができました。

http://ll.jus.or.jp/2014/wp-content/uploads/2014/05/lldiver.logo_.jpg

1.

あんちぽくんさんはGMOペパボの技術責任者として「みんなと仲良くする」「ファンを増やすこと」「アウトプットすること」という3つの軸に準じた評価をされ「GMOペパボ株式会社の技術責任者に就任いたしました」「ペパボの2014年上半期エンジニア評価について」などのエントリをあげてらっしゃる方です。 この方が「新人研修」をどのように設計しているかはとても興味深いところです。

2.

hiroki_daichi さんは

とおっしゃっていますが、Qiitaにたくさん投稿しているかたです。

これらのQiitaの投稿は目にしたかも多いのではないでしょうか。

多岐にわたってQiitaを上げているhirokiさんに様々な質問をぜひぶつけたいところです。

3.

一時期ドワンゴの技術者退職エントリが続いた時の状況を立て直したかについてmeso さんが質問を受け付けてくださいます。 現在は、下記の記事にあるようにドワンゴでエンジニアが働く環境の整備や採用、教育、技術広報を担当されています。

どしどし質問を投げつけましょう!

前日だぞ!!

と @hourin さんの叱られそうですが、上記の他にも禁断とも言われている「誰得なエディタセッション」や夜の部は酒を入れなければ聞けないようなセッションまで魅力あるセッションが盛り沢山です。 まだまだチケットは余っていますので(汗)、ぜひ足をお運びください!

Hadoop Conference Japan 2014に参加しました

Hadoop Conference Japan 2014に参加しました。

最近あまり触ってなかったのですが、また案件で利用するニーズが出てきたので最新情報の収集目的です。

今日の収穫としてはこんな感じ

  • Apache Spark
    • 一週間の活動量がすごい
      • 500 patch updates / w
      • 200 updates / w
      • 140 thread / w
      • 80 merged patches / w
  • Facebook Presto
    • プラガブルよさ気
    • Facebookの中で使われてるリポジトリ←すごい
    • 各種DBマージして使える
    • DBに投げるときにすでにクエリを入れてフィルタリングしてから取り出すこともできる←mongohadoopでも実装してたの懐かしい
  • BigQuery
    • 公開してるBigQueryと中で使われてるのは同じ(リソース競合あり)
    • お高いお金を払えば専有できるリソースもあるって
    • DataFlowパイプライン処理のダッシュボード、流量とかソースからのLAGとか出てて素晴らしい。リアルタイムを謳うなら「どの程度」リアルタイムなのか出さないとな、と思った
    • millwheelの論文読みたい
    • flumeJava
  • HBaseは死火山←これはあんまり信じてない
  • YARN使いたかったらHadoop 2.4系使わないとスケジューラで困る(CDH5はHadoop2.3 + patchだから大丈夫)
  • YARNの初期設定はCDHHDPVMから設定ファイルも初期ディレクトリ構成もパクればいい。Ambariでもいいけど、直接設定見て書き換えられる方がrecipeにも書きやすい
  • hivemallアルゴリズムすごく多くてすごいAROWとかCSWとか
    • Apache Incubatorになるかもとか
  • DATABRICKS CLOUDのダッシュボード便利そう

その他

  • Sparkはオンメモリで高速にぶん回すこと考えるといろいろジョブ作成前に考えたりするから大変そう(溢れたらSpillしてくれるとはいえ)
  • Prestoはジョブが落ちるけど、そっちの方が潔い気もするし、各種のDBとマージして処理できるのは助かる感じある
  • Hive回して中間データを保持しておいてそいつをSpark/Prestoで処理する+直近データのみESとkibanaとかそういう構成が良さそう

今日のハイライト

mackerel meetupに参加しました

mackerel meetupに参加しました

状況

現在は、とあるプロダクトで導入してモニタリングやアプリケーションメトリクスも関係ないけどサーバに紐づけて見たりしています。 実験的には、プロセス監視も1 or 0を定期的に返すことでできていますが、プロセスをスタックグラフで見るのはつらいす。

Mackerel meetup

フリークアウトかっこいいよ!!

ちょっと早くついたのですが、id:moznion さんとか @netmarkjp さんとか @koemu さんとかと雑談してたら始まってた

Introduction to Mackerel via @motemen

構成

term

  • Org: 課金単位になるらしい
  • Service
  • Role

  • Metricを収集して時系列で可視化

status

  • standby
  • working
  • maintenance
  • retired

監視 (experimental)

  • アラート(Webで確認するだけ)
  • Coming next: メール通知

カスタムメトリクス

API (v0)

  • ホスト情報の一覧
  • ステータス更新
  • 退役

@stanaka

  • 監視・通知
    • 6月: 基本的な監視・通知
      • メール
    • 7月: 応用的な監視・通知
      • 通知手段
  • アプリケーションメトリクス
    • レスポンスタイム・エラーレート
    • fluentd使う
    • ラベル・形状のカスタマイズ(7月)
  • グラフ拡充

    • グラフの外部貼り付け(iframe) 7~8月
  • 8月か9月に正式化

  • ユーザ権限管理強化

  • クラウドとの連携強化
  • Docker周りと連携

  • カスタムメトリックプラグイン

  • チャット連携

    • hubot-mackerel

Q&A

  • 何代まで耐えられますか?
    • 1000台は耐えてる、1万まで行けるんじゃないか
  • AutoScale環境でもっと使いやすく
  • デフォルト表示を切り替えられると嬉しい→検討します
  • メトリクスをCloudWatchに流したい→REST API経由でできるようにします
  • OSSプロジェクトへの無償提供はありますか?→前向きに検討したい、個別相談させて
  • 価格体系は?→基本、従量で応相談で月額課金

要望・質問

  • スケジュール・タイムラインの追加
  • 表示メトリクスの記憶をして欲しい
  • チャートタイプの種類が欲しい
  • プロセス監視はするの?
  • 課金は?

所感

  • 自前で持ってもいいんだけど正直、手間ではあるのでコスト次第では全然使いたいツール
  • agent一発でOKで、送信プラグインも今後は増えそうだし、データ取得のAPIも出そうなので色々できそう
  • server -> fluentd -> mackerel や server -> mackerel -> 何か という組み合わせで適材適所で組み合わせてみたいところ

node-mackerel

とここまでだったら、 @koume さんのブログを見ればいいので node-mackerelを作りました。 postMetricもちゃんと動きます。

タイトルの横の[]travisに入れようとしたのですがなんかtravis-githubの具合が悪いっぽくて登録できなかった。後でやる。

最近、deferredを使い続けているのでその復習も兼ねて。

Docker/Droneを試してみる

:D な会社の友達たちが「いみゅーたぶるいんふらなんちゃらの合宿やるわー」って話してたので、そんな面白いことはぜひ外部からの参加も可能にするべきだ!って憤慨しながら突っ込んだら「くればおk」って言ってくれたので合宿参加しました。

概要はこんな感じ

Immutable Infrastructure 的ななにかをやる

キーワード
・Vagrant
・Docker
・Mesos
・Serf
・Sensu ?
・Jenkins
・とかとか

やること
・上のキーワードをてきとうに組み合わせるとなにかおもしろいの出てくるかも
・Jenkins × Docker とか
・Mesos × Vagrant とか
・ただ触ってみるだけでも良いとおも

主催者の @sonots さんは上記のような概要書いたくせに全然関係ないfocuslight(の主にドキュメントページ)をやってた

僕は、とりあえずdockerだけ予習してから参加した。 (ちなみに実家から母が来てたんだけど、いろいろあってリスケとかしてもらったのもあって妻にまるなげして参加した。なので、帰りにヒカリエでケーキ買って帰った)

やろうと思ってたこと

  • focuslightのRRDToolAPIからデータを抜いてD3化→brew installできなかったのでやめた
  • droneを試す→まあ、動いた。gitlabとか追加できるようにコードを読み漁ってたところで終わり

focuslight

  • brew install rrdtool→こける
  • brew install gobject-introspection が原因ぽい
Warning: No developer tools installed.
You should install the Command Line Tools.
Run `xcode-select --install` to install them.
==> Downloading http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/1.38/gobject-introspection-1.38.0.tar.xz
Already downloaded: /Library/Caches/Homebrew/gobject-introspection-1.38.0.tar.xz
==> ./configure --prefix=/usr/local/Cellar/gobject-introspection/1.38.0
==> make
./g-ir-scanner: line 29: `    def on_exception(exctype, value, tb):'
make[2]: *** [GLib-2.0.gir] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

READ THIS: https://github.com/mxcl/homebrew/wiki/troubleshooting

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:277:in `open_http': 404 Not Found (OpenURI::HTTPError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `catch'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:518:in `open'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:26:in `open'
    from /usr/local/Library/Homebrew/utils.rb:264:in `open'
    from /usr/local/Library/Homebrew/utils.rb:281:in `each_issue_matching'
    from /usr/local/Library/Homebrew/utils.rb:293:in `issues_for_formula'
    from /usr/local/Library/Homebrew/exceptions.rb:178:in `issues'
    from /usr/local/Library/Homebrew/exceptions.rb:209:in `dump'
    from /usr/local/Library/brew.rb:118

このあと、mac os xのboot2docker使って ubunturrdtool入れようとしたけど、それでもこけてたので、時間もったいないし辞めた

drone

f:id:muddydixon:20140223150138p:plain

docker daemonが必要らしい

  • 参考
  • sudo sudo docker -H 0.0.0.0:4243 -d
  • sudo DOCKER_HOST="tcp://localhost:4243" start drone わーい

f:id:muddydixon:20140223150147p:plain

ログ

/var/log/upstart/drone.log

droneのsqlite3

/var/lib/drone/drone.sqlite

ubuntu@~$ sqlite3 /var/lib/drone/drone.sqlite 
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
builds     members    repos      teams    
commits    migration  settings   users    
sqlite> 

table

table 備考
builds ビルドのログが入っている。stdoutの中に全文保持
members 所属チームと役割を保持
repos リポジトリ設定
teams チーム設定
commits リポジトリのコミットログを保持
migration よくわからない
settings drone自体の設定
users ユーザ
  • users
table|users|users|2|CREATE TABLE users (
   id                INTEGER PRIMARY KEY AUTOINCREMENT
  ,email             VARCHAR(255) UNIQUE
  ,password          VARCHAR(255)
  ,token             VARCHAR(255) UNIQUE
  ,name              VARCHAR(255)
  ,gravatar          VARCHAR(255)
  ,created           TIMESTAMP
  ,updated           TIMESTAMP
  ,admin             BOOLEAN
  ,github_login      VARCHAR(255)
  ,github_token      VARCHAR(255)
  ,bitbucket_login   VARCHAR(255)
  ,bitbucket_token   VARCHAR(255)
  ,bitbucket_secret  VARCHAR(255)
)
  • teams
table|teams|teams|6|CREATE TABLE teams (
  id        INTEGER PRIMARY KEY AUTOINCREMENT
  ,slug     VARCHAR(255) UNIQUE
  ,name     VARCHAR(255)
  ,email    VARCHAR(255)
  ,gravatar VARCHAR(255)
  ,created  TIMESTAMP
  ,updated  TIMESTAMP
)
  • members
table|members|members|9|CREATE TABLE members (
   id      INTEGER PRIMARY KEY AUTOINCREMENT
  ,team_id INTEGER
  ,user_id INTEGER
  ,role    INTEGER
)
  • commits
table|commits|commits|13|CREATE TABLE commits (
   id           INTEGER PRIMARY KEY AUTOINCREMENT
  ,repo_id      INTEGER
  ,status       VARCHAR(255)
  ,started      TIMESTAMP
  ,finished     TIMESTAMP
  ,duration     INTEGER
  ,attempts     INTEGER
  ,hash         VARCHAR(255)
  ,branch       VARCHAR(255)
  ,pull_request VARCHAR(255)
  ,author       VARCHAR(255)
  ,gravatar     VARCHAR(255)
  ,timestamp    VARCHAR(255)
  ,message      VARCHAR(255)
  ,created      TIMESTAMP
  ,updated      TIMESTAMP
)
  • builds
table|builds|builds|15|CREATE TABLE builds (
   id        INTEGER PRIMARY KEY AUTOINCREMENT
  ,commit_id INTEGER
  ,slug      VARCHAR(255)
  ,status    VARCHAR(255)
  ,started   TIMESTAMP
  ,finished  TIMESTAMP
  ,duration  INTEGER
  ,created   TIMESTAMP
  ,updated   TIMESTAMP
  ,stdout    BLOB
)
  • migration
table|migration|migration|28|CREATE TABLE migration (
    revision NUMBER PRIMARY KEY
)
  • repos
table|repos|repos|30|CREATE TABLE repos (
   id          INTEGER PRIMARY KEY AUTOINCREMENT
  , slug        VARCHAR(1024) UNIQUE
  , host        VARCHAR(255)
  , owner       VARCHAR(255)
  , name        VARCHAR(255)
  , private     BOOLEAN
  , disabled    BOOLEAN
  , disabled_pr BOOLEAN
  , privileged  BOOLEAN
  , timeout     INTEGER
  , scm         VARCHAR(25)
  , url         VARCHAR(1024)
  , username    VARCHAR(255)
  , password    VARCHAR(255)
  , public_key  VARCHAR(1024)
  , private_key VARCHAR(1024)
  , params      VARCHAR(2000)
  , created     TIMESTAMP
  , updated     TIMESTAMP
  , user_id     INTEGER
  , team_id     INTEGER
)

droneとJenkinsの違いとかを考えながら触ってたんだけど、Jenkinsは「いまある環境+α」を検証するのには良いと思う。Docker / Vagrantでごにょごにょやってテストする、とかもいいと思うけど、droneは「(そもそも必要な依存関係とかを解決した)コンテナを用意して、その上でテストが必要なやつだけを検証する」のは非常に簡単だし、環境とアプリ・ライブラリのテストを完全に分離できるという意味で俺的エポックメイキングな感じでした。

会社でも使ってみたいと思います。

プロビジョニングとオーケストレーション

@sonotsさんからいろいろ聞きながらの自分の中の理解

  • プロビジョニング:マシン単体における(アプリのインストールも含めた)設定の変更(初期化含む)
  • オーケストレーション:機能を実現する、複数のマシン群の「台数」の変更(構成の変化は今後。例えばDBの水平分割に伴うディスパッチャー層の追加とか)

@sonotsさんまじニフティ

雑感

  • @sonotsさん「Jenkinsみたいにslave/workerは使えるの?」→しらね
  • @tohae さん「ぱーるかけちゃうからよくないわー」
  • @yosuke_furukawa さん → @takus さん 「なに勝手にご飯食べてるんすか?」

:Dの会社、怖い会社