标签(空格分隔): aws
[TOC]
aws文档根目录链接
基础概念
AWS amazon web services AMI aws machine image S3 simple store service EC2 elastic cloud computing ELB elastic load balance RDS relational database service dynamodb 非关系数据库服务 cloud watch ECS elastic container service IAM Identity and Access Management
EC2
定价
区域
文档链接 区域和区域之间是隔离的,如北京区域(cn-north-1)和宁夏区域。 一个区域内可以有多个可用区(AZ),可用区之间通过低延迟链接相连。 可用区由区域代码后跟一个字母标识符表示;例如,cn-north-1a、cn-north-1b。 甲用户和乙用户都会有名称为cn-north-1a的可用区,但是可能不是同一位置,可用区有AZ ID(可用区的唯一、一致的标识符)可以用来跨用户协调可用区。
ELB
Application ELB 创建load balancer
cloudWatch
通过使用 CloudWatch 全面地了解资源使用率、应用程序性能和运行状况。 指标、控制面板和警报 概念 文档左边的目录中,已经看过的章节显示为橙色,当前查看的章节显示为黑色。最下面还有上一页、下一页。
指标
基本概念
Amazon CloudWatch 实时监控您的 Amazon Web Services (AWS) 资源以及您在 AWS 中运行的应用程序。您可以使用 CloudWatch 收集和跟踪指标(metrics),这些指标是您可衡量的相关资源和应用程序的变量。
指标 是 CloudWatch 中的基本概念。指标表示一个发布到 CloudWatch 并且按时间排序的数据点集。可将指标视为要监控的变量,而数据点代表该变量随时间变化的值
也可以将常用指标的链接保存起来,省去每次设定的麻烦。
每个指标最多分配10个维度。在查看可用指标的文档中,介绍了指标的结构:
# 这个结构不体现控制面板上的命名空间(如EC2)下的 “每个实例的指标” 那一层。
{
# 指标的大列表
"Metrics" : [
...
{
# 命名空间(这两个示例属于同一个命名空间)
"Namespace": "AWS/EC2",
# 该类指标的维度列表,每个值是指标的“叶子节点”
"Dimensions": [
{
# 这一层是一个具体的指标
# 维度名称
"Name": "InstanceId",
# 维度值
"Value": "i-1234567890abcdef0"
}
],
# 该命名空间下某类指标的名称
"MetricName": "NetworkOut"
},
{
"Namespace": "AWS/EC2",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-1234567890abcdef0"
}
],
"MetricName": "CPUUtilization"
},
...
]
}
发布指标的服务
EC2的各个可用指标的含义
关于百分位数的概念
百分位数指示某个值在数据集中的相对位置。例如,第 95 个百分位数表示 95% 的数据低于此值,5% 的数据高于此值。百分位数可帮助您更好地了解指标数据的分布情况。
百分位数通常用于隔离异常值。在典型分布中,95% 的数据在平均值的两个标准偏差范围内,99.7% 的数据在平均值的三个标准偏差范围内。落在三个标准偏差之外的任何数据通常被认为是异常值,因为它与平均值相差很多。例如,假设您正在监控 EC2 实例的 CPU 利用率,以确保客户有良好的体验。如果您监控平均值,这可以隐藏异常值。如果您监控最大值,单个异常值可能会使结果出现偏差。使用百分位数,您可以监控 CPU 利用率的第 95 个百分位数,以检查负载异常重的实例。
控制面板
可以创建自定义控制面板,以显示有关自定义应用程序的指标,并显示您选择的指标的自定义集合。
警报
文档链接 您可以创建警报,这些警报监视指标,当超出阈值时,它们会发送通知或者对您所监控的资源自动进行更改。例如,您可以监控您的 Amazon EC2 实例的 CPU 使用率以及磁盘读写情况,然后使用此数据确定您是否应启动其他实例来处理增加的负载。您还可以使用此数据停止未完全利用的实例以节省开支。
# 警报可能具有以下几种状态【只要是有数据,不是ALARM就是OK,INSUFFICIENT_DATA指的是数据不足,而不是超过阈值的数据点的数量有了但是还没有超过 “数据点数”】:
OK – 指标或表达式在定义的阈值范围内。
ALARM – 指标或表达式超出定义的阈值。
INSUFFICIENT_DATA – 警报刚刚启动,指标不可用,或者指标没有足够的数据以确定警报状态。
# 创建警报时,您指定三个设置,以支持 CloudWatch 评估何时更改警报状态:
# “时间段”指的就是在用指标来创建警报的时候,“绘成图表的指标”选项卡中的时段那个选项,是在指标这里修改,比如“1分钟”
Period (时间段) 是为创建警报的各个数据点而对该指标或表达式进行评估的时间长度。它以秒为单位。如果您选择一分钟以作为评估期,则每分钟具有一个数据点。
# 创建警报时候的“其他配置”中的“要报警的数据点”中的 右边 的输入框表示的就是“评估期”(几个时间段),这个数字乘以上面的如 “1分钟”就是“评估期”以时间为单位的值
Evaluation Period (评估期) 是确定警报状态时要评估的最近时间段或数据点的数量。
# 创建警报时候的“其他配置”中的“要报警的数据点”中的 左边 的输入框表示的就是“数据点数”
Datapoints to Alarm (触发警报的数据点数) 是评估期内必须超出阈值才能触发警报变为 ALARM 状态的数据点数量。超出阈值的数据点不必是连续的,它们只需都在最近的几个(具体数目等于评估期)数据点之内。
# 综合起来就是:“评估期” 乘以 “时间段” 的时间内,超过阈值的数据点的数量大于 “数据点数” 的话,警报就会进入 “Alarm(警报)” 状态。
警报后的操作
可以发送到SNS主题 如too many backend 5XX 警报的“操作”就是发送消息至主题“rain”,而这个主题的订阅中除了那些邮件外还有 一个lambda处理,这个处理的作用就是调用钉钉机器人的接口给我们发钉钉消息。 这就是我么收到钉钉机器人告警的原理。
雨课堂监控
进入 aws 主页,选择 CloudWatch 服务
选择指标
在全部指标下的搜索栏搜索某个指标(如 cpu)回车进行进一步过滤
选择 EC2>每个实例的指标
查看右侧的 指标名称,鼠标放到某个想要查看的指标点击三角箭头将其 添加到搜索(如CPUUtilization)
再勾选左侧的实例名称选择想要查看的机器
上方即显示图表
可调节时间区域 周期 来查看不同维度的数据
可以调 "统计数据" 的 "总计" 或 "平均值" 来看不同的数据维度
电脑重装以后重新安装aws-cli
# aws官方提示安装方式 https://aws.amazon.com/cn/cli/
pip install awscli
# 需要先安装 pip https://stackoverflow.com/questions/9780717/bash-pip-command-not-found
sudo easy_install pip
# 安装awscli有可能超时,所以需要配超时时间 https://blog.csdn.net/lijiang1991/article/details/51775896
pip --default-timeout=100 install awscli
# 配置awscli
# aws_access_key_id = AKIAWTYUIQFWNDDNH57G
# aws_secret_access_key = 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
# region = cn-north-1
# output = text
aws configure
# 在新开的终端窗口即可使用了
aws help
20200715更新可以用AWS CLI 版本 2了
微信报警称“服务器无响应”
有时“雨课堂-报警群”会
Appid: wxfc370608a640ee3c
昵称: 雨课堂
时间: 2019-05-07 09:18:41
内容: 微信服务器连接公众号开发者服务器时发生超时,超时时间为5秒
次数: 5分钟 410次
错误样例: [OpenID=oh5NcwaAENESy5M7y4FTS3W1rm7k][Stamp=1557191921][3rdUrl=http://drop.ykt.io/wechat/drop/][IP=54.223.189.98][Msg=Text]
报警排查指引,请见: http://url.cn/ab0jnP
连接超时,问题肯定出在lb之前,我们主要是需要查看s3的日志,确认下服务没问题。 比如 查询20190507的日志,主要查询方式是:
登录aws -> 服务选择S3 -> droplogs -> AWSLogs -> 454772162924 -> elasticloadbalancing -> cn-north-1 -> 2019 -> 05 -> 07`
然后选择相应时间段点进去把压缩的日志文件下载回来,进行查询。如查询9点20分左右的日志(有2个文件):
➜ Downloads grep oh5NcwaAENESy5M7y4FTS3W1rm7k 454772162924_elasticloadbalancing_cn-north-1_app.drop-public.7257d305e1e31c17_20190507T0120Z_54.223.189.98_1h966lm5.log
http 2019-05-07T01:18:04.068718Z app/drop-public/7257d305e1e31c17 101.226.233.143:59565 172.31.22.195:80 0.000 0.002 0.000 200 200 1053 129 "POST http://drop.ykt.io:80/wechat/drop/?signature=a22d6745ca67a68d984370117d93ef17a2557cc1×tamp=1557191884&nonce=499023648&openid=oh5NcwaAENESy5M7y4FTS3W1rm7k&encrypt_type=aes&msg_signature=06e9226b0cc49de225b12dcfd884c1c8dd33fabb HTTP/1.1" "Mozilla/4.0" - - arn:aws-cn:elasticloadbalancing:cn-north-1:454772162924:targetgroup/public-drop/03b9d3ffda25fc98 "Root=1-5cd0dccc-04496bf0e2177e30e8161af0" "-" "-" 0 2019-05-07T01:18:04.066000Z "forward" "-" "-"
...
查看日志的文档链接。
gets3脚本的处理
# /Users/liujunyang/work/xuetang/gets3/
先用 ./test-openid.sh 03 31 下回来某个时间点的日志
然后用 ./calctime.sh 把时间统统存到 three_time 文件
然后用 node calc.js 把所有 -1 的行log出来,计算出总数量;同时计算正常响应的请求的总时间和平均时间
查询LB上 2020-03-31T07:55 的时候 502 的数量,注意502前后的空格
grep -n "2020-03-31T07:55" *.log | grep " 502 "
一次开哥查询后给出的报告为:
我分别查了下我们和aws的日志,服务是正常的。而且drop现在是直接返回,查了下前后10分钟的日志,响应时间10多,20多,30多ms分别只有1条,剩余的都是在10ms内。
有异常的是有53条请求状态码是460,表示client(微信服务器)还没等lb返回就主动断开了连接,这些请求我随机挑了10来条发现都是重复的请求,都是在几秒前已经成功的请求,然后隔了几秒又发来一模一样的请求,但在1ms内就直接断开了连接
另外用它的错误样例根本查不到openid和stamp都符合的请求日志