Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elastic Stack で 何を可視化すれば性能改善が捗るのか?

katsuhisa_
October 11, 2017

Elastic Stack で 何を可視化すれば性能改善が捗るのか?

2017/10/11 (水) 第21回Elasticsearch 勉強会で話したスライドです。
https://www.meetup.com/Tokyo-Elastic-Fantastics/events/243671140/

katsuhisa_

October 11, 2017
Tweet

More Decks by katsuhisa_

Other Decks in Technology

Transcript

  1. 今日のゴール 今日聞いてくださったみなさんが、Elastic Stack を活用して、 1. 〜10/20 (金) : 性能可視化が完了 2.

    11/ 1 (水) 〜 : 可視化したグラフを見ながら 性能改善に着手開始 できるようになる! #elasticsearchjp
  2. The Four Golden Signals The four golden signals of monitoring

    are latency, traffic, errors, and saturation. If you can only measure four metrics of your user-facing system, focus on these four. http://landing.google.com/sre/book/chapters/monitoring-distributed-systems.html #elasticsearchjp
  3. The Four Golden Signals 1. latency 2. traffic 3. errors

    4. saturation ← How "full" your service is. (e.g., in a memory-constrained system, show memory; in an I/O-constrained system, show I/O) #elasticsearchjp
  4. The Four Golden Signals 1. latency 2. traffic 3. errors

    4. saturation ← How "full" your service is. (e.g., in a memory-constrained system, show memory; in an I/O-constrained system, show I/O) どれだけサービスがカツカツかを 示す指標 #elasticsearchjp
  5. The Four Golden Signals 1. latency 2. traffic 3. errors

    4. saturation この4つをいい感じに 測りたい。 #elasticsearchjp
  6. The Four Golden Signals 1. latency 2. traffic 3. errors

    4. saturation 今すぐ簡単に測れます #elasticsearchjp
  7. が、しかし、 • ログ保管期間が短い(有料プランの最長でも90日) • 有料プラン高い。 7〜8台にエージェント導入すると、すぐに80,000円 / 月 とか。 (インスタンスサイズ

    / 利用プランで値段が変わります。) 以下ページで、APM というNewRelic 主力製品の料金を見積もれます。 https://newrelic.com/application-monitoring/pricing #elasticsearchjp
  8. Elastic Stack の利用 投入データ • Nginx アクセスログ • DB のSlowQuery

    ログ(弊社は、AWS Aurora を利用) ※ Aurora については、以前、別の勉強会でお話しました。  ご興味ある方はどうぞ!  https://speakerdeck.com/katsuhisa91/rds-for-mysql-aurora-yi-xing-falsesubete #elasticsearchjp
  9. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 #elasticsearchjp
  10. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 サービス全体の性能を見るために利用 #elasticsearchjp
  11. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 基本的に性能改善で使いたい時は、 パーセンタイル表示で見ましょう #elasticsearchjp
  12. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURI ごとのレスポンス時間(レスポンス時間が大きい順) •

    正規化済みURI ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 サービスの性能における ボトルネックを探すために利用 #elasticsearchjp
  13. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURI ごとのレスポンス時間(レスポンス時間が大きい順) •

    正規化済みURI ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 ここを統一させることが、 ボトルネックの探索において重要 #elasticsearchjp
  14. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 サービス全体の健全度を見るために利用。 円グラフで5XX の割合出したり、 割合の推移を追うグラフを出したり。 #elasticsearchjp
  15. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 ボトルネックの探索に利用 #elasticsearchjp
  16. Elastic Stack の利用 どこに使っているか? • レスポンス時間のパーセンタイル表示 • 正規化済みURIごとのレスポンス時間(レスポンス時間が大きい順) • 正規化済みURI

    ごとのカウント数(レスポンス時間が大きい順) • HTTP ステータスコードの割合 • スロークエリの表示 • アクセス元の位置情報表示 唐突に謎リクエストが増えたら、 アクセス元をそれとなく把握するために活用予定 (幸い、今は謎攻撃を受けていないため未活用) #elasticsearchjp
  17. 構成 EC2 ( WebApp ) EC2 ( WebApp ) EC2

    ( LogAggregator ) Amazon RDS ( Aurora ) Nginx Access Log Nginx Access Log Slow Query Log #elasticsearchjp
  18. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる #elasticsearchjp
  19. EC2 ( WebApp ) EC2 ( WebApp ) EC2 (

    LogAggregator ) #elasticsearchjp Amazon RDS ( Aurora ) 1. 環境構築&ダッシュボードへのアクセス制限
  20. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる AWS Elasticsearch Service を利用すれば、 すぐ終わります。 #elasticsearchjp
  21. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる AWS Elasticsearch Service を利用すれば、 すぐ終わります。 ・AWS Elasticsearch Service を使うメリット  現状、AWS を利用しているのであれば、権限管理がとにかく楽 ・AWS Elasticsearch Service を使うデメリット  EC2 に直接インストールして使うよりかは割高  最新バージョンのElasticsearch への追従が今後しんどいらしい #elasticsearchjp
  22. EC2 ( WebApp ) EC2 ( WebApp ) EC2 (

    LogAggregator ) Amazon RDS ( Aurora ) #elasticsearchjp 2. Nginx のログ形式を変更
  23. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる これもNginx のconfig 書き直すだけなので、 すぐ終わります。(LTSV に変更。) #elasticsearchjp
  24. EC2 ( WebApp ) EC2 ( WebApp ) EC2 (

    LogAggregator ) Amazon RDS ( Aurora ) Slow Query Log #elasticsearchjp 3. Slow Query Log を受け取る
  25. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる fluentd プラグインを導入して、 データベース接続の認証情報を書くだけ。 #elasticsearchjp
  26. EC2 ( WebApp ) EC2 ( WebApp ) EC2 (

    LogAggregator ) Amazon RDS ( Aurora ) Nginx Access Log Nginx Access Log Slow Query Log #elasticsearchjp 4. ログを受け取って渡す&加工
  27. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる • fluentd の基本的な設定 #elasticsearchjp
  28. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる • Elasticsearch にデータ投入するための、 IAM設定(AWS の場合) • Elasticsearch と認証情報の受け渡しをする fluentd プラグインを導入 #elasticsearchjp
  29. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる • URI の不要情報をぬりつぶすため、正規表現を書く • geoip (IPアドレス ⇔ 位置情報)の fluentd プラグインを入れる #elasticsearchjp
  30. EC2 ( WebApp ) EC2 ( WebApp ) EC2 (

    LogAggregator ) Amazon RDS ( Aurora ) Nginx Access Log Nginx Access Log Slow Query Log #elasticsearchjp 5. Kibana の設定
  31. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる • geoip プラグインで追加した データの型をgeo_point に指定する • not_analyzed 設定で、 インデックスの要素解析無効化 #elasticsearchjp
  32. 実際にやったこと • Elasticsearch / Kibana 環境構築 • Kibanaへのアクセス制限 • Nginx

    アクセスログの出力形式変更 • SlowQuery 取得設定(fluentd plugin) • fluentd のセットアップ ◦ 受け取って渡す当たり前のことをやらせる設定 ◦ Elasticsearch に送信する認証情報設定 • ログ加工する設定(正規表現 / geoip 導入とかとか) • Kibana にtemplate入れる • Kibana でダッシュボードつくる ぽちぽちやる。 #elasticsearchjp
  33. ハマったこと というわけで、使ったプラグインを公開しておく。 • fluent-plugin-aws-elasticsearch-service AWS Elasticsearch Service にログを送るための 認証情報の受け渡しをよしなにやってくれる •

    fluent-plugin-rds-slowlog データベースからスロークエリのログを抜く • fluent-plugin-parser 見ての通り、受け取ったログをparse させる • fluent-plugin-filter_typecast 見ての通り、typecast するプラグイン • fluent-plugin-geoip 見ての通り、geoip のプラグイン • fluent-plugin-record-reformer 正規表現で加工済みのフィールドを追加するために導入 みんなが幸せにログ分析できますように。 #elasticsearchjp
  34. まとめ Elastic Stack で何を可視化すれば性能改善が捗るのか ⬇ The Four Golden Signals を見よう

    ⬇ 具体的には、 1. 「レスポンス時間のパーセンタイル表示」 2. 「URI ごとのレスポンス時間&呼出回数表示」 3. 「HTTP ステータスコードの割合」 あたりを可視化するのがオススメ。 #elasticsearchjp
  35. 今日のゴール(おさらい) 今日聞いてくださったみなさんが、Elastic Stack を活用して、 1. 〜10/20 (金) : 性能可視化が完了 2.

    11/ 1 (水) 〜 : 可視化したグラフを見ながら 性能改善に着手開始 できるようになる! #elasticsearchjp
  36. 今日のゴール(おさらい) 今日聞いてくださったみなさんが、Elastic Stack を活用して、 1. 〜10/20 (金) : 性能可視化が完了 2.

    11/ 1 (水) 〜 : 可視化したグラフを見ながら 性能改善に着手開始 できるようになる! #elasticsearchjp たぶんできます。 (なぜなら、うちもほんの三ヶ月前は、  Elasticsearch 導入検討すらしていなかったから。)