Stackdriver Logging을 Datadog Logs로 전송하여 Terraform에서 알림 설정
6794 단어 stackdrivergcpDatadogTerraform
Datadog Logs의 통지라면 에러 로그를 Slack 통지에 표시할 수 있다. 따라서 Stackdriver Logging에 들어있는 로그를 Datadog Logs로 전송하여 오류 알림을 시도한 기록
cite : htps : // / cs. 다만 ghq. 코 m / 모토와 rs / 모토와 r_ty ぺ s / ぉ g / # 치후 ぃ 카치 온 s an d ぉ g mp ぇ s
Stackdriver Logging을 Datadog Logs로 전송
See htps : // / cs. 다만 ghq. 코 m / 이니 g 라치 온 s / 오 오 g ぇ_ c ぉ d d p t t rm / # ぉ g ぇ c 치 온
이 중 2단계의 Cloud Search Console 및 Domain Verification 설정은 수동으로 수행할 수 없으므로 htps : // / cs. 다만 ghq. 코 m / 글쎄 g 라치 온 s / 굿 문서를 참조하여 수동으로 수행합니다.
1, 3, 4 의 Pub/Sub 및 Cloud Logging Sink 의 설정은 Terraform 화할 수 있었으므로, .tf 파일을 나타내 둡니다. 예를 들어 k8s_pod 로그를 Datadog Logs로 전송하는 설정은 다음과 같습니다.
resource "google_pubsub_topic" "export-logs-to-datadog" {
name = "export-logs-to-datadog"
}
resource "google_pubsub_subscription" "export-logs-to-datadog" {
name = "export-logs-to-datadog"
topic = "${google_pubsub_topic.export-logs-to-datadog.name}"
push_config {
# NOTE: Need to do domain verification. See https://docs.datadoghq.com/integrations/google_cloud_platform/#validate-the-datadog-domain
push_endpoint = "https://gcp-intake.logs.datadoghq.com/v1/input/${var.datadog_api_key}"
}
depends_on = ["google_pubsub_topic.export-logs-to-datadog"]
}
# Tips: If you have a configuration error, the web console https://console.cloud.google.com/logs/exports?project=<project_id>
# will show a warning after waiting 10 sec at there.
resource "google_logging_project_sink" "export-logs-to-datadog" {
name = "export-logs-to-datadog"
destination = "pubsub.googleapis.com/projects/${var.project}/topics/${google_pubsub_topic.export-logs-to-datadog.name}"
# Add more resource.type with OR if you want to get more
filter = "resource.type=\"k8s_pod\""
unique_writer_identity = true
depends_on = ["google_pubsub_topic.export-logs-to-datadog"]
}
resource "google_pubsub_topic_iam_member" "export-logs-to-datadog" {
topic = "${google_pubsub_topic.export-logs-to-datadog.name}"
role = "roles/pubsub.publisher"
member = "${google_logging_project_sink.export-logs-to-datadog.writer_identity}"
depends_on = [
"google_pubsub_topic.export-logs-to-datadog",
"google_logging_project_sink.export-logs-to-datadog",
]
}
https://console.cloud.google.com/logs/exports?project=<your_project_id>
에서 Stackdriver Logging Sink 화면을 열고 10 sec 정도 기다려 warning 이 나오지 않으면 성공하고 있을 것이다.Datadog > Logs > Search 화면에서 Source를 gcp.k8s.pod로 하여 로그가 들어오고 있는 것을 확인할 수 있으면 OK.
Datadog Logs의 Pipeline 설정
이 상태에서 Datadog Logs의 통지 설정을 해도 Message가 통지에 포함되지 않았다.
Datadog에서 특별한 의미를 가지는 Message 필드를 별도로 설정해 줄 필요가 있는 것 같다.
를 참고로 Logs > Configuration > Pipeline 에서 Reserved attributes mapping 을 설정해, JSON payload 의 로그 통지에 포함시키고 싶은 캐릭터 라인을 가지는 필드 data.jsonPayload.message
를 Message
속성에 지정. 자주(잘) 확인하면 timestamp, status 도 마찬가지로 mapping 할 필요가 있었으므로 설정.
이것은 terraform 에서는 설정할 수 없었으므로 수동으로 설정.
Datadog Logs 알림 설정
이것은 terraform에서 설정할 수 있었다.
# NOTE: You can check the query is configured on the view page such as https://app.datadoghq.com/monitors/<monitor_id>
# But, it is not shown on the edit page such as https://app.datadoghq.com/monitors#<monitor_id>/edit.
# It looks the field of edit page is `queryString` rather than `query`, but terraform does not support to configure it.
resource "datadog_monitor" "warning_k8s_pod_logging" {
name = "(${var.env}) WARNING K8s Pod Logging"
type = "log alert"
message = "Too many warnings from k8s pod logs. Notify: @slack-dev_test_notice"
query = "logs(\"source:gcp.k8s.pod project_id:${var.gcp_project_id} status:warn\").index(\"main\").rollup(\"count\").last(\"5m\") > 10" # Minimum is 5m (min)
thresholds {
critical = 10.0
}
notify_no_data = false
no_data_timeframe = 2
new_host_delay = 300
renotify_interval = 0
timeout_h = 0
include_tags = true
notify_audit = false
tags = ["env:${var.env}", "project_id:${var.gcp_project_id}"]
enable_logs_sample = true # Include a sample of 10 logs in the alert notification
}
이제 Datadog Logs를 경유하여 Slack 통지할 수 있어 Slack 통지에 10행까지이지만, 로그행을 포함할 수 있게 되었다.
다만, 이하의 점은 문제가 될 것 같았다.
이것은 terraform에서 설정할 수 있었다.
# NOTE: You can check the query is configured on the view page such as https://app.datadoghq.com/monitors/<monitor_id>
# But, it is not shown on the edit page such as https://app.datadoghq.com/monitors#<monitor_id>/edit.
# It looks the field of edit page is `queryString` rather than `query`, but terraform does not support to configure it.
resource "datadog_monitor" "warning_k8s_pod_logging" {
name = "(${var.env}) WARNING K8s Pod Logging"
type = "log alert"
message = "Too many warnings from k8s pod logs. Notify: @slack-dev_test_notice"
query = "logs(\"source:gcp.k8s.pod project_id:${var.gcp_project_id} status:warn\").index(\"main\").rollup(\"count\").last(\"5m\") > 10" # Minimum is 5m (min)
thresholds {
critical = 10.0
}
notify_no_data = false
no_data_timeframe = 2
new_host_delay = 300
renotify_interval = 0
timeout_h = 0
include_tags = true
notify_audit = false
tags = ["env:${var.env}", "project_id:${var.gcp_project_id}"]
enable_logs_sample = true # Include a sample of 10 logs in the alert notification
}
이제 Datadog Logs를 경유하여 Slack 통지할 수 있어 Slack 통지에 10행까지이지만, 로그행을 포함할 수 있게 되었다.
다만, 이하의 점은 문제가 될 것 같았다.
Datadog Monitor에서 편집 화면으로 날아가면 query에 아무 것도 설정되지 않은 것처럼 보입니다.
결론
그런데 수작업이 필요했지만, Slack 통지에 로그행을 포함할 수 있게 되었다.
Stackdriver 알림이 로그 행을 포함하는 옵션을 가지고 있다면, 이런 번거로움은 필요하지 않습니다.
Reference
이 문제에 관하여(Stackdriver Logging을 Datadog Logs로 전송하여 Terraform에서 알림 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sonots/items/9ffb0d14f5b58e86963e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Stackdriver Logging을 Datadog Logs로 전송하여 Terraform에서 알림 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sonots/items/9ffb0d14f5b58e86963e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)