LoginSignup
1
1

More than 5 years have passed since last update.

aws-sdk-goでRDSのgeneral.logとかを取得するヤツ

Posted at

aws-sdk-goでRDSのgeneral.logを取得するためのTips

package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/rds"
)

func main() {
    profile := "rds"
    svc := rds.New(session.New(&aws.Config{
        Credentials: credentials.NewSharedCredentials("", profile),
        Region:      aws.String("ap-northeast-1"),
    }))

    req := &rds.DownloadDBLogFilePortionInput{
        DBInstanceIdentifier: aws.String("DB_NAME"),
        LogFileName:          aws.String("general/mysql-general.log.2016-07-27.08"), // Required
        Marker:               aws.String("0:0"),
    }

    err := svc.DownloadDBLogFilePortionPages(req,
        func(p *rds.DownloadDBLogFilePortionOutput, lastPage bool) bool {
            if p.LogFileData != nil {
                fmt.Println(*p.LogFileData)
            }

            if lastPage == false {
                fmt.Println(*p.Marker)
            }
            return true
        })

    if err != nil {
        fmt.Println(err.Error())
        return
    }
}

得られるデータ

160727  7:46:21     1 Query set local oscar_local_only_replica_host_status=1;
                    1 Query SELECT * FROM hoge;
160728  7:46:22     1 Query set local oscar_local_only_replica_host_status=1;
                    1 Query SELECT * FROM hoge;
[Your log message was truncated]

みたいなSQLの内容と

0:12483476

のようなMarkerが付いてくる。
rds.DownloadDBLogFilePortionOutputreturn trueではなく
return falseにしてMarkerを利用して
よしなにやさしくAPIを叩いてあげた方が良いと思う。実際はどうなんだろう。

1
1
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
1
1