本來沒有特別使用 CloudWatch 的習慣
不過應用程式放在 VM 裡,如果不控管的話,Log 總有一天會把 VM 硬碟塞爆
而如果去設定控制大小,則又會有關鍵 Log 可能被洗掉的問題。
剛好最近寫不少 AWS Lambda 的程式,覺得 Log 丟去 CloudWatch 其實也還蠻方便的 XD
就找了一下該怎麼做這件事。
關鍵字搜尋,可以找到好幾個 Logback 的擴充套件
目前實驗的是以 [1] 來測試的,選擇的原因…..其實也沒什麼特別的原因 XD
它是 fork 另一個專案 [2] 來的,然後 [2] 看起來星星稍多一點,但好像蠻久沒更新了
所以就用 [1] 看看,而且 [1] 也有上 Maven Central,用起來方便些。
Maven 設定
要使用 [1] 的擴充套件,首先要先自行引用相關的套件
<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 作為輸出標的。
<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 的權限。
沒有留言:
張貼留言