溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

AWS怎么使用CloudWatch Logs收集日志

發(fā)布時(shí)間:2021-11-10 17:27:18 來(lái)源:億速云 閱讀:631 作者:柒染 欄目:云計(jì)算

本篇文章為大家展示了AWS怎么使用CloudWatch Logs收集日志,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

很多時(shí)候,我們希望集中收集各服務(wù)器日志統(tǒng)一查看、報(bào)警。AWS 給我們提供了這種服務(wù),叫 CloudWatch Logs。

我們需要在目標(biāo)機(jī)器安裝 CloudWatch Logs Agent 程序,以收集和報(bào)告日志。

角色

使用 AWS 服務(wù)第一件需要做的事情就是配置權(quán)限,這也不例外。有兩種方式。

一是給目標(biāo)實(shí)例的 IAM 角色允許這些權(quán)限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}

二是在下文所述的 awscli.conf 文件里配置允許了這些權(quán)限的角色 access-key 和 secret-key。

[default]
region = ${REGION}
aws_access_key_id = ${ACCESS_KEY}
aws_secret_access_key = ${SECRET_KEY}

代理程序

awslogs 代理程序提供一種自動(dòng)化的方法將日志數(shù)據(jù)發(fā)送到 CloudWatch Logs。該代理包括以下組件:

  1. 一個(gè)將日志數(shù)據(jù)推送到 CloudWatch Logs 的 AWS CLI 插件。

  2. 一個(gè)運(yùn)行 CloudWatch Logs aws logs push 命令以將數(shù)據(jù)發(fā)送到 CloudWatch Logs 的腳本(守護(hù)程序)。

  3. 一個(gè)確保該守護(hù)程序始終運(yùn)行的 cron 作業(yè)。

如果更喜歡官方文檔,請(qǐng)參考 CloudWatch Logs 代理參考。

awscli.conf 配置
[plugins]
cwlogs = cwlogs

[default]
region = ${REGION}
aws_access_key_id = ${ACCESS_KEY}
aws_secret_access_key = ${SECRET_KEY}
awslogs.conf 配置
[general]
# 狀態(tài)文件路徑
# 該文件用于記錄當(dāng)前日志上傳的狀態(tài)
state_file = <value>
# 自定義的 Python Logging Config 格式文件路徑
# 可選
logging_config_file = <value>
# 啟用 GZIP 壓縮
use_gzip_http_content_encoding = [true | false]

[logstream1]
# 日志組名稱
log_group_name = <value>
# 日志流名稱
# 可用的預(yù)定義變量:{instance_id} {hostname} {ip_address}
log_stream_name = <value>
# 時(shí)間格式,日志的記錄時(shí)間以該時(shí)間為準(zhǔn)
# 如果無(wú)法匹配目標(biāo)事件則以最近一次成功為準(zhǔn),沒(méi)有最近一次成功則使用當(dāng)前時(shí)間
datetime_format = <value>
# 如果不能從時(shí)間格式獲取時(shí)區(qū),則指定時(shí)區(qū)
time_zone = [LOCAL|UTC]
# 待收集的日志源
file = <value>
# 以前幾行計(jì)算識(shí)別碼
file_fingerprint_lines = <integer> | <integer-integer>
# 日志行的匹配模式,匹配該模式則認(rèn)為上一條日志已結(jié)束
# 指定為 {datetime_format} 則以時(shí)間格式來(lái)匹配
# 默認(rèn)為 ^[^\s] 即行開(kāi)頭非空則認(rèn)為是新的日志
multi_line_start_pattern = <regex> | {datetime_format}
# 當(dāng)日志源沒(méi)有被記錄的收集狀態(tài)時(shí),從何處開(kāi)始
initial_position = [start_of_file|end_of_file]
# 文件編碼
encoding = [ascii|utf_8|..]
# 批量處理的時(shí)間段(單位:ms)
buffer_duration = <integer>
# 批量處理的最大條目
batch_count = <integer>
# 批量處理的最大大小(單位:字節(jié))
batch_size = <integer>

[logstream2]
...
時(shí)間格式

下面列出了常見(jiàn) datetime_format 代碼。您也可以使用 Python datetime.strptime() 支持的所有 datetime_format 代碼。時(shí)區(qū)偏移量 (%z) 也受支持,[+-]HHMM,不帶冒號(hào) (:)。

%y:年份,以零填充的十進(jìn)制數(shù)字表示,不包括代表世紀(jì)的數(shù)字。00, 01, ..., 99

