amazon-web-services - 如何在 Docker AWS 日志驱动程序的 docker run 命令中添加 file_fingerprint_lines 选项作为 --log-opt 选项
问题描述
我在 CoreOS AWS 实例上运行我的 docker 容器,并为 docker 容器启用了 aws 日志驱动程序。下面给出的是我的 docker 容器运行命令。
docker run --log-driver=awslogs --log-opt awslogs-region=ap-southeast-1 --log-opt awslogs-group=stagingUrlMapperLogs --log-opt awslogs-datetime-format='\[%%b %%d, %%Y %%H:%%M:%%S\]' --log-opt tag="{{.Name}}/{{.ID}}" --net=host --name url-mapper url-mapper-example:latest
问题是在 AWS CloudWatch 端的某个随机时间段(1-2 天)之后,没有记录新的日志事件。在做了一些研究之后,我在 AWS 开发者论坛上发现了这个问题。它说在 CloudWatch 配置中添加file_fingerprint_lines选项将解决该问题。但是我没有找到任何资源来解释如何使用 docker run 命令设置 file_fingerprint_lines 命令。
注意 - 我在 AWS autosacaling 组中运行我的服务器,该组连接到启动配置,所以每次我扩大规模时,新服务器都会随着容器在其上运行而启动。
解决方案
“但我没有找到任何资源来解释如何使用 docker run 命令设置 file_fingerprint_lines 命令。”
我认为您必须在 CloudWatch Logs 代理配置文件中进行设置:
file_fingerprint_lines
指定用于标识文件的行范围。有效值为一个数字或两个用短划线分隔的数字,例如“1”、“2-5”。默认值为'1',因此第一行用于计算指纹。指纹行不会发送到 CloudWatch Logs,除非所有指定行都可用
但是,我认为有趣的一点就在这里:
支持哪些类型的文件轮换?
支持以下文件轮换机制:
使用数字后缀重命名现有日志文件,然后重新创建原始的空日志文件。例如,/var/log/syslog.log 被重命名为 /var/log/syslog.log.1。如果 /var/log/syslog.log.1 在之前的轮换中已经存在,则将其重命名为 /var/log/syslog.log.2。
创建副本后在原地截断原始日志文件。例如,/var/log/syslog.log 被复制到 /var/log/syslog.log.1 并且 /var/log/syslog.log 被截断。这种情况下可能会丢失数据,因此在使用这种文件轮换机制时要小心。
创建一个与旧文件具有共同模式的新文件。例如,保留 /var/log/syslog.log.2014-01-01 并创建 /var/log/syslog.log.2014-01-02。
文件的指纹(源 ID)是通过对日志流密钥和文件内容的第一行进行散列计算得出的。要覆盖此行为,可以使用file_fingerprint_lines选项。当文件轮换发生时,新文件应该有新内容,旧文件不应该附加内容;代理在完成读取旧文件后推送新文件。
并且,如何覆盖它:
您可以有多个 [logstream] 部分,但每个部分必须在配置文件中具有唯一名称,例如 [logstream1]、[logstream2] 等。[logstream] 值与日志文件中的第一行数据一起定义了日志文件的标识。
[general]
state_file = value
logging_config_file = value
use_gzip_http_content_encoding = [true | false]
[logstream1]
log_group_name = value
log_stream_name = value
datetime_format = value
time_zone = [LOCAL|UTC]
file = value
file_fingerprint_lines = integer | integer-integer
multi_line_start_pattern = regex | {datetime_format}
initial_position = [start_of_file | end_of_file]
encoding = [ascii|utf_8|..]
buffer_duration = integer
batch_count = integer
batch_size = integer
[logstream2]
...
推荐阅读
- django - 我应该在哪里处理诸如触发 django rest 框架中的通知之类的事情
- javascript - 我需要做一个倒计时
- c - 如何迭代这个 sin 方程?
- perl - 在 Perl 中写入文件时测试错误处理的最简单方法是什么?
- vb.net - 从字符串转换为日期的日期格式是什么
- python - 最新错误 = AttributeError: 'str' 对象没有属性 'write'
- excel - 如何在一个“子”功能中跨多个工作表执行操作
- javascript - 调用函数以在 Vanilla JavaScript 中播放音频文件时如何更改可变音频文件值?
- python - 如何遍历网站上的 .txt 文件链接、抓取并存储在一个可延展的 csv/excel 文件中
- javascript - 将新数据从 Node REST API 推送到 React-Native