pinpoint 添加 日志查詢功能


1. 下載 pinpoint 插件

開啟日志功能需要自己寫一個插件 ,參考 https://pinpoint-apm.github.io/pinpoint/perrequestfeatureguide.html#3-expose-log-in-pinpoint-web
,插件完成后放到 pinpoint-agent/plugin 目錄下。
修改 pinpoint-agent/profiles/${profile}/pinpoint.config,
${profile} 默認有兩個, 如果不確定是哪一個, 那么直接全部修改。
將下面的 false 全部改為 true ,(展示的是已經修改的)

###########################################################
# log4j (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md)
###########################################################
profiler.log4j.logging.transactioninfo=true

###########################################################
# log4j2 (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md)
###########################################################
profiler.log4j2.logging.transactioninfo=true

###########################################################
# logback (guide url : https://github.com/naver/pinpoint/blob/master/doc/per-request_feature_guide.md)
###########################################################
profiler.logback.logging.transactioninfo=true

2. 配置日志 xml 格式

參考鏈接: https://pinpoint-apm.github.io/pinpoint/perrequestfeatureguide.html#3-expose-log-in-pinpoint-web

  • 注意: 不一定非要按照說明配置, 重要的日志格式是 TxId : %X{PtxId} , SpanId : %X{PspanId} , 添加上這些就好,位置不限, 其他隨意, 該字符串主要是用來標識查詢所用。

  • log4j, log4j2, logback 配置

    1. ex) log4j : log4j.xml
Before
<appender name = "console" class= "org.apache.log4j.ConsoleAppender" >
     <layout class = "org.apache.log4j.EnhancedPatternLayout">
          <param name = "ConversionPattern" value= "%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n" />
     </layout >
</appender >

After
<appender name = "console" class= "org.apache.log4j.ConsoleAppender" >
     <layout class = "org.apache.log4j.EnhancedPatternLayout">
          <param name = "ConversionPattern" value= "%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] %m%n" />
        </layout >
</appender >
    1. ex) log4j2 - log4j2.xml
Before
<appender>
     <console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) %m%n""/>
     </console>
<appender>

After
<appender>
     <console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] %m%n""/>
     </console>
<appender>
    1. ex) logback : logback.xml
Before
<appender name = "STDOUT" class= "ch.qos.logback.core.ConsoleAppender" >
     <layout class = "ch.qos.logback.classic.PatternLayout">
          <Pattern >%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern >
     </layout >
</appender >

After
<appender name = "STDOUT" class= "ch.qos.logback.core.ConsoleAppender" >
     <layout class = "ch.qos.logback.classic.PatternLayout">
          <Pattern >%d{HH:mm} %-5level %logger{36} - [TxId : %X{PtxId} , SpanId : %X{PspanId}] %msg%n</Pattern >
     </layout >
</appender >

3. 實現日志查看(這里用的 grafana loki 實現)

3.1 實現方式

  • 這里使用 grafana loki 實現, loki 是一個輕量級日志收集工具, 配合 promtail 使用。

3.2 pinpoint 源代碼修改 (如果只是配置客戶端, 則不需要此步驟!)

    1. 在 web 模塊添加一個 controller
package com.navercorp.pinpoint.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 這里用的 grafana loki 實現
 * <br/>
 * description:  <br/>
 * author: wanghaiming <br/>
 * date: 2021/6/4 17:01 <br/>
 *
 * @author whmmm
 */
@RequestMapping("/logview")
@Controller
public class LogViewController {

    private static final String url = "http://xxx.com/xxx/xxxx/explore?orgId=1&left=[\"now-24h\",\"now\",\"Loki\",{\"exemplar\":true,\"expr\":\"{job=\\\"%s\\\"} |=\\\"TxId : %s , SpanId : %s\\\"\"}]";

    @RequestMapping(value = "")
    public void NeloLogForTransactionId(@RequestParam(value = "transactionId", required = true) String transactionId,
                                        @RequestParam(value = "spanId", required = false) String spanId,
                                        @RequestParam(value = "time", required = true) long time,
                                        HttpServletResponse response) {
		// %5E = ^ , 解析出 jobName, 加兩個斜杠 , 轉移, 否則會認為是 正則表達式
        String[] split = transactionId.split("\\^");
        String jobName = split[0];

        String link = String.format(url, jobName, transactionId, spanId);

        try {
            response.sendRedirect(link);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        //System.out.println(String.format(url, "", transactionId, spanId));
    }

}

    1. 修改 src/main/resources/profiles/release/pinpoint-web.properties(如果你不確定, 連同 src/main/resources/profiles/local/pinpoint-web.properties 一並修改),修改后的內容如下
pinpoint.zookeeper.address={YOUR_RELEASE_ZOOKEEPER_ADDRESS}
log.enable= true
# 這里是你自定義的 controller 請求路徑
log.page.url=logview
log.button.name= 查看日志

3.3 配置 promtail

配置好你的 promtail

  • 2-1) promtail-local-config.yaml
# 只是一個簡單的配置, 如果需要更深入請自行百度, 歡迎討論

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://xxxxxxx:3100/loki/api/v1/push

scrape_configs:
- job_name: develope-server
  static_configs:
  # 這是一個示例, 需要修改
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log
  # 示例 tomcat 日志
  - targets:
      - localhost
    labels:
      job: project-name  # 這個名稱必須和你的 pinpoint-agent 中指定的 agent-id 一致 !!!!!!!!!!
      __path__: /usr/local/project-tomcat/logs/catalina.out # 要監聽的日志路徑
  • 2-2) 啟動腳本
  • start-promtail.sh
# 這里我沒有丟棄日志, 你可以選擇丟棄日志以增加性能
nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml > console.log &


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM