本來沒有特別使用 CloudWatch 的習慣
不過應用程式放在 VM 裡,如果不控管的話,Log 總有一天會把 VM 硬碟塞爆
而如果去設定控制大小,則又會有關鍵 Log 可能被洗掉的問題。
剛好最近寫不少 AWS Lambda 的程式,覺得 Log 丟去 CloudWatch 其實也還蠻方便的 XD
就找了一下該怎麼做這件事。
關鍵字搜尋,可以找到好幾個 Logback 的擴充套件
目前實驗的是以 [1] 來測試的,選擇的原因…..其實也沒什麼特別的原因 XD
它是 fork 另一個專案 [2] 來的,然後 [2] 看起來星星稍多一點,但好像蠻久沒更新了
所以就用 [1] 看看,而且 [1] 也有上 Maven Central,用起來方便些。
Maven 設定
要使用 [1] 的擴充套件,首先要先自行引用相關的套件
1 2 3 4 5 |
< dependency > < groupId >co.wrisk.logback</ groupId > < artifactId >logback-ext-cloudwatch-appender</ artifactId > < version >1.0.9</ version > </ dependency > |
其中 1.0.9 版是目前 [1] 的 tag 顯示的最新版。
Logback 設定
接著就要設定 Logback 的設定檔,讓它使用 CloudWatch 作為輸出標的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
< configuration > < appender name = "CLOUDWATCH" class = "org.eluder.logback.ext.cloudwatch.appender.CloudWatchAppender" > < region >us-west-2</ region > < logGroup >/my-app/loggroup</ logGroup > < logStream >logs</ logStream > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < Pattern >%logger{36} | %msg%n</ Pattern > </ encoder > </ appender > < logger name = "org.apache.http" level = "INFO" additivity = "false" /> < logger name = "com.amazonaws" level = "INFO" additivity = "false" /> <!-- Set the default logging level to "ALL" level for loggers which are not specified. --> < root level = "ALL" > < appender-ref ref = "CLOUDWATCH" /> </ root > </ configuration > |
這裡假設在 CloudWatch 上,Log Group 的名字是 /my-app/loggroup,並且 Log Stream 名字是 logs
然後沒有特別設定 AWS 的 Access Key 和 Access Secret,因為程式預期會直接在 EC2 上執行
因此預設要它自己讀取 EC2 的 Role。
如果需要手動設定的話,可以額外給 accessKey 和 secretKey 這兩個屬性(放在跟 logGroup 同層)。
然後~就沒有然後了,可以直接執行程式看看狀況如何。
另外需要稍微注意的是,Logback 至少需要是 1.2.x 版。
然後如果像我一樣要讓它讀取 EC2 的 Role,EC2 的 Role 需要有能夠存取 CloudWatch 的權限。
沒有留言:
張貼留言