专栏首页yuezhimi微服务链路监控系统-Pinpoint

微服务链路监控系统-Pinpoint

全链路监控

随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求 往往需要涉及到多个服务。这些服务可能不同编程语言开发,不同 团队开发,可能部署很多副本。因此,就需要一些可以帮助理解系 统行为、用于分析性能问题的工具,以便发生故障的时候,能够快 速定位和解决问题。全链路监控组件就在这样的问题背景下产生了。 全链路性能监控 从整体维度到局部维度展示各项指标,将跨应用的 所有调用链性能信息集中展现,可方便度量整体和局部性能,并且 方便找到故障产生的源头,生产上可极大缩短故障排除时间。

全链路监控解决什么问题

• 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示 • 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数 • 容器规划参考:扩容/缩容、服务降级、流量控制 • 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息

全链路监控选择依据

全链路监控系统有很多,应从这几方面选择:

• 探针的性能消耗

APM组件服务的影响应该做到足够小,数据分析要快,性能占用小。

• 代码的侵入性 即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统, 对于使用方透明,减少开发人员的负担。

• 监控维度 分析的维度尽可能多。

• 可扩展性 一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展 性。能够支持的组件越多当然越好。 主流系统:zipkin、skywalking、pinpoint

Pinpoint 介绍

Pinpoint是一个APM(应用程序性能管理)工具,适用于用Java/PHP编写的大型分布式系统。 特性:

 服务器地图(ServerMap)通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点 会 展示这个模块的详情,比如它当前的状态和请求数量。

 实时活动线程图 (Realtime Active Thread Chart) :实时监控应用内部的活动线程。

 请求/响应分布图( Request/Response Scatter Chart ) :长期可视化请求数量和应答模式来定位潜在问题。 通过在图表上拉拽可以选择请求查看 更多的详细信息。

 调用栈( CallStack ):在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。

 检查器( Inspector ) :查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。

Pinpoint 部署

https://github.com/naver/pinpoint

https://github.com/naver/pinpoint-docker

安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
systemctl start docker
systemctl enable docker

安装Docker-compose
# sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose --version
docker-compose version 1.23.1, build b02f1306

安装pinpoint
git clone https://github.com/naver/pinpoint-docker.git 
cd pinpoint-docker 
docker-compose pull && docker-compose up -d

# docker ps -a |awk '{print $2}'
ID
pinpointdocker/pinpoint-quickstart
pinpointdocker/pinpoint-agent:1.8.5
pinpointdocker/pinpoint-web:1.8.5
pinpointdocker/pinpoint-collector:1.8.5
flink:1.3.1
flink:1.3.1
zookeeper:3.4
zookeeper:3.4
pinpointdocker/pinpoint-hbase:1.8.5
zookeeper:3.4
pinpointdocker/pinpoint-mysql:1.8.5
  • Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI
  • Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
  • Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
  • WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
  • Quickstart:官方提供了一个测试用的应用
  • Pinpoint-Mysql是使用“报警”功能所必需的。它的服务器在端口13306上运行,并包含用于注册要发送的用户,组和警报的数据结构。如果不需要可以不安装

浏览器访问PinPoint WEB

我们启动pinpoint-quickstart演示实例,过一会数据采集完成,可以在浏览器看到数据。

Pinpoint Agent部署

Tomcat: 
# catalina.sh 
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar" 
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID" 
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"

Jar: 
java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID -Dpinpoint.applicationName=$APPLICATION_NAME  xxx.jar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • docker数据管理

    用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及到容器的数据管理操作...

    yuezhimi
  • kubernetes-ingress(十)

    https://kubernetes.io/docs/concepts/services-networking/ingress/

    yuezhimi
  • centos7 安装mysql5.7

    yuezhimi
  • Docker 入门到实战教程(十三)Docker Compose

    这里构建一个运行在Docker Compose上的简单Python Web应用程序。该应用程序使用Flask框架,并在Redis中维护一个计数器。尽管该示例使用...

    小东啊
  • Docker 入门(二):从实例来看 Dockerfile 和 Compose

    上一文中提到,每次对容器做了改动,如果不把它 commit 成新的镜像,在删除容器后,数据也会丢失,有没有什么更好的办法来保存数据呢?使用数据卷就可以解决这个问...

    zhisheng
  • Flutter简介

    前面孟浪了,直接推了一篇Drawer实现,简介补齐,需要请查收。大家周末快乐哈,老规矩下班前走一发。

    小海编码日记
  • docker storage driver

    使用docker目录创建一个volume,并将该volume挂载到容器的/my_Cvol目录下

    charlieroro
  • Android UI中TextView的使用方法

    注:Spannable.SPAN_EXCLUSIVE_EXCLUSIVE参数是对区域的说明,左包含,右不包含SpannableStringBuilder的app...

    砸漏
  • 好雨云帮一周问答集锦(2017.02.27-2017.03.12)

    Rainbond开源
  • 好雨云帮一周问答集锦(2017.02.27-2017.03.12)

    Q:在多个容器节点的集群环境,如果某个容器节点挂了,该节点上的容器会在其他节点上自动重启吗?

    Rainbond开源

扫码关注云+社区

领取腾讯云代金券