• 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 &
    
  • 相关阅读:
    fread()创建文件和file_exists()文件缓存问题
    docker 常用命令(一)
    python学习资源
    python 爬虫之 selenium API
    卡方检验用于特征选择
    三种常用数据标准化方法
    oracle查看编码以及修改编码
    JAVA 泛型
    java中Class对象详解和类名.class, class.forName(), getClass()区别
    oracle 数据导入导出
  • 原文地址:https://www.cnblogs.com/whm-blog/p/14850850.html
Copyright © 2020-2023  润新知