使用亞馬遜OpenSearch日誌監控CloudWatch日誌 - Amazon OpenSearch 服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用亞馬遜OpenSearch日誌監控CloudWatch日誌

Amazon Ser OpenSearch vice 透過 Amazon OpenSearch 日誌公開以下CloudWatch日誌:

搜尋慢速日誌、索引慢速日誌和錯誤日誌對於疑難排解效能和穩定性問題非常有用。稽核日誌會追蹤使用者活動,以符合規範。所有日誌都預設為停用狀態。如果啟用,則套用標準 CloudWatch 定價

注意

錯誤日誌僅適用於OpenSearch和 Elasticsearch 5.1 版和更高版本。慢速日誌則適用於所有版本OpenSearch和 Elasticsearch 版本。

對於日誌,OpenSearch 使用 Apache Log4j 2 及其內建的日誌層級 (從最不嚴重到最嚴重):TRACEDEBUGINFOWARNERRORFATAL

如果啟用錯誤記錄檔,OpenSearchService 會發佈WARNERROR、和的記錄FATAL行CloudWatch。OpenSearchService 也會發佈DEBUG等級的幾個例外狀況,包括下列項目:

  • org.opensearch.index.mapper.MapperParsingException

  • org.opensearch.index.query.QueryShardException

  • org.opensearch.action.search.SearchPhaseExecutionException

  • org.opensearch.common.util.concurrent.OpenSearchRejectedExecutionException

  • java.lang.IllegalArgumentException

在許多情況下,錯誤日誌可以協助排除故障,包括:

  • Painless 指令碼編譯問題

  • 無效查詢

  • 索引問題

  • 快照故障

  • 索引狀態管理遷移失敗

啟用日誌發佈 (主控台)

Ser OpenSearch vice 主控台是將日誌發佈到CloudWatch.

啟用將日誌發佈到 CloudWatch (主控台)
  1. 前往 https://aws.amazon.com,然後選擇 Sign In to the Console (登入主控台)

  2. 分析下,選擇亞馬遜OpenSearch服務

  3. 選取您要更新的網域。

  4. Logs (日誌) 索引標籤上,選取日誌類型,然後選擇 Enable (啟用)。

  5. 建立新的CloudWatch日誌群組或選擇現有日誌群組。

    注意

    您若打算啟用多個日誌,建議發佈每一個到它自己的日誌群組。這個分隔有助於更輕鬆掃描日誌。

  6. 選擇包含適當許可權的存取政策,或使用主控台提供的 JSON 建立政策:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn:*" } ] }

    建議您新增 aws:SourceAccountaws:SourceArn 條件索引鍵至政策,保護自己免受混淆代理人問題的困擾。來源帳戶是網域的擁有者,且來源 ARN 是網域 ARN。您的網域必須位於服務軟體 R20211203 或更新版本上,才能新增這些條件索引鍵。

    例如,您可以將下列條件區塊新增至政策:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
    重要

    CloudWatch日誌支援各區域 10 個資源政策。如果您打算為數個 OpenSearch Service 網域啟用日誌,您應該建立和重複使用更廣泛的政策,其包含多個日誌群組的更廣泛政策,以避免達到此限制。如需更新政策的相關步驟,請參閱啟用日誌發佈 (AWS CLI)

  7. 選擇 啟用

    網域變更的狀態會從 Active (作用中) 變成 Processing (處理)。啟用日誌發佈之前,必須使狀態變回 Active (作用中)。這項變更通常需要 30 分鐘,但可能需要更長的時間,視您的網域組態而定。

如果您已啟用其中一個慢速日誌,請參閱設定OpenSearch慢速日誌的日誌閾值。如果啟用稽核日誌,請參閱步驟 2:開啟 OpenSearch 儀表板中的稽核記錄。如果您只啟用了錯誤日誌,則不需要執行任何其他設定步驟。

啟用日誌發佈 (AWS CLI)

可以啟用日誌發佈之前,您需要一個 CloudWatch 日誌群組。如果還沒有日誌群組,您可以使用下列命令建立一個:

aws logs create-log-group --log-group-name my-log-group

輸入下一個命令來尋找日誌群組的 ARN,然後記下來

aws logs describe-log-groups --log-group-name my-log-group

現在您可以提供 OpenSearch Service 許可以寫入日誌群組。您接近命令最後,必須提供日誌群組的 ARN:

aws logs put-resource-policy \ --policy-name my-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents","logs:CreateLogStream"],"Resource": "cw_log_group_arn:*"}]}'
重要

CloudWatch日誌支援各區域 10 個資源政策。如果您打算對數個 OpenSearch Service 網域啟用慢速日誌,您應該建立和重複使用更廣泛的政策,其包含多個日誌群組的更廣泛政策,以避免達到此限制。

如果您稍後需要檢閱此政策,請使用 aws logs describe-resource-policies 命令。若要更新此政策,請使用新的政策文件發出相同的 aws logs put-resource-policy 命令。

最後,您可以使用 --log-publishing-options 選項,以啟用發佈。選項的語法對於 create-domainupdate-domain-config 命令都是相同的。

參數 有效值
--log-publishing-options SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
AUDIT_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
注意

您若打算啟用多個日誌,建議發佈每一個到它自己的日誌群組。這個分隔有助於更輕鬆掃描日誌。

範例

以下範例可讓指定的網域發佈搜尋和索引慢速日誌:

aws opensearch update-domain-config \ --domain-name my-domain \ --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"

若要停止發佈到 CloudWatch,可使用 Enabled=false 執行相同命令。

