AWS Cloudwatch logs 小笔记

AWS Cloudwatch logs 小笔记

Scroll Down

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 定时调用(此方案较推荐)

实例运行脚本,定时执行

但是也有个缺陷,当机器故障重启、被关机的时间刚好与定时时间重叠的时候,就不能达到目的了。