Pinpoint完整集群實現,包括flink集群的加入
Pinpoint是韓國人開發的一套基於java的Apm(應用性能監控),具有低延遲、實時監控、拓撲發現、低性能損耗的特點(官方預估是3%),同事有一個完善的web後臺,一目了然查看應用拓撲。
安裝使用前我搜索了網上一堆的文檔,幾乎都是半路貨或是比較舊,一半靠官網,一半靠摸索理解,還好感謝官網的協助,最終全部搭建成功。為了方便以後其它人的使用,我用ansible搭建成大部分的初始化部分,但剩下幾個小步驟還是需要手動執行下,例如數據庫的導入,修改job的架包等
這裏要搭建是一套可以實際用的pinpoint集群,我測試環境用3臺機器來實現,分別是
172.25.33.230 : zookeeper,hadoop,hbase,collector,web,nginx
172.25.33.231 : zookeeper,hadoop,hbase,collector
172.25.33.232 : zookeeper,hadoop,hbase,collector
搭建的順序首選是
1、搭建一套zookeeper集群
2、搭建一套hdfs集群
3、搭建hbase集群
4、搭建flink集群
5、啟動多個collector應用,利用nginx負載均衡(實際使用建議用keepalive)
6、啟動web管理後臺
7、使用一個jar應用添加agent進行測試
看起來是不是具體搭建比較麻煩,包括各種配置。這裏我用ansible幾乎完成全部配置,只要稍微修改下參數的設置,就可以完成一整套搭建,所以搭建的順序改成
1、三個測試機器部署ssh免密登錄
2、下載配置好的環境
3、批量ansible.vars.yml 中的IP,
4、安裝ansible,執行ansible-playbook
5、啟動以及導入數據庫
6、搭建一個nginx用於負載均衡controller
7、啟動所有東西
這樣看起來就比較簡單實現,下面開始來搭建
1、三個測試機器部署ssh免密登錄
1 #進入root目錄 2 ssh-keygen #一路回車 3 cd /root/.ssh 4 mv id_rsa.pub authorized_keys 5 scp -p authorized_keys 172.25.33.231:/root/.ssh/ 6 scp -p authorized_keys 172.25.33.232:/root/.ssh/
然後作下測試:
ssh 免密是必須的,這個關系到hdfs的搭建,hbase集群的搭建
2、下載配置好的環境
cd /opt git clone https://github.com/rainard/apm-pinpoint.git mv apm-pinpoint apm cd apm
3、批量ansible.vars.yml 中的IP
這個好像沒啥好說的,直接用文本全部替換,把三個ip都替換成實際搭建要用到的IP,例如下圖。文章最後我再解釋這些參數的意義,
替換mysql的帳號密碼(ansible.vars.yml)
## pinpoint-web jdbc config jdbc_driverClassName: com.mysql.jdbc.Driver jdbc_url: jdbc:mysql://172.25.33.230:3306/pinpoint?characterEncoding=UTF-8 jdbc_user: root jdbc_password: test
4、安裝ansible,執行ansible-playbook
安裝ansible
yum install -y ansible
執行ansible-playbook
cd /opt/apm
ansible-playbook ansible_rsync.play.yml
這樣執行完後,整個集群基本就配置好了,下面做一些收尾工作,然後啟動集群
5、啟動以及導入數據庫
在三臺機器的/etc/profile中添加必須的路徑配置,添加完最好重啟下
JAVA_HOME=/usr/local/apm/java HADOOP_HOME=/usr/local/apm/hadoop HADOOP_INSTALL=$HADOOP_HOME HADOOP_MAPRED_HOME=$HADOOP_HOME HADOOP_COMMON_HOME=$HADOOP_HOME HADOOP_HDFS_HOME=$HADOOP_HOME YARN_HOME=$HADOOP_HOME HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop/ HBASE_MANAGES_ZK=false ZOOKEEPER_HOME=/usr/local/apm/zookeeper PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin: PATH=$PATH:/usr/local/mysql/bin:
在三臺機器上啟動zookeeper集群
/usr/local/apm/zookeeper/bin/zkServer.sh start ;
測試zookeeper的啟動情況
/usr/local/apm/zookeeper/bin/zkServer.sh status
下面的啟動操作在172.25.33.230上面執行
hdfs格式化namenode,僅第一次啟動需要
/usr/local/apm/hadoop/bin/hdfs namenode -format
啟動hdfs集群
/usr/local/apm/hadoop/sbin/start-all.sh
啟動hbase集群
/usr/local/apm/hbase/bin/start-hbase.sh
導入hbase數據庫
/usr/local/apm/hbase/bin/hbase shell /usr/local/apm/hbase-create.hbase
啟動flink集群
/usr/local/apm/flink/bin/start-cluster.sh
導入web數據庫(非必須,只是用於報警)
*** 關於mysql ****
web的報警部分數據存在mysql,如果你想要報警相關,需要把額外提供一個mysql,並創建pinpoint數據庫
#下面兩個sql文件導入pinpoint數據庫 /usr/local/apm/pinpoint-web-tomcat/ROOT/WEB-INF/classes/sql/CreateTableStatement-mysql.sql /usr/local/apm/pinpoint-web-tomcat/ROOT/WEB-INF/classes/sql/SpringBatchJobRepositorySchema-mysql.sql
啟動web
/usr/local/apm/pinpoint-web-tomcat/bin/startup.sh
--------------collector
三個機器啟動collector
/usr/local/apm/pinpoint-controller-tomcat/bin/startup.sh
利用nginx為三個collector做負載均衡,實際運用中建議加上keepalive,這裏提供nginx的一個虛機配置文件
[root@P1NODE tcp]# cat pinpoint.conf upstream 9994_tcp_upstreams { #least_timefirst_byte; #fail_timeout=15s; server 172.25.33.230:9994; server 172.25.33.231:9994; server 172.25.33.232:9994; } upstream 9995_udp_upstreams { #least_timefirst_byte; server 172.25.33.230:9995; server 172.25.33.231:9995; server 172.25.33.232:9995; } upstream 9996_udp_upstreams { #least_timefirst_byte; server 172.25.33.230:9996; server 172.25.33.231:9996; server 172.25.33.232:9996; } server { listen 39994; proxy_pass 9994_tcp_upstreams; #proxy_timeout 1s; proxy_connect_timeout 1s; } server { listen 39995 udp; proxy_pass 9995_udp_upstreams; proxy_timeout 1s; #proxy_responses1; } server { listen 39996 udp; proxy_pass 9996_udp_upstreams; proxy_timeout 1s; #proxy_responses1; }
到這裏,集群的所有操作以及搭建完畢,那麽agent怎麽操作呢?
在啟動的jvm裏面添加
-javaagent:/usr/local/apm/pinpoint-agent/pinpoint-bootstrap-1.8.0-RC1.jar -Dpinpoint.agentId=PP_172.25.33.230
-Dpinpoint.applicationName=app-demo \
javaagent : 是agent架包的位置
Dpinpoint.agentId : 是這個應用部署的節點id,節點唯一
Dpinpoint.applicationName :是應用的名稱,每個應用唯一
Pinpoint完整集群實現,包括flink集群的加入