我想启用从Cloudwatch到Elasticsearch的Stream to Amazon Elasticsearch Service。
我熟悉如何手动执行此操作,我正在寻找一种通过运行aws cli命令来实现此目标的方法。
假设Elasticsearch已配置,是否有任何方法可以自动执行该过程?
答案 0 :(得分:2)
在“流至Amazon Elasticsearch”服务的后台创建新的lambda,然后将日志推送到Lambda,然后是ELK。
目标网址
Kinesis流的Amazon资源名称(ARN),Kinesis数据 您想用作目标的Firehose流或Lambda函数 订阅供稿。
所以这是推送到AWS lambda的方法,Lambda会自动将这些流推送到ELK。
aws logs put-subscription-filter --log-group-name log_group_name --filter-pattern "" --filter-name filter_name_demo --destination-arn arn:aws:lambda:us-west-2:***********:function:your_lambda_name
答案 1 :(得分:2)
更新:
如果您正在使用cloudformation,请看一下我的答案here。
非常感谢@Adiii为我指出了正确的方向,请在下面找到此问题的端到端解决方案。
解决方案包括以下部分:
create-lambda-role
授予lambda角色的权限
我认为lambda函数已经打包并且可以访问了。 您可以找到lambda函数here。
手动执行here。
1。 create-lambda-role
首先,我们需要创建lambda函数使用的角色,然后我们将相关策略附加到该角色。
cat > lambda-policy.json << EOF
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
}
EOF
aws iam create-role \
--role-name ${ROLE_NAME} \
--assume-role-policy-document file://lambda-policy.json \
--profile ${PROFILE} \
>/dev/null
2。将许可授予lambda角色
将相关政策附加到lambda角色。
cat > lambda-to-es-via-vpc-policy.json << EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1569580358341",
"Action": "es:*",
"Effect": "Allow",
"Resource": "arn:aws:es:${AWS_REGION}:${AWS_ACCOUNT_ID}:domain/${ES_DOMAIN}/*"
},
{
"Sid": "Stmt1569580707924",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:CreateNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"ec2:DeleteNetworkInterface"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
EOF
aws iam put-role-policy \
--role-name ${ROLE_NAME} \
--policy-name lambda-to-es-via-vpc-policy \
--policy-document file://lambda-to-es-via-vpc-policy.json \
--profile ${PROFILE} \
>/dev/null
3。 create-lambda
aws lambda create-function \
--function-name ${LAMBDA_NAME} \
--runtime nodejs8.10 \
--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ROLE_NAME} \
--handler ${LAMBDA_NAME}.handler \
--zip-file fileb://${LAMBDA_NAME}.zip \
--timeout 30 \
--vpc-config SubnetIds=${SUBNET_IDS},SecurityGroupIds=${SECURITY_GROUP_IDS} \
--profile ${PROFILE} \
>/dev/null
4。 grant-cloudwatch-permission-toexecutelambda
授予AWS服务或其他帐户使用功能的权限。
aws lambda add-permission \
--function-name "${LAMBDA_NAME}" \
--statement-id "${LAMBDA_NAME}" \
--principal "logs.${AWS_REGION}.amazonaws.com" \
--action "lambda:InvokeFunction" \
--source-arn "arn:aws:logs:${AWS_REGION}:${AWS_ACCOUNT_ID}:log-group:/aws/eks/${EKS_CLUSTER}/cluster:*" \
--source-account ${AWS_ACCOUNT_ID} \
--profile ${PROFILE} \
>/dev/null
5。将订阅添加到cloudwatch-log-group
创建或更新订阅筛选器,并将其与指定的日志组关联。订阅过滤器使您可以订阅日志事件的实时流,并将其传递到特定的目的地。
aws logs put-subscription-filter \
--log-group-name "/aws/eks/${EKS_CLUSTER}/cluster" \
--filter-name "Common Log Format" \
--filter-pattern "[host, ident, authuser, date, request, status, bytes]" \
--destination-arn arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT_ID}:function:${LAMBDA_NAME} \
--profile ${PROFILE} \
>/dev/null