在本文中,我将向您展示如何将pinba与Clickhouse和grafana结合使用,而不是pinba_engine和pinboard。
在phba项目中,pinba也许是了解性能正在发生变化的唯一可靠方法。 确实,pinba通常仅在已经发现问题并且不清楚从何处挖掘时才实施。
通常没有人知道特定脚本每秒被调用多少次,并从看起来更合乎逻辑的地方开始“通过触摸”进行优化。
有人正在分析nginx日志,有人在数据库中查询速度慢。
当然,pinba并不是多余的,但是有几个原因导致它不是在每个项目中都存在。

第一个原因是安装。
为了或多或少地从pinba的引入中获得某种“疲惫”,非常希望不仅在最后几分钟,而且还要在很长一段时间(从几天到几个月)中查看指标。
为此,您需要:
- 为php安装扩展名(也许您需要nginx的模块)
- 编译mysql扩展
- 安装硬纸板和配置cron
由于有关pinba的信息很少,因此许多人都认为它仅适用于php5,并且已经存在很长时间了,但是正如我们稍后会看到的,事实并非如此。
第一步是最简单的,您需要做的就是运行命令:
apt install php-pinba
在存储库中,此扩展最多可包含php 7.3,并且您无需编译任何内容。
执行安装命令后,我们立即获得一个已经正常工作的扩展程序,该扩展程序以udp格式并以
protobuf格式收集和发送每个脚本的度量标准(持续时间,内存等),并将其发送给127.0.0.1
{0002 。
尚未有人捕获并处理过这些udp软件包,但它不会影响php脚本的速度或稳定性。
直到最近,只有
pinba_engine是唯一可以捕获和处理这些udp数据包的应用程序。 对“
简单而简洁 ”的安装的描述不鼓励人们再次阅读并深入研究它。 在长达一公里的依赖项列表中,既有程序包名称,程序名称,也包含指向安装时各个页面的链接,而这些页面具有指向其他依赖项的链接。 为了应对这种废话,没有人没有时间或欲望。
pinba2的安装过程变得
非常简单 。
也许有一天,可以用一个或两个命令安装pinba10,而无需阅读大量材料来了解如何执行此操作,但是到目前为止,事实并非如此。
如果您仍然安装了pinba_engine,那么这只是成功的一半。 毕竟,没有固定
板,您将不得不限制自己仅在最近几分钟内使用数据,或者自己汇总,保存和可视化数据。 插脚板很容易
安装是很好的。
似乎,如果来自php的所有度量标准都已经以protobuf格式进入udp端口,而编写一个将其捕获并将其存储在某种存储中的应用程序,为什么会遭受如此痛苦呢? 显然,想到这个主意的那些开发人员立即坐下来写他们的自行车,其中一些落在github上。
以下是对四个将指标存储在存储中的开源项目的回顾,这些数据很容易获得和可视化,例如使用grafana。
随时随地使用udp服务器,该服务器将指标存储在OpenTSDB中。 也许如果您已经在项目上使用过OpenTSDB,那么这样的解决方案将很适合您,否则我建议通过。
来自同一
habrayuzer的 udp服务器在
运行中 ,这一次可将指标保存在InfluxDB中。 在许多项目中,InfluxDB已经用于监视,因此该解决方案对他们来说非常有用。
优点:
- InfluxDB 允许您汇总接收到的指标,并在指定时间后删除原始指标。
缺点:
正在运行的udp服务器,它在ClickHouse中存储指标。 这是我朋友的决定。 在与他相识之后,我决定是时候该接受pinbu和clickhouse了。
优点:
- clickhouse是执行此类任务的理想选择,它可让您压缩数据以至于即使没有聚合也可以存储所有原始数据
- 如果需要,您可以轻松汇总结果指标
- 现成的格拉纳模板
- 保存计时器信息
缺点:
致命缺陷- 没有可用于配置数据库和表的名称,服务器的地址和端口的配置。
- 保存原始数据时,将使用辅助字典表来存储页面和域地址,这将使查询复杂化
- 从第一负开始的其他小事情
php中的udp服务器,用于在ClickHouse中存储指标。 这是我对pinba,ClickHouse和protobuf的了解而产生的解决方案。 当我处理这整个过程时,我写了“概念证明”,这对我来说出乎意料的是并没有消耗大量资源(30 MB RAM和少于八个处理器内核之一的1%),因此我决定与公众共享。
优点与先前的解决方案相同,我还使用了原始pinba_engine中的常用名称。 我还添加了一个配置,该配置允许您一次运行多个pinbaserver实例,以将指标保存到不同的表中-如果您不仅想从php收集数据,还想从nginx收集数据,这将非常有用。
缺点-一个“致命的缺陷”和您个人不会满意的小东西,但是我的解决方案“像拖鞋一样简单”,仅包含约100行代码,因此任何php开发人员都可以在几分钟内更改他不喜欢的内容。
工作原理监听udp端口30002,所有传入的数据包均根据protobuf方案进行解码并进行汇总。 每分钟将数据包插入pinba.requests表中的clickhouse。 (所有参数都在
config中配置 )
关于Clickhouse的一些知识Clickhouse支持各种存储引擎。 最常用的是MergeTree。
如果某个时候您决定一直存储聚合数据,而最后一次只存储原始数据,则可以创建具有分组的实例化视图,并定期清理主pinba.requests表,而所有数据仍将保留在实例化视图中。 此外,在创建pinba.requests表时,您可以指定“ engine = Null”,这样原始数据将完全不会保存到磁盘,同时仍将进入物化视图并进行汇总存储。 我将这种方案用于nginx指标,因为在nginx上,我的请求比在php上多50倍。
因此,您已经走了很长一段路,我不想半途而废,因此将详细描述我的解决方案的安装和配置以及您需要的一切,以及不止一艘船坠毁的陷阱。 对于Ubuntu 18.04 LTS和Centos 7的完整安装过程进行了介绍,在其他发行版和版本中,该过程可能会略有不同。
安装方式
我在
Dockerfile中做了所有必要的命令,以促进指令的可重复性。 下面仅描述陷阱。
PHP Pinba安装后,请确保在/etc/php/7.2/fpm/conf.d/20-pinba.ini文件中,所有选项均未注释。 在某些发行版(例如centos)中,可以将其注释掉。
extension=pinba.so pinba.enabled=1 pinba.server=127.0.0.1:30002
Clickhouse在安装过程中,clickhouse会要求您为默认用户设置密码。 默认情况下,该用户可通过所有ip使用,因此,如果服务器上没有防火墙,请确保为其设置密码。 安装后,也可以在/etc/clickhouse-server/users.xml文件中完成此操作。
还值得注意的是,Clickhouse使用了多个端口,包括9000。在某些发行版(例如,centos)中,此端口还用于php-fpm。 如果您已在使用此端口,则可以在/etc/clickhouse-server/config.xml文件中将其更改为另一个端口。
带有Clickhouse插件的grafana安装grafana后,请使用管理员用户名和管理员密码。 在第一个入口处,Graphan将要求您设置一个新密码。
接下来,转到“ +”->导入菜单,并指定要导入的仪表板编号
10011 。 我准备并填写了该仪表板,以便您不必自己再次进行操作。
grafana支持通过第三方插件与Clickhouse一起使用,但是对于第三方插件,grafan没有警报(这种情况已经持续了好几年)。
Pinba服务器安装protobuf和libevent是可选的,但可以提高pinba服务器的性能。 如果将pinba-server安装在/ opt以外的文件夹中,则还需要修复
systemd脚本文件。
Nginx下的pinba模块要编译该模块,您需要使用服务器上已经安装的相同版本的nginx的源以及相同的编译选项,否则汇编将成功,但是连接该模块时将产生一个错误消息,表明该模块是二进制不兼容的。 可以使用nginx -V命令查看编译选项
生活骇客我所有的网站只能在https上运行。 模式字段变得毫无意义,因此我使用它来分隔Web /控制台。
在可从Web访问的脚本中,我使用:
if (ini_get('pinba.enabled')) { pinba_schema_set('web'); }
在控制台中(例如,王冠脚本):
if (ini_get('pinba.enabled')) { pinba_schema_set('console'); }
在我的graphan仪表板中,有一个Web /控制台开关,用于分别查看统计信息。
您还可以将标签转移到pinbu,例如:
pinba_tag_set('country', $countryCode);
仅此而已。要求根据文章回答民意调查的重大要求。
传统上,我警告我不会通过Habr和社交网络的个人消息为您提供建议和帮助。
在github上启动票证。
另外,请
在like上用reddit支持本文的
英文版 。