huh*_*ere 5 logging centos amazon-web-services amazon-cloudwatch
我是CentOS的新手,想知道将日志日志解析为CloudWatch Logs的最佳方法.
我到目前为止的思维过程是:
使用FIFO解析日志日志并将其摄取到Cloudwatch日志, - 看起来这可能带有缺点,如果我们达到缓冲限制,可以删除日志.
将日志日志转发到syslog并将syslogs发送到Cloudwatch日志 -
这个想法本质上是将所有日志记录为JSON,然后将其转发到CloudWatch Logs.
做这个的最好方式是什么?其他人如何解决这个问题?
看看https://github.com/advantageous/systemd-cloud-watch
我们遇到了journald-cloudwatch-logs的问题.它根本不适用于我们.
它不会限制它发送到CloudWatch的消息或commandLine的大小,并且CloudWatch会发回一个错误,即journald-cloudwatch-logs无法处理的错误导致它不同步.
systemd-cloud-watch是无状态的,它要求CloudWatch停止运行.
如果缺少,systemd-cloud-watch也会创建日志组.
systemd-cloud-watch还使用名称标签和私有IP地址,以便您可以轻松找到所需的日志.
我们还包含一个打包文件,向您展示如何使用EC2/Centos/Systemd构建和配置systemd-cloud-watch图像.毫无疑问如何配置systemd因为我们有一个工作示例.
请看看Matin Atkins的https://github.com/saymedia/journald-cloudwatch-logs.
这个开源项目创建了一个完全符合您需要的二进制文件 - 将您的(systemd)日志日志发送到AWS CloudWatch Logs.
该项目依赖于libsystemd直接转发到CloudWatch.它不依赖于转发到syslog.这是一件好事.
该项目似乎使用golang的并发通道来读取日志和批量写入.
Vector可用于将日志从日志传送到 AWS CloudWatch Logs。
Journald可以用作源,AWS Cloudwatch Logs可以用作接收器。
我正在努力将其与大约 6 个 EC2 实例的现有部署集成,这些实例每天生成大约 30 GB 的日志。在我们在生产中使用 Vector 几周后,我将用任何警告或陷阱来更新这个答案。
编辑 2020 年 8 月 17 日
有几点需要注意。PutLogEvents 的匹配批量大小为 1MB,每个流每秒最多有 5 个请求。 请参阅此处的限制。。
为了帮助解决这个问题,在我的设置中,每个日志单元都有自己的日志流。另外,矢量日志接收器包含很多字段,我使用矢量变换来删除所有不需要的字段。但是,我仍然遇到速率限制。
编辑 2020 年 10 月 6 日
我现在正在生产中运行它。我必须将我使用的向量版本从 0.8.1 更新到 0.10.0,以解决向量不遵守 AWS CloudWatch 日志每批最大字节数要求的问题。至于我遇到的速率限制问题,事实证明我没有遇到任何问题。我在矢量日志中收到此消息tower_limit::rate::service: rate limit exceeded, disabling service。这实际上意味着向量暂时暂停发送日志以遵守接收器的速率限制。此外,每个 Cloudwatch 日志流每小时最多可消耗 18 GB,这对于我在 6 个虚拟机上提供 30 多种不同服务每天 30 GB 的需求来说已经足够了。
我确实遇到的一个问题是导致我们的主要 API 服务的 CPU 峰值。我为每个服务单位都有一个来源来跟踪日志日志。我相信这在某种程度上阻止了我们的 API 无法写入日志(尽管不是 100%)。我所做的是拥有一个源并指定要遵循的多个单元,因此只有一个命令跟踪日志,并且我增加了批处理大小,因为每个服务都会生成大量日志。然后,我使用向量的模板语法根据服务名称拆分日志组和日志流。下面是一个配置示例:
[sources.journald_logs]
type = "journald"
units = ["api", "sshd", "vector", "review", "other-service"]
batch_size = 100
[sinks.cloud_watch_logs]
type = "aws_cloudwatch_logs"
inputs = ["journald_logs"]
group_name = "/production/{{host}}/{{_SYSTEMD_UNIT}}"
healthcheck = true
region = "${region}"
stream_name = "{{_SYSTEMD_UNIT}}"
encoding = "json"
Run Code Online (Sandbox Code Playgroud)
我还有最后一个问题需要解决,但与这个问题无关。我正在使用 nginx 的文件源,因为它写入访问日志文件。Vector 消耗了该计算机上 80% 的 CPU 来获取日志并将其发送到 AWS CloudWatch。Filebeat 也在同一机器上运行,将日志发送到 Logstash,但它从未引起任何问题。一旦我们让矢量可靠地工作,我们将淘汰 Elastic Stack,但现在我们让它们并排运行。
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |