AWS 使用 CloudWatch Logs 收集日志

AWS

很多時(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è)惶桐。

如果更喜歡官方文檔撮弧,請參考 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)
# 如果無法匹配目標(biāo)事件則以最近一次成功為準(zhǔn)想虎,沒有最近一次成功則使用當(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í)間格式來匹配
# 默認(rèn)為 ^[^\s] 即行開頭非空則認(rèn)為是新的日志
multi_line_start_pattern = <regex> | {datetime_format}
# 當(dāng)日志源沒有被記錄的收集狀態(tài)時(shí)舌厨,從何處開始
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í)間格式

下面列出了常見 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è)置的縮寫名稱形式。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ù)护侮。具體請參考 檢索動(dòng)態(tài)數(shù)據(jù)檢索實(shí)例元數(shù)據(jù)敌完。

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

問題排查

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

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

日志過期時(shí)間

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

日志篩選指標(biāo)

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

日志處理

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剔宪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葱绒,老刑警劉巖感帅,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哈街,居然都是意外死亡留瞳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門骚秦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來她倘,“玉大人,你說我怎么就攤上這事作箍∮擦海” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胞得,是天一觀的道長荧止。 經(jīng)常有香客問我,道長阶剑,這世上最難降的妖魔是什么跃巡? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮牧愁,結(jié)果婚禮上素邪,老公的妹妹穿的比我還像新娘。我一直安慰自己猪半,他們只是感情好兔朦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磨确,像睡著了一般沽甥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乏奥,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天摆舟,我揣著相機(jī)與錄音,去河邊找鬼邓了。 笑死盏檐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驶悟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼材失,長吁一口氣:“原來是場噩夢啊……” “哼痕鳍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤笼呆,失蹤者是張志新(化名)和其女友劉穎熊响,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诗赌,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汗茄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铭若。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洪碳。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叼屠,靈堂內(nèi)的尸體忽然破棺而出瞳腌,到底是詐尸還是另有隱情,我是刑警寧澤镜雨,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布嫂侍,位于F島的核電站,受9級(jí)特大地震影響荚坞,放射性物質(zhì)發(fā)生泄漏挑宠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一颓影、第九天 我趴在偏房一處隱蔽的房頂上張望各淀。 院中可真熱鬧,春花似錦瞭空、人聲如沸揪阿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽南捂。三九已至,卻和暖如春旧找,著一層夾襖步出監(jiān)牢的瞬間溺健,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工钮蛛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞭缭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓魏颓,卻偏偏與公主長得像岭辣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子甸饱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理沦童,服務(wù)發(fā)現(xiàn)仑濒,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評(píng)論 6 342
  • httpd相關(guān): httpd程序版本: 偷遗。1.3 停止維護(hù) 墩瞳。2.0 。 2.2 event為測試使用 氏豌。 2.4...
    ckhzw閱讀 395評(píng)論 0 0
  • https://aws.amazon.com/cn/s3/faqs/#sia_anchor Amazon Simp...
    守望者_(dá)1065閱讀 8,253評(píng)論 0 5
  • 你亦如燈火 伴我遠(yuǎn)行 你亦如明月 給我希望
    兵臨城下_閱讀 140評(píng)論 0 0