0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux 9自动化部署Pinpoint APM

CHANBAEK 来源:魏文第 作者:魏文第 2023-12-04 14:54 次阅读

信息技术和系统管理领域,使用 Application Performance Management(应用程序性能管理)来监控和管理应用程序的性能和可用性。APM 致力于检测和诊断复杂的应用程序性能问题,以保持预期的服务级别,将 IT 指标转化为业务价值。

Pinpoint 是一个开源的、主流的 APM 实现,灵感来自 Google Dapper,使用 Java、PHP、Python 开发。全球有数百万用户使用它分析架构以及跨分布式应用程序组件之间的互联。

本文将通过以下主题,介绍 Pinpoint 的自动化部署,以及如何配置它监控应用:

  • Pinpoint 介绍
  • 自动化部署 Pinpoint
  • 访问 Pinpoint Web UI
  • 配置监控
  • 总结

39.1 PinPoint 介绍

本节主要从两方面讨论 Pinpoint。

39.1.1 Pinpoint 架构

Pinpoint 架构如下:

图片
图39.1, PinPoint 架构图,图片来自 PinPoint 官网

从图中可以看到四个主要组件:

  • Pinpoint Collector:Web 应用程序,收集应用数据
  • HBase Storage:开源的非关系数据库,存储 Pinpoint 数据
  • Pinpoint Web UI:Pinpoint 前端
  • Pinpoint Agent:将应用程序的数据发送到 Pinpoint Collector

39.1.2 Pinpoint 特性

以下是 Pinpoint 的相关特性,也是它为什么在众多 APM 中脱颖而出的原因:

  • 提供云和主机监控;
  • 分布式事务跟踪,用于跨分布式应用程序跟踪;
  • 应用程序拓扑概览,跟踪所有组件之间的事务,以识别潜在的问题;
  • 轻量级,对系统性能影响较小;
  • 提供代码级可见性,轻松识别故障点和瓶颈;
  • 事务代码级可见性,响应模式和请求计数;
  • 提供字节码检测技术,使用中无需修改应用程序代码
  • 自动检测应用程序拓扑,帮助技术人员了解应用程序配置;
  • 实时监控,实时观察活动线程;
  • 水平可扩展,支持大规模服务器组。

39.2 自动化部署 Pinpoint

本节演示如何使用 Ansible 与 Docker,完成 Pinpoint 的自动化部署。

文中使用的代码已提交至 GitHub,可以在对应目录中查询。

39.2.1 要求

Ansible 主机可通过具有 sudo 权限的用户免密登录 Pinpoint 主机。

有关 sudo 及免密的配置,可以参考之前的文章,或在 GitHub 代码中查看。

39.2.2 克隆代码到 Ansible 节点

在 Ansible 节点上执行以下命令,将自动化代码克隆到本地:

$ git clone https://github.com/weiwendi/automate.git

进入 automate/playbook/ 目录,里面包含了很多组件的自动化部署。在本篇文章中,主要用到了 dockerpinpoint 两个目录。

39.2.3 安装 Docker

进入 docker/ 目录,修改 hosts 文件,指定 Pinpoint 主机名或 IP。例如我的 Pinpoint 主机 IP 为 10.211.55.69、主机名为 common.server.aiops.red,hosts 文件内容如下:

[nodes]
common.server.aiops.red

需要根据实际的 IP 或主机名称替换 'common.server.aiops.red'。

安装 Docker:

ansible-playbook -i hosts playbook.yaml

39.2.4 安装 Pinpoint

切换到 pinpoint 目录:

cd ../pinpoint/

首先修改 hosts 文件,就像安装 Docker 时那样,将 Pinpoint 主机的 IP 或主机名写入该文件。

然后执行 possibleReboot.yaml 文件,它的作用是:

  • 关闭 Selinux
  • 关闭 Firewalld
  • 更新软件包

关闭 Selinux 和更新软件包的过程,都可能会重启服务器,因此把这个文件独立出来,用于初次部署时执行。

执行 possibleReboot.yaml 文件:

ansible-playbook -i hosts possibleReboot.yaml

最后,执行以下命令安装 Pinpoint:

ansible-playbook -i hosts playbook.yaml

该命令执行时间比较长,执行过程中可能会遇到报错。报错很可能是从 GitHub 下载 pinpoint-docker 项目时的网络原因导致。

注意:

要想在自动化过程中避免下载 GitHub 代码的网络超时引发的错误,可以提前手动将 pinpoint-docker 项目的代码克隆到 Pinpoin 主机指定的目录下,然后注释 ../../roles/pinpoint/tasks/main.yml 文件中以下内容:

- name: clone pinpoint-docker project task
    ansible.builtin.git:
      repo: 'https://github.com/pinpoint-apm/pinpoint-docker.git'
      dest: "{{ deployDir }}"
      single_branch: true
      version: "{{ version }}"

