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

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

使用 Amazon OpenSearch 日誌監控 CloudWatch 日誌

Amazon OpenSearch 服務通過 Amazon OpenSearch 日誌公開以下 CloudWatch 日誌:

搜索碎片緩慢日誌,索引分片緩慢日誌和錯誤日誌對於故障排除性能和穩定性問題非常有用。稽核日誌會追蹤使用者活動,以符合規範。所有日誌都預設為停用狀態。如果啟用,則適用標準 CloudWatch 定價

注意

錯誤記錄僅適用於 OpenSearch 和版本 5.1 及更新版本。慢速日誌適用於所有版本 OpenSearch 和彈性搜索版本。

對於它的日誌, OpenSearch 使用 Apache Log4j 2 及其內置的日誌級別(從最小到最嚴重)的 TRACE DEBUGINFOWARNERROR,和FATAL

如果啟用錯誤記錄檔, OpenSearch Service 會發佈WARNERROR、和的記錄FATAL行 CloudWatch。 OpenSearch 服務也會從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 指令碼編譯問題

  • 無效查詢

  • 索引問題

  • 快照故障

  • 索引狀態管理遷移失敗

注意

OpenSearch 服務不會記錄發生的所有錯誤。

啟用日誌發佈 (主控台)

OpenSearch 服務主控台是啟用日誌發佈到的最簡單方法 CloudWatch。

若要啟用記錄發佈至 CloudWatch (主控台)
  1. 前往 https://aws.amazon.com,然後選擇 Sign In to the Console (登入主控台)

  2. 分析下,選擇 Amazon 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 分鐘,但可能需要更長的時間,視您的網域組態而定。

如果您啟用了其中一個碎片緩慢日誌,請參閱設置碎片緩慢日誌閾值。如果啟用稽核日誌,請參閱步驟 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 服務權限。您必須提供接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

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

啟用記錄發佈 (AWS SDKs)

啟用記錄檔發佈之前,您必須先建立 CloudWatch 記錄群組、取得記錄群組ARN,並授與 OpenSearch Service 寫入該群組的權限。相關操作記錄在 Amazon CloudWatch 日誌API參考中:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用存取這些作業AWS SDKs

AWS SDKs(Android 和 iOS 除外SDKs)支持 Amazon OpenSearch 服務API參考中定義的所有操作,包括CreateDomain和的--log-publishing-options選項UpdateDomainConfig

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

啟用日誌發佈 (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 服務域。存取原則允許使用者 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 使用者指南中的日誌發佈選項

設定搜尋要求慢速記錄閾值

搜尋要求緩慢記錄檔可用於在 2.13 版及更新版本上執行的 OpenSearch 服務網域上搜尋。搜尋要求慢速記錄臨界值設定為總要求花費時間。這與碎片請求慢日誌不同,這是為單個碎片配置花費時間。

您可以使用叢集設定來指定搜尋要求慢速記錄。這與碎片緩慢日誌不同,您可以使用索引設置啟用。例如,您可以透過指定下列設定 OpenSearch RESTAPI:

PUT domain-endpoint/_cluster/settings { "transient": { "cluster.search.request.slowlog.threshold.warn": "5s", "cluster.search.request.slowlog.threshold.info": "2s" } }

設置碎片緩慢日誌閾值

OpenSearch 默認情況下禁用碎片緩慢日誌。啟用碎片緩慢記錄檔發佈到之後 CloudWatch,您仍然必須為每個 OpenSearch 索引指定記錄閾值。這些閾值精確定義該記錄哪些內容、日誌層級為何等等。

例如,您可以透過以下方式指定這些設定 OpenSearch RESTAPI:

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

測試慢速記錄

若要測試搜尋要求和碎片緩慢記錄檔是否成功發佈,請考慮從非常低的值開始驗證記錄檔是否出現在中 CloudWatch,然後將閾值提高到更有用的層級。

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

  • CloudWatch 記錄群組是否存在? 檢查主 CloudWatch 控台。

  • OpenSearch 服務是否具有寫入記錄群組的權限? 檢查服 OpenSearch 務主控台。

  • OpenSearch 服務網域是否設定為發佈至記錄群組? 檢查 OpenSearch 服務主控台、使用 AWS CLI describe-domain-config選項,或DescribeDomainConfig使用其中一個呼叫SDKs.

  • OpenSearch 記錄閾值是否足夠低,以至於您的請求超過它們?

    若要檢閱網域的搜尋要求緩慢記錄閾值,請使用下列命令:

    GET domain-endpoint/_cluster/settings?flat_settings

    若要檢閱索引的碎片緩慢記錄閾值,請使用下列命令:

    GET domain-endpoint/index/_settings?pretty

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

停用發佈到 CloudWatch 使用 OpenSearch Service 主控台或 AWS CLI 會停 OpenSearch 止產生記錄檔;它只會停止發佈這些記錄檔。如果您不再需要碎片緩慢日誌,請務必檢查索引設置;如果您不再需要搜索請求緩慢日誌,請務必檢查您的域設置。

檢視日誌

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

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

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

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