構造化ログ × elastic-agent

>100 Views

March 10, 23

スライド概要

profile-image

好きなもの:猫、パソコン、プログラム、孤独、カレー、アニメ、映画、本、ぽっちゃり女 嫌いなもの:犬、球技、英語、責任感、若い人、やる気のある人、ガリガリ女

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Elastic Agent × 構造化ログにより 実現した決済監視ダッシュボード 2022-07-21 SB Payment Service Corp. 今井 健太(@shiba_dog)

2.

自己紹介 アプリケーション開発者 今井 健太(@shiba_dog) Elasticsearch + Kibanaで可視化利用を5年間 JavaプログラマでWebシステムの開発・運用歴が長い 現在の主な業務 ● 新規サービス開発・運用 ● 運用の改善 2

3.

会社紹介 – SBペイメントサービス ソフトバンクグループの決済分野における中核事業会社 決済・金融 通信 インターネット SoftBank Group 海外投資 コンテンツ その他 3

4.

SBペイメントサービスの事業内容 決済代行からカード事業まで幅広く展開 決済代行 キャリア決済 EC運営事業者さま向けにオンライン決済 事業を運営しています。豊富な決済手段 をまとめてご提供しています。 ソフトバンクと共同で、ソフトバンク 携帯ユーザー向けの通話料合算 請求「ソフトバンクまとめて支払い」 の開発・運営をしています。 EC/ネット店舗 カード加盟店業務 Visa、Mastercard、UnionPay(銀聯)のメン バーシップライセンスを保有しており、各ブラ ンドのアクワイアラー(クレジットカード加盟 店契約会社)としての加盟店審査や管理事 業、端末決済サービスを提供しています。 実店舗/訪問販売 カード発行業務 ソフトバンク携帯ユーザー向けの 「ソフトバンクカード」のカード発行・ 運営をしています。 ソフトバンクカードは、 Visa加盟店 で利用できるプリペイドカードです。 ご利用金額に応じて Tポイントが貯 まります。 4

5.

SBペイメントサービスの事業内容 決済代行からカード事業まで幅広く展開 決済代行 キャリア決済 EC運営事業者さま向けにオンライン決済 事業を運営しています。豊富な決済手段 をまとめてご提供しています。 ソフトバンクと共同で、ソフトバンク 携帯ユーザー向けの通話料合算 請求「ソフトバンクまとめて支払い」 の開発・運営をしています。 EC/ネット店舗 カード加盟店業務 Visa、Mastercard、UnionPay(銀聯)のメン バーシップライセンスを保有しており、各ブラ ンドのアクワイアラー(クレジットカード加盟 店契約会社)としての加盟店審査や管理事 業、端末決済サービスを提供しています。 実店舗/訪問販売 カード発行業務 ソフトバンク携帯ユーザー向けの 「ソフトバンクカード」のカード発行・ 運営をしています。 ソフトバンクカードは、 Visa加盟店 で利用できるプリペイドカードです。 ご利用金額に応じて Tポイントが貯 まります。 5

6.

決済代行サービス オンライン決済サービス 加盟店 通販サイト ECサイト向けに様々な決済手段を提供 加盟店に決済 APIを提供するシステム 当社 決済サービス 全て一本化 ゲーム 電子書籍/動画 決済機関 クレジット 携帯キャリア決済 画面リンク型 コンビニ支払い チケット プリペイドカード 教育 口座振替 不動産 その他 API型 ポイント支払い アカウント連携 決済 6

7.

決済代行サービス オンライン決済サービス 加盟店 通販サイト ECサイト向けに様々な決済手段を提供 加盟店に決済 APIを提供するシステム 導入実績当社 約 15.7万 店舗 決済サービス (2020年度実績) 全て一本化 ゲーム 電子書籍/動画 決済機関 クレジット 携帯キャリア決済 画面リンク型 コンビニ支払い チケット プリペイドカード 教育 口座振替 不動産 その他 API型 ポイント支払い アカウント連携 決済 7

8.

決済代行サービス オンライン決済サービス 加盟店 通販サイト ECサイト向けに様々な決済手段を提供 加盟店に決済 APIを提供するシステム 決済手段 40 種以上に対応 当社 決済サービス 全て一本化 ゲーム 電子書籍/動画 決済機関 クレジット 携帯キャリア決済 画面リンク型 コンビニ支払い チケット プリペイドカード 教育 口座振替 不動産 その他 API型 ポイント支払い アカウント連携 8

