我在AWS上运行了一个应用程序.如何设置Amazon CloudWatch以在EC2实例失败或不再响应时通知我?
我浏览了CloudWatch屏幕,看起来你可以监控某些统计信息,比如CPU或磁盘利用率,但我没有看到监控事件的方法,例如"实例获得了一个http请求并花费了超过X秒的时间响应."
要使用CLI命令从日志组中删除日志流,需要单独的日志流名称.有没有办法使用单个命令删除属于日志组的所有日志流?
我试图在其中一个字段中使用包含JSON的数据的Logs Insights,并解析JSON字段
当我使用入门代码将其放入数据时,我的数据如下所示
fields @timestamp, @message
| sort @timestamp desc
| limit 25
Run Code Online (Sandbox Code Playgroud)
如何path在嵌套的JSON中轻松提取变量以对其执行聚合?通过查看一些文档,我认为@message.path可行,但似乎并非如此.有没有人成功解释了Insights中的JSON日志
编辑:我的数据的样本
#
@timestamp
@message
1
2018-12-19 23:42:52.000
I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/ID","format":"json","controller":"API::V1::Public::ProfessionalsController","action":"show","status":200,"duration":285.27,"view":222.36,"time":"2018-12-19T23:42:52.344+00:00","params":{"include":"user,tags,promotions,company_sector,similar_professionals.tags,similar_professionals.user","format":"json","compress":false,"id":"ID"},"@timestamp":"2018-12-19T23:42:52.629Z","@version":"1","message":"[200] GET /api/v1/professionals/ID (API::V1::Public::ProfessionalsController#show)"}
@logStream i-05d1d61ab853517a0
@message I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/ID","format":"json","controller":"API::V1::Public::ProfessionalsController","action":"show","status":200,"duration":285.27,"view":222.36,"time":"2018-12-19T23:42:52.344+00:00","params":{"include":"xxx","format":"json","compress":false,"id":"ID"},"@timestamp":"2018-12-19T23:42:52.629Z","@version":"1","message":"[200] GET /api/v1/professionals/ID (API::V1::Public::ProfessionalsController#show)"}
@timestamp 1545262972000
2
2018-12-19 23:42:16.000
I, [2018-12-19T23:42:16.723472 #851] INFO -- : [ea712503-eb86-4a6e-ab38-ddbcd6c2b4d0] {"method":"GET","path":"/api/v1/heartbeats/new","format":"json","controller":"API::V1::Public::HeartbeatsController","action":"new","status":201,"duration":9.97,"view":3.2,"time":"2018-12-19T23:42:16.712+00:00","params":{"format":"json","compress":false},"@timestamp":"2018-12-19T23:42:16.722Z","@version":"1","message":"[201] GET /api/v1/heartbeats/new (API::V1::Public::HeartbeatsController#new)"}
Run Code Online (Sandbox Code Playgroud) 尝试运行包含reqHeaders.x-forwarded-for以下内容的 CloudWatch Insights 查询:
fields @timestamp, status, err, method, url, req_id, reqHeaders.x-forwarded-for
| filter status >= 400
| sort @timestamp desc
| limit 10
Run Code Online (Sandbox Code Playgroud)
但该字段始终为空,尽管已正确解析@message。我怀疑这是因为子字段名称中的连字符。有谁知道如何重新格式化查询以使其显示?
编辑:这是一个日志消息示例(纯 JSON,我只是对其进行了格式化)
{
"cache": null,
"client": "172.31.10.31",
"component": "server",
"err": "Invalid access token",
"hostname": "0da665ab5653",
"level": 30,
"method": "PUT",
"msg": "REQ: 401 PUT /api/xxxxxxxxxx",
"name": "rocket",
"pid": 10,
"reqHeaders": {
"accept-encoding": "gzip",
"cloudfront-forwarded-proto": "https",
"cloudfront-is-desktop-viewer": "true",
"cloudfront-is-mobile-viewer": "false",
"cloudfront-is-smarttv-viewer": "false",
"cloudfront-is-tablet-viewer": "false",
"cloudfront-viewer-country": "XX",
"content-length": "74",
"content-type": "application/json; charset=UTF-8",
"host": "xxxxxxxxxx", …Run Code Online (Sandbox Code Playgroud) amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
我有一个 lambda,当给定操作失败时,它会发送到 STDERR,如下所示:
async function handler(event, context) {
const success = do()
if (success) {
return { statusCode: 200 }
}
console.error('Failed :(')
return { statusCode: 400 }
}
Run Code Online (Sandbox Code Playgroud)
这非常简单,但你明白了。当然,此消息会出现在 CloudWatch 上。我想知道是否可以(以及如何)设置 CloudWatch 警报,以便在我的日志中显示此消息时向我发送电子邮件。
我已经阅读了有关 CloudWatch 警报的文档,但它非常混乱,很难在那里找到任何内容。
默认情况下,CloudWatch不会监视内存使用情况.所以我尝试使用这些说明将它添加到AWS中的我的Windows实例.
这就是我做的:
我创建了一个名为的用户custom-metrics-user.然后我存储了访问和密钥.
我创建了一个内联策略并将其附加到用户.它看起来像这样:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["cloudwatch:PutMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "ec2:DescribeTags"],
"Resource": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我推出了Windows实例[2012 R2 Base AMI].通过RDP访问实例后,我发现该AWS.EC2.Windows.CloudWatch.json文件已经存在.
我相应地更改了该.json文件.更改后,它看起来像这样:
{
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "ApplicationEventLog",
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogName": "Application",
"Levels": "1"
}
},
{
"Id": "SystemEventLog",
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogName": "System",
"Levels": "7"
}
},
{
"Id": "SecurityEventLog",
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogName": "Security",
"Levels": "7"
} …Run Code Online (Sandbox Code Playgroud)我必须监控特定 lambda 的 CloudWatch 日志。当特定错误消息(例如 HTTP-50X)记录到 CloudWatch 时,我们需要发送电子邮件通知以提醒出现问题。
我们需要帮助在 AWS 中创建警报电子邮件,以手动监控日志以查看是否记录了任何此类错误。
amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights cloudwatch-alarms
我想将发送到自定义事件总线的所有事件发送到 CloudWatch 日志。
我创建了自定义事件总线:my-event-bus
我创建了 CloudWatch 日志组
我创建了事件总线策略,以便我帐户中的每个人都可以将事件放入my-event-bus
我为该自定义总线创建了一条规则
这是规则:
MyRuleForBus:
Type: AWS::Events::Rule
Properties:
Description: Testing rule
EventBusName:
Name: testing-rule-for-my-event-bus
EventPattern:
source:
- aws.events
State: ENABLED
Targets:
- Arn: arn:aws:logs:us-east-1:MY_ACCOUNT_ID:log-group:my-event-bus-log-group
Id: 'my-bus'
Run Code Online (Sandbox Code Playgroud)
当我尝试举办活动时
aws events put-events --entries file://put-events.json
我收到以下错误
{
"FailedEntryCount": 1,
"Entries": [
{
"ErrorCode": "NotAuthorizedForSourceException",
"ErrorMessage": "Not authorized for the source."
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是内容put-events.json
MyRuleForBus:
Type: AWS::Events::Rule
Properties:
Description: Testing rule
EventBusName:
Name: testing-rule-for-my-event-bus
EventPattern:
source:
- aws.events
State: ENABLED
Targets:
- Arn: arn:aws:logs:us-east-1:MY_ACCOUNT_ID:log-group:my-event-bus-log-group …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下操作:
我有一个发布 ReplicationLatency 指标的 DynamoDB 全局表。我想针对为每个区域发布的 ReplicationLatency 指标的汇总创建警报。
DDB 表副本存在于 us-east-1、us-west-2 和 us-west-1 中。在为每个接收区域定义 CW 警报时,我假设我可以搜索表达式。例如,这是我在 CloudWatch 控制台中看到的表达式。
SEARCH('{AWS/DynamoDB,ReceivingRegion,TableName} MetricName="ReplicationLatency"', 'Average', 300)
Run Code Online (Sandbox Code Playgroud)
我想创建一个指标数学警报,它是上述搜索结果指标的平均值。我试图创建格式的度量数学表达式:
AVG(METRICS())
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误 - 警报的表达式必须至少包含一个指标。之前是否有人尝试根据搜索表达式创建警报?如果是,您能否说明如何做到这一点?
我能想到的解决这个问题的唯一另一种方法是为每个接收区域枚举/添加 ReplicationLatency 指标,然后从中创建一个指标数学表达式。这似乎完全违背了拥有搜索表达式并根据所有这些指标创建警报的目的。
阅读 AWS 文档后,我仍然不清楚 cloudwatch 指标统计的平均值和最大值,特别是 ECS CPUUtilization。
我有一个 AWS ECS 集群 fargate 设置,一个最少计数为 2 个健康任务的服务。我已使用 AWS/ECS CPUUtilization 为 ClusterName my 和 ServiceName 启用自动缩放。Cloudwatch 警报触发器配置为在 3 个数据点的一分钟内平均 CPU 利用率超过 75% 时触发。
我还有一个健康检查设置,频率为 30 秒,超时为 5 分钟,
我运行了一个性能脚本来测试自动缩放行为,但我注意到该服务被标记为不健康并创建了新任务。当我检查 cpuutilization 指标时,对于平均统计数据,它显示大约 44% 的利用率,但对于最大统计数据,它显示超过 100%,附上截图。
平均数
那么这里的平均值和最大值是多少,这是否意味着平均值是我的两个实例的平均 CPU 利用率?和最大值显示我的实例之一的 CPU 利用率超过 100?
amazon-web-services amazon-ecs autoscaling amazon-cloudwatch amazon-cloudwatch-metrics
aws-cloudwatch-log-insights ×2
amazon-ec2 ×1
amazon-ecs ×1
autoscaling ×1
aws-cli ×1
aws-lambda ×1
json ×1
monitoring ×1