../../roles/pinpoint/defaults/main.yml 文件中定义了两个变量:

---
# defaults file for pinpoint
#
deployDir: /software/repos/pinpoint-docker
version: 2.5.2
  • deployDir:存放 pinpoint-docker 项目的目录
  • version:Pinpoint 版本

39.3 访问 Pinpoint Web UI

在浏览器中输入 Pinpoint 主机 IP:8080 访问 Pinpoint Web UI。如果能正常打开页面,说明部署顺利完成。如果打不开页面,需要通过 docker ps -a 命令和 docker logs 等命令查看 Pinpoint 容器的运行情况,以及检查网络连通性。

此时 Pinpoint 并没有监控数据,需要通过 Pinpoint Agent,收集监控对象的数据。下一节我会通过三个示例演示如何监控 Java 程序。

39.4 配置监控

本节通过演示配置 Pinpoint APM 监控 Zookeeper、Kafka 和 Tomcat,来介绍 Pinpoin 如何使用、以及它的易用性。

39.4.1 下载 Pinpoint Agent

在 GitHub pinpoint-apm 中下载对应版本的 Agent。

示例中解压到了被监控组件主机的 /opt/pagent252/

修改 /opt/pagent252/profiles/release/pinpoint.config 文件,把文件中所有 127.0.0.1 的地址,修改为 Pinpoint 主机的 IP 地址。

39.4.2 监控 Zookeeper

修改 Zookeeper 的启动文件,进入 Zookeeper 主目录,编辑 bin/zkServer.sh,增加以下内容:

start)
    echo  -n "Starting zookeeper ... "
    if [ -f "$ZOOPIDFILE" ]; then
      if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2 >&1; then
         echo $command already running as process `cat "$ZOOPIDFILE"`.
         exit 1
      fi
    fi
    nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" 
    "-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" 
    -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar  # 新增内容
    -Dpinpoint.agentId=zk01  # 新增内容
    -Dpinpoint.applicationName=zk  # 新增内容
    -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' 
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2 >&1 < /dev/null &
...
  • -javaagent :指定 Pinpoint Agent 包路径;
  • -Dpinpoint.agentId :全局唯一 ID,可以与 applicationName 关联定位应用;
  • -Dpinpoint.applicationName :应用名称,对于多副本部署的应用,该名称应设置为相同的值,通过 -Dpinpoint.agentId 的不同进行区分。

重启 Zookeeper 服务,使配置生效。

查看 Pinpoint Web UI,可以看到类似以下界面:

图片
图39.2, 监控 zk

39.4.3 监控 Kafka

在 Kafka 主机上准备好 Pinpoint Agent。修改 Kafka 的启动文件,通常位于 Kafka 目录的 bin/kafka-run-class.sh。修改以下内容:

if [ "x$DAEMON_MODE" = "xtrue" ]; then
  nohup "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpin
point.agentId=kafka2 -Dpinpoint.applicationName=kafka $KAFKA_LOG4J_OPTS -cp "$CLASSPATH" $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2 >&1 < /dev/null &
else
  exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpinp
oint.agentId=kafka2 -Dpinpoint.applicationName=kafka $KAFKA_LOG4J_OPTS -cp "$CLASSPATH" $KAFKA_OPTS "$@"
fi

-javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpin point.agentId=kafka2 -Dpinpoint.applicationName=kafka 为新增内容。

重启 Kafka 服务,使配置生效。再次查看 Web UI:

图片
图39.3, 监控 Kafka

39.4.4 监控 Tomcat

在 Tomcat 节点上,准备好 Pinpoint Agent。

修改 Tomcat bin/catalina.sh 文件,在文件开始部分增加以下内容:

#!/bin/sh
# 新增内容
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=tomcat1"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=tomcat"

保存并重启 Tomcat 服务,然后查看 Web UI:

图片
图39.4 监控 Tomcat 内存堆栈等使用

再来看看 Tomcat 调用链路拓扑及接口响应信息:

图片
图39.5, 链路追踪与自动生成拓扑

39.5 总结

Pinpoint APM 是常用的链路跟踪及监控工具,本教程演示了 Pinpoint APM 的自动化部署,以及如何配置 Pinpoint 监控 Java 程序。教程同样适用于其他基于 RPM 的 Linux 发行版。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11355

    浏览量

    210686
  • 开源
    +关注

    关注

    3

    文章

    3425

    浏览量

    42800
  • 应用程序
    +关注

    关注

    38

    文章

    3299

    浏览量

    57994
  • APM
    APM
    +关注

    关注

    1

    文章

    72

    浏览量

    13059
