Skip to content

Instantly share code, notes, and snippets.

@ijin
Created December 9, 2015 16:40
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ijin/917193e443ff41cdf98b to your computer and use it in GitHub Desktop.
Save ijin/917193e443ff41cdf98b to your computer and use it in GitHub Desktop.
AWS Lambda function that processes cloudwatch logs and invokes a slack function
import boto3
import datetime
import json
import urllib2
import base64
import gzip
from StringIO import StringIO
print('Loading function')
class SlackWrapper:
#slack
__channel = '#test'
__icon_url = 'https://raw.githubusercontent.com/donnemartin/dev-setup-resources/master/res/aws_lambda.png'
__username = 'lambda'
def __init__(self, username = __username):
self.username = username
self.client = boto3.client('lambda', region_name='ap-northeast-1')
def post(self, posttext):
params = {
'channel': self.__channel ,
'text':posttext,
'icon_url': self.__icon_url,
'username':self.username
}
print params
self.client.invoke(FunctionName='slack', InvocationType='Event', Payload=json.dumps(params))
class JST(datetime.tzinfo):
def utcoffset(self, dt):
return datetime.timedelta(hours=9)
def dst(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return "JST"
def get_events(record):
decoded_data = record.decode('base64')
unzipped_data = gzip.GzipFile(fileobj=StringIO(decoded_data)).read()
json_data = json.loads(unzipped_data)
first_time = json_data['logEvents'][0]['timestamp']/1000.0
events= "`" + datetime.datetime.fromtimestamp(first_time, tz=JST()).strftime('%Y-%m-%d %H:%M:%S%z') + "`\n"
for data in json_data['logEvents']:
events += data['message']
return events, json_data['logGroup']
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
if ("awslogs" in event):
message, log_group = get_events(event['awslogs']['data'])
slack = SlackWrapper(log_group)
return slack.post(message)
else:
raise Exception('ERROR: not a cloudwatch logs event')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment