Publicar logs para instancias de Amazon RDS o Aurora para MySQL en CloudWatch

Configurar los logs de registros en la instancia de base de datos para enviar los registros a CloudWatch

Para ver los registros de Amazon RDS en CloudWatch, primero debe habilitar el registro en la instancia de base de datos o el clúster.

Para esta configuración tienes que tener en cuenta en nuestro cluster habilitar

enabled_cloudwatch_logs_exports:

Donde configuramos que vamos a exportar a CloudWatch, el conjunto de tipos de registros para habilitar la exportación a registros de CloudWatch. Si se omite, no se exportarán registros. Valores válidos (según motor).

MySQL y MariaDB: audit, error, general, slowquery.

PostgreSQL:postgresql, upgrade.

MSSQL: agent , error.

Oracle: alert, audit, listener, trace.

resource "aws_db_instance" "default" {
  allocated_storage    = 20
  storage_type         = "gp2"
  engine               = "mysql"
  engine_version       = "5.7"
  instance_class       = "db.t2.micro"
  name                 = "mydb"
  username             = "foo"
  password             = "foobarbaz"
  parameter_group_name = "default.mysql5.7"
  db_cluster_parameter_group_name     = aws_rds_cluster_parameter_group.general_purpose_cluster_parameter_group.id
  
  enabled_cloudwatch_logs_exports     = ["audit", "error", "general", "slowquery"] 
}

Luego, puede configurar los logs  de registros en la instancia de base de datos para enviar los registros a CloudWatch se lo habilitamos a nuestro cluster con enabled_cloudwatch_logs_exports , pero tienes tener en cuenta una configuracion del parameter-groups de nuestro cluster .

resource "aws_rds_cluster_parameter_group" "general_purpose_cluster_parameter_group" {
  name        = "cluster-rds-instance-parameter-group"
  family      = "aurora-mysql5.7"
  description = "RDS default cluster parameter group"
  
  parameter {
    name  = "character_set_client"
    value = "utf8"
  }

  parameter {
    name  = "character_set_connection"
    value = "utf8"
  }

  parameter {
    name  = "character_set_database"
    value = "utf8"
  }

  parameter {
    name  = "character_set_filesystem"
    value = "utf8"
  }

  parameter {
    name  = "character_set_results"
    value = "utf8"
  }

  parameter {
    name  = "character_set_server"
    value = "utf8"
  }

  parameter {
    name  = "collation_connection"
    value = "utf8_general_ci"
  }

  parameter {
    name  = "collation_server"
    value = "utf8_general_ci"
  }

  
  parameter {
    name  = "general_log"
    value = "1"
  }
  parameter {
    name  = "slow_query_log"
    value = "1"
  }
  parameter {
    name  = "log_output"
    value = "FILE"
  }

  parameter {
    name  = "long_query_time"
    value = "0"
  }
  parameter {
    name  = "server_audit_events"
    value = "CONNECT,QUERY,QUERY_DCL,QUERY_DDL,QUERY_DML,TABLE"
  }

  parameter { //add user audit
    name  = "server_audit_incl_users"
    value = "admin"
  }
  parameter {
      name  = "server_audit_logging"
      value = "1"
    }
  
}

Es importante habilitar en el para parameter-groups que por defecto estan desabilitados.

general_log =1

slow_query_log = 1

log_output= FILE  

server_audit_events = "CONNECT,QUERY,QUERY_DCL,QUERY_DDL,QUERY_DML,TABLE"

server_audit_incl_users ="admin" lista de usuarios que queremos hacerle seguimiento.

server_audit_logging=1

con esta configuración ya podríamos ver los logs de mysql en  CloudWatch.

Happy code.

Ejemplo con cloudformation

AWS: RDS logs, export to the CloudWatch Logs and CloudFormation template

https://aws.amazon.com/es/premiumsupport/knowledge-center/rds-aurora-mysql-logs-cloudwatch/

Compatibilidad con el complemento de auditoría MariaDB - Amazon Relational Database Service
Amazon RDS permite utilizar el complemento de auditoría MariaDB en las instancias de bases de datos MySQL. El complemento de auditoría de MariaDB registra la actividad de la base de datos, como el registro de los usuarios en la base de datos, las consultas ejecutadas en la base de datos, etc. El reg…