9.

決済代行サービス オンライン決済サービス 加盟店 通販サイト ECサイト向けに様々な決済手段を提供 加盟店に決済 APIを提供するシステム 当社 決済サービス 全て一本化 ゲーム 電子書籍/動画 億円 決済機関 (2021年実績) 取扱高 5兆3,027 クレジット 携帯キャリア決済 画面リンク型 コンビニ支払い チケット プリペイドカード 教育 口座振替 不動産 その他 API型 ポイント支払い アカウント連携 9

10.

決済代行サービス オンライン決済サービス 加盟店 通販サイト ECサイト向けに様々な決済手段を提供 加盟店に決済 APIを提供するシステム 当社 加盟店システムと決済機関システムの間に位置す る自社だけでは完結しない Webシステム 決済サービス 全て一本化 ゲーム 電子書籍/動画 決済機関 クレジット 携帯キャリア決済 画面リンク型 コンビニ支払い チケット プリペイドカード 教育 口座振替 不動産 その他 API型 ポイント支払い アカウント連携 10

11.

もくじ ✓ ElasticStackを導入したシステムとその構成 ✓ ダッシュボードの紹介 ✓ ダッシュボードを作るにあたって行ったこと ○ アプリケーションログの構造化 ○ ミドルウェアの情報収集 ✓ まとめ 11

12.

今回導入を行ったシステムの構成 加盟店 X 加盟店 Y 加盟店 Z カード会社 A 決済バッチ 非同期 キューシステム 決済オンライン システム カード会社 B カード会社 C 12

13.

今回導入を行ったシステムの構成 オンプレミスで構築 加盟店 X 加盟店 Y カード会社 A 決済バッチ 非同期 キューシステム 決済オンライン システム カード会社 B カード会社 C 加盟店 Z バッチで決済処理を行うために、 カード会社が許容する最適な流量でリクエストすること を目的とするシステム。 13

14.

データシッパーはどちらを使う? Filebeat Metricbeat Elastic Agent 14

15.

データシッパーはどちらを使う? Filebeat Metricbeat Elastic Agent Filebeat/Metricbeatは使い慣れている。 さらに、細かいチューニングが可能 しかし、複数のサーバに導入する場合、管理が大変。 15

16.

データシッパーはどちらを使う? Filebeat Metricbeat Elastic Agent 今回は、Grokは単純で収集元サーバでの加工は不要。 ログ収集で煩わされたくない! 16

17.

データシッパーはどちらを使う? こっちを採用 Filebeat Metricbeat Elastic Agent 今回は、Grokは単純で収集元サーバでの加工は不要。 ログ収集で煩わされたくない! 17

18.

今回導入を行ったシステムの構成 加盟店 X 加盟店 Y 加盟店 Z カード会社 A 決済バッチ 非同期 キューシステム 決済オンライン システム カード会社 B カード会社 C Elastic Agentを導入 Fleet Serverは各自で起動する設定とした 18

19.

これまでのElastic活用履歴 2017/12/14 Elastic {ON} TOUR Tokyo 2017 2019/10/04 Elastic Tokyo User Group 19

20.

可視化・検知の状況 アプリケーションログをもとに、 アプリケーションのログ分布を把握 決済トランザクションのデータをもとに、 決済サービスの正常性の把握 20

21.

運用での困りごと アプリケーションとサービスでの可視化の観点が異なっていたため、 サービスの状況をアプリケーションから把握することが難しかった。 つまり、どういう影響 だろう? WARNログが たくさん出ている! 開発者 プロダクトオー ナー 21

22.

求めているもの システムの開発者以外の人が 見たとしても、 状況を把握できるダッシュボード 影響を把握したい! プロダクトオー ナー 22

23.

決済リクエストの状況の把握 23

24.

決済リクエストの状況の把握 各ダッシュボードへのリンク 決済リクエストの成功・失敗 決済リクエストの失敗理由 決済リクエストの応答コード 決済リクエストの応答時間 24

25.

決済リクエストの状況の把握 25

26.

決済リクエストの状況の把握 決済処理消化実績 カード会社別 処理量 接続先別 処理量 通信回数 26

27.

決済リクエストの状況の把握 各ダッシュボードへのリンク 決済リクエストの成功・失敗 決済リクエストの失敗理由 決済リクエストの応答コード決済リクエストが成功したか・失敗したかを 決済リクエストの応答時間 シンプルに把握できる。 SUCCESS: 成功 ERROR: 失敗 27

