RDSのスロークエリログをmysqldumpslowに突っ込む

  • 0
    いいね
  • 0
    コメント

    JSON形式で取得されるRDS(MySQL)のスロークエリログをcatして絶望したときに、心を落ち着けてmysqldumpslowに突っ込めるようにします。

    用意するもの

    • awscli
    • jq
    • mysqldumpslow 1

    スロークエリログのダウンロード

    スロークエリログのリストを取得

    $ aws rds describe-db-log-files \
      --db-instance-identifier hoge-instance \
      | jq '.DescribeDBLogFiles[].LogFileName' -r  \
      | grep slow
    slowquery/mysql-slowquery.log
    slowquery/mysql-slowquery.log.0
    ...
    

    スロークエリログのダウンロード

    describe-db-log-files取得されたファイル名には/が含まれていて邪魔なので、ファイルに保存するときに取っています。

    for log in $(cat slowlog-list.txt); do \
      aws rds download-db-log-file-portion \
      --db-instance-identifier hoge-instance \
      --log-file-name $log \
      > $(echo $log | cut -d / -f 2); done
    

    スロークエリログの読み込み

    取得されたスロークエリログの中身はJSONデータの奥に格納されたテキスト文字列なので、jqで抽出してからmysqldumpslowに食わせます。

    $ cat mysql-slowquery.log \
      | jq -rs .[].LogFileData \
      | mysqldumpslow -
    # 遅い順にソートされたクエリたち...
    

    1. Ubuntuではmysql-clientをインストールするとついてきます。