·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

实战Pinba监控系统

141 0
发表于 2023-4-21 17:49:10 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
谁都知道监控系统很重要,但是要自己搭建一套好用的系统却不是一件简单的事情。国内已经有不少厂商提供类似的服务,比如:OneAPM、听云,其原理就是通过在服务器上部署一套探针,把数据汇总上报,但是问题却不像说起来这么简单,我曾经买过国内某个厂商高大上的 APM 服务,谁知道它监控的指标太多了,并且无法自定义,结果导致一上线,系统性能就下降百分之二十,最后无奈只好放弃。

我想要的是一种对系统性能影响尽可能小的监控系统,它不需要监控太多指标,只要有 RPS、CPU、内存、响应时间等几个核心数据即可,而 Pinba 简直就是为此量身打造的:PINBA(PHP Is Not A Bottleneck Anymore)原本是 PHP 专用的,其工作原理大致是:在每个请求处理完成后,PHP 把相关数据通过 UDP 发送给 Pinba 自定义的 MySQL 引擎。因为数据是通过 UDP 传输的,所以对原有系统的性能影响很小。如果非要说说 Pinba 的缺点,那么它没有提供一个官方的 UI 算一个,好在 Pinboard 弥补了不足:
实战Pinba监控系统 实战,监控,监控系统,系统,知道
Pinboard
说到这,估计大家都迫不及待的想试试 Pinba + Pinboard 了,不过从我的经历来看,想把这套系统跑起来的话需要绕开很多坑,我前前后后搞了五六次才算成功,失败的主要原因在于各个软件更新频率不一样,依赖关系复杂,于是就出现所有软件都装了最新稳定版,但是整个系统却不能正常运转,实际上想清楚了也简单,截止本文发稿前,这些软件的最新版 Pinboard 最老,所以就以它为参照点,找其它软件在对应的发布版本:
    Pinba 1.1.0:2015-02-12
    Pinboard 1.5.2:2015-06-09
在安装 Pinba 之前,先要安装好 MySQL,在 Pinba 官网描述支持 MySQL 5.1 以上版本,但是我测试了最新稳定版并不能正常工作,稳妥起见,我选择安装 MySQL 5.1.72,此版本比较旧,和当前主流版本的安装步骤略有不同,所以我还是把操作贴出来:
  1. shell> groupadd mysql
  2. shell> useradd -r -g mysql -s /bin/false mysql
  3. shell> tar zxvf mysql-5.1.72.tar.gz
  4. shell> cd mysql-5.1.72
  5. shell> ./configure --prefix=/usr/local/mysql
  6. shell> make
  7. shell> make install
  8. shell> cd /usr/local/mysql
  9. shell> chown -R mysql .
  10. shell> chgrp -R mysql .
  11. shell> bin/mysql_install_db --user=mysql
  12. shell> chown -R root .
  13. shell> chown -R mysql var
  14. shell> cp support-files/my-medium.cnf /etc/my.cnf
  15. shell> cp support-files/mysql.server /etc/init.d/mysql.server
  16. shell> chmod +x /etc/init.d/mysql.server
  17. shell> chkconfig mysql.server on
  18. shell> /etc/init.d/mysql.server start
复制代码
然后安装 Pinba 1.1.0,记得之前需要先装好 Judy 1.0.5 和 Libevent 1.4.15:
  1. shell> tar zxvf pinba_engine-1.1.0.tar.gz
  2. shell> ./configure
  3.        --with-judy=/usr/local \
  4.        --with-event=/usr/local \
  5.        --with-mysql=/path/to/mysql/source/code \
  6.        --libdir=/usr/local/mysql/lib/mysql/plugin
  7. shell> make
  8. shell> make install
复制代码
接下来在 MySQL 里加载 Pinba 插件,并创建必要的数据结构:
  1. mysql> INSTALL PLUGIN pinba SONAME 'libpinba_engine.so';
  2. mysql> CREATE DATABASE pinba;
  3. shell> mysql -D pinba < default_tables.sql
复制代码
为了稍后在 Pinboard 中使用,我们还需要创建一个账号来访问 pinba 数据库:
  1. mysql> GRANT ALL PRIVILEGES ON pinba.* TO pinba@"<HOST>"
  2.        IDENTIFIED BY "<PASSWORD>";
复制代码
说明:Pinba 请求池缺省保存 900 秒的数据,也就是 15 分钟,后续 Pinboard 的 cron 设置必须与此相同,但是不得不说跨度有点长,建议在 my.cnf 里改为 60 秒:
  1. mysql> SHOW VARIABLES LIKE 'pinba%';
  2. +------------------------------+---------+
  3. | Variable_name                | Value   |
  4. +------------------------------+---------+
  5. | pinba_address                |         |
  6. | pinba_cpu_start              | 0       |
  7. | pinba_data_pool_size         | 0       |
  8. | pinba_histogram_max_time     | 10      |
  9. | pinba_port                   | 30002   |
  10. | pinba_request_pool_size      | 1000000 |
  11. | pinba_stats_gathering_period | 10000   |
  12. | pinba_stats_history          | 60      |
  13. | pinba_temp_pool_size         | 10000   |
  14. | pinba_temp_pool_size_limit   | 1000    |
  15. | pinba_timer_pool_size        | 100000  |
  16. +------------------------------+---------+
复制代码
如此 Pinba 就安装好了,下面需要安装 PHP 扩展,需要注意的是当前默认仓库里保存的是 PHP7 相关的代码,如果你和我一样还使用 PHP5,那么需要切换分支:
  1. shell> git clone https://github.com/tony2001/pinba_extension.git
  2. shell> cd pinba_extension
  3. shell> git checkout -b php5 remotes/origin/php5
  4. shell> phpize
  5. shell> ./configure
  6. shell> make
  7. shell> make install
复制代码
稍后安装 Pinboard 的时候,还需要安装 apc 扩展,不过 apc 扩展已经不在维护了,好在我们可以安装 apcu 扩展,并激活兼容模式,用来来实现 apc 扩展的功能:
  1. shell> wget http://pecl.php.net/get/apcu-4.0.11.tgz
  2. shell> tar zxvf apcu-4.0.11.tgz
  3. shell> cd apcu-4.0.11
  4. shell> phpize
  5. shell> ./configure --enable-apc-bc
  6. shell> make
  7. shell> make install
复制代码
最后安装 Pinboard,记得之前需要先安装好 Composer:
  1. shell> tar zxvf v1.5.2.tar.gz
  2. shell> cd pinboard-1.5.2
  3. shell> composer install
  4. shell> ./console migrations:migrate
  5. shell> ./console register-crontab
复制代码
说明:Pinboard 在通过 cron 执行 aggregate 的时候,内部通过一个 lock 文件来避免并发操作,实际上效果并不好,如果某次执行失败没能正常删除锁文件,后续操作就无法执行了,其实在设置 cron 的时候搭配操作系统本身的 flock -xn -c … 命令更好。
当然了,我们还需要修改一下 PHP 程序的前端控制器,在里面激活 Pinba,比如:
  1. <?php
  2. if (extension_loaded('pinba')) {
  3.   ini_set('pinba.enabled', true);
  4.   ini_set('pinba.server', '<IP>');
  5.   pinba_script_name_set($_SERVER['REQUEST_URI']);
  6. }
  7. ?>
复制代码
一切就绪后,我们可以利用 tcpdump 在服务器上确认看看有没有数据:
  1. shell> tcpdump -nn -i any udp port 30002
复制代码
本文介绍的都是 Pinba 最基本,同时也是最常用的功能,实际上 Pinba 还有很多杀手级功能,比如 timer,利用它我们可以精确控制监控粒度,实现类似鹰眼的效果,网上能找到很多例子,本文篇幅所限,在这里我就不再赘述了。
此外,大家可能会关注 Pinba 服务器的性能如何,如果在大流量网站上使用会不会出现问题,我是在一个日访问量几百万左右的网站上部署测试的 Pinba,得益于 Pinba 自定义引擎的性能,MySQL 本身毫无压力,可以预想千万级请求量问题不大。如果流量多到几个亿,可能会有问题,但即使那样也不要紧,我们只要控制一个采样百分比就好了。

原文链接:http://huoding.com/2016/10/26/548
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.191.37.129,GMT+8, 2024-12-22 22:42 , Processed in 0.221999 second(s), 81 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表