26
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS CLIでRDSのスロークエリを見る

Last updated at Posted at 2014-07-24

毎回マネジメントコンソールから確認するのも面倒なので、とりあえずターミナルから見れるように。

AWS CLIのインストール

Macにコマンドラインツールが入ってなかったのでインストール。
EC2(Amazon Linux)には元々インストールされてるはず。

下記ページのやり方に従った
Getting Set Up with the AWS Command Line Interface

環境

  • Mac OSX 10.9.4

手順

Pythonを使うとのこと。触ったことないが、Macにプリインストールされてた

$ python --version
Python 2.7.5

pipというパッケージ管理ツール(Rubyでいうところのbundler的なやつ?)を使う。
pipはインストールされてなかったので導入、sudo付きでやらないとPermission deniedされた。

$ sudo easy_install pip     

pipが入ったら、目的のawscliを。

$ sudo pip install awscli 
$ aws --version
aws-cli/1.3.23 Python/2.7.5 Darwin/13.3.0

これでawsコマンドが利用可能になった。

awsコマンドの初期設定

コマンドを実際に利用して各種サービスにアクセスするには、ちょっとだけ初期設定が必要だった。

$ aws configure 

上記コマンドを打つと、AWSアカウントに関する情報を対話的に入力していく感じになる。
アクセスキーID, シークレットアクセスキー, デフォルトのリージョン, デフォルトの出力形式を聞かれるので答えていく。出力形式はとりあえずJSONにしておいた。

入力した情報は、~/.aws/configに書かれている。

~/.aws/config
[default]
output = json
region = ap-northeast-1
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>

RDSのスロークエリをコマンドラインに表示してみる

ドキュメント眺めてると、RDS用のコマンドだけでもかなりある。使いこなしたらかなり便利そうではある...

ログファイルのリストを出力

まずはdescribe-db-log-filesコマンドでログファイルのリストを出力してみる。
参考: describe-db-log-files

$ aws rds describe-db-log-files --db-instance-identifier <DB_INSTANCE_IDENTIFIER>

出力は以下の様にされる。

{
    "DescribeDBLogFiles": [
        {
            "LastWritten": 1406166300000, 
            "LogFileName": "error/mysql-error.log", 
            "Size": 0
        }, 
        {
            "LastWritten": 1406166506000, 
            "LogFileName": "slowquery/mysql-slowquery.log", 
            "Size": 6863
        }, 
        {
            "LastWritten": 1406160020000, 
            "LogFileName": "slowquery/mysql-slowquery.log.0", 
            "Size": 2433
        },
        ...

    ]
}

スロークエリログの出力

具体的なログの中身を見たいときは

$ aws rds download-db-log-file-portion --db-instance-identifier <DB_INSTANCE_IDENTIFIER> --log-file-name slowquery/mysql-slowquery.log

出力がカオス、なぜか1文字ずつ...

{
    "LogFileData": [
        "/", 
        "r", 
        "d", 
        "s", 
        "d", 
        "b", 
        "b", 
        "i", 
        "n", 
        "/", 
        "m", 
        "y", 
        "s", 
        "q", 
        "l", 
    [
}

少し調べたら、jqを使って加工するのがよさ気だった。jqコマンドはhomebrewでインストール済み。

1文字ずつ出力されてるのを統合するため関数add、改行コードの箇所で改行させるために--raw-output(-r)オプションを付けて実行

$ aws rds download-db-log-file-portion --db-instance-identifier <DB_INSTANCE_IDENTIFIER> --log-file-name slowquery/mysql-slowquery.log | jq -r ".LogFileData | add"

だいぶ見やすくなった。以下出力の一部。

/rdsdbbin/mysql/bin/mysqld, うんたらかんたら
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 140724  0:25:16
# User@Host: うんたらかんたら
# Query_time: 1.451042  うんたらかんたら
SET timestamp=1406161516;
SELECT うんたらかんたら

これでマネジメントコンソールにわざわざ行くよりはだいぶ楽になったし、見やすい。grepなどでさらに整形して、発行されたクエリの部分だけ抜き出すこともできる。

クソクエリを消し去るために頑張ろう...

26
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?