Grafana Labs 開發了Loki ,這是一個受Prometheus啟發的開源日誌聚合系統。其目的是儲存和索引日誌資料,以便於對不同應用程式和系統生成的日誌進行高效查詢和分析。
在本文中,我們將使用 Grafana Loki 為 Spring Boot 應用程式設定日誌記錄。 Loki 將收集並聚合應用程式日誌,Grafana 將顯示它們。
執行Loki和Grafana服務
我們將首先啟動 Loki 和 Grafana 服務,以便我們可以收集和觀察日誌。Docker容器將幫助我們更輕鬆地配置和執行它們。
首先,讓我們在docker-compose檔案中編寫 Loki 和 Grafana 服務:
version: <font>"3" networks: loki: services: loki: image: grafana/loki:2.9.0 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml networks: - loki grafana: environment: - GF_PATHS_PROVISIONING=/etc/grafana/provisioning - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin entrypoint: - sh - -euc - | mkdir -p /etc/grafana/provisioning/datasources cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml apiVersion: 1 datasources: - name: Loki type: loki access: proxy orgId: 1 url: http://loki:3100<i> basicAuth: false isDefault: true version: 1 editable: false EOF /run.sh image: grafana/grafana:latest ports: - "3000:3000" networks: - loki
|
接下來,我們需要使用docker-compose命令啟動服務:docker-compose up
最後,我們確認一下這兩個服務是否都已啟動:
docker ps 211c526ea384 grafana/loki:2.9.0 <font>"/usr/bin/loki -conf…" 4 days ago Up 56 seconds 0.0.0.0:3100->3100/tcp surajmishra_loki_1 a1b3b4a4995f grafana/grafana:latest "sh -euc 'mkdir -p /…" 4 days ago Up 56 seconds 0.0.0.0:3000->3000/tcp surajmishra_grafana_1
|
使用 Spring Boot 配置 Loki
一旦我們啟動了 Grafana 和 Loki 服務,我們需要配置我們的應用程式以向其傳送日誌。我們將使用loki-logback-appender,它將負責將日誌傳送到 Loki 聚合器來儲存和索引日誌。
首先,我們需要在pom.xml檔案中新增loki-logback-appender:
<dependency> <groupId>com.github.loki4j</groupId> <artifactId>loki-logback-appender</artifactId> <version>1.4.1</version> </dependency>
|
其次,我們需要在src/main/resources資料夾下建立一個logging-spring.xml檔案。該檔案將控制 Spring Boot 應用程式的日誌記錄行為,例如日誌格式、Loki 服務的端點等:<?xml version=<font>"1.0" encoding="UTF-8"?> <configuration> <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender"> <http> <url>http://localhost:3100/loki/api/v1/push</url><i> </http> <format> <label> <pattern>app=${name},host=${HOSTNAME},level=%level</pattern> <readMarkers>true</readMarkers> </label> <message> <pattern> { "level":"%level", "class":"%logger{36}", "thread":"%thread", "message": "%message", "requestId": "%X{X-Request-ID}" } </pattern> </message> </format> </appender> <root level="INFO"> <appender-ref ref="LOKI" /> </root> </configuration>
|
完成設定後,讓我們編寫一個簡單的服務,在 INFO 級別記錄資料:@Service class DemoService{ private final Logger LOG = LoggerFactory.getLogger(DemoService.class); public void log(){ LOG.info(<font>"DemoService.log invoked"); } }
|
日誌聚合和視覺化
由於使用loki-logback-appender進行配置設定,我們的服務日誌被推送到 Loki 服務。我們可以透過在瀏覽器中訪問http://localhost:3000(部署 Grafana 服務的位置)來視覺化它。
要檢視 Loki 中儲存和索引的日誌,我們需要使用 Grafana。 Grafana 資料來源為 Loki 提供可配置的連線引數,我們需要在其中輸入 Loki 端點、身份驗證機制等。
結論
在本文中,我們使用 Grafana Loki 為 Spring Boot 應用程式設定日誌記錄。我們還透過單元測試和視覺化驗證了我們的設定,使用簡單的邏輯記錄INFO日誌並在 Grafana 中設定 Loki 資料來源。