如果您已啟用其中一個慢速日誌,請參閱設定OpenSearch慢速日誌的日誌閾值。如果啟用稽核日誌,請參閱步驟 2:開啟 OpenSearch 儀表板中的稽核記錄。如果您只啟用了錯誤日誌,則不需要執行任何其他設定步驟。

啟用日誌發佈 (AWS 開發套件)

在可以啟用日誌發佈之前,必須先建立一個CloudWatch日誌群組,取得其 ARN,並提供 OpenSearch Service 許可以寫入到其中。相關的操作全記錄在 Amazon CloudWatch Logs API 參考中:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用 AWS 開發套件存取這些操作。

開AWS發套件 (Android 及 iOS 開發套件除外) 支援 Amazon Ser OpenSearch vice API 參考中定義的所有操作,包括和的--log-publishing-optionsCreateDomain選項。UpdateDomainConfig

如果您已啟用其中一個慢速日誌,請參閱設定OpenSearch慢速日誌的日誌閾值。如果您只啟用了錯誤日誌,則不需要執行任何其他設定步驟。

啟用日誌發佈 (CloudFormation)

在此範例中,我們使用CloudFormation此範例建立稱為的日誌群組opensearch-logs,指派適當的許可,然後建立一個網域,對其啟用應用程式日誌、搜尋慢速日誌和索引慢速日誌的日誌發佈。

在可以啟用日誌發佈之前,您需要建立CloudWatch日誌群組︰

Resources: OpenSearchLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: opensearch-logs Outputs: Arn: Value: 'Fn::GetAtt': - OpenSearchLogGroup - Arn

範本輸出日誌群組的 ARN。在本案例中,ARN 為 arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs

使用 ARN 會建立一項資源政策,賦予 OpenSearch Service 許可以寫入日誌群組:

Resources: OpenSearchLogPolicy: Type: AWS::Logs::ResourcePolicy Properties: PolicyName: my-policy PolicyDocument: "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"es.amazonaws.com\"}, \"Action\":[ \"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Resource\": \"arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs:*\"}]}"

最後,建立以下CloudFormation堆疊,它會產生已啟用日誌發佈的 OpenSearch Service 網域。存取政策允許 AWS 帳戶 的使用者對網域發出所有 HTTP 請求。

Resources: OpenSearchServiceDomain: Type: "AWS::OpenSearchService::Domain" Properties: DomainName: my-domain EngineVersion: "OpenSearch_1.0" ClusterConfig: InstanceCount: 2 InstanceType: "r6g.xlarge.search" DedicatedMasterEnabled: true DedicatedMasterCount: 3 DedicatedMasterType: "r6g.xlarge.search" EBSOptions: EBSEnabled: true VolumeSize: 10 VolumeType: "gp2" AccessPolicies: Version: "2012-10-17" Statement: Effect: "Allow" Principal: AWS: "arn:aws:iam::123456789012:user/es-user" Action: "es:*" Resource: "arn:aws:es:us-east-1:123456789012:domain/my-domain/*" LogPublishingOptions: ES_APPLICATION_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true SEARCH_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true INDEX_SLOW_LOGS: CloudWatchLogsLogGroupArn: "arn:aws:logs:us-east-1:123456789012:log-group:opensearch-logs" Enabled: true

如需詳細的語法資訊,請參閱 AWS CloudFormation 使用者指南中的日誌發佈選項

設定OpenSearch慢速日誌的日誌閾值

根據預設,OpenSearch 停用慢速查詢日誌。當您將慢速查詢日誌發佈到 CloudWatch,您仍必須指定每一個 OpenSearch 索引的記錄閾值。這些閾值精確定義該記錄哪些內容、日誌層級為何等等。

您可以透過 OpenSearch REST API 指定這些設定:

PUT domain-endpoint/index/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }

若要測試慢速查詢日誌已發佈成功,請考慮開始時先使用非常低的值,以確認日誌在 CloudWatch 中,然後增加閾值到更實用的層級。

如果日誌未出現,請檢查下列各項:

  • CloudWatch 日誌群組是否存在? 檢查 CloudWatch 主控台。

  • OpenSearchService 是否擁有寫入日誌群組的許可? 檢查 InSearch OpenSearch Service 主控台。

  • OpenSearchService 網域是否設定為發佈到日誌群組? 檢查OpenSearch服務主控台、使用AWS CLIdescribe-domain-config選項,或DescribeDomainConfig使用其中一個 SDK 呼叫。

  • OpenSearch 記錄閾值是否低到您的請求超出它們? 若要查看您的索引閾值,請使用下列命令:

    GET domain-endpoint/index/_settings?pretty

如果您想要停用索引的慢速日誌,請傳回變更為其預設值 -1 的任何閾值。

CloudWatch使用 OpenSearch Service 主控台停用發佈到其中或AWS CLI會停OpenSearch止產生日誌;它只會停止發佈這些日誌。如果您不再需要慢速日誌,請務必檢查索引設定。

檢視 日誌

檢視 CloudWatch 中的應用程式和慢速查詢日誌,和檢視其他任何 CloudWatch 日誌一樣。如需詳細資訊,請參Amazon CloudWatch 日誌使用者指南中的檢視日誌資料

以下是檢視日誌的一些考量事項:

  • OpenSearchService 只發佈每一行的前 255,000 個字元到CloudWatch. 任何剩餘內容會被截斷。對於稽核日誌,每個訊息為 10,000 個字元。

  • 在中CloudWatch,記錄資料流名稱的尾碼為-index-slow-logs、、和 -search-slow-logs-application-logs-audit-logs以協助識別其內容。