Slide 1

Slide 1 text

PHPとFluentdで実現する リアルタイムログ分析 pixiv Inc. 当田 昇(@picopico_dev) 2024.03.09

Slide 2

Slide 2 text

2 会社 ピクシブ株式会社 経歴 2023年4⽉ 新卒⼊社 職種 pixiv事業本部ウェブチーム 兼 インフラ部SREチーム 当⽥ 昇 @picopico_dev

Slide 3

Slide 3 text

1. リアルタイムログ分析とは 2. Fluentdの概要 3. Fluentdを用いたPHPアプリケーションのログ分析手法

Slide 4

Slide 4 text

1. リアルタイムログ分析とは 2. Fluentdの概要 3. Fluentdを用いたPHPアプリケーションのログ分析手法

Slide 5

Slide 5 text

ログ分析って何?

Slide 6

Slide 6 text

6 Databases Syslog Application logs Access logs Error logs

Slide 7

Slide 7 text

7 Databases Syslog Application logs Access logs Error logs Elastic Search Big Query MySQL Amazon S3

Slide 8

Slide 8 text

ログを集めてどうするの? →データ駆動で意思決定を行う 8

Slide 9

Slide 9 text

データ駆動で意思決定を行う 9 ● 異常検知 ● ユーザー行動分析 ● デバッグ ● 内部監査

Slide 10

Slide 10 text

大量のログをリアルタイムに 効率良く捌けるミドルウェアが必要 10

Slide 11

Slide 11 text

ログの特徴

Slide 12

Slide 12 text

ログの特徴 12 1. 複数のサーバーで発生する 2. データ形式が多種多様 3. リアルタイムで大量に書き込まれる

Slide 13

Slide 13 text

ログの特徴 13 1. 複数のサーバーで発生する 2. データ形式が多種多様 3. リアルタイムで大量に書き込まれる

Slide 14

Slide 14 text

14 User Gateway AP003 AP002 AP001 DB001 DB002

Slide 15

Slide 15 text

15 User Gateway AP003 AP002 AP001 DB001 DB002

Slide 16

Slide 16 text

ログの特徴 16 1. 複数のサーバーで発生する 2. データ形式が多種多様 3. リアルタイムで大量に書き込まれる

Slide 17

Slide 17 text

(例)Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

Slide 18

Slide 18 text

(例)Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" →構造化されていない、独自のシンプルな形式が多い

Slide 19

Slide 19 text

ログの特徴 19 1. 複数のサーバーで発生する 2. データ形式が多種多様 3. リアルタイムで大量に書き込まれる

Slide 20

Slide 20 text

20 想定シナリオ: あるウェブアプリケーションが毎日平均して 100万回のアクセスを受けるとします。各アクセスは、ユー ザー認証、ページビュー、 APIリクエストなど複数のログエントリを生成すると仮定します。 ログ量の推計 1アクセスあたりのログエントリ数 : 5件(認証、ページビュー、 APIリクエストx3) 1日あたりの総ログエントリ数 : 100万アクセス × 5 = 500万件 1ログエントリの平均サイズ : 500バイト(日時、セッション ID、アクション詳細などを含む) これらの値を元に1日あたりのログデータの総量を計算すると、

Slide 21

Slide 21 text

21 想定シナリオ: あるウェブアプリケーションが毎日平均して 100万回のアクセスを受けるとします。各アクセスは、ユー ザー認証、ページビュー、 APIリクエストなど複数のログエントリを生成すると仮定します。 ログ量の推計 1アクセスあたりのログエントリ数 : 5件(認証、ページビュー、 APIリクエストx3) 1日あたりの総ログエントリ数 : 100万アクセス × 5 = 500万件 1ログエントリの平均サイズ : 500バイト(日時、セッション ID、アクション詳細などを含む) これらの値を元に1日あたりのログデータの総量を計算すると、 1日あたりのログデータ量: 500万件 × 500バイト = 2,500,000,000バイト(約2.33GB)

Slide 22

