.. _intro_pcp: ========================= Performance Co-Pilot简介 ========================= `Performance Co-Pilot `_ 是一种轻量级性能采集工具框架: - 轻量级: 通过搜集性能 :ref:`metrics` 能够有效分析系统性能 - 分布式: 可以从不同主机以及不同操作系统搜集 ``metrics`` 数据 - 自包含: 在所有主要Linux发行版都提供,包括 :ref:`redhat_linux` :ref:`fedora` ``debian`` :ref:`ubuntu_linux` :ref:`suse_linux` :ref:`gentoo_linux` - 可扩展: 提供插件框架(libraries, APIs, agents 和 daemon)可以从不同来源搜集性能数据,包括硬件,内核,服务,应用库以及应用 PCP采用插件框架可以适合中心化分析复杂的环境和系统,用户可以使用C, C++, Perl 和 Python 接口定制和添加性能metrics。 .. note:: `Performance Co-Pilot(WikiPedia) `_ 历史非常悠久,最早(1993年10月)是在SGI(商业Unix)上开发的,1995年发布了SGI IRIX操作系统的附加软件Performance Co-Pilot 1.0。到了2000年,PCP的核心重新在GNU LGPL协议下发布。当前已经成为很多Linux发行版内置提供的软件包。 Red Hat很早就开始在RHEL中提供PCP,并且在RHEL 7 到现在的 RHEL 9的性能优化手册中,都推荐采用PCP来做性能监控和分析。 `Performance Co-Pilot `_ 提供面向整体性能的监控,以及需要了解复杂系统的性能、资源利用率和瓶颈分析的需求。能够服务于大型服务器、服务器集群以及多服务器站点,包括数据库、计算、web和文件或视频服务: - 集成的工具、用户界面和服务,支持实时和回顾性性能分析 - 在底层(操作系统内核,DBMS,分层服务或最终用户应用程序)提供各种性能指标域代理(Performance Metrics Domain Agents, PMDAs),封装了有关自治域的知识,并从中导出性能数据: Performance Metrics Domain Agents (PMDAs) within PCP encapsulate the knowledge about, and export performance information from, autonomous performance domains. - 统一命名和访问性能指标: 采用统一的命名性能指标(跨架构?),构成了性能指标名称空间(Performance Metrics Name Space, PMNs),提供单一界面来命名和检索所有性能指标值,不论其来源或位置。 - 动态适应变化: 复杂集群不断变化(故障、升级、变更等等),PCP分布式特性能够适应受监控系统的花花,客户端会自动重新连接并报告 - 记录和回放: PCP归档日志,提供监控回放 - 可扩展性: 能够将新的性能指标集成到PMNS,对于应用开发人员,提供了一个库支持在应用程序中插入跟踪和监控点,可以将结果性能数据自动导出懂啊PCP框架(发行版中提供了源代码示例,以便定制性能或服务性度量可以集成到PCP框架中) PCP基础概念 ============ .. note:: PCP基础概念涉及性能指标的很多概念,我看得也是云里雾里;先这样吧...具体请参考原文 - 性能指标: 在性能指标领域有大量的性能指标,每个指标有自己的结构和语义,PCP为指标提供了统一接口,独立于底层指标数据源 - 性能指标实例: 瞬间态性能指标对于同一个指标的重复请求会返回不同数值 - 当前指标上下文(context) - 性能metrics的来源和作用域: 每个域都有一个关联的访问方法 - 操作系统内核: 子系统数据结构(每个进程的资源消耗,网络、磁盘或内存的资源消耗) - 分层软件服务: web服务哦和电子邮件服务端 活动日志 - 应用程序: 对运行的应用程序定期探测,应用的响应实践、每分钟计算旅和吞吐量 - 性能指标(performance metrics)是抽象的数据类型,但是性能指标会随着软件和硬件的组合变化以及时间而变化 - 性能指标域(performance metrics domins)需要有唯一的性能标识符(Performance Metric Identifier, PMID),相同的标识符可以用于所有主机上的性能指示 - 分布式采集: PCP的性能指标采集是分布式架构, PMDA在采集性能数据的系统上运行,而PMCD进程负责将这些工具连接起来: .. figure:: ../../_static/performance/pcp/pcp_remote-collector.svg PCP远程采集示意图 运行 monitoring 工具的主机不需要任何采集工具,包括 ``pmcd`` 也不需要安装,这是因为所有的metrics的请求都是发送给采集主机的 ``pmcd`` 。这些请求再被转发给 ``pmda`` ,也就是实际负责metric描述,帮助文本,以及metrics值: - 在监控客户端和 ``pmcd`` 进程之间的连接是通过 ``libpcp`` 管理的,运行层低于 PMAPI - ``pmda`` 和 ``pmcd`` 之间的连接则有 ``pmda`` routines管理 - 在一个主机上可以运行多个监控客户端和多个 ``pmda`` ,但是通常只有一个 ``pmcd`` 进程 - Performance Metrics Name Space(性能指标命名空间): - PMNS树类似DNS结构的倒立树状结构 - PMNS树的每个节点都分配一个标签,标签必须以字母字符开头,后面跟0个或多个字母数字字符或下划线;树的根节点则有一个特殊标签 ``root`` .. figure:: ../../_static/performance/pcp/pmns-small.svg PMNS树状结构(类似DNS) 在上述案例中, ``performance metrics`` 案例:: kernel.percpu.syscall network.tcp.rcvpack hw.router.recv.total_util - Performance Metrics描述: - ``单值`` 性能指标(Single-Valued Performance Metrics): 一些性能指标对于一个主机只有一个值,例如可用内存,上下文切换总数等 - ``集合-值`` 性能指标(Set-Valued Performance Metrics): 在性能度量域有一组值或实例,例如主机有很多个磁盘,主机中运行了很多进程,主机中CPU有很多个core。性能指标 ``disk.dev.total`` 对每个磁盘轴的I/O操作进行计数,并且关联的实例域包含每个磁盘轴的一个成员。 - 采集器(Collector)和监控(Monitor)角色(每个启用PCP的主机可以作为Collector或Monitor,或者同时两者): - 采集器(Collector): 运行 ``pmcd`` 和 ``pmda`` 来采集性能指标的主机 - 监控(Monitor): 负责导入性能指标(metrics)的主机 - 性能指标(Performance Metrics)的回放源(Retrospective Source): - ``PMAPI`` 支持以PCP归档日志的历史源传输性能指标,也就是监控性能指标回放: .. figure:: ../../_static/performance/pcp/retrospective-architecture.svg Performance Metrics回放 - PCP扩展性: - Performance Analyst可以使用PCP基础设施来部署性能监控工具和服务 - 可以自定义开发PMDA来实现新的性能指标 - ``libpcp_pmda`` 和 ``libpcp_mmv`` 可以从本地应用程序导出性能指标 - 可以在网络中分布部署性能采集器,而服务器端集中处理 PCP组件 ========= Performance Monitor和可视化 ----------------------------- - ``pcp-atop`` - ``pmchart`` - ``pcp-collectl`` - ``pmrep`` - ``pmevent`` - ``pmie`` - ``pmieconf`` - ``pminfo`` - ``pmlogsummary`` - ``pmprobe`` - ``pmstat`` - ``pmval`` 采集、传输和归档 性能信息 --------------------------- - ``mkaf`` - ``pmafm`` - ``pmcd`` - ``pmcd_wait`` - ``pmdaapache`` :ref:`apache` 性能数据采集 - ``pmdacisco`` Cisco路由器性嫩数据采集 - ``pmdaelasticseach`` - ``pmdagfs2`` - ``pmdagluster`` :ref:`gluster` 性能数据采集 - ``pmdainfiniband`` - ``pmdakvm`` :ref:`kvm` 架构虚拟机性能采集 - ``pmdalustrecomm`` - ``pmdamailq`` - ``pmdamemcache`` memcached 性能数据采集 - ``pmdammv`` Java Parfait框架的性能数据采集 - ``pmdamysql`` :ref:`mysql` 数据库性能数据采集 - ``pmdanamed`` DNS服务器 ``named`` 性能采集 - ``pmdanginx`` :ref:`nginx` 性能采集 - ``pmdapostfix`` Postfix邮件服务器性能采集 - ``pmdapostgres`` :ref:`pgsql` 数据库性能采集 - ``pmdaproc`` 运行进程的性能采集 - ``pmdarsyslog`` - ``pmdasamba`` Samba性能采集 - ``pmdasendmail`` - ``pmdashping`` - ``pmdasnmp`` - ``pmdasummary`` - ``pmdasystemd`` :ref:`systemd` 和 journald 服务的性能采集 - ``pmdatrace`` 使用 ``pcp_trace`` 库的应用程序进程性能采集 - ``pmdavmware`` VMWare虚拟机性能采集 - ``pmdaweblog`` - ``pmdaxfs`` :ref:`xfs` 性能采集 - ``pmdumplog`` **pmlogger** 归档PCP日志的性能 - ``pmlc`` - ``pmlogcheck`` - ``pmlogconf`` - ``pmlogextract`` - ``pmlogger`` - ``pmproxy`` 提供REST API - ``pmtrace`` 运行和基础设施支持 ------------------- 应用程序和Agent开发 --------------------- 参考 ====== - `Performance Co-Pilot Features `_ - `PCP Quick Reference Guide: Introduction `_ - `Performance Co-Pilot(WikiPedia) `_ - `PCP docs: Introduction to PCP `_