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.DownloadDBLogFilePortionOutput
はreturn true
ではなく
return false
にしてMarker
を利用して
よしなにやさしくAPIを叩いてあげた方が良いと思う。実際はどうなんだろう。