Pinpoint是韓國人開發的一套基於java的Apm(應用性能監控),具備低延遲、實時監控、拓撲發現、低性能損耗的特色(官方預估是3%),同事有一個完善的web後臺,一目瞭然查看應用拓撲。java
安裝使用前我搜索了網上一堆的文檔,幾乎都是半路貨或是比較舊,一半靠官網,一半靠摸索理解,還好感謝官網的協助,最終所有搭建成功。爲了方便之後其它人的使用,我用ansible搭建成大部分的初始化部分,但剩下幾個小步驟仍是須要手動執行下,例如數據庫的導入,修改job的架包等node
這裏要搭建是一套能夠實際用的pinpoint集羣,我測試環境用3臺機器來實現,分別是mysql
172.25.33.230 : zookeeper,hadoop,hbase,collector,web,nginxnginx
172.25.33.231 : zookeeper,hadoop,hbase,collectorgit
172.25.33.232 : zookeeper,hadoop,hbase,collectorgithub
搭建的順序首選是web
一、搭建一套zookeeper集羣sql
二、搭建一套hdfs集羣shell
三、搭建hbase集羣數據庫
四、搭建flink集羣
五、啓動多個collector應用,利用nginx負載均衡(實際使用建議用keepalive)
六、啓動web管理後臺
七、使用一個jar應用添加agent進行測試
看起來是否是具體搭建比較麻煩,包括各類配置。這裏我用ansible幾乎完成所有配置,只要稍微修改下參數的設置,就能夠完成一整套搭建,因此搭建的順序改爲
一、三個測試機器部署ssh免密登陸
二、下載配置好的環境
三、批量ansible.vars.yml 中的IP,
四、安裝ansible,執行ansible-playbook
五、啓動以及導入數據庫
六、搭建一個nginx用於負載均衡controller
七、啓動全部東西
這樣看起來就比較簡單實現,下面開始來搭建
一、三個測試機器部署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集羣的搭建
二、下載配置好的環境
cd /opt git clone https://github.com/rainard/apm-pinpoint.git mv apm-pinpoint apm cd apm
三、批量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
四、安裝ansible,執行ansible-playbook
安裝ansible
yum install -y ansible
執行ansible-playbook
cd /opt/apm
ansible-playbook ansible_rsync.play.yml
這樣執行完後,整個集羣基本就配置好了,下面作一些收尾工做,而後啓動集羣
五、啓動以及導入數據庫
在三臺機器的/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 :是應用的名稱,每一個應用惟一