使用 Loggly 監控 Java 應用程式日誌
1. 概述
在本教程中,我們將逐步介紹為使用各種日誌記錄庫的 Java 應用程式配置SolarWinds Loggly (一種基於雲端的日誌管理工具)的步驟。我們還將了解如何在 Loggly 中整合日誌以簡化監控和分析。
2.Loggly簡介
讓我們考慮一個運行多個分散式、高度可用的關鍵應用程式的業務服務。由分佈在私有雲和公有雲中的微服務叢集組成的應用程式很常見。
由於設定如此具有挑戰性,集中所有這些系統產生的日誌至關重要。此外,從多個來源取得日誌並在整合後執行分析,可以為開發人員和支援人員提供有價值的可操作的見解。此外,它還配備了豐富、易於使用且可自訂的視覺化儀表板。因此,它將幫助他們有效地排除故障和解決問題並滿足 SLA。
Loggly 是 Solarwinds 推出的基於雲端的 SaaS 日誌管理工具,提供許多功能:
3.前提條件
我們首先建立一個30 天免費試用 Loggly 帳戶。建立帳戶後,我們可以透過 URL https://www.<<account name>>.loggly.com.
例如,在本教學中,我們建立了一個免費的https://www.baeldung.loggly.com
帳號:
此入口網站使用者友好,可無縫指導不同日誌來源的設定流程:
此外,還有一個精靈可用於指導為不同環境設定日誌來源:
讓我們按照精靈中的步驟繼續進行設定程序。
Log4j 2 和 Logback 函式庫支援透過 HTTPS 傳送日誌事件。但是,對於 Log4j,在某些情況下,我們可能需要在系統上執行一個實用程式來將日誌轉送至 Loggly。在 Linux 中,rsyslog 實用程式可以發揮此作用。因此,我們首先設定 syslog 守護程式:
首先,我們執行curl
命令來下載configure-linux.sh
腳本文件,然後透過從Loggly控制台複製命令來運行它:
稍後,我們取消註解/etc/rsyslog.conf
檔案中的一些配置,以在連接埠514
上啟用透過 UDP 的日誌傳輸:
然後,我們重新啟動 rsyslog 以套用設定變更:
最後,將應用程式日誌傳送到 Loggly 的最簡單、最通用的方法是在託管伺服器上設定檔案監視監控作業。在 Linux 伺服器上, Syslog 守護程式可以幫助實現這一點。而在 Windows 伺服器上,我們可以透過設定Nxlog來做到這一點。
此外,我們可以透過執行logger
實用程式將測試事件推送到 Loggly 來驗證設定:
最後,我們透過登入 Loggly 控制台來搜尋事件:
通常,日誌事件會立即出現在 Loggly 上。但是,根據網路頻寬和 Loggly 伺服器上的負載,可能會出現延遲。
4. Loggly 使用 Log4j 庫的應用程式
在開始討論這個主題之前,我們必須注意 Log4j 1 已被報告有嚴重漏洞,因此最好避免它。
首先,我們首先輸入Maven 依賴項,以將 Loggly syslog 附加程式新增至 Log4j Java 應用程式:
<dependency>
<groupId>com.github.loggly.log4jSyslogWriter64k</groupId>
<artifactId>log4jSyslogWriter64k</artifactId>
<version>2.0.0</version>
</dependency>
接下來,我們將在log4j.properties
檔案中使用SyslogAppender64k
:
log4j.rootLogger=INFO, SYSLOG
log4j.appender.SYSLOG=com.github.loggly.log4j.SyslogAppender64k
log4j.appender.SYSLOG.SyslogHost=localhost
log4j.appender.SYSLOG.Facility=Local3
log4j.appender.SYSLOG.Header=true
log4j.appender.SYSLOG.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=baeldung-java-app %d{ISO8601}{GMT} %p %t %c %M - %m%n
在log4j.properties
檔案中,我們可以將baeldung-java-app
替換為與轉換模式屬性 key 對應的任何其他自訂應用程式名稱。它有助於識別Loggly 日誌瀏覽器上的日誌。此系統日誌附加程式將這些訊息寫入本機上執行的系統日誌守護程式。
完成先決條件設定後,我們可以在應用程式中編寫一些具有不同日誌等級的記錄器語句:
public class LogglyLog4jLiveTest {
private static final Logger logger = Logger.getLogger(LogglyLog4jUnitTest.class);
@Test
void givenLoggly_whenLogEvent_thenPushEventToLoggly() {
logger.info("This is a test info message");
logger.debug("This is a test debug message");
logger.error("This is a test error message");
}
}
最終,當應用程式運行時,日誌被推送到 Loggly 並在其日誌瀏覽器螢幕上可見:
5. Loggly 使用 Log4j 2 庫的應用程序
像往常一樣,讓我們從 Log4j 2 Java 應用程式的Maven 依賴項開始:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.23.1</version>
</dependency>
接下來,我們將定義log4j2.xml
檔:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Socket name="Loggly" host="localhost" port="514" protocol="UDP">
<PatternLayout>
<pattern>${hostName} baeldung-java-app %d{yyyy-MM-dd HH:mm:ss,SSS}{GMT} %p %t %c.%M - %m%n</pattern>
</PatternLayout>
</Socket>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Loggly"/>
</Root>
</Loggers>
</Configuration>
log4j2.xml
檔案中的 Loggly套接字附加程式透過 UDP 將日誌寫入 rsyslog 實用程式。
繼續,讓我們透過 logger 語句瀏覽 Java 程式:
public class LogglyLog4j2LiveTest {
private static final Logger logger = LogManager.getLogger(LogglyLog4j2UnitTest.class);
@Test
void givenLoggly_thenLogEvent_thenPushErrorEventToLoggly() {
logger.info("This is a log4j2 test info message");
logger.debug("This is a log4j2 test debug message");
logger.error("This is a log4j2 test error message");
}
}
最終,當應用程式運行時,日誌事件將顯示在 Loggly 日誌瀏覽器畫面上:
除了套接字附加器之外,我們還可以使用log4j2.xml
檔案中的 HTTP 附加器將日誌推送到 Loggly :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Http name="Loggly" url="https://logs-01.loggly.com/inputs/TOKEN/tag/java">
<PatternLayout>
<pattern>${hostName} %d{yyyy-MM-dd HH:mm:ss,SSS}{GMT} %p %t %c.%M - %m%n</pattern>
</PatternLayout>
</Http>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Loggly"/>
</Root>
</Loggers>
</Configuration>
此外,可以從 Loggly 入口網站複製 URL 中使用的身份驗證令牌:
像往常一樣,當程式運行時,它會透過 HTTP 將日誌發佈到 Loggly:
6. Loggly 使用 Logback 庫的應用程式
在使用Logback庫進行日誌記錄的應用程式中,我們必須加入Loggly擴充的Maven依賴:
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-loggly</artifactId>
<version>0.1.5</version>
</dependency>
接下來,我們將定義logback.xml
檔:
<configuration debug="true">
<appender name="loggly" class="ch.qos.logback.ext.loggly.LogglyAppender">
<endpointUrl>https://logs-01.loggly.com/inputs/a3a21667-e23a-4378-b0b4-f2260ecfc25b/tag/logback</endpointUrl>
<pattern>%d{"ISO8601", UTC} %p %t %c{0}.%M - %m%n</pattern>
</appender>
<root level="debug">
<appender-ref ref="loggly"/>
</root>
</configuration>
logback.xml
檔案使用logback loggly 擴充功能庫中的自訂LogglyAppender
。在某些情況下,日誌事件建立的頻率可能很高。因此,在這種情況下,我們可以藉助ch.qos.logback.ext.loggly.LogglyBatchAppender
批次發送多行日誌事件到 Loggly 批次端點**https://logs-01.loggly.com/bulk/TOKEN/tag/bulk/.
**
與基本LogglyAppender
類似,我們必須在logback.xml
檔案中指定批次附加程式和批次端點 URL:
<configuration debug="true">
<appender name="loggly" class="ch.qos.logback.ext.loggly.LogglyBatchAppender">
<endpointUrl>https://logs-01.loggly.com/bulk/a3a21667-e23a-4378-b0b4-f2260ecfc25b/tag/bulk</endpointUrl>
<pattern>%d{"ISO8601", UTC} %p %t %c %M - %m%n</pattern>
</appender>
<root level="info">
<appender-ref ref="loggly" />
</root>
</configuration>
但是,此附加程式每批最多可傳送 5 MB,每個事件最多可傳送 1 MB。如上一節所述,我們可以從Customer Tokens
頁面下載TOKEN
。
完成先決條件後,讓我們透過記錄器語句瀏覽 Java 程式:
public class LogglyLogbackLiveTest {
Logger logger = LoggerFactory.getLogger(LogglyLogbackUnitTest.class);
@Test
void givenLoggly_whenLogEvent_thenPushEventToLoggly() {
logger.info("This is a logback test info message");
logger.debug("This is a logback test debug message");
logger.error("This is a logback test error message");
}
}
該程式使用SLF4J框架的Logback實作。現在,讓我們執行測試程式並檢查 Loggly 日誌瀏覽器:
正如預期的那樣,日誌事件會在日誌瀏覽器上註冊。
七、結論
在本文中,我們討論了設定 Java 應用程式以將其日誌傳送到 Solarwinds Loggly。
令人印象深刻的是,Loggly 入口網站非常詳細地記錄了設定過程,並且有一個嚮導可以進一步加快設定過程。此外,在線指南中還介紹了故障排除過程。
與往常一樣,本文中使用的程式碼可以在 GitHub 上找到。