- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
Datadog Forwarder는 로그를 AWS에서 Datadog로 전송하는 AWS Lambda 함수입니다. 특히 다음에 특화되어 있습니다.
서버리스를 사용하면서 Forwarder로 메트릭, 트레이스, 로그를 AWS Lambda 함수에서 Datadog로 보내는 고객의 경우 Datadog Lambda 확장으로 이미그레이션해 Lambda 실행 환경에서 바로 텔레메트리를 수집하세요. 서버리스 모니터링 환경에서도 Forwarder를 사용할 수 있으나 최신 기능에 따른 업데이트를 지원하지 않습니다.
Datadog Forwarder로 AWS 서비스 로그를 전송하는 방법에 관한 자세한 내용은 AWS 서비스 로그를 Datadog Lambda 함수로 전송하는 방법을 참고하세요.
Datadog에서는 CloudFormation를 사용해 자동으로 Forwarder를 설치하기를 권고합니다. 또 Terraform이나 수동 작업으로 설정 프로세스를 완료할 수도 있습니다. 설치한 후에는 Forwarder를 구독하고 트리거를 설정해 S3 버킷이나 ClouwdWatch 로그 그룹과 같은 소스를 로깅할 수 있습니다.
DdApiKey
을 작성하고 적절한 DdSite
를 선택하세요. 다른 파라미터는 선택 사항입니다.Forwarder
로 설치된 포워더 Lambda 함수를 찾으세요.Datadog AWS 통합 페이지에서 CloudFormatin 템플릿를 사용해 AWS 통합을 이미 활성화한 경우, Datadog Lambda Forwarder 함수를 포함한 상태로 계정이 이미 와 프로비저닝되었을 수 있습니다. 이 경우 계정에서 로그를 내보내기 할 AWS 리전에 Datadog Lambda를 추가 설치하기만 하면 됩니다.
참고: 로직이 Lambda 레이어를 통해 실행되기 때문에 Datadog Lambda Forwarder 함수 코드 블록은 비워져 있는 상태입니다.
CloudForm 템플릿에 Terraform 리소스 aws_cloudformation_stack
을 래퍼로 사용해 Forwarder를 설치하세요.
Datadog에서는 별도의 Terraform 구성을 사용하기를 권장합니다.
DdApiKeySecretArn
파라미터를 통해 비밀 ARN을 제공하세요.API 키와 포워더 구성을 구분하면 포워더를 업데이트할 때 Datadog API 키를 제공할 필요가 없습니다. 추후에 포워더를 업데이트나 업그레이드할 때 포워더 구성을 다시 적용하면 됩니다.
variable "dd_api_key" {
type = string
description = "Datadog API key"
}
resource "aws_secretsmanager_secret" "dd_api_key" {
name = "datadog_api_key"
description = "Encrypted Datadog API Key"
}
resource "aws_secretsmanager_secret_version" "dd_api_key" {
secret_id = aws_secretsmanager_secret.dd_api_key.id
secret_string = var.dd_api_key
}
output "dd_api_key" {
value = aws_secretsmanager_secret.dd_api_key.arn
}
# Use the Datadog Forwarder to ship logs from S3 and CloudWatch, as well as observability data from Lambda functions to Datadog. For more information, see https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/logs_monitoring
resource "aws_cloudformation_stack" "datadog_forwarder" {
name = "datadog-forwarder"
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
parameters = {
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN",
DdSite = "<SITE>",
FunctionName = "datadog-forwarder"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
참고: DdSite
파라미터가 내 Datadog 사이트와 일치하는지 다시 확인하세요. 이 페이지 우측에 있는 사이트를 선택하세요. 위 샘플 구성에서 <SITE>
를 로 변경하세요.
제공한 CloudFormation 템플릿으로 설치할 수 없는 경우 다음 단계에 따라 Forwarder를 수동으로 설치할 수 있습니다. 문제 티켓을 개시하거나 요청을 풀링해 템플릿을 개선할 수 있는 방법을 언제든지 알려주세요.
aws-dd-forwarder-<VERSION>.zip
을 사용해 Python 3.11 Lambda 함수를 생성하세요.DD_API_KEY_SECRET_ARN
을 Lambda 함수의 비밀 ARN으로 설정한 후 secretsmanager:GetSecretValue
권한을 Lambda 실행 역할에 부여하세요.s3:GetObject
권한을 추가하세요.DD_ENHANCED_METRICS
을 false
로 설정하세요. 이렇게 하면 Forwarder에서 고급 메트릭 생성을 중단하지만 다른 Lambda로 커스텀 메트릭을 전송은 계속 합니다.DD_S3_BUCKET_NAME
을 버킷 이름으로 설정하세요. 또 이 버킷의 Lambda 실행 역할에 s3:GetObject
, s3:PutObject
, s3:ListBucket
, s3:DeleteObject
권한을 부여하세요. 이 버킷은 다른 태그 캐시(예: Lambda, S3, Step 함수, 로그 그룹)를 저장하는 데 사용됩니다. 또 전송 예외가 있을 경우 전송되지 않은 이벤트를 저장하는 데 사용됩니다.DD_STORE_FAILED_EVENTS
를 true
로 설정해 S3 버킷에 이벤트 데이터를 저장하도록 포워더를 활성화하세요. 로그, 메트릭, 또는 트레이스 전송 예외가 있을 경우, 포워더는 관련 데이터를 S3 버킷에 저장합니다. 문자열이 있는 문자열에 retry
키워드가 설정된 이벤트 수신(수동으로 트리거 가능, 아래 참조)과 같은 커스텀 호출의 경우, 포워더가 저장된 이벤트를 다시 전송 시도합니다. 이 시도가 성공하면 버킷 스토리지가 정리됩니다.aws lambda invoke --function-name <function-name> --payload '{"retry":"true"}' out
3.73.0
와 같이 태그 dd_forwarder_version
값을 메모해 두세요.https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml
탬플릿을 사용해 스택을 업데이트하세요. latest
를 3.73.0.yaml
과 같이 특정 버전으로 변경할 수 있습니다. 필요할 경우 업데이트를 적용하기 전에 변경된 세트를 다시 한번 검토하세요.최신 버전으로 업그레이드하는 데 문제가 생길 경우 트러블슈팅 섹션을 확인하세요.
버전 3.107.0부터 수신 지점에 예외가 발생할 경우 Lambda 함수에서 전송되지 않은 이벤트를 저장하는 새 기능이 생겼습니다. 이 기능을 DD_STORE_FAILED_EVENTS
환경 변수로 활성화한 경우 태그 캐시를 저장하는 S3 버킷의 지정된 dir에 실패 이벤트가 저장됩니다. 이와 동일한 버킷에 고유한 subdir을 사용해 여러 Lambda 함수의 로그를 저장할 수 있습니다.
버전 3.106.0부터 DD_S3_BUCKET_NAME
에 구성된 S3 버킷에 저장된 캐시 파일 이름에 접두사를 추가하도록 업데이트되었습니다. 이에 따라 같은 버킷을 사용해 여러 함수의 캐시 파일을 저장할 수 있습니다.
또 이 버전부터 기본적으로 포워더가 S3에 내보내는 모든 태그에 커스텀 S3 버킷 태그를 추가합니다. 예를 들어 서비스가 대상 S3 버킷으로 로그를 보내도록 구성되어 있으면 로그를 풀링 및 전송할 때 포워더가 버킷 태그를 추가합니다.
버전 3.99.0부터 Lambda 함수에 Python 3.11이 필요하도록 업데이트되었습니다. 이전 포워더를 +3.99.0 이상으로 업그레이드하는 경우에는 AWS Lambda 함수가 Python 3.11을 사용하도록 구성되어 있는지 확인하세요.
버전 3.98.0부터 Lambda 함수에 Python 3.10이 필요하도록 업데이트되었습니다. 이전 포워더를 3.98.0 이상으로 업그레이드하는 경우에는 AWS Lambda 함수가 Python 3.10을 사용하도록 구성되어 있는지 확인하세요.
버전 3.74.0부터 Lambda 함수에 Python 3.9가 필요하도록 업데이트되었습니다. 이전 포워더를 3.74.0 이상으로 업그레이드하는 경우에는 AWS Lambda 함수가 Python 3.9을 사용하도록 구성되어 있는지 확인하세요.
버전 3.49.0부터 Lambda 함수에 Python 3.8가 필요하도록 업데이트되었습니다. 이전 포워더를 3.49.0 이상으로 업그레이드하는 경우에는 AWS Lambda 함수가 Python 3.8을 사용하도록 구성되어 있는지 확인하세요.
버전 3.0.0부터 Forwarder Lambda 함수가 CloudFormation에서 관리됩니다. 이전 포워더를 3.0.0 이상으로 업그레이드하려면 아래 단계를 따르세요.
Forwarder
로 설치된 포워더 Lambda 함수를 찾으세요.포워더 CloudFormation 스택에서 생성한 포워더와 기타 AWS 리소스를 안전하게 삭제하려면 다음 단계를 따르세요
Datadog에서는 Lambda 함수를 직접 편집하는 것보다 CloudFormatino을 통해 Forwarder 설정을 조정하는 것을 권고합니다. template.yaml
파일에서 설정 설명과 스택을 실행할 때 보이는 스택 생성 사용자 인터페이스를 찾으세요. 템플릿을 통한 추가 설정 조정을 하고 싶으면 풀 요청을 제출하세요.
최신 릴리즈에서 최근 이슈가 모두 해결되었는지 확인하세요.
Forwarder Lambda 함수에서 환경 변수 DD_LOG_LEVEL
을 debug
로 설정해 상세 로깅을 임시 활성화하세요(나중에 삭제하는 것을 잊지 마세요). 디버깅 로그를 통해 Lambda 함수가 수신하는 이벤트 페이로드와 Datadog로 전송되는 데이터(로그, 메트릭, 또는 트레이스) 페이로드를 정확하게 알 수 있습니다.
추가 로깅이나 코드를 더해 더 깊이 조사할 수 있습니다. 기여 섹션에서 로컬 변경으로 Forwarder 코드를 구축하는 방법에 관한 지침을 확인할 수 있습니다.
Forwarder의 .zip
코드로 수동 업데이트를 할 때 Forwarder 설치 Cloudformation 업데이트와 충돌할 수 있습니다. 후자의 경우 코드가 Lambda 레이어(3.33.0
버전 기본 설치 값)에 패키징되어 있어 호출 오류가 발생할 수 있습니다. 이 경우 Cloudformation을 통해 스택을 최신 버전으로 두 번 연속 업데이트하면(첫 설치에 InstallAsLayer
를 false
로 설정하고, 그 후 true
로 설정) .zip
잔여 구성 요소가 삭제되기 때문에 문제가 해결됩니다.
그래도 해결하지 못했다면 디버깅 로그를 복사하고 티켓을 개설하여 Datadog 지원팀에 문의하세요.
로그에 Datadog가 타임스탬프로 구문 분석하는 속성이 있을 경우 해당 타임스탬프가 최신이고 올바른 형식인지 확인해야 합니다. 로그 날짜 리매퍼를 참고해 타임스탬프로 구문 분석하는 속성과 유효한 타임스탬프인지 확인하는 방법을 알아보세요.
S3 트리거를 생성할 때 다음과 같은 오류가 발생할 경우 이 AWS 문서에 안내된 팬아웃 아키텍처를 따를 것을 권고합니다.
An error occurred when creating the trigger: Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.
풀 요청을 환영합니다. 다음은 풀 요청 빠른 가이드입니다.
구현하기 전에 기능이나 버그 수정에 관해 논의하고 싶을 경우 Datadog Slack 커뮤니티의 #serverless
채널을 이용해 주세요.
분기 나누기, 복제하기, 생성하기
git clone git@github.com:<your-username>/datadog-serverless-functions.git
git checkout -b <my-branch>
코드 변경하기
로컬 변경 사항 빌드하기
cd aws/logs_monitoring
./tools/build_bundle.sh <SEMANTIC_VERSION> # any unique version is fine
테스트 Forwarder를 변경한 코드와 테스트로 업데이트:
# Upload in the AWS Lambda console if you don't have AWS CLI
aws lambda update-function-code \
--region <AWS_REGION> \
--function-name <FORWARDER_NAME> \
--zip-file fileb://.forwarder/aws-dd-forwarder-<SEMANTIC_VERSION>.zip
유닛 테스트를 실행합니다.
python -m unittest discover . # for code in Python
./trace_forwarder/scripts/run_tests.sh # for code in Go
통합 테스트를 실행합니다.
./tools/integration_tests/integration_tests.sh
# to update the snapshots if changes are expected
./tools/integration_tests/integration_tests.sh --update
변경 사항이 CloudFormation 템플릿에 영향을 주면 내 AWS 계정에 설치 테스트를 실행하세요.
./tools/installation_test.sh
분기를 푸시하고 풀 요청을 제출합니다.
로그를 여러 Datadog 조직이나 다른 대상으로 전송해야 하는 경우 AdditionalTargetLambdaArns
Cloudformatino 파라미터를 구성해 Datadog Forwarder가 수신 로그를 지정 Lambda 함수에 복사하도록 구성하세요. 이와 같은 추가 Lambda 함수는 Datadog Forwarder에서 수신하는 event
와 비동기적으로 호출됩니다.
VPC 프라이빗 서브넷에서 Forwarder를 실행하고 AWS PrivateLink를 통해 데이터를 전송할 수 있습니다. AWS PrivateLink는 AWS에서 호스팅한 Datadog 사이트에서만 구성할 수 있습니다(예 datadoghq.com
, datadoghq.eu
는 안 됨).
api
, http-logs.intake
, trace.agent
엔드포인트를 VPC에 추가하려면 이 지침을 따르세요.UseVPC
를 true
로 설정하세요.VPCSecurityGroupIds
와 VPCSubnetIds
를 설정하세요.DdFetchLambdaTags
를 false
로 설정하세요.v3.41.0부터 DdUsePrivateLink
옵션이 사용되지 않습니다. 이 옵션은 Forwarder에서 데이터 수신에 PrivateLink 엔드포인트의 특별 세트를 사용할 때 사용되었습니다(pvtlink.api.
, api-pvtlink.logs.
, trace-pvtlink.agent.
). v3.41.0부터 Forwarder는 수신 엔드포인트의 일반 DNS이름으로 PrivateLink를 통해 Datadog로 데이터를 전송할 수 있습니다(api.
, http-intake.logs.
, trace.agent.
). 따라서 DdUsePrivateLink
옵션을 더 이상 사용할 수 없습니다.
DdUsePrivateLink
를 true
로 설정한 구 버전의 Forwarder를 사용하는 경우 구성한 PrivateLink 엔드포인트와 [Datadog 설명서에 안내된 것]과 일치하지 않을 수 있습니다. 해당 설명서에서 구 PrivateLink 엔드포인트가 삭제되었지만 기능은 아직 작동합니다. Forwarder를 업그레이드 할 때 변경해야 할 사항이 없고 DdUsePrivateLink
를 활성화한 상태로 두고 구 엔드포인트를 계속 사용할 수 있습니다.
그러나 새 엔드포인트로 전환하고 싶으면 위의 업데이트된 지침을 따르세요.
api.
, http-intake.logs.
, trace.agent.
로 설정하세요.DdUseVPC
를 true
로 설정하세요.DdUsePrivateLink
를 false
로 설정하세요.직접 공용 인터넷에 액세스하지 않고 Forwarder를 VPC에 배포해야 하는데 Datadog에 연결할 때 AWS PrivateLink를 사용할 수 없을 경우(예: Datadog EU 사이트인 datadoghq.eu
에서 호스팅 중인 조직), 프록시를 통해 데이터를 전송할 수 있습니다.
.
).DdUseVPC
, VPCSecurityGroupIds
, VPCSubnetIds
를 설정하세요.DdFetchLambdaTags
옵션이 비활성화되었는지 확인해야 합니다.DdApiUrl
를 http://<proxy_host>:3834
또는 https://<proxy_host>:3834
로 설정하세요.DdTraceIntakeUrl
을 http://<proxy_host>:3835
또는 https://<proxy_host>:3835
로 설정하세요.DdUrl
을 <proxy_host>
로, DdPort
를 3837
로 설정하세요.Web Proxy를 사용할 경우:
DdHttpProxyURL
을 내 프록시 엔드포인트로 설정하세요(예: http://<proxy_host>:<port>
또는, 내 프록시에 사용자 이름과 비밀번호가 있을 경우에는 http://<username>:<password>@<proxy_host>:<port>
).http
를 사용해 프록시에 연결할 경우 DdNoSsl
을 true
로 설정하세요.https
를 사용해 프록시에 연결할 경우 DdSkipSslValidation
을 true
로 설정하세요.Datadog Forwarder는 Datadog가 서명합니다. Forwarder의 무결성을 인증하려면 수동 설치 방법을 사용하세요. [Datadog의 Signing Profie ARN(arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
)을 포함하는 코드 서명 구성을 생성한 후 Forwarder Lambda 함수와 연결하고 Forwarder Zip 파일을 업로드하세요.
DdApiKey
DdApiKeySecretArn
을 사용하세요.DdApiKeySecretArn
DdSite
입니다.FunctionName
MemorySize
Timeout
ReservedConcurrency
LogRetentionInDays
DdTags
env:prod,stack:classic
).DdMultilineLogRegexPattern
\d{2}\/\d{2}\/\d{4}
와 같이 “11/10/2014"와 같은 패턴으로 시작하는 멀티라인 로그).DdUseTcp
DdNoSsl
DdUrl
DdPort
DdSkipSslValidation
DdUseCompression
DdCompressionLevel
DdForwardLog
RedactIp
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
와 일치하는 텍스트를 xxx.xxx.xxx.xxx
로 대체합니다.RedactEmail
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
와 일치하는 텍스트를 xxxxx@xxxxx.com
로 대체합니다.DdScrubbingRule
xxxxx
(기본값)으로 대체하거나 DdScrubbingRuleReplacement
(지정한 경우)로 대체합니다. 로그 스크러빙 규칙은 Lambda 함수에 의해 자동으로 추가되는 메타데이터를 포함한 전체 JSON 형식 로그에 적용됩니다. 패턴의 각 인스턴스에 일치하는 텍스트가 있을 경우, 각 로그에서 일치하는 텍스트가 없을 때까지 교체됩니다. .*
와 같이 비효율적인 정규식을 사용하면 Lambda 함수의 속도가 느려집니다.DdScrubbingRuleReplacement
ExcludeAtMatch
ExcludeAtMatch
와 IncludeAtMatch
에 모두 일치할 경우에는 제외됩니다.IncludeAtMatch
ExcludeAtMatch
와 일치하더라도 제외하지 않습니다.필터링 규칙은 Forwarder에 의해 자동으로 추가되는 메타데이터를 포함한 전체 JSON 형식 로그에 적용됩니다. 그러나 로그가 Datadog에 전송된 후에 로그 파이프라인에 의해 적용된 변형은 Forwarder에서 로그를 필터링할 때 사용할 수 없습니다. .*
와 같이 비효율적인 정규식을 사용하면 Forwarder의 속도가 느려질 수 있습니다.
로그 필터링에 사용할 수 있는 정규식 예시:
"(START|END) RequestId:\s
. JSON Blob({"message": "START RequestId...."}
)에 있는 로그 메시지의 앞 부분과 일치시키기 위해 앞에 "
가 필요합니다. Datadog에서는 REPORT
로그를 유지하기를 권장하는데, 서버리스 함수 보기에서 호출 목록을 채우기 위해 사용되기 때문입니다.errorMessage
\b[4|5][0-9][0-9]\b
message
필드에 특정 JSON 키/값 쌍이 포함되어 있는 CloudWatch 로그만 포함: \"awsRegion\":\"us-east-1\"
{"awsRegion": "us-east-1"}
는 {\"awsRegion\":\"us-east-1\"}
로 코딩되어 있습니다. 따라서 제공한 패턴에 \
이스케이프 문자가 포함되어 있어야 합니다(예: \"awsRegion\":\"us-east-1\"
).내 로그에 여러 패턴을 테스트해보려면 디버그 로그를 켜세요.
DdFetchLambdaTags
tag:GetResources
권한이 자동으로 Lambda 실행 IAM 역할에 추가됩니다.DdFetchLogGroupTags
logs:ListTagsLogGroup
권한이 자동으로 Lambda 실행 IAM 역할에 추가됩니다.DdFetchStepFunctionsTags
tag:GetResources
권한이 자동으로 Lambda 실행 IAM 역할에 추가됩니다.DdStepFunctionTraceEnabled
SourceZipUrl
PermissionsBoundaryArn
DdUsePrivateLink
(사용되지 않음)DdHttpProxyURL
DdSkipSslValidation
을 True로 설정하세요.DdNoProxy
NO_PROXY
를 설정합니다. 웹 프록시에서 제외되어야 하는, 쉼표로 구분된 도메인 이름 목록입니다.VPCSecurityGroupIds
VPCSubnetIds
AdditionalTargetLambdaArns
event
와 동일하게, 비동기적으로 호출됩니다.InstallAsLayer
LayerARN
기본 옵션으로 CloudFormation Stack을 배포하려면 아래 권한이 있어야 합니다. 그래야 Datadog API 키를 비밀로 저장하고, S3 버킷을 생성해 Forwarder 코드(ZIP 파일)을 저장하며, Lambda 함수를 생성할 수 있습니다(실행 역할과 로그 그룹 포함).
IAM 문:
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"secretsmanager:CreateSecret",
"secretsmanager:TagResource",
"s3:CreateBucket",
"s3:GetObject",
"s3:PutEncryptionConfiguration",
"s3:PutBucketPublicAccessBlock",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:GetLayerVersion",
"lambda:InvokeFunction",
"lambda:PutFunctionConcurrency",
"lambda:AddPermission",
"lambda:TagResource",
"logs:CreateLogGroup",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy"
],
"Resource": "*"
}
CloudFormation 스택을 생성하려면 다음 기능이 있어야 합니다.
CloudFormation Stack에서는 다음 IAM 역할을 생성합니다.
IAM 문
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::*",
"Effect": "Allow"
},
{
"Action": ["secretsmanager:GetSecretValue"],
"Resource": "<ARN of DdApiKeySecret>",
"Effect": "Allow"
}
]
ForwarderZipCopierRole
: ForwarderZipCopier Lambda 함수 실행 역할. S3 버킷에 Forwarder 배포 ZIP 파일을 다운로드할 때 필요함.IAM 문:
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "<S3Bucket to Store the Forwarder Zip>",
"Effect": "Allow"
}
]
기타 유용한 문서, 링크 및 기사: