首页 > 编程语言 >在phpmyadmin中使用pinpoint

在phpmyadmin中使用pinpoint

时间:2024-08-28 15:28:12浏览次数:9  
标签:phpmyadmin pinpoint 使用 agent dev https apm php

> from https://github.com/pinpoint-apm/pinpoint-c-agent/wiki/%E5%9C%A8phpmyadmin%E4%B8%AD%E4%BD%BF%E7%94%A8pinpoint

怎样在phpmyadmin 中使用pinpoint-c-agent

为什么我们要发布这篇文章 ?

分享一些监控PHP项目的经验

您能从里面获取到啥 ?

  1. 怎样使用pinpoint监控PHP项目,比如phpmyadmin
  2. 怎样自定义插件

开始

安装pinpoint php 客户端

安装phpmyadmin 项目 https://www.phpmyadmin.net/

  1. 安装 pinpoint_php 扩展

    1. pecl install pinpoint_php or curl -sL https://github.com/pinpoint-apm/pinpoint-c-agent/releases/latest/download/install_pinpoint_php.sh | sh

      假如安装失败了,请在issue上面共享你的环境信息给我们。

    2. 如果是 windows 直接下载 pinpoint.dll https://pecl.php.net/package/pinpoint_php  windows_dll
      • 如果不能访问 pecl.php.net, 试着从GitHub release 页面下载. github release
  2. 不要忘了在php.ini 启用 pinpoint_php

    detail setting https://github.com/pinpoint-apm/pinpoint-c-agent/blob/dev/DOC/PHP/Readme.md#steps

    [pinpoint_php]
    extension=pinpoint_php.so
    pinpoint_php.CollectorHost=tcp:collector-agent-host:10000
    pinpoint_php.DebugReport=true
    ...
     
  3. 加入 pinpoint-php-aop 依赖

    composer require -w pinpoint-apm/pinpoint-php-aop

  4. 恭喜你,这是最后一步了。在项目里面的入口文件,启用pinpoint。

    • phpmyadmin:
      <?php
      // www/html/index.php
      ...
      require AUTOLOAD_FILE;
      
      class MyAdminRequestPlugin extends Pinpoint\Plugins\DefaultRequestPlugin
      {
          public function __construct()
          {
              $blackUri = ['/favicon.ico'];
              // if uri in blackUri, skips it 
              if (!in_array($_SERVER['REQUEST_URI'], $blackUri)) {
                  parent::__construct();
              }
          }
          public function __destruct()
          {
              // do nothing
          }
      }
      define('APPLICATION_NAME', 'cd.dev.test.php'); // your application name
      define('APPLICATION_ID', 'cd.dev.phpmyadmin');  // your application id
      define('PP_REQ_PLUGINS', MyAdminRequestPlugin::class);
      require_once __DIR__ . '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php';
      
      ...
       

到此为止,客户端已经安装成功了。

安装 collector-agent(pinpoint 协议的代理模块)

打开你的phpmyadmin 页面,你可能在日志里面看到如下错误 collector-agent

这就是由于collector-agent 没有安装

什么是collector-agent: https://github.com/pinpoint-apm/pinpoint-c-agent/tree/dev/DOC/collector-agent

在你安装collector-agent 之前,请保证pinpoint 已经安装成功了

安装 pinpoint

By docker-compose

https://github.com/pinpoint-apm/pinpoint-docker

安装 collector-agent

docker run -itd -p 10000:10000 --env-file ./env.list ghcr.io/pinpoint-apm/pinpoint-c-agent/collector-agent:latest

## env.list dev-pinpoint 就是pinpoint collector 的地址
PP_COLLECTOR_AGENT_SPAN_IP=dev-pinpoint
PP_COLLECTOR_AGENT_SPAN_PORT=9993
PP_COLLECTOR_AGENT_AGENT_IP=dev-pinpoint
PP_COLLECTOR_AGENT_AGENT_PORT=9991
PP_COLLECTOR_AGENT_STAT_IP=dev-pinpoint
PP_COLLECTOR_AGENT_STAT_PORT=9992
...
 

详细文档: https://github.com/pinpoint-apm/pinpoint-c-agent/blob/dev/DOC/collector-agent/readme.md

检查PHP项目的请求是否在pinpoint-web 上显示

服务调用图

service call

调用栈图

call stack

怎样自定义插件

我跳过了一个重要的部分,pinpoint 入口文件。我在这里专门介绍它。

什么是入口文件 ? 就是下面的代码块

require_once __DIR__ . '/vendor/autoload.php'; // !!! must insert right behind system/framework autoload

define('APPLICATION_NAME', 'cd.dev.test.php'); // your application name
define('APPLICATION_ID', 'cd.dev.phpmyadmin');  // your application id
define('PP_REQ_PLUGINS', \Pinpoint\Plugins\DefaultRequestPlugin::class); //
require_once __DIR__ . '/vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php';
 

这个变量用来配置一些特殊的需求

  1. 忽略页面
    public function __construct()
    {
        $blackUri = ['/favicon.ico']; // 这里忽略的页面
        // if uri in blackUri, skips it 
        if (!in_array($_SERVER['REQUEST_URI'], $blackUri)) {
            parent::__construct();
        }
    }
 

