有很多人会说,Tideways 目前只支持 PHP7,可是我的 PHP 已经升到 7.1 甚至 7.2了,怎么办?

就如我们公司在 uat 和线上环境是7.0版本,但是 dev 和 test 环境已经用 Docker 容器化升到 7.1 版本了,只等在 test环境运行一段时间确保容器化没问题,就到 uat 和线上的,到时候版本就是7.1了,并且一定会升7.2的,因为已经在着手做这方面的准备了,后端的加解密库已经将 Mcrypt 替换成了 OpenSSL,好了言归正传,不要慌张,Tideways在Github上的源码做了最新的更新,拥有了以下的新特性:

  1. 支持PHP 7.0,7.1,7.2
  2. 在Linux上提高性能和时间戳可靠性
  3. 重命名函数但保持API相似。扩展不是直接替换,但数据格式仍与XHProf完全兼容

来一个传送门,如果你想自己编译扩展,你可以到Github仓库并从哪里下载源代码。可以使用一般的安装步骤安装扩展程序:

$ git clone https://github.com/tideways/php-profiler-extension.git
$ cd php-profiler-extension
$ phpize
$ ./configure
$ make
$ sudo make install

加载你的 php.ini 中的扩展名 extension=tideways_xhprof.so,这样就可以了。


因为我们公司已经做了 Docker 容器化,那么平常的这种肯定不可以了,势必需要一个专用容器来使用运行 Tideways 并集成,所有的PHP容器都将数据发送到这个容器。

建议参考Samuel Roze,这是它在GitHub上的地址传送门

首先修改 Dockerfile 增加以下内容:

FROM phusion/baseimage:0.9.18

RUN echo 'deb http://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages debian main' > /etc/apt/sources.list.d/tideways.list && \
curl -sS 'https://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages/EEB5E8F4.gpg' | sudo apt-key add - && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -yq install tideways-daemon && \
apt-get autoremove --assume-yes && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ADD run.sh /run.sh
CMD ["/run.sh"]

将run.sh引用放在 Dockerfile 旁边的相同文件夹中,并添加以下内容:

#!/bin/bash
tideways-daemon --hostname=tideways-daemon --address=0.0.0.0:9135 --udp=0.0.0.0:8135 >> /dev/stdout 2>/dev/stderr
/sbin/my_init

如果您调用 tideways 守护程序 Dockerfile 的文件夹 tideways,则可以使用以下方法引用 Docker 撰写文件中的容器:

tideways:
    build: ./tideways

每个运行PHP的Docker容器只需要安装 Tideways PHP扩展,并对 php.ini 配置进行一些小修改以指向守护程序容器:

tideways.udp_connection="tideways:8135"
tideways.connection="tcp://tideways:9135"

如果你想在Docker容器中使用Tideways,那么你已经建立了一个容器,它已经添加了你需要的所有扩展,并根据你的需要修改了php.ini。此容器Dockerfile需要额外的设置说明才能使Tideways正常运行。

这个例子基于 php:7.0-fpmDocker Hub上的镜像,但是可以和其他PHP基本镜像类似地工作:

FROM php:7.0-fpm

RUN echo 'deb http://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages debian main' > /etc/apt/sources.list.d/tideways.list && \
curl -sS 'https://s3-eu-west-1.amazonaws.com/qafoo-profiler/packages/EEB5E8F4.gpg' | apt-key add - && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -yq install tideways-php && \
apt-get autoremove --assume-yes && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

COPY tideways.ini /usr/local/etc/php/conf.d/40-tideways.ini

tideways.ini文件包含:

extension=tideways.so
tideways.api_key=<your key>
tideways.udp_connection=tcp://tideways:8135
tideways.connection=tcp://tideways:9135

您也可以通过环境变量传递API密钥并删除tideways.api_key行。

不要忘记将PHP容器链接到tideways容器中docker-compose.yml:

php:
    build: ./php
    volumes:
        - ./app:/app
    links:
        - tideways
最后修改:2020 年 02 月 05 日 01 : 29 PM
如果觉得我的文章对你有用,请随意赞赏