使用 Amazon CloudWatch Logs 監控 OpenSearch 日誌 - Amazon OpenSearch Service

使用 Amazon CloudWatch Logs 監控 OpenSearch 日誌

Amazon OpenSearch Service 透過 Amazon CloudWatch Logs 公開以下 OpenSearch 日誌:

  • 錯誤日誌

  • 搜尋慢速日誌

  • 索引慢速日誌

  • 稽核日誌

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

注意

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

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

如果啟用錯誤日誌,OpenSearch Service 會將 WARNERRORFATAL 的日誌行發佈至 CloudWatch。OpenSearch Service 也會發佈 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 Service 主控台是將日誌發佈到 CloudWatch 的最簡單方式。

若要將日誌發佈到 CloudWatch (主控台)

  1. 前往 https://aws.amazon.com,然後選擇 Sign In to the Console (登入主控台)

  2. Analytics (分析) 下,選擇 Amazon OpenSearch Service

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

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

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

    注意

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

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:PutLogEventsBatch", "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 Logs 支援各區域 10 個資源政策。如果您打算為數個 OpenSearch Service 網域啟用日誌,您應該建立和重複使用包含多個日誌群組的更廣泛政策,以避免達到此限制。如需更新政策的相關步驟,請參閱啟用日誌發佈 (AWS CLI)

  7. 選擇 Enable (啟用)

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

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

啟用日誌發佈 (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:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "cw_log_group_arn:*"}]}'
重要

CloudWatch Logs 支援各區域 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 記錄閾值。如果啟用稽核日誌,請參閱在 OpenSearch Dashboards 中設定稽核日誌。如果您只啟用了錯誤日誌,則不需要執行任何其他設定步驟。

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

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

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

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

AWS 開發套件 (Android 及 iOS 開發套件除外) 支援 Amazon OpenSearch Service 的組態 API 參考 中定義的所有操作,包括 CreateDomainUpdateDomainConfig--log-publishing-options 選項。

如果您已啟用其中一個慢速日誌,請參閱設定適用於慢速日誌的 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:PutLogEventsBatch\",\"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 主控台。

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

  • OpenSearch Service 網域是否設定為發佈到日誌群組? 檢查 OpenSearch Service 主控台,使用 AWS CLI describe-domain-config 選項,或者使用其中一個開發套件呼叫 DescribeDomainConfig

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

    GET domain-endpoint/index/_settings?pretty

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

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

檢視日誌

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

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

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

  • 在 CloudWatch 中,日誌串流名稱的尾碼 -index-slow-logs-search-slow-logs-application-logs-audit-logs 有助於識別其內容。