logging.tf 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. locals {
  2. runner_log_files = (
  3. var.runner_log_files != null
  4. ? var.runner_log_files
  5. : [
  6. {
  7. "prefix_log_group" : true,
  8. "file_path" : "/var/log/messages",
  9. "log_group_name" : "messages",
  10. "log_stream_name" : "{instance_id}"
  11. },
  12. {
  13. "log_group_name" : "user_data",
  14. "prefix_log_group" : true,
  15. "file_path" : var.runner_os == "windows" ? "C:/UserData.log" : "/var/log/user-data.log",
  16. "log_stream_name" : "{instance_id}"
  17. },
  18. {
  19. "log_group_name" : "runner",
  20. "prefix_log_group" : true,
  21. "file_path" : var.runner_os == "windows" ? "C:/actions-runner/_diag/Runner_*.log" : "/opt/actions-runner/_diag/Runner_**.log",
  22. "log_stream_name" : "{instance_id}"
  23. },
  24. {
  25. "log_group_name" : "runner-startup",
  26. "prefix_log_group" : true,
  27. "file_path" : var.runner_os == "windows" ? "C:/runner-startup.log" : "/var/log/runner-startup.log",
  28. "log_stream_name" : "{instance_id}"
  29. }
  30. ]
  31. )
  32. logfiles = var.enable_cloudwatch_agent ? [for l in local.runner_log_files : {
  33. "log_group_name" : l.prefix_log_group ? "/github-self-hosted-runners/${var.prefix}/${l.log_group_name}" : "/${l.log_group_name}"
  34. "log_stream_name" : l.log_stream_name
  35. "file_path" : l.file_path
  36. }] : []
  37. loggroups_names = distinct([for l in local.logfiles : l.log_group_name])
  38. }
  39. resource "aws_ssm_parameter" "cloudwatch_agent_config_runner" {
  40. count = var.enable_cloudwatch_agent ? 1 : 0
  41. name = "${var.prefix}-cloudwatch_agent_config_runner"
  42. type = "String"
  43. value = var.cloudwatch_config != null ? var.cloudwatch_config : templatefile("${path.module}/templates/cloudwatch_config.json", {
  44. logfiles = jsonencode(local.logfiles)
  45. })
  46. tags = local.tags
  47. }
  48. resource "aws_cloudwatch_log_group" "gh_runners" {
  49. count = length(local.loggroups_names)
  50. name = local.loggroups_names[count.index]
  51. retention_in_days = var.logging_retention_in_days
  52. kms_key_id = var.logging_kms_key_id
  53. tags = local.tags
  54. }
  55. resource "aws_iam_role_policy" "cloudwatch" {
  56. count = var.enable_cloudwatch_agent ? 1 : 0
  57. name = "CloudWatchLogginAndMetrics"
  58. role = aws_iam_role.runner.name
  59. policy = templatefile("${path.module}/policies/instance-cloudwatch-policy.json",
  60. {
  61. ssm_parameter_arn = aws_ssm_parameter.cloudwatch_agent_config_runner[0].arn
  62. }
  63. )
  64. }