1、能否批量收集实例的日志bing
答: 可以通过SSM来达到批量的目的。
① 可以使用SSM对实例批量安装Cloudwatch agent(如果已经安装了agent,跳转到第二步)
② 将已准备好的 agent 的 json 配置文件( 定义需要批量收集的日志 )定义在SSM的参数仓库中
③ Run Command,选择”AmazonCloudwatch-ManageAgent”,Parameters 的“Configure Location”中输入刚才保存的json配置文件的名字,目标选择要批量部署的机器
2、agent的json配置文件
配置文件示例:
"logs":{ "force_flush_interval":300, "logs_collected":{ "files":{ "collect_list":[ { "file_path":"/var/log/**.log", "log_group_name":"SysLogs-Linux-Message", "log_stream_name":"{instance_id}", "timezone":"Local" } ] } } }
① cloudwatch agent 推送到日志组的日志的保留时间能在 json 配置文件中定义吗?
答:不能通过json配置文件来定义,没有这个字段,只能通过控制台来设置日志的保留时间,默认是永久。
② 实例上某个路径下有多个应用的日志文件,现在如果使用通配符进行模糊匹配,或者尽量减少配置行的具体操作?
答:
a、如果在 file_path 中使用了通配符定义模糊匹配,将会匹配到该路径下的多个日志文件,而一个 file_path 只能对应一个log_stream_name,也就是说如果使用了通配符,只能将多个日志文件放到一个日志流当中,显示的方式是一个日志文件显示完之后才会显示下一个日志文件(即一个日志文件对应多行)
b、不存在 file_path 使用了通配符,而又可以每个日志文件都对应一个日志流,因为 json 配置文件的 collect_list 本身是一个类似列表的形式,在 collect_list 中,可以定义多个要收集的日志项,而每一个要收集的日志项都是一对一对应、多对一对应的关系,不存在多对多的形式
③ cloudwatch agent 推送日志到cloudwatch 日志组,再从日志组导出到S3存储桶,从日志组导出到S3桶的这个过程能否实现自动化?
答:要是想实现自动化有2种方式:
a、lambda
Cloudwatch支持使用订阅的方式从 CloudWatch Logs 中访问日志事件的实时源,并将其传输到Lambda
但如果触发Lambda仅仅用来写日志到s3,一个log event触发一次lambda函数,lambda调用数量会很多.可能会产生较高的使用
” lambda调用数量会很多.可能会产生较高的使用 “ 这就意味着每次检测到日志上传都会触发lambda
如果上传的多自然就会有很多触发操作 造成收费
b、cli 定时调用(此方案较推荐)
实例运行脚本,定时执行
但是也有个缺陷,当机器故障重启、被关机的时间刚好与定时时间重叠的时候,就不能达到目的了。