Spring Boot中使用Loki日誌

banq發表於2024-04-04

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 資料來源。
 

相關文章