实时统计和监视PHP脚本。 ClickHouse和Grafana去帮助Pinba

在本文中,我将向您展示如何将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。

olegfedoseev / pinba服务器 (2017年11月)


随时随地使用udp服务器,该服务器将指标存储在OpenTSDB中。 也许如果您已经在项目上使用过OpenTSDB,那么这样的解决方案将很适合您,否则我建议通过。

Olegfedoseev / pinba-influxdb (2018年6月)


来自同一habrayuzer的 udp服务器在运行中 ,这一次可将指标保存在InfluxDB中。 在许多项目中,InfluxDB已经用于监视,因此该解决方案对他们来说非常有用。

优点:

  • InfluxDB 允许您汇总接收到的指标,并在指定时间后删除原始指标。

缺点:


ClickHouse-Ninja / Proton (2019年1月)


正在运行的udp服务器,它在ClickHouse中存储指标。 这是我朋友的决定。 在与他相识之后,我决定是时候该接受pinbu和clickhouse了。

优点:

  • clickhouse是执行此类任务的理想选择,它可让您压缩数据以至于即使没有聚合也可以存储所有原始数据
  • 如果需要,您可以轻松汇总结果指标
  • 现成的格拉纳模板
  • 保存计时器信息

缺点:

  • 致命缺陷
  • 没有可用于配置数据库和表的名称,服务器的地址和端口的配置。
  • 保存原始数据时,将使用辅助字典表来存储页面和域地址,这将使查询复杂化
  • 从第一负开始的其他小事情

pinba服务器/ pinba服务器 (2019年4月)


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支持本文的英文版

Source: https://habr.com/ru/post/zh-CN444610/


All Articles