我想将我的用户直接发送到特定的日志组和过滤器,但我需要能够生成正确的 URL 格式。例如,这个网址
https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/
%252Fmy%252Flog%252Fgroup%252Fgoes%252Fhere/log-events/$3FfilterPattern$3D$255Bincoming_ip$252C$2Buser_name$252C$2Buser_ip$2B$252C$2Btimestamp$252C$2Brequest$2B$2521$253D$2B$2522GET$2B$252Fhealth_checks$252Fall$2B*$2522$252C$2Bstatus_code$2B$253D$2B5*$2B$257C$257C$2Bstatus_code$2B$253D$2B429$252C$2Bbytes$252C$2Burl$252C$2Buser_agent$255D$26start$3D-172800000
Run Code Online (Sandbox Code Playgroud)
将带您到一个名为的日志组,/my/log/group/goes/here并使用此模式过滤过去 2 天的消息:
[incoming_ip, user_name, user_ip , timestamp, request != "GET /health_checks/all *", status_code = 5* || status_code = 429, bytes, url, user_agent]
Run Code Online (Sandbox Code Playgroud)
我可以解码 URL 的一部分,但我不知道其他一些字符应该是什么(见下文),但这对我来说看起来并不像任何标准的 HTML 编码。有人知道这种 URL 格式的编码器/解码器吗?
%252F == /
$252C == ,
$255B == [
$255D == ]
$253D == =
$2521 == !
$2522 == "
$252F == _
$257C == |
$2B == +
$26 == &
$3D == =
$3F == ?
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
我正在尝试获取实例的CPU利用率的最新数据(实际上,几个实例,但只是一个开始),但是以下调用不返回任何数据:
cw = boto.cloudwatch.connect_to_region(Region)
cw.get_metric_statistics(
300,
datetime.datetime.now() - datetime.timedelta(seconds=600),
datetime.datetime.now(),
'CPUUtilization',
'AWS/EC2',
'Average',
dimensions={'InstanceId':['i-11111111']}
# for stats across multiple instances:
# dimensions={'InstanceId':['i-11111111', 'i-22222222', 'i-33333333']}
)
Run Code Online (Sandbox Code Playgroud)
其他站点上的各个帖子表明检查区域是正确的,检查period(第一个参数)是60的倍数,并且(如果没有启用详细监视)大于或等于300.我已检查过所有这些事情,我仍然没有得到任何数据.
我尝试创建AWS Alarm来观看SQS.如果队列在2分钟内有超过1条消息,我想创建一个警报来触发策略.我用这个命令来创建警报:
aws cloudwatch put-metric-alarm --alarm-name alarmName --metric-name ApproximateNumberOfMessagesVisible --namespace "AWS/SQS" --statistic Average --period 60 --evaluation-periods 2 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --dimensions "Name=QueueName,Value=QueueName" "Name=AutoScalingGroupName,Value=asg-name" --alarm-actions "<arn:batch-upscale-policy>" --actions-enable
Run Code Online (Sandbox Code Playgroud)
我可以在AWS控制台中看到警报,但它仍然处于INSUFFICIENT_DATA状态.我该如何解决?
在这里,我要听其他AWS账户中的队列.可能吗??!
我想应用CloudWatch警报来停止未在我们的预生产环境中使用的实例.我们经常会出现旋转,使用然后再打开的情况,这真的开始花费我们相当多的钱.
CloudWatch警报有一个方便的功能,我们可以根据一些指标停止 - 这是非常棒的,我想用它来不断关注服务器,但让它为我整理实例.
这样做的问题是,似乎需要针对每个实例单独创建CloudWatch警报.有没有办法可以创建一个警报,它将在所有当前和未来的实例中共享值?
ETA - 或者,告诉我这些选项比CloudWatch更好,我会很高兴.
我想在特定时间段内自动切换警报开/关,以便在维护窗口期间不会触发警报.我怀疑是否存在简单或直接的方法,因为我在文档中找不到这样的东西.有没有人知道在使用CloudWatch警报时实现这一目标的不同方法,还是我错过了一个明显的解决方案?
我有一个应用程序,每分钟都会向AWS提供一个自定义Cloudwatch指标.这应该是一个心跳,所以我知道应用程序是活着的.
现在我想对此指标发出警报,以便在心跳停止时通知我.我尝试使用不同的云观察警报统计数据来完成此操作,包括"平均值"和"数据样本",并在给定时间段内设置小于1的警报阈值.但是,在所有情况下,如果我的应用程序死机并停止报告心跳,则警报将仅进入"数据不足"状态,并且永远不会进入"警报"状态.
我知道我可以在"数据不足"状态下发布通知,但我希望这会显示为警报.这可以在Cloudwatch中使用吗?
谢谢,
马特
如何将aws云监视警报连接到lambda函数调用?
我通过AWS CloudFormation模板以编程方式向我们创建的作为云形成堆栈一部分的ELB添加云监视警报.我希望将警报发送到lambda函数,该函数将消息发布到Slack.虽然警报有效,并且SNS配置对我来说似乎是正确的,但从不调用lambda函数.
lambda函数遵循以下示例:
http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/
lambda函数工作,我可以通过aws控制台发送测试数据,从而发送一条消息发送给Slack.
使用看起来正确的云监控警报创建负载均衡器:
警报似乎配置为将警报发送到正确的SNS主题:
有一个SNS订阅该主题,lambda函数作为它的端点:
警报触发时会触发警报并将消息发送到正确的主题:
但是从不调用lambda函数:
但是,如果我在lambda函数上手动添加SNS主题作为"事件源",则会在警报触发和发布Slack消息时调用它.
我是否误解了如何将云监视报警连接到lambda函数?或者我缺少一个小细节?
如果这种方法不起作用,并且将lambda函数连接到云监视警报的唯一方法是将SNS主题添加为"事件源",通过AWS CloudFormation模板执行此操作的适当方法是什么?我没有看到修改现有资源的明显方法,例如固定的lambda函数.
这是我的CloudFormation模板:
"GenericSlackAlertSNSTopic" : {
"Type" : "AWS::SNS::Topic",
"Properties" : {
"Subscription" : [ {
"Endpoint" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
"Protocol" : "lambda"
} ]
}
},
"ELBNoTrafficAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"Namespace" : "AWS/ELB",
"AlarmDescription": "Alarm for no apparent traffic on an ELB.",
"AlarmActions": [{
"Ref": "GenericSlackAlertSNSTopic"
}],
"InsufficientDataActions": [{
"Ref": "GenericSlackAlertSNSTopic"
}],
"MetricName": "RequestCount",
"Statistic": "Sum",
"Dimensions" : [ {
"Name" : "LoadBalancerName",
"Value" …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-sns aws-cloudformation amazon-cloudwatch aws-lambda
从文档:
无论您为如何处理缺失数据设置什么值,当警报评估是否更改状态时,CloudWatch 都会尝试检索比评估期指定数量更多的数据点。它尝试检索的确切数据点数量取决于警报周期的长度以及它是基于标准分辨率还是高分辨率的指标。它尝试检索的数据点的时间范围是评估范围。
文档继续给出了一个警报示例,其中“EvaluationPeriods”和“DatapointsToAlarm”设置为 3。他们指出 Cloudwatch 选择了 5 个最近的数据点。我的部分问题是,他们从哪里得到 5?从文档中不清楚。
我的问题的第二部分是,为什么会有这种行为(或者至少,为什么默认情况下有这种行为)?如果我将评估期设置为 3,将我的数据点设置为警报为 3,并告诉 Cloudwatch 将“TreatMissingData”视为“违规”,我将预计 3 个丢失数据周期会触发警报状态。这不一定会发生,如文档中的示例所示。
使用Python 3.7运行时抛出的未处理异常似乎没有像在Python 3.6中那样记录到CloudWatch.如何在Python 3.7中设置记录器来捕获此信息?
1.像这样创建一个lambda函数:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def lambda_handler(event, context):
logger.info("This shows fine")
raise Exception("I failed")
Run Code Online (Sandbox Code Playgroud)
2.使用Python 3.6运行时运行此函数
START RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc Version: $LATEST
[INFO] 2019-01-02T07:25:52.797Z a2b6038b-0e5f-11e9-9226-9dfc35a22dcc //This shows fine
I failed: Exception
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 9, in lambda_handler
raise Exception("I failed")
Exception: I failed
END RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc
REPORT RequestId: a2b6038b-0e5f-11e9-9226-9dfc35a22dcc Duration: 1.12 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
Run Code Online (Sandbox Code Playgroud)
2.切换到Python 3.7运行时并再次运行...没有堆栈跟踪
START …Run Code Online (Sandbox Code Playgroud) 在 AWS 控制台中,我可以在日志组的所有日志流中搜索字符串吗?现在,如果我想在日志流中搜索,我必须进入每个日志流,然后进行搜索,这需要很多时间。
aws-lambda ×2
python ×2
amazon-ec2 ×1
amazon-sns ×1
autoscaling ×1
aws-cloudwatch-log-insights ×1
boto ×1
python-3.x ×1