目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

3月末日で退職してました

f:id:masasuz:20200305115816j:plain

株式会社モバイルファクトリーを3/31で退職してました。2010年6月入社なので9年10ヶ月になりますね。今は新しい会社のSREチームで働いています。

前半数年間はケータイ向けのサイト(いわゆる着メロサイト)やソーシャルアプリの開発運用をしていました。後半数年間は社内全体の開発基盤・運用基盤の整備をしていました。いわゆるインフラよりのお仕事ですね。

入社当時Webアプリケーション開発をまったく分かってなかったところからなんとか人並みに運用開発できる力をこの会社で身につけることが出来たと思います。今なんとかwebエンジニアをやれてるのはこの会社のおかげと言っても過言では無いと思っています。 入社当時SQLをまともに書けなかったくらいのレベルだったのでよく採用されたなと。。。

お仕事的には回りのレベルも高いし、自身の仕事のやり方も裁量を与えられていたし、社内環境も、待遇も悪くなかった。むしろ良かったくらいでした。ただ、長年勤めていく内に悪い意味での慣れが出てきて、自分自身停滞感を感じることが出てきました。ここ数年が特に感じることが多く、停滞感から来る焦りを日々感じていました。どうにか停滞感を解消するために副業として他社のお仕事を請け負ったりしていましたが、どうにも解消ができずにいました。

そんな折に現職のSREチームの話をいただきました。実際に面談、面接を受けて、課題や環境の話を聞くにつれて、ここでなら一歩進めるのではないかという感触を得ました。もちろん焦燥感、停滞感はあれど、居心地が良いと感じてた今までの環境を変えることにはかなりの葛藤がありました。いろんな決め手はあったのですが、新しい場所の方が一番の下手*1でいれそう、なにより事業的にも業務的にも仲間的にもワクワクできそうというあたりが決定打になりました。

入社して2週間しかも、初日以外ずっと在宅勤務なのでまだ様子が摑めてないですが、早くキャッチアップしてバリバリ成果を出していきたい所存です。

これからもよろしくお願いします。

例のもの置いておきます。気が向いたらでよいです。 https://www.amazon.jp/hz/wishlist/ls/3S4C1LCDWKCTM?ref_=wl_share

*1:情熱プログラマ参照

GDG DevFest Tokyo 2019に行ってきた

tokyo.gdgjapan.org

珍しく、何も予定が入ってない土曜日だったので、行ってきました。

最近GCPを触る機運が出てきたのでちょうどいいタイミングでした。

以下メモ

GCP 101 | 坂田 純 | GDG DevFest Tokyo 2019

主にCloudRunの話。 HTTPをlistenするコンテナを起動するサービス。使った分だけ課金対象となる。リクエスト数次第で自動的にスケールする。とお手軽にできそうな印象。

インターフェースがHTTPなので基本的にはパブリックでアクセス出来てしまうが、--no-allow-unauthticatedオプションをつけてデプロイするとで限られた人だけ実行できるようになります。これでバッチ的なことができそう?

マイクロサービスの開発とテストファースト/テスト駆動開発 | 柴田 芳樹 | GDG DevFest Tokyo 2019

ちょいちょいブログとかは見てましたが、話を聞くのは初めてでした。還暦を迎えてもコードをバリバリ書いてるのは素直に尊敬します。

メルペイのマイクロサービスのテストにも興味深かったですが、組み込みでのテストの話も興味深く聴かせてもらいました。 ツールや環境の充実度の差はあれど、組み込みでもウェブでもやるべきことは同じなのだなと思いました。

CloudNative 時代における GKE/Kubernetes ではじめる開発 | 青山 真也 | GDG DevFest Tokyo 2019

k8sの紹介的な話。k8s好きになりました。話がすごいうまくて、めんどくさそうだなあと思ってたkubernetesの印象が変わりました。

その他

:D社のブースを覗いたらMOVの構成図が展示されていて、IoT関連だけAWSを使っていてそれ以外はGCPを使ってるのが興味深かった。 IoT関連のものも別で実装して、AWSからは引き上げるようなことを言ってて、なるほどなあとなりました。

基本的にAWSで構成されたインフラばかり見てたのでなかなか新鮮でした。

障碍対応と私

この記事は、モバイルファクトリー Advent Calendar 2015 18日目の記事です

昨日は @yashims85さんのAndroid drawableは画像を入れておくだけじゃないでした。今日は障碍の話です。

