MySQL からのログの収集
この手順では、MySQL からログを収集して Sumo Logic に取り込む方法について説明します。
ログ タイプ
MySQL 用 Sumo Logic アプリケーションでは、エラー ログにデフォルトの MySQL エラー ログ ファイル形式を使用し、スロー クエリ ログに MySQL スロー クエリ ファイル形式を使用することを前提としています。
- MySQL スロー クエリ ログ
- MySQL エラー ログ
MySQL のログ ファイル形式の詳細については、MySQL のドキュメントを参照してください。
前提条件/要件
- ログを生成するアプリケーションを MySQL で作成します。
- MySQL エラー ログと MySQL スロー クエリ ログを有効にします。
Collector の設定
Sumo Logic で、Installed Collector を設定します。
Source の設定
Installed Collector の 2 つのローカル ファイル Source を作成します。1 つはエラー ログ用、もう 1 つはスロー クエリ ログ用です。
MySQL エラー ログ
MySQL エラー ログは単一行のログです。Source を設定し、エラー ログの境界正規表現を定義します。
- ローカル ファイル Source を設定します。
- 以下の Source フィールドを設定します。
- Name (名前): (必須) 例: MySQL Errors (説明は省略可能です)。
- File Path (ファイル パス)。(必須) 例:
/var/log/mysql/mysql_error.log
- Source Category: (必須) 例:
prod/mysql_error
詳細については、「ベスト プラクティス」を参照してください。
- [Advanced (詳細)] セクションを設定します。
- Enable Timestamp Parsing (タイムスタンプ parse の有効化)。True
- Time Zone (タイム ゾーン): UTC (またはシステムのデフォルト)
- Timestamp Format (タイムスタンプ形式)。自動検出
- Encoding (エンコーディング): UTF-8
- Enable Multiline Processing (複数行の処理の有効化)。
- Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)。True
- Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)。False
- Boundary Regex (境界正規表現):
^\d{6}\s+\d{1,2}:\d{1,2}:\d{1,2}.*
- [Save (保存)] をクリックします。
MySQL スロー クエリ ログ
MySQL スロー クエリ ログは複数行のログであるため、Source を編集して [Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)] を有効にし、スロー クエリの境界正規表現を定義する必要があります。
Source を編集するには、次の手順を実行します。
- ローカル ファイル Source を設定します。
- 以下の Source フィールドを設定します。
- Name (名前): (必須) MySQL Slow Queries (説明は省略可能です)。
- File Path (ファイル パス)。(必須) 例:
/var/log/mysql/mysql-slow.log
- Source Category: (必須) 例:
prod/mysql_slow
詳細については、「ベスト プラクティス」を参照してください。
- [Advanced (詳細)] セクションを設定します。
- Enable Timestamp Parsing (タイムスタンプ parse の有効化)。True
- Time Zone (タイム ゾーン): UTC (またはシステムのデフォルト)
- Timestamp Format (タイムスタンプ形式)。自動検出
- Encoding (エンコーディング): UTF-8
- Enable Multiline Processing (複数行の処理の有効化)。
- Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)。True
- Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)。False
- Boundary Regex (境界正規表現):
^#\sTime:\s+\d{6}\s+\d{1,2}:\d{1,2}:\d{1,2}.*
- [Save (保存)] をクリックします。
ログ メッセージのサンプル
エラー ログ
120326 16:56:45 [ERROR] /usr/sbin/mysqld: Incorrect key file for table '/tmp/#sql_21b2_0.MYI'; try to repair it 120326 16:56:45 [ERROR] Got an error from unknown thread, storage/myisam/mi_write.c:223
スロー クエリ ログ
/usr/local/mysql/libexec/mysqld, Version: 3.23.54-log, started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 030207 15:03:33 # User@Host: wsuser[wsuser] @ localhost.localdomain [127.0.0.1] # Query_time: 13 Lock_time: 0 Rows_sent: 117 Rows_examined: 234 use wsdb; SELECT l FROM un WHERE ip='209.xx.xxx.xx';
クエリのサンプル
エラー ログ - 一定期間のログ タイプ別のエラー
_sourceCategory=mysql_error | parse " [*] *" as ErrorLogtype, errormsg
| fields ErrorLogtype, errormsg
| timeslice 1h
| count by _timeslice, ErrorLogtype
| transpose row _timeslice column ErrorLogType
スロー クエリ - スロー クエリを発行した上位ユーザ
_sourceCategory=mysql_slow "User@Host" "Query_time"
| parse regex "(?<query_block># User@Host:[\S\s]+?SET timestamp=\d+;[\S\s]+?;)" multi
| parse regex field=query_block "# User@Host: \S+?\[(?<user>\S*?)\] @ (?<host_name>\S+)\s\[(?<ip_addr>\S*?)\]" nodrop // Pttrn1-vrtn1
| parse regex field=query_block "# User@Host: \S+?\[(?<user>\S*?)\] @\s+\[(?<ip_addr>\S*?)\]\s+Id: (?<Id>\d{1,10})" nodrop // Pttrn1-vrtn2
| parse regex field=query_block "# User@Host: \S+?\[(?<user>\S*?)\] @ (?<host_name>\S+)\s\[(?<ip_addr>\S*?)\]\s+Id: (?<Id>\d{1,10})"
| fields -query_block
| count as frequency by user | sort by frequency