?
This document uses PHP Chinese website manual Release
awslogs
日志驅(qū)動程序發(fā)送集裝箱日志亞馬遜 CloudWatch 的日志??梢酝ㄟ^ AWS 管理控制臺或 AWS 開發(fā)工具包和命令行工具檢索日志條目。
要將awslogs
驅(qū)動程序用作默認日志記錄驅(qū)動程序,請將log-driver
和log-opt
鍵設(shè)置為daemon.json
位于 Linux 主機/etc/docker/
或 Windows Server 上C:\ProgramData\docker\config\daemon.json
的文件中的適當(dāng)值。有關(guān)使用Docker 配置的更多信息daemon.json
,請參閱 daemon.json 。以下示例將日志驅(qū)動程序awslogs
設(shè)置為并設(shè)置該awslogs-region
選項。
{ "log-driver": "awslogs", "log-opts": { "awslogs-region": "us-east-1" }}
重新啟動 Docker 以使更改生效。
您可以使用以下--log-driver
選項來設(shè)置特定容器的日志記錄驅(qū)動程序docker run
:
docker run --log-driver=awslogs ...
您可以添加日志記錄選項以daemon.json
設(shè)置 Docker 范圍的默認值,或者在啟動容器時使用--log-opt NAME=VALUE
標(biāo)志指定 Amazon CloudWatch Logs 日志記錄驅(qū)動程序選項。
awslogs
日志驅(qū)動程序發(fā)送您的 Docke 日志的特定區(qū)域。使用awslogs-region
日志選項或AWS_REGION
環(huán)境變量來設(shè)置區(qū)域。默認情況下,如果Docker守護進程在 EC2 實例上運行,并且沒有設(shè)置區(qū)域,則驅(qū)動程序使用實例的區(qū)域。
docker run --log-driver=awslogs --log-opt awslogs-region=us-east-1 ...
您必須指定一個日志組為awslogs
日志驅(qū)動程序。您可以使用awslogs-group
日志選項指定日志組:
docker run --log-driver=awslogs --log-opt awslogs-region=us-east-1 --log-opt awslogs-group=myLogGroup ...
要配置應(yīng)該使用哪個日志流,您可以指定awslogs-stream
日志選項。如果未指定,則將容器標(biāo)識 ID 用作日志流。
注意:給定日志組內(nèi)的日志流一次只能由一個容器使用。同時為多個容器使用相同的日志流可能會導(dǎo)致日志記錄性能下降。
如果日志組不存在,日志驅(qū)動程序?qū)⒛J返回錯誤。但是,您可以將根據(jù)awslogs-create-group
需要設(shè)置true
為自動創(chuàng)建日志組。awslogs-create-group
選項默認為false
。
$ docker run --log-driver=awslogs \ --log-opt awslogs-region=us-east-1 \ --log-opt awslogs-group=myLogGroup \ --log-opt awslogs-create-group=true \ ...
注意:在嘗試使用
awslogs-create-group
之前,您的 AWS IAM 策略必須包含logs:CreateLogGroup
權(quán)限。
awslogs-datetime-format
選項定義了Python strftime
格式的多行起始模式。日志消息由與模式匹配的行和與模式不匹配的任何后續(xù)行組成。因此匹配的行是日志消息之間的分隔符。
使用此格式的用例的一個示例是解析輸出,如堆棧轉(zhuǎn)儲,否則可能會記錄在多個條目中。正確的模式允許它在一個條目中被捕獲。
如果awslogs-datetime-format
和awslogs-multiline-pattern
兩者都配置,則此選項始終優(yōu)先。
注意:多行日志記錄會執(zhí)行所有日志消息的正則表達式解析和匹配,這可能會對日志記錄性能產(chǎn)生負面影響。
考慮以下日志流,其中新的日志消息以時間戳開始:
[May 01, 2017 19:00:01] A message was logged[May 01, 2017 19:00:04] Another multiline message was logged Some random messagewith some random words[May 01, 2017 19:01:32] Another message was logged
格式可以表達為一個strftime
表達式[%b %d, %Y %H:%M:%S]
,并且awslogs-datetime-format
可以將該值設(shè)置為該表達式:
$ docker run --log-driver=awslogs \ --log-opt awslogs-region=us-east-1 \ --log-opt awslogs-group=myLogGroup \ --log-opt awslogs-datetime-format='[%b %d, %Y %H:%M:%S]' \ ...
這會將日志解析到以下 CloudWatch 日志事件中:
# First event[May 01, 2017 19:00:01] A message was logged # Second event[May 01, 2017 19:00:04] Another multiline message was logged Some random messagewith some random words # Third event[May 01, 2017 19:01:32] Another message was logged
支持以下strftime
代碼:
代碼 | 含義 | 示例 |
---|---|---|
%a | 平日縮寫名稱。 | Mon |
%A | 平日全名。 | Monday |
%w | 平日為十進制數(shù)字,其中0表示星期日,6表示星期六。 | 0 |
%d | 一個月中的一天作為零填充的十進制數(shù)字。 | 08 |
%b | 月縮寫名稱。 | Feb |
%B | 月份全名。 | February |
%M | 月份作為零填充十進制數(shù)字。 | 02 |
%Y | 世紀作為十進制數(shù)字。 | 2008 |
%y | 沒有世紀的一年是一個零填充的十進制數(shù)。 | 08 |
%H | 小時(24小時制)作為零填充十進制數(shù)字。 | 19 |
%I | 小時(12小時制)作為零填充的十進制數(shù)字。 | 07 |
%p | 上午或下午。 | AM |
%M | 分鐘作為零填充的十進制數(shù)字。 | 57 |
%S | 其次作為零填充十進制數(shù)。 | 04 |
%L | 毫秒為零填充的十進制數(shù)字。 | 123 |
%f | 微秒作為零填充的十進制數(shù)字。 | 000345 |
%z | UTC偏移量格式為+ HHMM或-HHMM。 | +1300 |
%Z | 時區(qū)名稱。 | PST |
%j | 一年中的一天為零填充的十進制數(shù)字。 | 363 |
awslogs-multiline-pattern
選項使用正則表達式定義多行開始模式。日志消息由與模式匹配的行和與模式不匹配的任何后續(xù)行組成。因此匹配的行是日志消息之間的分隔符。
如果awslogs-datetime-format
還配置了此選項,則忽略此選項。
注意:多行日志記錄對所有日志消息執(zhí)行正則表達式解析和匹配。這可能會對記錄性能產(chǎn)生負面影響。
例如,要處理以下日志流,新的日志消息從模式開始INFO
*
考慮以下日志流,其中每條日志消息應(yīng)以 pattherINFO
開頭:
INFO A message was logged INFO Another multiline message was logged Some random message INFO Another message was logged
你可以使用^INFO
正則表達式:
$ docker run --log-driver=awslogs \ --log-opt awslogs-region=us-east-1 \ --log-opt awslogs-group=myLogGroup \ --log-opt awslogs-multiline-pattern='^INFO' \ ...
這會將日志解析到以下 CloudWatch 日志事件中:
# First event INFO A message was logged # Second event INFO Another multiline message was logged Some random message # Third event INFO Another message was logged
指定tag
為選項的替代awslogs-stream
選項。tag
解釋模板標(biāo)記(例如{{.ID}}
,{{.FullID}}
或{{.Name}}
docker.{{.ID}}
)。有關(guān)所有支持的模板替換的詳細信息,請參閱標(biāo)記選項文檔。
當(dāng)兩個awslogs-stream
和tag
被指定,提供的awslogs-stream
值將覆蓋與指定的tag
模板。
如果未指定,則將容器標(biāo)識 ID 用作日志流。
注意:CloudWatch 日志 API 不支持
:
日志名稱。這可能會導(dǎo)致一些問題時使用{{ .ImageName }}
作為標(biāo)記,因為泊塢窗圖像具有格式IMAGE:TAG
,如alpine:latest
。模板標(biāo)記可用于獲取正確的格式。要獲取圖像名稱和容器ID的前12個字符,可以使用:--log-opt tag='{{ with split .ImageName ":" }}{{join . "_"}}{{end}}-{{.ID}}'
輸出結(jié)果如下所示:alpine_latest-bf0072049c76
您必須向 Docker 守護程序(daemon)提供 AWS 憑證才能使用awslogs
日志記錄驅(qū)動程序。您可以提供這些憑證用AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
以及AWS_SESSION_TOKEN
環(huán)境變量,默認的 AWS 共享的憑證文件(~/.aws/credentials
根用戶),或(如果正在運行在 Amazon EC2 實例泊塢窗守護進程)的 Amazon EC2 實例配置文件。
憑證必須應(yīng)用允許logs:CreateLogStream
和logs:PutLogEvents
采取的操作,如以下示例所示。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "*" } ]}