oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

nginx 1.7系である条件を元にアクセスログの出力を抑制する場合の設定

nginx 1.7系を設定している時に、まあ良くある要望でリバースプロキシの設定をしたいんだけど、アプリ側が静的ファイルを返す時にそれはアクセスログに出したく無いって設定でハマった。
初めはlocationの内部でif文書いてaccess_log offとかでやろうとすると、何故かファイル自体へのアクセスがそもそも404になる。で、じゃあ画像用のlocation切ってやろうとすると、locationの条件に正規表現を使った場合は

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in

こんなエラーになってしまう。

じゃあどうすれば良いかと言うと1.7系ではaccess_logディレクティブに

The if parameter (1.7.0) enables conditional logging. A request will not be logged if the condition evaluates to “0” or an empty string. In the following example, the requests with response codes 2xx and 3xx will not be logged:

    map $status $loggable {
        ~^[23]  0;
        default 1;
    }

    access_log /path/to/access.log combined if=$loggable;

The following parameters configure logging to syslog:

というのが追加されていて、
http://nginx.org/en/docs/http/ngx_http_log_module.html
以下の様な設定を入れる事で設定出来た。

    map $uri $loggable {
        ~.*\.(gif|jpg|png|ico|js|css)$ 0;
        default 1;
    }
    access_log  /var/log/nginx/access.log  ltsv if=$loggable;

そもそも前のエラーになる場合の設定ミスをまだ深く追えていないので行き当たりばったり感たっぷりのメモでした。

色んな会社さんの新人エンジニア研修まとめ

ちょうど今のチームに新卒メンバーが一人配属になり、「何からやっていこうかー」「今年の研修何教わった?」「今までどんな事やった事ある?」とか聞いている段階だった所にドワンゴさんの新卒研修の記事が流れてきたので、せっかくなので公開されている色んな会社さんの新人研修をメモっておく。なお、見たことがあるやつとか、ちょろっと調べてあくまでも自分と同じ職種に近いやつだけセレクトしているので、気の向いた人は「◯◯エンジニア編」とか作ると良いかもですね!
他社さんの充実したメニュー見ているだけじゃなくて、うちのチームの配属になったメンバーが「このチームに配属されて良かった」と思えるような事を僕もやらないとですね。

@okb_mさんのまとめブログ

Web系会社の新卒研修の内容をまとめた(自分の調べた範囲)
既に去年の段階で似たようなまとめを作られている人が。以下かぶっているのも結構あるので、そこはまあお察し下さい。

ドワンゴさん

ドワンゴのエンジニア新人研修2014
これがTLに流れてきたので個人まとめ作るきっかけになった。

pixivさん

非エンジニアの新卒にプログラミング研修を行いました
非エンジニアでここまでするんですね。逆にエンジニアでも非エンジニア職の研修とかするのかな。

ペパボさん

ペパボ新卒エンジニア研修 前編
ペパボ新卒エンジニア研修 後編
受講した人の書いた内容ですが、だからどういう所で詰まったとか受ける側の見方が分かりやすいですね。

id:shinsukuさんのブログより「>& STDOUT」

技術の進歩は「螺旋」である。 @t_wada さん社内講演
大変良いお話。

ワザノバ さんの記事 「Quora: 新しい社員の迎え方について」

Quora: 新しい社員の迎え方について
新卒に限らず新しいメンバーを迎えるときのお話。

[追記] 弊社の@79yuukiがやっている研修内容を追記しました。

Node.js で仕事をするための研修を実践してみた

[追記]はてブコメントで指摘貰い、我らがはてなさんのも追加

はてな教科書

適当なまとめ

とりあえず覚えている範囲の奴を思い出しながらググったりその途中で見つけたのを適当に上げておきました。
ツールの使い方とか基礎的な技術研修とかも仕事をする上では大事なんだけど、マインドについて特にみなさん色々と考えられていますね。各社さんとても充実していてそこはやっぱり文化であったり、新しく入る人が戦力になってくれるのがどれだけ大事なのかという事がカリキュラムに出ていたりと恥ずかしながら見ている僕が勉強になります。出来ることなら僕もこの研修受けてみたい。それにしても初めに覚える事が多くて今の人は大変ですね!

Nagiosで監視プラグインにhostgroupで定義しているホスト群のIPアドレスを一気に引数に入れる方法

やりたいこと

例えば10台のサーバでHTTPチェックをして「hostgroupに定義しているホストのうち、n台までNGはアラートはWARN、n台を超えたらCRIT」みたいな事をやりたい時に、監視プラグイン側にチェックする為のIPアドレスを引数に渡したいけど、service定義する箇所でコマンドの引数に全部のIPを書くとかはイケていないのでチラッと本を読んだら書いてあった。

方法

簡単に言うと

$HOSTADDRESS:<hostgroup名>:<デリミタ>$

というオンデマンドグループマクロという物を使えば実現出来る。

check_command    check_nagios_value_test!$HOSTADDRESS:linux_servers: $

こんな感じで定義すると、仮にlinux_serversにhost1,host2が設定されていれば、監視プラグイン側には

host1のIPアドレス host2のIPアドレス

という形で引数に入る。

以上です。

Cassandraでバッチ処理用のクラスタを作る為にsstableloderを使ってみた

まんまです。今までブログにこれで作れるらしいと書いておきながら試していなかったのでやってみた。
経緯としては元のクラスタは台数が多いので、スナップショットをコピーしてそれからあーだこーだわーわーぎゃーぎゃーするにはちょっと辛かったけど、コピー対象のデータは小さいデータだったので丁度いい機会だったのでやってみた。

まず使い方

  1. 流し込み先のクラスタを作成する。
  2. 流し込むデータと同じkeyspace、columnfamilyのスキーマを設定する
  3. sstableloderを使って流し込む

という手順になる。

気をつける所

sstableloderと流し込み先のVerは一致させる必要がある。これはsstableloderが流し込み先のクラスタに接続する際、nodetool ringに相当する処理を実行してクラスタのノード情報(token情報)を取得するが、sstableloderが1.2系、クラスタが1.1系だとnodetool ring自体の処理(この辺はまだ調べていない)が変更されている為にエラーになってしまった。

使い方としてはdatastaxのドキュメント(http://www.datastax.com/dev/blog/bulk-loading)にも載っているが

/usr/local/cassandra/bin/sstableloader -d 192.168.0.1(初回接続先ノード。このノードに接続してringを実行して実際に流し込むnode情報を取得する。「,」区切りで複数指定可能) keyspace/column_family

となるようにしなければいけない。その為、ディレクトリ構造もこれが実行出来るように

/data/keyspace/column_family/sstableファイル群

というような構造にしておき、一度cd /dataをして上記のkeyspace/column_familyという文字列でディレクトリ構造を指定出来るようにしなければいけない。

実際に流し込んだ所、3台のクラスタ(レプリカファクター3)に流し込んだ時で大体20MB/secという速度だった。で、いくつか並列にsstableloderを実行しても合算したスループットは変わらなかった。これは流し込み先クラスタの書き込み限界に達してしまったと思う。(細かいプロファイリングしていないから憶測)

また使った時にbashでfor文でぐるぐる回していると、たまにconnection redusedなどのexeptionが発生した。理由はさっぱり分かっていない。ログから失敗したデータを手動で流し込むと全く問題が無いのでなんでなんや。

こちらからは以上です。

JVM Operation Casual Talksで喋ってきました。

タイトルまんま。主催のtagomorisさん、同じく登壇者の皆様、話を聞いて頂いた皆様、会場運営のLINEの皆様ありがとうございました。
僕はCassandra Casualの時にもチョロチョロ話をした物をベースに「Cassandra運用で実施しているJVM監視について」という内容でスピーカーをさせて頂きました。発表する際はGrowlを有効にすると面白くないスライドでもみんなが面白い感じにしてくれるので、スピーカーをする人は必ずGrowlを有効にしましょう。スライドの後半は若干Cassandraに寄りすぎている所とかがあって、JVMの話からはちょっと脱線している所がありイベントの趣旨から若干アレな感じになっていたので反省です。資料はこちら。

他の方の発表を聞いてGC周りをみんなわかりやすく解説してくれてもっと早く聞きたかったり、G1GCの特徴とかが知れてよかったです。CassandraにG1GCが有効かは試してみないと分からないのでそのうちやってみようと思います。
僕は完全に「JVM上で動作するデータストアを運用する人」というポジションなので、アプリ開発の人とは若干考え方が違ったり
するのが色んな人の発表やパネルディスカッションを聞いて整理されてスッキリ出来て良かったです。

あと、とりあえず何かを説明する時に喩え話でみんな「CassandraやHBaseでは・・・」って言っていたので、多分IT企業の1/3くらいはCassandraユーザーの可能性がありますね。是非今度はCassandraユーザーで集まってCassandra Casualやりたいです。そして僕に色々教えて欲しいです。

最後に懇親会でJVMの辛い事や難しい所をみんなで言いまくっていた時に@kamipoさんが「なんでこいつらそんな辛い思いをしてまで使うんだろう?MySQLとか使えばええやん。」って生温かい目でぼくらを見守ってくれていた事を報告致します。

Cassandraの情報集める時に良く見るものメモ

最近「ついに実運用段階に入った」と言われてTwitter上でも一部で騒がしいCassandraですが、日本語の情報があまり無いのでググったりしても「※この情報はVer0.8の時です」とか書かれていて、今2.1系ベータが出る時代なので全く参考にならないとかお困りの方も多いのでは無いでしょうか。

以下のリンク集はググったら5分位ですぐ見つかる様なサイトばかりですがメモです。

The Apache Cassandra Project

http://cassandra.apache.org/
プロジェクト自体のオフィシャルサイト。まずはここを読みましょう。とりあえず触る人は「GettingStarted」くらいは読んでおくと良いんじゃないでしょうか。

DataStax

http://www.datastax.com/
Cassandraと言えばDataStax社と言っても過言じゃないレベルなので、情報量とかたっぷりです。どっちかというとオフィシャルのサイトよりこっちを見る。運用している場合は該当Verのドキュメントをブクマしましょう。確実に死ぬほど読みます。
運用ツールとして大事なopscenterとかもここからdownload出来ます。Cassandra自体は有料のEnterprise Editionもですが、無料版のComunity Editionの配布もしている。

DataStax Tech Blog

http://www.datastax.com/dev/blog
開発者向けとかリリース情報とか載っているのでRSS登録して読みましょう。

Planet Cassandra

http://planetcassandra.org/
事例ドキュメントとか色々載っています。ドキュメントはDataStax社へのリンクだけだったりしますが。僕が若干ここのサイトの立ち位置がユーザー会的ななのかどうかが分かっていない。ちなみにCassandraを「C*」って略すのはもちろんみんな知っているよね?僕は初めCassandraの事を調べてこのサイト読んだ時に「なにこの記号?」ってずっと思っていた。

CassadraのGithub

https://github.com/apache/cassandra
ソース自体は落として読まないとファイル多すぎて無理ゲーですが、リリースに関連する
https://github.com/apache/cassandra/blob/trunk/CHANGES.txt
https://github.com/apache/cassandra/blob/trunk/NEWS.txt
は逆に毎回ソース落として読むのはアレなので、こっちで見ています。どのVerでどのBugFixされたかとかは重要ですね。

Cassandra - ASF JIRA

https://issues.apache.org/jira/browse/CASSANDRA/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel
上記のGithubでCHANGES.txtなどでBug情報が分かったら詳細見るときに。

The Netflix Tech Blog

http://techblog.netflix.com/
エンジニアはみんなだいすきNetflix先生のブログ。Cassandraだけじゃなくて色々勉強になる情報が。

有名ドコロのサイトだとこんな物でしょうか。英語ばかりで生きているのが辛くなりますね!!

Twitterアカウントとか

Twitterアカウントで言うと色んな開発者の方がいらっしゃるのでこの人!みたいなのは僕レベルではレコメンドできませんが(英語全然分からないし)自分がフォローをしている中で一部あげさせて貰うと(以下敬称略)
@
Cassandra Projectのオフィシャルアカウント(のはず)
@
PlanetCassandraのアカウント
‏@
DataStaxさんの公式アカウント
@
DataStaxのCTOさん。つまりそういう事だ。

@
Cassandra開発者の一人でこの間日本にも来ていた。大変特徴的なヒゲで、一緒に写真撮ってもらって嬉しかった。
http://thelastpickle.com/index.html
Cassandraを利用したシステムのコンサルティングとかされている様子。

@
DataStaxの方でデータモデリング系の講演に良く出ている。slideshareにも資料一杯上がっている。

@
Datastaxの方でCassadraで唯一の日本人コミッター。いつもお世話になっております・・・。

この方たちをフォローして情報見ておくと良いことがあるんじゃないでしょうか。

こちらからは以上です。