%Y:年份,以十進(jìn)制數(shù)字形式表示且包括表示世紀(jì)的數(shù)字。如 1970、1988、2001、2013

%b:月份,使用區(qū)域設(shè)置的縮寫(xiě)名稱形式。Jan、Feb...Dec (en_US);

%B:月份,使用區(qū)域設(shè)置的完整名稱形式。January,F(xiàn)ebruary...December (en_US);

%m:月份,使用以零填充的十進(jìn)制數(shù)字形式。01, 02, ..., 12

%d:月份中的日期,使用以零填充的十進(jìn)制數(shù)字形式。01, 02, ..., 31

%H:小時(shí)(24 小時(shí)制),使用以零填充的十進(jìn)制數(shù)字形式。00, 01, ..., 23

%I:小時(shí)(12 小時(shí)制),使用以零填充的十進(jìn)制數(shù)字形式。01, 02, ..., 12

%p:區(qū)域設(shè)置中等效于 AM 或 PM 的表示形式。

%M:分鐘,使用以零填充的十進(jìn)制數(shù)字形式。00, 01, ..., 59

%S:秒,使用以零填充的十進(jìn)制數(shù)字形式。00, 01, ..., 59

%f:微秒,在左邊使用以零填充的十進(jìn)制數(shù)字形式。000000, ..., 999999

%z:使用 +HHMM 或 -HHMM 形式的 UTC 偏移量。+0000, -0400, +1030

樣例

比如可配置為:

[general]
state_file = /var/lib/awslogs/agent-state
use_gzip_http_content_encoding = true

[app]
log_group_name = /aws/ec2/app
log_stream_name = staging-{hostname}
datetime_format = %Y-%m-%d %H:%M:%S
multi_line_start_pattern = {datetime_format}
time_zone = UTC
encoding = utf_8
buffer_duration = 5000
file = /app/logs/app-*.log
initial_position = start_of_file
Amazon Linux

Amazon Linux 自帶 awslogs 源。

function install_awslogs() {
    yum install -q -y awslogs && chkconfig awslogs on
    service awslogs start
}

service awslogs status || (service awslogs start || install_awslogs)

代理程序的配置默認(rèn)在 /etc/awslogs/,可能有以下幾個(gè)文件:

  • awscli.conf 基本配置

  • awslogs.conf 日志配置(必須)

  • proxy.conf 網(wǎng)絡(luò)代理配置

注意,在其他 Linux 上 awslogs 的安裝方式和配置路徑與此不同。

Ubuntu Server、CentOS、Red Hat
REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\\\" '{print $4}')

function install_awslogs() {
    curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
    python ./awslogs-agent-setup.py --region ${REGION} -c s3://bucket/config-file-key
}
service awslogs status || (service awslogs start || install_awslogs)

獲取地區(qū)值時(shí)我們使用了實(shí)例的動(dòng)態(tài)數(shù)據(jù)。具體請(qǐng)參考 檢索動(dòng)態(tài)數(shù)據(jù) 和 檢索實(shí)例元數(shù)據(jù)。

當(dāng)然,在非 Amazon Linux 上通過(guò)“用戶數(shù)據(jù)”做啟動(dòng)腳本,需要確認(rèn)目標(biāo) AMI 裝有 cloud-init,如果需要使用 aws-cli 也需要確認(rèn)。

問(wèn)題排查

通過(guò) service awslogs status 檢查代理程序是否在運(yùn)行。如果出現(xiàn)異常,代理程序的日志保存在文件 /var/log/awslogs.log,檢查該文件以獲知是否存在錯(cuò)誤。

你也可以通過(guò) service awslogs start 啟動(dòng)、service awslogs restart 重啟、service awslogs stop 停止。在修改配置文件后記得重啟服務(wù)。

日志過(guò)期時(shí)間

可以在 AWS 控制臺(tái)設(shè)置日志組的事件過(guò)期時(shí)間。

日志篩選指標(biāo)

通過(guò)添加指標(biāo),可以監(jiān)控符合給定模式的日志數(shù),如提供篩選模式 "[WARN]" 得到警告級(jí)別的日志。具體請(qǐng)參考 篩選器和模式語(yǔ)法。

日志處理

使用訂閱機(jī)制實(shí)時(shí)處理日志數(shù)據(jù)

批量導(dǎo)出日志數(shù)據(jù)到 S3

上述內(nèi)容就是AWS怎么使用CloudWatch Logs收集日志,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI