▶ 技術めも
NIKKEI SYSTEM 2017.7 SRE メルカリ記事
障害対応
サーバ監視サービス「Mackerel」
https://mackerel.io/ja/
電話、メール、PUSH 通知サービス「PagerDuty」
https://www.pagerduty.com/
> エスカレーション可能
[サーバ]
↓
[Mackerel監視サービス]
↓通知依頼 ↓情報
[PagerDuty] [Slack]
↓電話他
[SRE担当]
パフォーマンス向上
JSONファイルの読み込み
サイズ・種類最適化
自作メトリックス表示ツール「kurado」
https://github.com/kazeburo/Kurado
可視化サービス「NewRelic」
https://newrelic.com/
- 1リスクエスト中でDB、外部API処理
- SQL発行数と実行時間
アプリケションの動きの詳細トレース「strace」コマンド
http://blog.livedoor.jp/sonots/archives/18193659.html
自作PUSH通知ミドルウェア「Gurun」 GO言語
http://tech.mercari.com/entry/2016/11/08/170343
ログ収集/分析
ABテスト
ログ発生とともに「Fluentd」で集約サーバに転送
- リアルタイム集計
- S3バックアップ
- データ分析サービスへの送信
JSONを受け取る収集サーバ
「OpenResty」を採用
https://openresty.org/en/
JSON分解とログへの記録を OpenResty のLua で高速に実現
ログ転送エージェントはGo言語で実装した「fluent-agent-hydra」を利用
https://github.com/fujiwara/fluent-agent-hydra
可用性/スケーラビリティ向上
アプリにIPを書かずに「内部DNS」で管理
「内部DNS」でDNSラウンドロビンを実施してサーバ負荷分散
デプロイ
自動デプロイツール「Ansible」と Node.js を使用
https://www.ansible.com/
Ansible は Node.js から起動される
Slackチャット経由で「Ansible」に命令を送れるBOTを作成
デプロイスケジュールは「Google Calender」
チャットBOTが「Google Calender」にプルリクエストURLとともにリリース予定を追加
予定の時間になるとチャットBOTが「リリースして良いか」を聞いてくる
GitHubからのクローン、事前処理、rsync配布等の流れが Ansible の playbook(設定ファイル)に書いてある
[デプロイ用チャットBOT] ースケジュール確認→ [Google Calender]
[デプロイ用チャットBOT] ーリリースOK?→ [Slack]
[デプロイ用チャットBOT] ープルリクマージ→ [GitHub]
[デプロイ用チャットBOT] ーplaybook実行→ [Ansible]
セキュリティ
各サーバのエラーログに入力ミス発生を記載
Fluentdで集計してミドルウェア「Norikra」にデータを渡す。
「Norikra」
ログなどの情報を一定時間ごとに集計、その結果を別のミドルウェアに出力できるソフト
集計条件にSQL使用
https://github.com/norikra/norikra
ログイン情報の入力間違いの発生件数をNorikraで集計し、Mackerelでグラフを作成、アラートを上げるしきい値設定
サーバでも同一IPによるログイン攻撃は、IP自動ブロック機能あり
クローリングも同様にアクセス解析、アクセス数が上位のIPアドレスに関しては国情報を取得
[サーバ]
↓
Fluentd
↓ ログ入力
[Norikra] ← SQL
↓ 結果出力
Fluentd
↓
[Mackerel]
可視化とアラート