完整的例子参考 : https://github.com/pinpoint-apm/pinpoint-c-agent/blob/dev/testapps/php_phpmyadmin/index.php#L38-L44

  1. 添加拦截自己定义的类或者其他内置函数

    1. 内置函数
      • 在监控函数被调用前,加载插件
      • 插件代码模板
      pinpoint_join_cut(
          "built-in-function/method",$on_before_callback,$on_end_callback,$on_exception_callback
      )
       

      这里也有很多例子,请参考 https://github.com/pinpoint-apm/pinpoint-php-aop/blob/dev/lib/Pinpoint/Plugins/SysV2/

    2. 用户自定义类 (支持通过类加载器加载的类 load by auto_loader)
      • 继承 \Pinpoint\Plugins\DefaultRequestPlugin 并重写 joinedClassSet
      • 注册 AspectClassHandle 类
          public function joinedClassSet(): array
          {
              // don't forget passing the parent AspectClassHandle
              $cls = parent::joinedClassSet();
              $classHandler = new Pinpoint\Common\AspectClassHandle(\User\ABC::class);
              $classHandler->addJoinPoint('foo_method', \Pinpoint\Plugins\Common\CommonPlugin::class);
              $cls[] = $classHandler; //完成注册
              return $cls;
          }
       

      这里也有很多例子,请参考 https://github.com/pinpoint-apm/pinpoint-php-aop/blob/dev/lib/Pinpoint/Plugins/Yii2PerRequestPlugins.php,https://github.com/pinpoint-apm/pinpoint-php-aop/blob/dev/lib/Pinpoint/Plugins/DefaultRequestPlugin.php

标签:phpmyadmin,pinpoint,使用,agent,dev,https,apm,php
From: https://www.cnblogs.com/eeliu/p/18384672

相关文章

  • 在AMD GPU上使用DBRX Instruct
    DBRXInstructonAMDGPUs—ROCmBlogs在这篇博客中,我们展示了DBRXInstruct,这是由Databricks开发的一个专家混合大型语言模型,在支持ROCm的系统和AMDGPU上运行。关于DBRXInstructDBRX是一个基于Transformer的仅解码大型语言模型,拥有1320亿参数,采用了细粒度的专家混合......
  • 使用统计方法在AMD GPU上使用JAX Profiler可靠地比较大型生成AI模型中的算法性能
    UsingstatisticalmethodstoreliablycomparealgorithmperformanceinlargegenerativeAImodelswithJAXProfileronAMDGPUs—ROCmBlogs摘要本文提供了一份详细的指南,介绍如何在JAX实现的生成AI模型中测量和比较各种算法的性能。利用JAXProfiler和统计分析......
  • Java后端微服务架构下的服务链路追踪:Dapper与Pinpoint
    Java后端微服务架构下的服务链路追踪:Dapper与Pinpoint大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,服务链路追踪是一种关键技术,用于监控和诊断服务间的调用关系和性能问题。Dapper和Pinpoint是两种流行的服务链路追踪系统。服务链......
  • 【MSF系列】使用meterpreter从linux系统下载文件到kali
    成功拿到了shell,在/var/www/html/cacti底下有个sql文件,将其下载下来命令download/path/to/file.txt/opt/downloads/file.txt下载后导入本地,可以获得登录密码+----+----------+----------------------------------+-------+---------------+---------------+--------------......
  • 消息队列MQ的使用
    承接我的另一篇博客 消息队列MQ-CSDN博客启动服务1.启动mqnamesrv2.启动mqbrokermqbroker-n127.0.0.1:9876应用1.普通消息同步发送publicclassEasyA{publicstaticvoidmain(String[]args)throwsMQClientException,MQBrokerException,RemotingExce......
  • C++学习随笔——lock_guard和mutex的使用方法
    std::mutex和std::lock_guard是C++标准库中用于多线程同步的工具,主要用于防止多个线程同时访问共享资源,导致数据竞争问题。 std::mutex是一个用于互斥锁的类,提供了锁定(lock)和解锁(unlock)的功能。使用方法:#include<iostream>#include<thread>#include<mutex>std::......
  • stm32F4系列 CCM_RAM使用
    stm32F4系列CCM_RAM使用使用方法1、这种情况下,所有管理工作都是编译来处理的,不方面用户将变量定义到指定的CCM或者SDRAM中。而使用__attribute__指定具体地址又不方便管理。针对这种情况,使用一个脚本文件即可解决,脚本定义如下:;*************************************......
  • Stable Audio文本转音乐 免费商用无版权限制 本地一键包使用教程
    StabilityAI的发布再次打破了创新的界限。这款前沿模型在其前作的成功基础上,增添了一系列突破性功能,可能彻底改变艺术家和音乐家创建及操作音频内容的方式。StableAudio2.0标志着人工智能生成音频的一个重要里程碑,为音质、多功能性和创意潜力设定了全新标准。这个模型......
  • Spring Boot Web开发实践:请求与响应参数的使用方法
    主要介绍了请求响应的简单参数、实体参数、数组集合参数、日期参数、路径参数等各自的使用方法!!!文章目录前言Postman简单参数原始方式 SpringBoot方式实体参数数组集合参数日期参数 路径参数总结前言主要介绍了请求响应的简单参数、实体参数、数组集合参数......
  • 霸王餐系统的使用及选择,你知道吗?
    霸王餐系统的使用及选择一、使用方法不同的霸王餐系统使用方法可能会有所差异,但一般来说,大致包括以下步骤:注册和登录:首先需要在相应的平台上注册账号并登录。活动设置:根据系统的指引,设置霸王餐活动的规则、时间、优惠方式等。发布活动:完成设置后,将活动信息发布出去。监控......