28.

決済リクエストの状況の把握 各ダッシュボードへのリンク 決済リクエストの成功・失敗 決済リクエストの失敗理由 決済リクエストの応答コード 決済リクエストの応答時間 この場合、一時的にネットワーク障害が発 生してHTTP通信ができない状態になってい たことがわかる 28

29.

決済リクエストの状況の把握 各ダッシュボードへのリンク HTTP通信ができていない状況だったため、 応答時間は早くなっていることがわかる 決済リクエストの成功・失敗 決済リクエストの失敗理由 決済リクエストの応答コード 決済リクエストの応答時間 29

30.

決済リクエストの状況の把握 特定の外部接続先で事象が発生しており、リト ライは4回まで実施しているが決済処理消化実績 改善していないことがわかる カード会社別 処理量 接続先別 処理量 通信回数 30

31.

決済リクエストの状況の把握 カード会社別の処理量から、特定のカード会 決済処理消化実績 社による障害ではないことがわかる カード会社別 処理量 接続先別 処理量 通信回数 31

32.

流量コントロールの状況把握 32

33.

流量コントロールの状況把握 決済トランザクションの状態 決済失敗理由 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 決済処理消化実績 33

34.

流量コントロールの状況把握 バッチの処理結果 バッチの失敗理由 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 決済がNGになっており、決済NGの理由が特 定の理由コードであることがわかる 決済処理消化実績 34

35.

流量コントロールの状況把握 バッチの処理結果 流入が止まった時点から徐々に、 バッチの失敗理由 決済リクエストが消化されている。 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 決済処理消化実績 35

36.

流量コントロールの状況把握 バッチの処理結果 バッチの失敗理由 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 この時点では、特定のキューに 決済リクエストが残っていることがわかる 決済処理消化実績 36

37.

流量コントロールの状況把握 バッチの処理結果 決済リクエストの消化状況から、 それぞれのカード会社へのリクエストが行わ バッチの失敗理由 れていることがわかる 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 決済処理消化実績 37

38.

これらのダッシュボードを作るにあたって ● アプリケーションで把握している情報の可視化が必要 ○ ログメッセージを構造的に入れる必要がある。 ● ミドルウェアの情報と合わせたダッシュボードとしたい ○ 絞り込みも容易に行えるように、データのフィールドが統一されている必要が ある。 38

39.

これらのダッシュボードを作るにあたって ● アプリケーションで把握している情報の可視化が必要 ○ ログメッセージを構造的に入れる必要がある。 ● ミドルウェアの情報と合わせたダッシュボードとしたい ○ 絞り込みも容易に行えるように、データのフィールドが統一されている必要が ある。 39

40.

これらのダッシュボードを作るにあたって ● アプリケーションで把握している情報の可視化が必要 ○ ログメッセージを構造的に入れる必要がある。 ● ミドルウェアの情報と合わせたダッシュボードとしたい ○ 絞り込みも容易に行えるように、データのフィールドが統一されている必要が ある。 アプリケーションによる構造化ログで解決! 40

41.

アプリケーションの構造化ログとは? 2022-07-21T10:00:00Z [INFO] 普通のログ。ステータスは200! --------- LOG 41

42.

アプリケーションの構造化ログとは? 2022-07-21T10:00:00Z [INFO] 普通のログ。ステータスは200! --------- LOG 通常、アプリケーションのログは、 時間・ログレベル・メッセージなどを スペースで区切ったものを出力する。 42

43.

アプリケーションの構造化ログとは? 2022-07-21T10:00:00Z [INFO] 普通のログ。ステータスは200! --------- LOG メッセージ部分に可視化したい情報を 出すことができるが、ログ一つ一つに合わせたGrok を作らなければならない! 43

44.
[beta]
アプリケーションの構造化ログとは?
{
"@timestamp": "2022-07-21T10:00:00Z",
"log.level": "INFO",
"message": "構造化されたログ",
"http.response.status_code": 200
}

{;}
JSON

構造化されたログを出力することで以下の利点がある
● Grokを容易にすることができる
● ログ情報を可視化することが容易になる
44

45.
[beta]
アプリケーションの構造化ログとは?
{
"@timestamp": "2022-07-21T10:00:00Z",
"log.level": "INFO",
"message": "構造化されたログ",
"http.response.status_code": 200
}

{;}
JSON

ECS logging プラグインを利用することで、
ライブラリ追加とログライブラリの設定のみで
簡単に実現することが可能。
45

46.

ECS Loggingについて Ealstic Common Schema(ECS)互換であるJSONに簡単にフォーマットするライブラリ。 このライブラリは複数の言語に対応している。 ● ● ● ● ● ● ● .Net Go Java Node.js PHP Python Ruby <dependency> <groupId>co.elastic.logging</groupId> <artifactId>logback-ecs-encoder</artifactId> <version>${ecs-logging-java.version}</version> </dependency> 46

47.

アプリケーションの構造化ログとは? {;} Custom Logs JSON 構造化されたアプリケーションログを FleetのCustom Logsを使って収集させた。 47

48.

決済リクエストの状況の把握(再掲) 各ダッシュボードへのリンク 決済リクエストの成功・失敗 決済リクエストの失敗理由 決済リクエストの応答コード 決済リクエストの応答時間 48

49.

これらのダッシュボードを作るにあたって ● アプリケーションで把握している情報の可視化が必要 ○ ログメッセージを構造的に入れる必要がある。 ● ミドルウェアの情報と合わせたダッシュボードとしたい ○ 絞り込みも容易に行えるように、データのフィールドが統一されている必要が ある。 49

50.

これらのダッシュボードを作るにあたって ● アプリケーションで把握している情報の可視化が必要 ○ ログメッセージを構造的に入れる必要がある。 ● ミドルウェアの情報と合わせたダッシュボードとしたい ○ 絞り込みも容易に行えるように、データのフィールドが統一されている必要が ある。 Elastic Agentを使うことで解決! 50

51.

ミドルウェアとアプリログの統合 決済バッチ HTTP 非同期 キューシステム HTTP 決済オンライン システム $ DB --------- LOG 51

52.

ミドルウェアとアプリログの統合 決済バッチ HTTP 非同期 キューシステム HTTP 決済オンライン システム $ --------- DB Access Log LOG RabbitMQ 52

53.

ミドルウェアとアプリログの統合 決済バッチ HTTP 非同期 キューシステム HTTP 決済オンライン システム $ DB --------- LOG 「Apache HTTP Server」を使っ て、出力したLogを収集する 53

54.

アクセスログのダッシュボード 54

55.

アクセスログのダッシュボード パーセンタイルや最大・最小などの値 HTTPステータス別の流量 URL別 平均レスポンスタイム レスポンスタイム (パーセンタイル) アクセスログの一覧 55

56.

アクセスログのダッシュボード パーセンタイルや最大・最小などの値 HTTPステータス別の流量 URL別 平均レスポンスタイム レスポンスタイム (パーセンタイル) アクセスログの一覧 56

57.

ミドルウェアとアプリログの統合 決済バッチ HTTP 非同期 キューシステム HTTP 決済オンライン システム $ DB --------- LOG 「RabbitMQ Logs」を使って、 出力したログや管理APIから メトリクスを収集する 57

58.

ミドルウェアとアプリログの統合 決済バッチ HTTP 非同期 キューシステム HTTP 決済オンライン システム $ DB --------- LOG Jdbc input pluginを使って SQLによるデータ抽出 58

59.

流量コントロールの状況把握(再掲) 決済トランザクションの状態 決済失敗理由 決済リクエスト流量 処理待ち決済量推移 処理待ち 決済量断面 決済処理消化実績 59

60.

流量コントロールの状況把握(データソース) DB DBで管理している 決済トランザクション状態 アクセスログ キューのメッセージ消費レート キューの メッセージ量 {;} JSON アプリケーションの 外部システムへの通信レート 60

61.

可視化の効果 サービス状況を把握するダッシュボードに加えて システムの状態を、より深く知り得る ダッシュボード作成ができた。 アプリケーションログを可視化に利用することができるようになっ たため、状態をより深く表せるようになった! 61

62.

まとめ ● Elastic Agentと構造化ログを組み合わせ、 アプリケーションログを使った可視化を行った。 ● ミドルウェアのメトリクスとアプリケーションログを併せてみるこ とで、全体の状況を容易に把握することができるようになっ た。 ● システムのログから情報を可視化することで、 より深い情報の可視化ができるようになった。 62

63.

ご清聴ありがとうございました <(_ _)>

64.

We are hiring! 弊社はエンジニアを募集しています 興味がある方は @shiba_dog まで