清明节在鼓捣项目的时候看到阿里云有提供 tracing 服务,底层是基于opentelemetry 的,而且每个月有 50G流量的免费额度,非常适合我这种个人小型应用。
尝试把 laravel 接入到阿里云 opentelemetry 服务的过程遇到了3次坑,花了我一晚上才搞定,值得记录一下
- 第一个是需要给 PHP-FPM 增加 PHP 扩展。其实本质上就是执行
pecl install opentelemetry pecl isstall grpc pecl install protobuf
这三个指令。但是由于是用的 laradock 来作为服务器环境,所以得重新跑 `docker build` 脚本,坑的地方在于 wsl2 环境的 docker 编译指令失败概率太高了,几乎每次都会因为翻墙相关的网络问题而失败。每次编译10分钟的时候忽然提示网络问题,再碰运气重试的时候真是让人欲哭无泪。这个浪费了我差不多半个晚上的时间。
这个问题现在暂时是通过多次重试之后看运气跑通的,要彻底解决的话有两个思路,
一个是买一台国外的服务器,专门用来打包 docker image ,打包好了之后再通过阿里云的 acr 服务来中转,本地和云端都用相同的 image 来跑应用。不过这个方案得需要一个双币的信用卡才行。这个和家人商量过,打算到今年5月初就去办一个。
一个是买一台可以折腾的路由器,这样的话家里的电脑手机就可以无感翻墙了。这个方案前几年调研过一次,在性能,复杂度,价格,稳定性方面没有找到很让人舒心的方案,不知道现在有没有什么变化。这两天抽空再研究下。
- 第二个是 opentelemetry 的安装依赖。要让数据流能够跑通,需要安装3个层面的依赖,一个是扩展层面的,也就是
pecl install opentelemetry
,一个是 sdk 层面的,比如composer require open-telemetry/auto-instrument-laravel
, 最后一个是运行时启动收集,即composer require open-telemetry/otel-exporter
,第三个依赖别忘了安装,因为需要它来作为扩展层和sdk 之间的连接器。 - 第三个就比较无厘头了。上面的问题解决之后,看效果时,发现不管怎么调整,阿里云都看不到采集的数据。百思不得其解。到了凌晨4点多还卡着这一步,被家人叫去睡觉的时候还心有不甘…… 直到第二天早上起床之后,刷新了阿里云后台的时候,才发现阿里云的 tracing 服务不知道为什么给我自动展示的是杭州地区的资源和数据,而不是我开通的深圳地区。切换到阿里云深圳之后,发现其实数据早就OK了。真是醉了。也正是因为睡了一晚上,阿里云的登录态过期触发了重新登陆,我才注意到这个原因。我要感谢家人把我从电脑旁拉回床上休息,哈哈哈哈