智能日志管理平台

  • 使用 Zipkin 监控 PHP 服务

    最近更新时间:2018-11-01 15:01:46

    Zipkin 是 Twitter 开源的一款分布式实时数据追踪系统,其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题,从而改进系统的性能和定位故障。Zipkin 实现数据追踪主要由以下角色完成:

    Client:负责将各系统报告过来的追踪数据进行接收(在用户服务代码中插桩 Zipkin client 相关的代码,就可以在应用运行过程中生成 tracing 数据,并追踪调用链,将数据发往本地 Reporter);

    Reporter:负责收集全链路上每个调用点的监控数据,并发往 collector;

    Collector:负责收集所有 Reporter 发送来的 tracing 数据,并存入存储设备。

    Pandora 智能日志平台的全链路追踪服务兼容 Zipkin tracing 方案,通过 logkit-pro 收集 zipkin tracing 的监控数据,发送到智能日志平台进行存储,并使用全链路追踪应用追踪链路细节。

    本文档将展示如何通过 logkit-pro 接收 Zipkin tracing 埋点的 PHP 服务数据,发送到智能日志平台,并使用全链路追踪服务查看链路详情。

    1. 基础环境准备

    • 安装 php 包管理器 composer

      MAC 环境安装命令:

      brew install composer
      
    • 安装 mysql 并配置 root 账户密码,创建 test 数据库,在 test 数据库中创建 users 表

      users表格结构如下图:

      表格内容如下图:

    2. 构建 PHP 服务

    本 Demo 包含 3 个 php 服务,1 个 mysql 数据库,各个服务之间的依赖关系如下图:

    Demo 源码

    请下载源码

    解压缩zipkin-php-src.tar.gz,生成 zipkin-php-src 目录,目录结构如下图:

    zipkin_util.php 是公共模块,负责 zipkin tracing 结构体的初始化,其中可以设置采样率等参数。该模块在 hello,service1,service2 中均有使用。

    mysql_util.php 负责与数据库交互,包括数据库链接的创建和关闭,查询数据库。该模块在 service1,service2 中被使用。请确保您配置的 mysql 账户、密码以及db 名与 mysql_util.php 中的配置一致。

    hello.php hello 服务源码,监听 18081 端口:

    service1.php service1 服务源码,监听 18082 端口:

    service2.php service2 服务源码,监听 18083 端口:

    composer.json composer 配置文件,启动服务时需要。

    启动 Demo 各个服务

    # 解决 php 包依赖
    rm composer.lock && composer install
    # 逐个启动 hello service1 service2 服务
    composer run-hello
    composer run-service1
    composer run-service2
    # 确保数据库启动,且测试数据准确,如第1章节所示
    

    3.通过 logkit-pro 收集 Zipkin tracing 数据

    安装 logkit-pro

    首先需要在机器上安装 logkit-pro。

    1.登录 logkit-pro,进入机器管理页面,点击添加机器。

    2.手动安装:根据您机器的操作系统版本选择对应的命令,复制到命令行工具即可,如图所示:

    详细的安装文档可以阅读 logkit-pro 安装

    1. 安装完毕后,您可以在机器列表页面看到您安装的机器:

    配置数据源 Reader

    选择 socket reader 读取数据:

    各配置项如下图:

    跳过数据解析与转换。

    配置发送源 Sender

    发送到智能日志管理平台全链路追踪服务;

    观察 logkit-pro 中,收集器接收和转发的数据记录

    进入数据收集页面,找到刚刚创建的收集器,点击查看机器运行信息

    有读取成功条数和发送成功条数证明数据采集成功。

    注意:发送到智能日志平台同时生成两个日志仓库:tracingspan 和 tracingservice。tracingspan 仓库里只记录 tracing 数据, tracingservice 仓库里记录服务数据。

    4.验证结果

    通过终端 curl 访问 hello 服务

    注意:这里没有使用浏览器访问 hello 服务,因为浏览器访问 hello 端口的时候,会自动多发一个请求http://localhost:18081/favicon.ico,导致 hello 的方法被访问两次,产生两次 tracing 数据,不利于示例讲解。

    到智能日志平台,搜索 tracingspan 仓库是否有 tracing 数据记录

    这里需要说明一下,在 logkit-pro 中观察到 14 条记录,其中包含 7 条 tracing 数据和 7 条服务相关的信息。所以在 tracingspan 仓库中只有 7 条 tracing 记录。

    到全链路追踪服务查询服务链路

    选择服务为 hello,时间范围为服务发生的时间,可以看到系统追踪到了一条链路,它包含 3 个 span,符合预期:

    追踪链路详情

    点击具体的链路记录,可浏览链路调用的详情,与设计的 Demo 服务依赖关系一致,如下图:

    以上内容是否对您有帮助?
  • Icon free helper
    Close