收藏 人收藏

    相关推荐

    工控仪器自动化

    工控仪器自动化自动化:化学吸附micromeritics.com.cn/products_view.aspx?id=9产业控制自动化技术是一种运用控制理论、仪器仪表、计算机和其它信息
    发表于 09-17 15:37

    招聘自动化、电气自动化自动化控制工程师

    招聘自动化、电气自动化自动化控制工程师,挂证,不坐班,要求持有相关专业的中级职称证,用于我司资质申报工作上,凑资质人员申报资质,不存在风险。联系电话***,Q1580479594李经理
    发表于 10-24 18:06

    实现工业自动化的市场阻碍

    很多人把工业自动化等同于了物联网,实际上物联网只是实现工业自动化的一种手段,而非目的。现在物联网的实际应用只存在于大型的制造商中间。中小企业资源和能力的缺失阻碍了中国工业自动化整体前进。现在市场上
    发表于 09-11 15:54

    七个步骤实现自动化测试

    本文介绍自动化测试的 7 个步骤:改进自动化测试过程,定义需求,验证概念,支持产品的可测试性,具有可延续性的设计( design for sustainability ),有计划的部署和面对成功的挑战。按照以上 7 个步骤,安排
    发表于 07-18 07:42

    七个步骤完成自动化测试

    ),有计划的部署和面对成功的挑战。按照以上 7 个步骤,安排你的人员、工具和制定你的自动化测试项目计划,你将会通往一条成功之路。
    发表于 07-19 06:12

    如何搭建DotNet Core 21自动化构建和部署环境

    边缘搭建DotNet Core 21 自动化构建和部署环境(上)
    发表于 04-23 14:53

    基于IAR EW编译工具实现Linux系统上自动化构建

    框架的自动化编译和测试过程,进而支持关键软件编译和测试的大规模部署。 现在支持ARM、瑞萨RH850和RX内核的编译工具链可以在Linux系统上运行。1IAR Linux系统编译工具链
    发表于 11-27 13:41

    风河Linux平台构建新型家庭自动化网关

    风河Linux平台构建新型家庭自动化网关 Intel全资子公司风河系统公司(WindRiver)日前宣布,比利时fifthplay公司选择WindRiverLinux作为构建其新型家庭自动化网关。  &
    发表于 11-06 16:13 1003次阅读

    jenkins自动化部署

    本文详细介绍Jenkins的简单使用—jenkins自动化部署
    的头像 发表于 02-06 11:27 4819次阅读
    jenkins<b class='flag-5'>自动化</b><b class='flag-5'>部署</b>

    云平台的自动化部署设计与实现

    基于简化部署操作、节省部署时间、提高部署效率的目的,对云平台架构和网络拓扑进行设计,对云平台自动化系统的需求进行分析,重点对自动化
    发表于 02-23 10:07 0次下载
    云平台的<b class='flag-5'>自动化</b><b class='flag-5'>部署</b>设计与实现

    数据中心如何实现自动化部署

    数据中心里设备千万,并需要不断进行扩容,而一般数据中心运维也就十几个人,要反复重复着这样的工作,所以有人设计了自动化部署的架构。就是在数据中心新增设备时,即插即用,只要将设备上电,网线连接好,就可以
    的头像 发表于 03-15 11:43 3113次阅读

    5G承载网络建设向自动化部署的方向迈出坚实的步伐

    近日,中兴通讯联合福建省移动和宁德市移动在宁德现网完成创新SPN网络自动化部署方案的验证,将网元开通和部署效率提升70%以上,标志着5G承载网络建设向自动化
    的头像 发表于 11-19 09:28 1750次阅读

    部署Linux的最佳实践探索

    编者按:本文节选自节选自《基于Linux的企业自动化》第五章。“第5章,使用Ansible构建用于部署的虚拟机模板,通过构建虚拟机模板来探索部署Li
    的头像 发表于 05-16 09:35 618次阅读

    Jenkins 与 SonarQube 集成部署自动化代码质量监控

    的性能表现,为 Jenkins 与 SonarQube 的集成部署提供强大支撑。在 Flexus X 的助力下,自动化代码扫描与质量问题即时反馈成为可能,显著提升团队开发效率与软件质量。立即体验华为云
    的头像 发表于 01-07 17:24 303次阅读
    Jenkins 与 SonarQube 集成<b class='flag-5'>部署</b>,<b class='flag-5'>自动化</b>代码质量监控

    基于 Docker 与 Jenkins 实现自动化部署

    前言 重塑自动化部署新高度,Docker 携手 Jenkins,在华为云 Flexus X 云服务器的加持下,引领持续集成与部署的新纪元。Flexus X 以其卓越的性能、灵活的资源配置和高效的成本
    的头像 发表于 01-07 17:25 237次阅读
    基于 Docker 与 Jenkins 实现<b class='flag-5'>自动化</b><b class='flag-5'>部署</b>