7
4

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 3 years have passed since last update.

DatadogAdvent Calendar 2019

Day 9

RDSのログをCloudWatch Logsからdatadog logsに流す - terraformを添えて -

Posted at

はじめに

この記事はDatadog Advent Calendar 2019の12/9分になります。
今年リリースした弊社のサービスでdatadog logsを初めて使い、その便利さと手軽さにやられてしまった勢になります。
やっぱりサーバーメトリクスとログを一緒に見れるというのは強い。
その中でも

書いた事

RDSのログをCloudwatch logsへ出力し、lambdaを経由してDatadog logsへ流す手順。
terraformで書いているのでついでに晒します。

slowquery log送信手順

データの流れと作成するもののイメージです。

module_ RDS slowlog.png

1. 転送用のLambdaの用意

公式マニュアルでは2つのパターンが書かれています。

  1. Datadog-Log-Forwarderをデプロイするパターン
  2. 手動で作成し、lambda_function.pyをuploadするパターン

今回は2.のコードを元にterraformで作成することにしました。
lambdaはterraformで管理するか否か別れるとこだと思いますが、基本変更無いコードでもあるので、
モジュールとして作成し、各アカウント共通で使用するようにしています。

サンプルとしてgithubにあげました。
このサンプルではDatadogのAPIキーをパラメーターストアから取得するようにしています。(こちらの管理の都合上・・・)

2. RDSのクラスター設定でCloudWatch Logsにslowqueryを出力する。

手動で作成済みな場合はコンソール、CLI好きなように。
参考: https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html#USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs

terraformでdb作成している場合はenabled_cloudwatch_logs_exportsを設定するのみ。
https://www.terraform.io/docs/providers/aws/r/rds_cluster.html

aurora clusterのサンプル

resource "aws_rds_cluster" "master" {
  cluster_identifier              = "hoge-master"
  availability_zones              = [var.rds_region.writer, var.rds_region.reader]
  db_cluster_parameter_group_name = "hoge-aurora-cluster"
  vpc_security_group_ids          = ["${aws_security_group.rds.id}"]
  backup_retention_period         = 7
  preferred_backup_window         = "17:00-18:00"
  preferred_maintenance_window    = "sun:19:00-sun:19:30"
  master_username                 = "${var.mysql_user}"
  master_password                 = "${var.mysql_pass}"
  skip_final_snapshot             = "false"
  final_snapshot_identifier       = "hoge-final"
  db_subnet_group_name            = "${aws_db_subnet_group.main.id}"
  enabled_cloudwatch_logs_exports = ["error", "slowquery"] ← ここ

  # Aurora(mysql5.7)
  engine         = "aurora-mysql"
  engine_version = "5.7.mysql_aurora.2.04.6"

  lifecycle {
    ignore_changes = [
      "availability_zones",
    ]
  }

  tags = {
    Env     = var.environment
    Monitor = "datadog"
  }
}

3. terraformでlambdaのtriggerを作成

公式マニュアルのMANUALLY SETUP TRIGGERSの部分になります。
こちらも長くなるので、terraformのサンプルをgithubにあげました。
モジュールとしてそのまま使用できます。

CloudWatch Logsのロググループから、指定したLambdaへログを流すというものなので、本件以外での活用も可能です。

まとめ

ログを流すとこまで、としましたがdatadog側で可視化する手順としては、
Datadog Log Managementを使ってRDSのSlowQueryを可視化する
の記事を参考にさせていただいた為、これ以上書くと同じことを書いてしまうと思いここまでとします。
Grok Parserでのサンプルは大変有用で助かりました。
この場を借りて@syogunさんへ感謝させていただきたいと思います。

今回公開したgithubのサンプルはいずれterraform registoryにpublishしたいです。
それでは皆さま、良いdatadogライフを!!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?