メインコンテンツまでスキップ
Sumo Logic Japanese

MySQL からのログの収集

この手順では、MySQL からログを収集して Sumo Logic に取り込む方法について説明します。

ログ タイプ

MySQL 用 Sumo Logic アプリケーションでは、エラー ログにデフォルトの MySQL エラー ログ ファイル形式を使用し、スロー クエリ ログに MySQL スロー クエリ ファイル形式を使用することを前提としています。

  • MySQL スロー クエリ ログ
  • MySQL エラー ログ

MySQL のログ ファイル形式の詳細については、MySQL のドキュメントを参照してください。

前提条件/要件

  • ログを生成するアプリケーションを MySQL で作成します。
  • MySQL エラー ログと MySQL スロー クエリ ログを有効にします。

コレクタの設定

Sumo Logic で、インストール済みコレクタを設定します。

ソースの設定

インストール済みコレクタの 2 つのローカル ファイル ソースを作成します。1 つはエラー ログ用、もう 1 つはスロー クエリ ログ用です。

MySQL エラー ログ

MySQL エラー ログは単一行のログです。ソースを設定し、エラー ログの境界正規表現を定義します。

  1. ローカル ファイル ソースを設定します。
  2. 以下のソース フィールドを設定します。
    1. Name (名前)。(必須) 例: MySQL Errors (説明は省略可能です)。
    2. File Path (ファイル パス)。(必須) 例: /var/log/mysql/mysql_error.log
    3. Source Category (ソース カテゴリ)。(必須) 例: prod/mysql_error詳細については、「ベスト プラクティス」を参照してください。
  3. [Advanced (詳細)] セクションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ パースの有効化)。true
    2. Time Zone (タイムゾーン)。UTC (またはシステムのデフォルト)
    3. Timestamp Format (タイムスタンプ フォーマット)。自動検出
    4. Encoding (エンコーディング): UTF-8
    5. Enable Multiline Processing (複数行の処理の有効化)
      1. Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)。true
      2. Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)。False
      3. Boundary Regex (境界正規表現)^\d{6}\s+\d{1,2}:\d{1,2}:\d{1,2}.*Multiline.png
  4. [Save (保存)] をクリックします。

MySQL スロー クエリ ログ

MySQL スロー クエリ ログは複数行のログであるため、ソースを編集して [Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)] を有効にし、スロー クエリの境界正規表現を定義する必要があります。

ソースを編集するには、次の手順を実行します。

  1. ローカル ファイル ソースを設定します。
  2. 以下のソース フィールドを設定します。
    1. Name (名前)。(必須) MySQL Slow Queries (説明は省略可能です)。
    2. File Path (ファイル パス)。(必須) 例: /var/log/mysql/mysql-slow.log
    3. Source Category (ソース カテゴリ)。(必須) 例: prod/mysql_slow詳細については、「ベスト プラクティス」を参照してください。
  3. [Advanced (詳細)] セクションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ パースの有効化)。true
    2. Time Zone (タイムゾーン)。UTC (またはシステムのデフォルト)
    3. Timestamp Format (タイムスタンプ フォーマット)。自動検出
    4. Encoding (エンコーディング): UTF-8
    5. Enable Multiline Processing (複数行の処理の有効化)
      1. Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)。true
      2. Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)。False
      3. Boundary Regex (境界正規表現)^#\sTime:\s+\d{6}\s+\d{1,2}:\d{1,2}:\d{1,2}.*BoundaryRegex.png
  4. [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

  • この記事は役に立ちましたか?