使用 CloudWatch Logs 监控特定字符串!
目录
你好!
我是Beyond大阪事务所的拉面大王Hide。
这是我的第 6 篇文章。
上次,我写了有关使用 Chatbot 将 Cloudwatch 警报发送到 Slack 的文章。
我写了一篇关于使用名为 Chatbot 的有用工具进行通知的有趣文章,所以如果您有兴趣,请看一下!
CloudWatch Logs 中的字符串监控是什么?
CloudWatch Logs 是 CloudWatch 的一部分,它监控 AWS 资源,并允许您轻松从 Amazon EC2 收集应用程序和访问日志并将其保存在云上。
由于它可以保存在云端,因此您可以在需要检查特定日志时轻松搜索它们。
另一个吸引人的功能是收集的日志可以通过一个服务集中管理,因此管理不需要太多精力。
接下来,字符串监控涉及监控应用程序和实时收集的访问日志,以提高业务效率,如果检测到某种输出格式或特定字符串,则通信是指通知工具的监控方式。即使在极少数情况下出现问题,也可以及早发现,从而使您能够快速解决问题。
使用 CloudWatch Logs 实施日志监控非常简单,所以让我们一起逐步完成这些步骤!
配置图
在 EC2 中安装用于 CloudWatch Logs 的代理,该代理会将 EC2 中存在的日志发送到控制台。
接下来,将根据包括控制台中设置的特定字符串的条件发送警报。看配置我觉得并没有那么难,所以我们尽力去设置一下吧。
施工步骤
① 创建IAM角色
①-①:进入IAM > 角色,点击【创建角色】
①-②:选择以下内容,点击【下一步】
● 可信实体类型:AWS 服务
● 使用案例:EC2
①-③:选择【CloudWatchFullAccess】,点击【下一步】
①-④:填写角色名称和描述,点击【创建角色】
①-⑤:EC2 > 选择创建的实例 > 操作 > 安全 > 单击更改 IAM 角色
①-⑥:选择您之前创建的IAM角色,点击【更新IAM角色】
*如果创建的实例的安全选项卡显示以下状态,则表示申请已完成。
② CloudWatch Logs 代理设置
②-①:登录服务器
②-②:安装 CloudWatch Logs 代理
*对于 Amazon Linux,您可以使用以下命令进行安装。
yum 安装 amazon-cloudwatch-agent
*对于 Amazon Linux 以外的操作系统,安装方法有所不同。
对于CentOS,官方文档描述
1.下载CloudWatch代理
*下载链接因操作系统而异,请参阅此处。
wget https://s3.amazonaws.com/amazoncloudwatch-agent/centos/amd64/latest/amazon-cloudwatch-agent.rpm
2.安装CloudWatch代理
rpm -U ./amazon-cloudwatch-agent.rpm
*此外,以下代理被弃用,因此请使用上述步骤安装它们。
百胜安装 awslogs
②-③:启动设置向导
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
②-④:配置代理设置
=================================================== ============== = 欢迎使用 Amazon CloudWatch 代理配置管理器 = = = = CloudWatch 代理允许您从主机收集指标和日志 = = 并将其发送到 CloudWatch 其他 CloudWatch =。 = = ========================================= 可能会收取费用。 ==================== 您计划在哪个操作系统上使用代理? 1. linux 2. windows 3. darwin 默认选择:[1]:*选择 1对于 Linux 1 尝试根据 ec2 元数据获取默认区域...您使用的是 EC2 还是本地主机?) 1. EC2 2. 本地默认选择:[1]: *为 EC2 1 哪个用户选择 1您打算运行代理吗?(StatsD) 1.是 2.否 默认选择:[1]:*需要收集自定义指标,因此选择 1 您想要 StatsD 守护程序的端口监听?(StatsD 守护进程监听哪个端口? ) 默认选择:[8125] *如果没有问题请按 Enter。 1. 10s 2. 30s 3. 60s 默认选择:[1]: *如果没有问题请选择 1。 1 StatsD 守护进程收集指标的聚合间隔是多少? 1. 不聚合 2. 10 秒 3. 30 秒 4. 60 秒 默认选择: [4]:*如果您同意,请选择 4 4 是否要警告:必须安装 CollectD,否则代理将无法启动?警告:如果未安装 CollectD,代理将无法启动) 1. 是 2. 否 默认选择:[ 1]: *选择 2,因为我们只使用 cloudwatchlogs 2 您想监控任何主机指标吗?例如 CPU、内存等。 1. 是 2. 否 默认选择: [1]: *因为我们只使用 cloudwatchlogs 选择 2 2 您是否有任何现有的 CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) 配置文件可供导入以进行迁移? 是否有适用于现有 CloudWatch Log Agent 的配置文件? (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) 使用? ) 1. yes 2. no 默认选项: [2]: *cloudwatchlogs 没有配置文件,所以选择 2 2 是否要监控任何日志文件? 1 . yes 2. no 默认选项: [1]: *请选择 1,因为需要 cloudwatchlogs 配置文件 1 日志文件路径: *请输入您要指定的日志的路径 /var/log/messages 日志组名称: *输入您要指定的日志组名称 默认选择: [messages] cloudwatchlogs-test 日志流名称:*输入您要指定的日志流名称 默认选项:[{instance_id}] /var/log/ messages 日志组保留天数 1. -1 2. 1 3. 3 4 . 5 5. 7 6. 14 7. 30 8. 60 9. 90 10. 120 11. 150 12. 180 13. 365 14. 400 15. 545 16. 731 17. 1827 18. 2192 19. 2557 20. 2 922 21. 3288 22. 3653 默认选项: [1]: *请输入您要指定的日志保留期限(-1 表示无限制) 1 您要指定要监视的任何其他日志文件 1. 是 2. 否 默认值?选择: [1]: *设置 如果您不想将文件 2 保存的配置文件成功添加到 /opt/aws/amazon-cloudwatch-agent/bin/config.json 当前配置如下: { "agent。 ": { "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/messages", "log_group_name": "cloudwatchlogs-test", " log_stream_name": "/var/log/messages", "retention_in_days": -1 } ] } } }, "metrics": { "metrics_collected": { "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10 , "service_address": ":8125" } } } } 请检查配置的上述内容。配置文件也位于 /opt/aws/amazon-cloudwatch-agent/bin/config .json。如果需要,请手动编辑它。是否要将配置存储在 SSM 参数存储中? ) 1. 是 2. 否 默认选择: [1]: *如果您不需要向SSM 注册,请选择2 2 程序立即退出。
*补充材料
②-⑤:启动代理
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c 文件:/opt/aws/amazon-cloudwatch-agent/bin/config.json
②-⑥:查看代理状态
systemctl 状态 amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch 代理已加载:已加载(/etc/systemd/system/amazon-cloudwatch-agent.service;已启用;供应商预设:已禁用) 活动:自 2022 年 8 月星期五起活动(正在运行) 05 06:33:34 UTC;3 分钟 46 秒前 主要 PID:1352 (amazon-cloudwat) CGroup:/system.slice/amazon-cloudwatch-agent.service mq1352 /opt/aws/amazon-cloudwatch-agent/bin/amazon- cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -pidfile /opt/ aws... Aug 05 06:33:34 ip-172-31-39-31.ap-northeast-1.compute.internal systemd[1]:已启动 Amazon CloudWatch 代理 8 月 05 日 06:33:34 ip-172 -31-39-31.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1352]:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 不存在或无法阅读。 Aug 05 06:33:34 ip-172-31-39-31.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1352]:我! 。
③ 检查控制台是否采集到
③-①:勾选并点击cloudwatch > 日志组中指定的日志组
③-②:确认日志以指定的日志流名称保存,点击
③-③:检查日志是否正确采集
④ 创建指标过滤器
④-① 点击【创建指标过滤器】
④-②:定义过滤模式
*定义模式的方法有很多种,请参考这里
④-③:测试过滤模式,如果没有问题,点击【下一步】
*测试方法
1. 从选择要测试的日志数据中选择[自定义日志]或[日志流名称]。
2.创建与[日志事件消息]中的过滤模式匹配的日志,然后单击[测试模式]
3. 一旦测试结果反映,该过程就完成了。
④-④:填写以下信息。
● 过滤器名称:过滤器本身的名称
● 指标命名空间:CloudWatch 向其发送指标的命名空间的名称
● 指标名称:在指定命名空间下创建的指标的名称
● 指标值:将要发送的指标的名称发布为指标 数值
● 默认值:模式不匹配时发布到指标的值,如果留空则不发布任何值
④-⑤:如果没有问题,点击【创建Metric Filter】
④-⑥:创建完成,如下图
⑤ 设置SNS
⑤-①:点击SNS > 主题中的【创建主题】
⑤-②:设置以下信息,点击【创建主题】
● 类型:标准
● 名称/描述:请随意指定
⑤-③:点击【创建订阅】
⑤-④:填写以下信息,点击【创建订阅】
● 协议:电子邮件
● 端点:您的电子邮件地址
⑤-⑤:您会收到一封确认邮件,点击【确认订阅】
⑤-⑥:出现以下信息时完成
⑥ 创建CloudWatch报警
⑥-①:将包含特定字符串的日志输出到服务器上指定的日志文件中作为测试。
由于指定了 *messages,因此使用了 logger 命令,但任何可以输出日志的命令都可以。
*我们正在测试,因为如果某个指标一次都无法被指标过滤器检测到,那么您在创建警报时将无法选择该指标。
记录器“错误”
⑥-②:在CloudWatch > 报警中点击【创建报警】
⑥-③:已创建的命名空间>无量纲指标>选择已创建的指标名称,点击【选择指标】
⑥-④:设置条件,点击【下一步】
*下面的条件是,如果检测到特定字符串一次或多次,则发出警报。
⑥-⑤:指定您创建的主题,点击【下一步】
*由于是字符串监控,因此不需要恢复通知设置。
⑥-⑥:输入创建的报警名称,点击【下一步】
⑥-⑦:如果设置没有问题,点击【创建报警】
⑦ 操作确认
⑦-①:将包含特定字符串的日志输出到服务器上指定的日志文件中作为测试。
由于指定了 *messages,因此使用了 looger 命令,但任何可以输出日志的命令都可以。
记录器“错误”
⑦-②:检查报警是否处于【报警状态】
⑦-③:检查您是否收到报警邮件。
*如果警报电子邮件已发送到您的电子邮件地址,则该过程已完成。
概括
你怎么认为?我认为在指标过滤器中设置特定字符串来通知 CloudWatch Logs 收集的日志作为警报并不是那么困难。
在AWS上监控字符串时,您可以轻松使用CloudWatch,因此请尝试使用它进行操作监控!
除了电子邮件之外,通知还可以发送到 Slack、Teams 和 Chatwork。我在之前的博客中写过如何设置,有兴趣的可以看看!
非常感谢!
◇ 我尝试将 CloudWatch 警报通知给 Teams/Chatwork!
◇ 使用 AWS 聊天机器人将 CloudWatch 警报通知到 Slack!