Slide 22 text

ログの例

Slide 23

Slide 23 text

[08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [08-Mar-2023 12:00:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function testFunction() in /path/to/your/script.php:15 PHPのエラーログ

Slide 24

Slide 24 text

[08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [08-Mar-2023 12:00:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function testFunction() in /path/to/your/script.php:15 PHPのエラーログ タイムスタンプ

Slide 25

Slide 25 text

[08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [08-Mar-2023 12:00:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function testFunction() in /path/to/your/script.php:15 PHPのエラーログ エラーの種類

Slide 26

Slide 26 text

[08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [08-Mar-2023 12:00:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function testFunction() in /path/to/your/script.php:15 PHPのエラーログ エラーの詳細、発生場所

Slide 27

Slide 27 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

Slide 28

Slide 28 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" IPアドレス

Slide 29

Slide 29 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" リモートユーザー名・ユーザーID

Slide 30

Slide 30 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" タイムスタンプ

Slide 31

Slide 31 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" リクエスト

Slide 32

Slide 32 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" HTTPステータスコード・バイト数

Slide 33

Slide 33 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" リファラ

Slide 34

Slide 34 text

Nginxのアクセスログ 192.168.1.1 - - [08/Mar/2023:12:00:00 +0000] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" ユーザーエージェント

Slide 35

Slide 35 text

MySQLのログ 2023-03-08T12:00:00.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230308 8:00:00 2023-03-08T12:00:00.000000Z 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode. 2023-03-08T12:00:00.000000Z 0 [ERROR] Cannot open table test/users from the internal data dictionary of InnoDB though the .frm file for the table exists.

Slide 36

Slide 36 text

MySQLのログ 2023-03-08T12:00:00.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230308 8:00:00 2023-03-08T12:00:00.000000Z 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode. 2023-03-08T12:00:00.000000Z 0 [ERROR] Cannot open table test/users from the internal data dictionary of InnoDB though the .frm file for the table exists. タイムスタンプ

Slide 37

Slide 37 text

MySQLのログ 2023-03-08T12:00:00.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230308 8:00:00 2023-03-08T12:00:00.000000Z 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode. 2023-03-08T12:00:00.000000Z 0 [ERROR] Cannot open table test/users from the internal data dictionary of InnoDB though the .frm file for the table exists. プロセスID

Slide 38

Slide 38 text

MySQLのログ 2023-03-08T12:00:00.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230308 8:00:00 2023-03-08T12:00:00.000000Z 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode. 2023-03-08T12:00:00.000000Z 0 [ERROR] Cannot open table test/users from the internal data dictionary of InnoDB though the .frm file for the table exists. ログレベル

Slide 39

Slide 39 text

MySQLのログ 2023-03-08T12:00:00.000000Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230308 8:00:00 2023-03-08T12:00:00.000000Z 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode. 2023-03-08T12:00:00.000000Z 0 [ERROR] Cannot open table test/users from the internal data dictionary of InnoDB though the .frm file for the table exists. ログ内容

Slide 40

Slide 40 text

システムログ(syslog) Mar 8 12:00:00 myhost systemd[1]: Started Session 1234 of user root. Mar 8 12:05:00 myhost sshd[23456]: Accepted publickey for user1 from 192.168.1.100 port 22 ssh2 Mar 8 12:10:00 myhost CRON[23457]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 8 12:15:00 myhost kernel: [123456.789012] Firewall: *TCP_IN Blocked* IN=eth0 OUT= MAC=01:23:45:67:89:ab:cd:ef:gh:ij:kl:mn SRC=10.1.2.3 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=12345 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0

Slide 41

Slide 41 text

システムログ(syslog) Mar 8 12:00:00 myhost systemd[1]: Started Session 1234 of user root. Mar 8 12:05:00 myhost sshd[23456]: Accepted publickey for user1 from 192.168.1.100 port 22 ssh2 Mar 8 12:10:00 myhost CRON[23457]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 8 12:15:00 myhost kernel: [123456.789012] Firewall: *TCP_IN Blocked* IN=eth0 OUT= MAC=01:23:45:67:89:ab:cd:ef:gh:ij:kl:mn SRC=10.1.2.3 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=12345 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 タイムスタンプ

Slide 42

Slide 42 text

システムログ(syslog) Mar 8 12:00:00 myhost systemd[1]: Started Session 1234 of user root. Mar 8 12:05:00 myhost sshd[23456]: Accepted publickey for user1 from 192.168.1.100 port 22 ssh2 Mar 8 12:10:00 myhost CRON[23457]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 8 12:15:00 myhost kernel: [123456.789012] Firewall: *TCP_IN Blocked* IN=eth0 OUT= MAC=01:23:45:67:89:ab:cd:ef:gh:ij:kl:mn SRC=10.1.2.3 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=12345 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 ホスト名

Slide 43

Slide 43 text

システムログ(syslog) Mar 8 12:00:00 myhost systemd[1]: Started Session 1234 of user root. Mar 8 12:05:00 myhost sshd[23456]: Accepted publickey for user1 from 192.168.1.100 port 22 ssh2 Mar 8 12:10:00 myhost CRON[23457]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 8 12:15:00 myhost kernel: [123456.789012] Firewall: *TCP_IN Blocked* IN=eth0 OUT= MAC=01:23:45:67:89:ab:cd:ef:gh:ij:kl:mn SRC=10.1.2.3 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=12345 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 プロセス名とプロセスID

Slide 44

Slide 44 text

システムログ(syslog) Mar 8 12:00:00 myhost systemd[1]: Started Session 1234 of user root. Mar 8 12:05:00 myhost sshd[23456]: Accepted publickey for user1 from 192.168.1.100 port 22 ssh2 Mar 8 12:10:00 myhost CRON[23457]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Mar 8 12:15:00 myhost kernel: [123456.789012] Firewall: *TCP_IN Blocked* IN=eth0 OUT= MAC=01:23:45:67:89:ab:cd:ef:gh:ij:kl:mn SRC=10.1.2.3 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=12345 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 ログ内容

Slide 45

Slide 45 text

ログの処理

Slide 46

Slide 46 text

バッチ処理とストリーム処理の違 い

Slide 47

Slide 47 text

バッチ処理の例 total 40 -rw-r--r-- 1 root root 1024 Mar 5 00:00 app.log-20230304 -rw-r--r-- 1 root root 20480 Mar 6 00:00 app.log-20230305 -rw-r--r-- 1 root root 10240 Mar 7 00:00 app.log-20230306 -rw-r--r-- 1 root root 5120 Mar 8 00:00 app.log-20230307 -rw-r--r-- 1 root root 123 Mar 8 12:00 app.log

Slide 48

Slide 48 text

バッチ処理の例 total 40 -rw-r--r-- 1 root root 1024 Mar 5 00:00 app.log-20230304 -rw-r--r-- 1 root root 20480 Mar 6 00:00 app.log-20230305 -rw-r--r-- 1 root root 10240 Mar 7 00:00 app.log-20230306 -rw-r--r-- 1 root root 5120 Mar 8 00:00 app.log-20230307 -rw-r--r-- 1 root root 123 Mar 8 12:00 app.log 1日ごとに処理する

Slide 49

Slide 49 text

バッチ処理の例 total 40 -rw-r--r-- 1 root root 1024 Mar 5 00:00 app.log-20230304 -rw-r--r-- 1 root root 20480 Mar 6 00:00 app.log-20230305 -rw-r--r-- 1 root root 10240 Mar 7 00:00 app.log-20230306 -rw-r--r-- 1 root root 5120 Mar 8 00:00 app.log-20230307 -rw-r--r-- 1 root root 123 Mar 8 12:00 app.log 1日ごとに処理する

Slide 50

Slide 50 text

バッチ処理の例 total 40 -rw-r--r-- 1 root root 1024 Mar 5 00:00 app.log-20230304 -rw-r--r-- 1 root root 20480 Mar 6 00:00 app.log-20230305 -rw-r--r-- 1 root root 10240 Mar 7 00:00 app.log-20230306 -rw-r--r-- 1 root root 5120 Mar 8 00:00 app.log-20230307 -rw-r--r-- 1 root root 123 Mar 8 12:00 app.log 1日ごとに処理する

Slide 51

Slide 51 text

バッチ処理の例 total 40 -rw-r--r-- 1 root root 1024 Mar 5 00:00 app.log-20230304 -rw-r--r-- 1 root root 20480 Mar 6 00:00 app.log-20230305 -rw-r--r-- 1 root root 10240 Mar 7 00:00 app.log-20230306 -rw-r--r-- 1 root root 5120 Mar 8 00:00 app.log-20230307 -rw-r--r-- 1 root root 123 Mar 8 12:00 app.log 1日ごとに処理する

Slide 52

Slide 52 text

バッチ処理の特徴 52 [Pros] 大量のデータを一括で処理するため、効率的に処理できる [Cons] リアルタイムで処理できず、1回の実行に時間がかかる

Slide 53

Slide 53 text

ストリーム処理の例 (app.log) [2023-03-08 12:00:01 UTC] PHP Warning: include(/path/to/file/mi [2023-03-08 12:01:02 UTC] PHP Notice: Undefined variable: usern [2023-03-08 12:02:03 UTC] PHP Fatal error: Uncaught Error: Call Stack trace: #0 {main} thrown in /path/to/your/script.php on line 70

Slide 54

Slide 54 text

ストリーム処理の例 (app.log) [2023-03-08 12:00:01 UTC] PHP Warning: include(/path/to/file/mi

Slide 55

Slide 55 text

ストリーム処理の例 (app.log) [2023-03-08 12:00:01 UTC] PHP Warning: include(/path/to/file/mi [2023-03-08 12:01:02 UTC] PHP Notice: Undefined variable: usern

Slide 56

Slide 56 text

ストリーム処理の例 (app.log) [2023-03-08 12:00:01 UTC] PHP Warning: include(/path/to/file/mi [2023-03-08 12:01:02 UTC] PHP Notice: Undefined variable: usern [2023-03-08 12:02:03 UTC] PHP Fatal error: Uncaught Error: Call Stack trace: #0 {main} thrown in /path/to/your/script.php on line 70

Slide 57

Slide 57 text

ストリーム処理の特徴 57 [Pros] リアルタイムに分析できる [Cons] リソース要求が高く、処理ロジックが複雑である

Slide 58

Slide 58 text

1. リアルタイムログ分析とは 2. Fluentdの概要 3. Fluentdを用いたPHPアプリケーションのログ分析手法

Slide 59

Slide 59 text

Fluentdとは?

Slide 60

Slide 60 text

Fluentdの特徴 60 ● Unified Logging with JSON ● Pluggable Architecture ● Minimum Resources Required ● Built-in Reliability

Slide 61

Slide 61 text

Fluentdの特徴 61 ● Unified Logging with JSON ● Pluggable Architecture ● Minimum Resources Required ● Built-in Reliability

Slide 62

Slide 62 text

62 イベント [08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [“app.log”, 2023-03-08T12:00:00Z, {"level": "WARNING","message": "Division by zero", …}] Input

Slide 63

Slide 63 text

63 イベント [08-Mar-2023 12:00:00 UTC] PHP Warning: Division by zero in /path/to/your/script.php on line 10 [“app.log”, 2023-03-08T12:00:00Z, {"level": "WARNING","message": "Division by zero", …}] Inputプラグインがログからイベ ントを生成する Input

Slide 64

Slide 64 text

Fluentdの特徴 64 ● Unified Logging with JSON ● Pluggable Architecture ● Minimum Resources Required ● Built-in Reliability

Slide 65

Slide 65 text

Pluggable Architecture 65 ● Rubyのプラグインで入力・出力が自在 ● 500個以上のプラグインが公開されている

Slide 66

Slide 66 text

66

Slide 67

Slide 67 text

Fluentdの特徴 67 ● Unified Logging with JSON ● Pluggable Architecture ● Minimum Resources Required ● Built-in Reliability

Slide 68

Slide 68 text

Minimum Resources Required 68 ● 処理部分がC言語で実装されており高速 ● 30-40MBのメモリで13000events/秒・コアを処理できる

Slide 69

Slide 69 text

Fluentdの特徴 69 ● Unified Logging with JSON ● Pluggable Architecture ● Minimum Resources Required ● Built-in Reliability

Slide 70

Slide 70 text

Built-in Reliability 70 ● File bufferに対応し、ログ欠損を防止 ● 転送に失敗してもリトライ機構が備わっている

Slide 71

Slide 71 text

ログのフロー

Slide 72

Slide 72 text

72 /var/log/app.log AP

Slide 73

Slide 73 text

73 /var/log/app.log AP Fluentdをエージェントとしてイン ストールする

Slide 74

Slide 74 text

74 /var/log/app.log input AP output

Slide 75

Slide 75 text

75 DB AP Aggregator Gateway

Slide 76

Slide 76 text

Fluentdの設定

Slide 77

Slide 77 text

fluent.conf @type forward @type grep key level pattern /^ERROR$/ @type file path /var/log/fluentd/error_logs

Slide 78

Slide 78 text

fluent.conf @type forward @type grep key level pattern /^ERROR$/ @type file path /var/log/fluentd/error_logs

Slide 79

Slide 79 text

fluent.conf @type forward @type grep key level pattern /^ERROR$/ @type file path /var/log/fluentd/error_logs

Slide 80

Slide 80 text

fluent.conf @type forward @type grep key level pattern /^ERROR$/ @type file path /var/log/fluentd/error_logs

Slide 81

Slide 81 text

ディレクティブ 81 ● : 入力 ● : 出力 ● : ログの構造化 ● : ログの選択・加工 ● : バッファリング ● …

Slide 82

Slide 82 text

1. リアルタイムログ分析とは 2. Fluentdの概要 3. Fluentdを用いたPHPアプリケーションのログ分析手法

Slide 83

Slide 83 text

PHPとFluentdの設計例

Slide 84

Slide 84 text

84 AP003 AP002 AP001 Aggregator

Slide 85

Slide 85 text

85 AP003 AP002 AP001 Aggregator

Slide 86

Slide 86 text

PHP側のログ出力設定 (php.ini) log_errors = On error_log = /var/log/app.log

Slide 87

Slide 87 text

87 AP003 AP002 AP001 Aggregator

Slide 88

Slide 88 text

Fluentdの設定(AP側) @type tail path /var/log/app.log pos_file /var/log/app.log.pos tag php.error @type regexp expression /^(?

Slide 89

Slide 89 text

89 AP003 AP002 AP001 Aggregator

Slide 90

Slide 90 text

Fluentdの設定(AP側) @type forward host aggregator port 24224

Slide 91

Slide 91 text

Fluentdの設定(Aggregator側) @type forward port 24224

Slide 92

Slide 92 text

92 AP003 AP002 AP001 Aggregator

Slide 93

Slide 93 text

Fluentdの設定(Aggregator側) @type mysql_bulk host mysql database db username root password root column_names time,type,message,file,line table php_errors flush_interval 10s

Slide 94

Slide 94 text

94 AP003 AP002 AP001 Aggregator

Slide 95

Slide 95 text

なぜログ集約サーバーが必要なのか 95 ● 責務の分離 ● リソースの効率化 ● バッファリング

Slide 96

Slide 96 text

NEXT STEP

Slide 97

Slide 97 text

NEXT STEP 97 ● 公式ドキュメント(https://docs.fluentd.org/) ● Fluentd実践入門 ── 統合ログ基盤のためのデータ収集ツー ル

Slide 98

Slide 98 text

おわり