@@ -53,7 +53,7 @@ Parameters:
5353 OSSecretID :
5454 Type : String
5555 Default : dev/OpenSearch/SemanticSearch
56- Description : SSM parameter name for OpenSearch user name and password
56+ Description : SSM parameter name for OpenSearch user name and password
5757
5858
5959Conditions :
@@ -77,6 +77,14 @@ Resources:
7777 AWS : ' *'
7878 Action : ' es:*'
7979 Resource : !Sub arn:aws:es:${AWS::Region}:${AWS::AccountId}:domain/*/*
80+ - Effect : Allow
81+ Principal :
82+ Service : es.amazonaws.com
83+ Action : logs:PutLogEvents
84+ Resource :
85+ - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-audit-logs:*
86+ - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-search-logs:*
87+ - !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-index-logs:*
8088 EngineVersion : ' OpenSearch_2.11'
8189 DomainName : semantic-search
8290 ClusterConfig :
@@ -100,6 +108,21 @@ Resources:
100108 KmsKeyId : alias/aws/es
101109 DomainEndpointOptions :
102110 EnforceHTTPS : True
111+ LogPublishingOptions :
112+ SEARCH_SLOW_LOGS :
113+ CloudWatchLogsLogGroupArn : !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-audit-logs"
114+ Enabled : True
115+ INDEX_SLOW_LOGS :
116+ CloudWatchLogsLogGroupArn : !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-search-logs"
117+ Enabled : True
118+ AUDIT_LOGS :
119+ CloudWatchLogsLogGroupArn : !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-index-logs"
120+ Enabled : True
121+ DependsOn :
122+ - AuditLogsLogGroup
123+ - SlowSearchLogsLogGroup
124+ - SlowIndexLogsLogGroup
125+ - OSLogGroupResourcePolicy
103126
104127 OpenSearchSecret :
105128 Type : AWS::SecretsManager::Secret
@@ -108,6 +131,62 @@ Resources:
108131 Description : OpenSearch username and password
109132 SecretString : !Sub '{ "username" : "${OpenSearchUsername}", "password" : "${OpenSearchPassword}" }'
110133
134+ # #######################################################
135+ # Post OpenSearch configurations
136+ # #######################################################
137+
138+ SlowLogConfigFunction :
139+ Type : ' AWS::Lambda::Function'
140+ Properties :
141+ Handler : index.lambda_handler
142+ Role : !GetAtt InvokeSagemakerLambdaExecutionRole.Arn
143+ FunctionName : " SlowLogConfigFunction"
144+ Runtime : python3.9
145+ Timeout : 60
146+ Environment :
147+ Variables :
148+ OSEndpoint : !Ref OSEndpoint
149+ Code :
150+ ZipFile : |
151+ import json
152+ import boto3
153+ import urllib.request
154+
155+ from os import environ
156+
157+ def lambda_handler(event, context):
158+ endpoint = environ['OSEndpoint']
159+
160+ # The slow log settings to apply
161+ settings = {
162+ "settings": {
163+ "index.search.slowlog.threshold.query.warn": "5ms", # Capture all queries
164+ "index.search.slowlog.level": "TRACE", # Capture detailed query information
165+ "index.search.slowlog.source": "1000" # Capture the query source for up to 1000 characters
166+ }
167+ }
168+
169+ # Convert settings to JSON string
170+ data = json.dumps(settings).encode('utf-8')
171+
172+ # Set headers for the request
173+ req = urllib.request.Request(
174+ f"{endpoint}/_settings", data=data, headers={'Content-Type': 'application/json'}, method='PUT'
175+ )
176+
177+ try:
178+ with urllib.request.urlopen(req) as response:
179+ response_body = response.read()
180+ return {
181+ 'Status': 'SUCCESS',
182+ 'Message': 'Slow logs settings applied successfully',
183+ 'Data': json.loads(response_body)
184+ }
185+ except Exception as e:
186+ return {
187+ 'Status': 'FAILED',
188+ 'Message': f"Failed to apply slow logs settings: {str(e)}"
189+ }
111190
112191# #######################################################
113192# Set up SageMaker notebook instance
@@ -213,7 +292,6 @@ Resources:
213292 CodeUri :
214293 Bucket : !Ref DeploymentBucket
215294 Key : cloudformation-templates/lambda/semantic-search/Invoke-sagemaker-pretrain-20241216-1700.zip
216-
217295 MemorySize : 3009
218296 Timeout : 900
219297 Handler : app.lambda_handler
@@ -505,12 +583,58 @@ Resources:
505583 gatewayresponse.header.Access-Control-Allow-Methods : " 'GET,OPTIONS'"
506584 gatewayresponse.header.Access-Control-Allow-Origin : " '*'"
507585 gatewayresponse.header.Access-Control-Allow-Headers : " 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
508-
509586
587+ OSLogGroupResourcePolicy :
588+ Type : AWS::Logs::ResourcePolicy
589+ Properties :
590+ PolicyName : OpenSearchLogPolicy
591+ PolicyDocument :
592+ Fn::Sub : |
593+ {
594+ " Version " : " 2012-10-17" ,
595+ " Statement " : [
596+ {
597+ " Effect " : " Allow" ,
598+ " Principal " : {
599+ " Service " : " es.amazonaws.com"
600+ },
601+ " Action " : [
602+ " logs:CreateLogStream" ,
603+ " logs:PutLogEvents"
604+ ],
605+ " Resource " : [
606+ " arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-audit-logs:*" ,
607+ " arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-search-logs:*" ,
608+ " arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/${Environment}/webpresence/search-slow-index-logs:*"
609+ ]
610+ }
611+ ]
612+ }
510613
511614 LogGroup :
512615 Type : Custom::LogGroup
513616 Properties :
514617 ServiceToken : !ImportValue LogGroupHelperLambdaArn
515618 LogGroupName : !Sub '/${Environment}/webpresence/search'
516619 RetentionInDays : 3653
620+
621+ AuditLogsLogGroup :
622+ Type : Custom::LogGroup
623+ Properties :
624+ ServiceToken : !ImportValue LogGroupHelperLambdaArn
625+ LogGroupName : !Sub '/${Environment}/webpresence/search-audit-logs'
626+ RetentionInDays : 3653
627+
628+ SlowSearchLogsLogGroup :
629+ Type : Custom::LogGroup
630+ Properties :
631+ ServiceToken : !ImportValue LogGroupHelperLambdaArn
632+ LogGroupName : !Sub '/${Environment}/webpresence/search-slow-search-logs'
633+ RetentionInDays : 3653
634+
635+ SlowIndexLogsLogGroup :
636+ Type : Custom::LogGroup
637+ Properties :
638+ ServiceToken : !ImportValue LogGroupHelperLambdaArn
639+ LogGroupName : !Sub '/${Environment}/webpresence/search-slow-index-logs'
640+ RetentionInDays : 3653
0 commit comments