GoogleCloudPlatformにおける運用監視（StackDriverとMackerel）

[diffeasy Advent Calendar 2018](https://qiita.com/advent-calendar/2018/diffeasy) の16日目の記事です。

「世界中の“むずかしい”を簡単に」を経営理念に活動している株式会社diffeasyの宮原([@tomoyoshi_de](https://twitter.com/tomoyoshi_de)) です。

私たちは普段GoogleCloudPlatformを利用してサーバーサイドのシステムを構築しています。

以下、構築例です。

- バックエンド
    - GoogleComputeEngine
        - nginx
        - Ruby on Rails
        - puma
    - CloudSQL
    - CloudStorage
    - 負荷分散
- フロントエンド
    - FirebaseHosting
        - Vue.js
         

システムを運用していく中で適応する監視ツールが「**StackDriver**」、「**Mackerel**」の2つがあるので比較検討しました。
最初はCloudSQLはStackDriverでしか見れないと思い、使い分けよう！ぐらいの気持ちでした。
が、まとめていくうちにMackerelでも設定できることに気付きました。すみません。。

外形監視が無料で設定できることぐらいがStackDriverに優位性があるぐらいで、、
結論は、完全に**Mackerel**の勝利です！

# 評価基準
1. 設定の容易さ
2. 監視種類
3. 通知の種類
4. 価格

# ①設定の容易さ
## StackDriver
### 初期設定
GCEに対してのStackDriverは特にGCE上でコマンドを打たなくてもOKです。
https://cloud.google.com/monitoring/quickstart-lamp

Stackdriver エージェントのインストールをすることでLogをGCPの管理画面で監視可能です。
どのAPIがいつ実行されたかのログはバッチリに見ることができそうです。

## Mackerel
### 初期設定
curlコマンドで完了するため、大変容易ですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/f16d19cd-c269-009d-07ab-5b11d254bc97.png)

## [結果]
導入設定の容易さはあまり変わらないと感じます。
が、英語か日本語かということで日本人はMackerel優位に立ちそうな気がします。

# ②監視の種類
どちらも基本的な監視はあるので、pluginを比較します。

## StackDriver
pluginを使うことでメジャーどころには対応しています。
https://cloud.google.com/monitoring/agent/plugins/
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/c494dd6c-a5f5-aa62-2e92-1035d3b8de62.png)

設定画面です。新しいPolicyを追加するという感じ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/1b43ab94-ce65-94a8-fe09-3d67a28052ce.png)

StackDriverのサービス群は、監視以外のログ参照、トレース、デバッカーがあります。
こちらにはMackerelにはない優位性がありそうですが、対応言語が限られており、私たちが主に使うRubyonRailsはβ版だったりと、私は設定を挫折しました。。

|名前|サービス|
|-----------------|-------------------------------------------|
|Stackdriver Logging |ログデータやイベントを格納、検索、分析、モニタリング、通知可能|
|Stackdriver Error Reporting|クラウドサービスで発生したクラッシュをカウントして分析、集計可能|
|Stackdriver Trace|アプリケーションから収集したデータをほぼリアルタイムでアプリケーションのパフォーマンスを自動的に分析されて、アプリケーションのパフォーマンス低下やパフォーマンス上のボトルネックを確認可能。|
|Stackdriver Debugger |本番環境のアプリケーションの状況を分析し、コードの任意の位置でのアプリケーションの状態を停止せずに調べることが可能。|

## Mackerel
### 監視項目
基本的な項目
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/5d743e17-b24d-9dcb-fe2e-619072125215.png)
- ホストメトリック監視：CPUメモリなどのしきい値監視
- ホスト死活監視：ホストが生きてるかを監視
- サービスメトリック監視：
- 外形監視：URLによる監視（有料）

### mackerel-agentが便利
https://mackerel.io/ja/docs/entry/spec/agent

以下のgithubを見ていただくと早いのですが、キャプチャを貼るのを諦めるぐらい数多くに対応しています。
https://github.com/mackerelio/mackerel-agent-plugins

GoogleCloudPlatformを使用しており、GoogleComputeEngineだけではなく、CloudSQL等のSQLは無理かなーと思ったら、プラグインコマンドに以下のようにオプション項目追加することでいけました。
Mackerel凄い…

```
mackerel-plugin-mysql -host=127.0.0.1 -username=<username> -password=<password>
```

nginxも以下ブログに詳しく書かれており、あっさりできました。
https://soudai.hatenablog.com/entry/mackerel-plugin-nginx

## [結果]
圧倒的Mackerel勝利。

# ③通知の種類
## StackDriver
海外のサービスなので、以下の通りです。SlackがあるからギリOKという感じ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/53d2acac-da20-da17-cb48-ce7bf66da3f7.png)

## Mackerel
通知の種類が多い。日本以外もカバーしてる印象。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/a8506f1f-4a92-b39f-9dbc-b44032ce81d3.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/11b418e0-0196-e26c-82cc-d24405c64367.png)

グループ設定により多彩に設定可能。
ちょっと読解難易度高めな印象。
https://mackerel.io/ja/docs/entry/howto/alerts

## [結果]
圧倒的Mackerel勝利。

# ④価格
## StackDriver
無料枠があり、ほぼ無料でいける。
https://cloud.google.com/stackdriver/pricing
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/5e88974e-6dcf-eb5d-e455-3690b4a8cef2.png)

## Mackerel
Freeでも十分恩恵を受けることが出来る。
インフラエンジニア目線だと監視項目10個は少ないのだろう。サービス拡大時に有償化を検討したい。
https://mackerel.io/ja/pricing/
![image.png](https://qiita-image-store.s3.amazonaws.com/0/142933/87782219-4dc4-b295-0464-362aa5364b3b.png)

## [結果]
ほぼ無料でいけるため、引き分け。

# まとめ
国産を贔屓目に見ることなく、Mackerel凄いです。
日本の運用監視の未来は明るいと思います。

少し玄人向けと思われるpluginがあるので、ある程度チェック機能をパッケージ化してもいいかもと思います。まず私たちの理想の組み合わせは整理します。

ただ、GAEやHerokuを利用することでそもそも監視を気にしなくて良い日が来るのか…？と考えつつ、そちらはProductionで試したいと思います。