普段障碍対応しているときにやってること考えてることをざっくりと時系列を追って書いていきたいと思います。 コンテキストとしてはLinuxサーバでwebサービスをやっていると思っていただければと思います。

障碍の検知

webサービスを運営していれば、何かしらの監視システムからSlackなりIRCなりメールなり電話なりでアラートの通知が来ると思います。

対応報告

障碍対応をしている旨をメールなり、何かの連絡手段で伝えます。同じく見ている人がいれば調査作業の分担もできます。

状況把握

どこで障碍?

アラートの通知内容にどのサーバで何が起きた的なことが書いてあるはずなので、それを確認します。 だいたいの組織に於いてはサーバ管理表的なものがwebなりExcelなり設定ファイルなりにあるはずなので、そこと照らし合わせてどのプロジェクトのどのロールなのかを把握します。

直前に何をした? いつもと違うことは何?

webアプリケーションであれば直前に入れた変更が原因かもしれません。また、ちょっと前に入れていた変更だが、cronで時限発火したというケースも考えられるかも知れません。 イベント開始で急にトラフィックが上がったと言うことも考えられるかも知れません。普段と変わったことは何かということが把握出来れば対処の幅が広がります。

影響範囲は?

サービス全体なのか、サービスの1機能の障碍なのか、ミドルウェア障碍なのか、影響がどの範囲に及んでいるのかを見ます。 ミドルウェア障碍であれば、最近であれば、冗長化されてるのが普通なので、サービスから切り離して、監視から外せば終わりというパターンも多いです。 サービス全体が落ちている場合は、ひとまず重要な関係者に状況の1次連絡すぐにした方が良いでしょう。

接続出来る?

そもそも、該当サーバに接続出来ない場合は、できることはほぼないので、該当サーバをサービスから外した上で、監視対象から外します。(単体のサーバ障碍の場合)

# pingは通る?
ping ${IP}

# sshできる?
ssh ${IP}

ログの確認

該当サーバ上で動いているミドルウェアアプリケーションサーバのエラーログを主に見ます。だいたいこの辺に重要な情報が出力されている可能性があります。

システムのログも確認した方が良いです。主にsyslogやkernelログを見ると良いでしょう。

# syslogを見る
less /var/log/syslog

# kernelログを見る
less /var/log/kern.log

# kernelログを見る2
dmesg

サーバ状態の確認

負荷の関係で障碍が起きているのであれば、現在のサーバの状態を確認しましょう。 以下のようなコマンドが現状把握に役立つでしょう。

# loadaverageおよびログイン中のユーザを見る
w

# 変なプロセス無いか見る
ps -ef
# or
ps auxwwww


# 開いているポートを確認する
netstat -tlnp

# ネットワークコネクションを確認する
netstat -taopen

# なにかCPU使いまくってないか見る
top

# 現在の負荷の経過を見る
dstat -tamsl 5

# 過去の負荷情報を見る
## CPU
sar
## memory
sar -r
## la
sar -q

対処

直前のコミットにバグを入れ込んでしまったのであればリバートすれば解決するでしょうし、特定のサーバ落ちたのであれば、サービスから外してあげるだけで良いかも知れません。 障碍の内容によって対処方法は様々です。ここで気を付けたいのは二次災害を起こさないことです。 可能であれば、コマンドなり対処スクリプトのレビューをしてもらったり、現状認識に間違いがないかを周りの人にしてもらうと良いでしょう。 (往々にして一人で障碍対応せざるを得ない場合もありますが。。)

事後報告

障碍対応が終わったら、記憶が新鮮なうちに下記の内容をまとめてしかるべき場所に投稿します。 この辺の報告のフォーマットはだいたいの組織において決まっていることが多いでしょう。

  • 障碍内容
  • 影響範囲
  • 経過
  • 対処方法
  • 将来の対策

面倒くさがらずに事実をなるべく詳細に書いておくと未来の自分や自組織のためになると思います。 私の組織でも過去の障碍報告がだいぶ良い感じにデータベースになっており、たまに読み返すと気付きが得られます。

また、この障碍報告を元に、同種の障碍をなるべく起こさない仕組み作りをしていくことが肝要だと思います。

終わりに

自分が障碍対応しているときにやってること、考えてることをざっくり書いてきました。 誰にやり方を教わったわけでもないので、そこは違うとかこうした方がいいとかあれば、いただけると幸いです。

明日は、@lycoris102さんのGameJam部 活動年間活動報告です。きっと面白い話なのではないでしょうか。