暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

链路监控apm工具-pinpoint集群部署实践

大侠之运维 2022-06-26
1836

目前比较火的链路监控工具的话,开源的有skyworking、cat、pinpoint。skyworking的话,之前也有使用过,但是没有太熟,cat的话上家公司就有使用,但是部署接入的话,还涉及到代码变动,不准备使用。


pinpoint链路监控工具的话,在几年前就一直在使用,那会儿版本还比较低,也是单机部署的,只有一个hbase作为存储,然后后面几年也一直在使用,比较熟悉,于是搭建新的链路监控平台,就准备使用pinpoint 了。


因为存储采用的是hbase,为了更稳定,后面不再重复工作,所以直接准备上集群版,所以需要搭建的有,zookeeper集群、habse集群、hadoop集群、collertor采集器集群高可用。


所需软件:

    jdk 1.8 #目前pinpoint最新版2.4.0 需要更高版本jdk,这里部署2.3。0
    zookeeper 3.6.3
    hadoop 2.7.0
    hbase 1.4.0
    pinpoint collector&web  2.3.0
    nginx 1.21.1

    关于版本匹配,可以到github中看下:

    https://github.com/pinpoint-apm/pinpoint

    官方介绍文档,可以参考:

    https://pinpoint-apm.gitbook.io/pinpoint/



    本文目录结构:

      jdk环境配置
      集群之间免密配置&host配置
      zookeeper集群部署
      hadoop集群部署
      habse集群部署
      collertor集群启动
      web访问启动
      agent接入
      后续:监控告警接入


      下为正文
      jdk环境配置
      jdk的话,之前的文章也有介绍,很简单
      解压对应的包之后
      把对应的三台都添加环境变量就好
      vim etc/profile
        export JAVA_HOME=/opt/jdk-1.8/jdk1.8.0_261
        export PATH=$JAVA_HOME/bin:$PATH
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        添加好后,执行source  etc/profile
        然后试下 java -version 有没有返回验证下就好了

        集群之间免密配置&host配置
        后面hadoop集群启动的时候,会通过免密去完成,所以就需要做免密策略
        master到两个node,node到master都要做免密
        不再做具体介绍,ssh-keygen -t rsa 命令一路回车
        生成的pub共钥,配置到需要免去机器的authorized_keys文件中
        可以通过 ssh-copy-id 来完成

        然后的话,是对三台主机的host做个配置
        cat etc/hosts
          192.168.ip1 master
          192.168.ip2 node1
          192.168.ip3 node2

          zookeeper集群部署
          zookeeper的话,是tar包安装
            tar -xvf zookeeper-3.6.3.tar.gz
            解压后,调整下配置文件一个是my.cnf,一个是myid文件

            在修改配置文件之前,还有一件事需要做,就是先建立数据目录和日志目录
            mkdir -p data/zookeeper/{data,logs}

            修改配置文件
            my.cnf的话,三台是一样的,修改后,同步过去就好
              #my.cnf
              tickTime=2000
              initLimit=10
              syncLimit=5
              dataDir=/data/zookeeper/server
              clientPort=2181
              dataLogDir=/data/zookeeper/log
              server.0=master:2888:3888
              server.1=node1:2888:3888
              server.2=node2:2888:3888
              myid的话,三台分别是0,1,2根据上述配置文件中server.后面的数字来定的
              mydi的目录是在server目录下
                #三台分别设置
                echo 0 > ./server/myid
                然后就可以启动了
                  #启动
                  ./bin/zkServer.sh start
                  查看状态
                  ./bin/zkServer.sh status

                  hadoop集群部署
                  hadoop集群部署的话,主要是几个配置文件的修改
                  core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves、hadoop-env.sh
                  上述前面几个文件都在etc/hadoop目录下
                  可以看下具体配置
                    #cat core-site.xml
                    <configuration>
                    <property>
                    <name>fs.default.name</name> <!--NameNode 的URI-->
                    <value>hdfs://master:9000</value>
                    </property>
                    <property>
                    <name>hadoop.tmp.dir</name> <!--hadoop临时文件的存放目录-->
                    <value>/data/hadoop/dfs/tmp</value> <!--找个地方放就好了-->
                    </property>
                    <property>
                    <name>io.file.buffer.size</name>
                    <value>131072</value>
                    </property>
                    <property>
                    <name>hadoop.native.lib</name>
                    <value>true</value>
                    </property>
                    </configuration>


                      #  cat hdfs-site.xml
                      <configuration>
                      <property>
                      <name>dfs.namenode.secondary.http-address</name>
                      <value>master:9001</value>
                      </property>
                      <property>
                      <name>dfs.namenode.name.dir</name><!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
                      <value>file:/data/hadoop/dfs/name</value>
                      </property>
                      <property>
                      <name>dfs.datanode.data.dir</name><!--DataNode存放块数据的本地文件系统路径-->
                      <value>file:/data/hadoop/dfs/data</value>
                      </property>
                      <property>
                      <name>dfs.replication</name> <!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
                      <value>2</value>
                      </property>
                      <property>
                      <name>dfs.webhdfs.enabled</name> <!--设置为true,可以在浏览器中IP+port查看-->
                      <value>true</value>
                      </property>
                      </configuration>


                        #cat mapred-site.xml
                        <configuration>
                        <property>
                        <name>mapreduce.framework.name</name> <!--mapreduce运用了yarn框架,设置name为yarn-->
                        <value>yarn</value>
                        </property>
                        <property>
                        <name>mapreduce.jobhistory.address</name> <!--历史服务器,查看Mapreduce作业记录-->
                        <value>master:9003</value>
                        </property>
                        <property>
                        <name>mapreduce.jobhistory.webapp.address</name>
                        <value>master:9002</value>
                        </property>
                        </configuration>


                          # cat yarn-site.xml
                          <configuration>
                          <property>
                          <name>yarn.nodemanager.aux-services</name><!--NodeManager上运行的附属服务,用于运行mapreduce-->
                          <value>mapreduce_shuffle</value>
                          </property>
                          <property>
                          <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                          <value>org.apache.hadoop.mapred.ShuffleHandler</value>
                          </property>
                          <property>
                          <name>yarn.resourcemanager.address</name> <!--ResourceManager 对客户端暴露的地址-->
                          <value>master:9015</value>
                          </property>
                          <property>
                          <name>yarn.resourcemanager.scheduler.address</name><!--ResourceManager 对ApplicationMaster暴露的地址-->
                          <value>master:9011</value>
                          </property>
                          <property> <!--ResourceManager 对NodeManager暴露的地址-->
                            <name>yarn.resourcemanager.resource-tracker.address</name>
                            <value>master:9012</value>
                           </property>
                          <property>
                          <name>yarn.resourcemanager.admin.address</name><!--ResourceManager 对管理员暴露的地址-->
                          <value>master:9013</value>
                          </property>
                          <property><!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
                          <name>yarn.resourcemanager.webapp.address</name>
                          <value>master:9014</value>
                          </property>
                          </configuration>
                            #cat hadoop-env.sh
                            #这个我这边是ssh端口不是22,所修改了ssh端口
                            export HADOOP_SSH_OPTS="-p 2222"
                              #cat slaves 填写两台node节点ip就好

                              上述配置三台同步

                              habse集群部署
                              同样修改配置文件hbase-env.sh、hbase-site.xml、regionservers
                              第一个配置文件,需要修改ssh端口
                              还有一个重要的就是启动的zookeeper不能用hbase自带的,得用我们自己部署的zk
                              具体配置是:
                                export HBASE_MANAGES_ZK=false
                                hbase-site.xml这个配置文件的话,参考下面的就好
                                  #配置中涉及ip,自己改
                                  <configuration>
                                  <property>
                                  <name>hbase.rootdir</name>
                                  <value>hdfs://ip1:9000/hbase</value>
                                  </property>
                                  <property>
                                  <name>hbase.master</name>
                                      <value>ip1 </value>
                                  </property>
                                  <property>
                                  <name>hbase.cluster.distributed</name>
                                  <value>true</value>
                                  </property>
                                  <property>
                                  <name>hbase.zookeeper.quorum</name>
                                      <value> ip1,ip2,ip3</value>
                                  </property>
                                  <property>
                                  <name>hbase.zookeeper.property.clientPort</name>
                                  <value>2181</value>
                                  </property>
                                  <property>
                                  <name>zookeeper.session.timeout</name>
                                  <value>200000</value>
                                  </property>
                                  <property>
                                  <name>dfs.support.append</name>
                                  <value>true</value>
                                  </property>
                                  </configuration>
                                  regionservers配置文件,同样需要把对应的两个node节点ip配置到文件中
                                  同样配置文件同步到另外两台
                                  这样的话,配置就基本完成了,后面就是集群的初始化及启动
                                  hadoop 的format
                                  ./bin/hadoop namenode -format
                                  hadoop启动
                                  ./hadoop-2.7.0/sbin/start-all.sh
                                  hbase启动
                                  hbase-1.4.0/bin/start-hbase.sh
                                  hadoop和hbase只需要在master执行就好,启动好后,可以通过jps查看效果

                                  下为node

                                  collertor集群启动
                                  pinpoint在新版后就都是jar包了,所以一些配置文件需要在启动的时候外挂
                                  还有在启动前需要做一个hbase数据的初始化,这个初始化脚本在源码的script文件夹下面
                                    ./hbase-1.4.0/bin/hbase shell ./hbase-create.hbase
                                    配置文件:
                                      #cat hbase.properties
                                      pinpoint.zookeeper.address=master,node1,node2
                                      hbase.client.host=master,node1,node2
                                      hbase.client.port=2181

                                      三台分别启动
                                         java -jar ../pinpoint-collector-boot-2.3.0.jar  --spring.config.additional-location=./hbase.properties
                                        web访问启动
                                        web同样是jar包,端口默认是8080,会和zk冲突,可以自己重新编译下
                                        或者重新找一台部署,配置文件同上
                                          java -jar ../pinpoint-web-boot-2.3.0.jar --spring.config.additional-location=./hbase.properties &
                                          可以访问页面看下

                                          agent接入
                                          端口问题,服务到采集端的9991-9996都是需要通的
                                          然后就是启动的时候,加上对应的配置就好
                                          其中id是唯一的,服务名可以共用
                                            -javaagent:/opt/pinpoint-agent-2.3.0/pinpoint-bootstrap.jar -Dpinpoint.agentId=id -Dpinpoint.applicationName=x-service
                                            后续:监控告警接入

                                            后面计划对一些错误请求,慢请求做一些监控

                                            同样通过企微机器人预警

                                            文章转载自大侠之运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                            评论