sekaie engineers' blog

セカイエ株式会社が主催するエンジニア勉強会について

GCP の StackDriver Logging を使ってエラーログを集める

おはようございます。こんにちは。こんばんわ。

佐々木です。体重は怖くて測ってません。

最近は、暑かったり寒かったり暑かったりと体調を崩しやすい時期ですね。

健康は、日頃のモニタリングが大事です。異常を検知したらすぐに診察をうけるのが一番です。

WEBサービスも一緒です。日々のモニタリングから異常を検知して、早急に対応できる体制を整えましょう。

というわけで(どういうわけ)、最近リリースした WEB API だけのサービスがあるので、ここでエラーのモニタリングを行いましょう。

最初は AWS の CloudWatch を使っていたのですが、いかんせん使いづらいです。

Google Cloud Platform (以下 GCP) で StackDriver Logging のベータ版がリリースされていたので今回はこちらを使ってみます。

StackDriver Logging とは

僕が紹介することではないのでページを御覧ください。

cloud.google.com

ザクッというと、ログをばこっと投げておけばあとは StackDriver の UI とかと連携して見たりすることが出来るようなものっぽいです。

StackDriver は各サービスと連携できるので PagerDuty のようなものとも連携していくことが出来ますね。

便利な予感がします

StackDriver Logging にログを送るために

fluent plugin

今回対象のサービスは AWS の EC2 で動いています。GAE じゃないのが残念。ですが

fluent の plugin で StackDriver Logging にログを送れるプラグインが有りますのでこちらを利用します

github.com

aggregator に install

install

$ sudo td-agent-gem install fluent-plugin-google-cloud

td-agent.conf / aggregator

<match log.error>
  type google_cloud
</match>

forwarder

td-agent.conf / forwarder

<source>
  type tail
  format json
  path /var/log/XXXX.log
  pos_file /tmp/td-agent/XXXX.pos
  tag log.error
</source>

<match log.error>
  type forward

  <server>
    host XXXXXXXXX
    port 24224
  </server>

  heartbeat_type tcp
  flush_interval 10s
  num_threads 8
  expire_dns_cache 600
  buffer_type file
  buffer_path /var/log/td-agent/buffer/log.error
</match>

log format は plugin を見て metadata になりそうな部分を required params として用意しています

{
  time: datetime.to_i,
  path: path,
  severity: severity,
  message: message
}

用意するのはこれだけでOKです

あとは fluentd を restart して設定を反映させましょう

td-agent.log

2016-07-05 09:45:51 +0000 [info]: Successfully sent to Google Cloud Logging API.

こんな感じの info が出てくれば成功です。

それでは StackDriver Logging の画面を見てみましょう

StackDriver Logging UI

↑までやればログが送られてきています

↓は一行のエラーログです。

time, severity, message は metadata として扱われ、

path は structPayload のデータとして扱うことが出来ます。

f:id:sekaie:20160705201245p:plain

まだ全然見てないですがフィルタとかを設定して指定のログだけを見るとかそういうのも出来るみたいです

https://cloud.google.com/logging/docs/view/advanced_filters

さらに他の GCP サービスと連携

せっかくの GCP サービスですし、 BigQuery とかと連携してみましょう

Logging には BigQuery に Streaming Insert する機能があるようです

f:id:sekaie:20160705201831p:plain

ちょこちょこと必要な情報を入れてエクスポートしてみます。

するとこんな感じに BigQuery にテーブルが作成されています

f:id:sekaie:20160705201949p:plain

後はこのテーブルを焼くなり煮るなりしてデータを好きに扱えます。

とても便利ですね。

おわりに

今回は StackDriver Logging にログを貯めるところを中心にご紹介しました。

GCPはデータ分析のためのサービスが豊富にそろっていて、Logとデータベースのデータを連携したりとかが容易にできるようになります。

まだ、GCP を使ったことない人はぜひ使ってみてはいかがでしょうか(営業じゃないです)

ほな!