pinpoint調(diào)用鏈工具初識(shí)
===
在本文中重點(diǎn)講一下pinpoint工具的架構(gòu),安裝和部署;
1. pinpoint工具介紹:
Pinpoint是一款對(duì)Java編寫(xiě)的大規(guī)模分布式系統(tǒng)的APM工具,有些人也喜歡稱(chēng)呼這類(lèi)工具為調(diào)用鏈系統(tǒng)、分布式跟蹤系統(tǒng)。我們知道,前端向后臺(tái)發(fā)起一個(gè)查詢(xún)請(qǐng)求,后臺(tái)服務(wù)可能要調(diào)用多個(gè)服務(wù),每個(gè)服務(wù)可能又會(huì)調(diào)用其它服務(wù),最終將結(jié)果返回,匯總到頁(yè)面上。如果某個(gè)環(huán)節(jié)發(fā)生異常,工程師很難準(zhǔn)確定位這個(gè)問(wèn)題到底是由哪個(gè)服務(wù)調(diào)用造成的,Pinpoint等相關(guān)工具的作用就是追蹤每個(gè)請(qǐng)求的完整調(diào)用鏈路,收集調(diào)用鏈路上每個(gè)服務(wù)的性能數(shù)據(jù),方便工程師能夠快速定位問(wèn)題。
pinpoint對(duì)服務(wù)器性能的影響非常小(只增加約3%資源利用率),安裝agent是無(wú)侵入式的,只需要在被測(cè)試的Tomcat中加上3句話(huà),打下探針,就可以監(jiān)控整套程序了。類(lèi)似的工具包括google的Dapper,twitter的Zipkin,淘寶的鷹眼(EdleEye),大眾點(diǎn)評(píng)的CAT,還有國(guó)內(nèi)開(kāi)源的skywalking,商業(yè)的聽(tīng)云APM工具等;
2. pinpoint系統(tǒng)架構(gòu):
Pinpoint-Collector: 收集各種性能數(shù)據(jù);
Pinpoint-Agent: 和自己運(yùn)行的應(yīng)用關(guān)聯(lián)起來(lái)的探針
Pinpoint-Web:將收集到的數(shù)據(jù)顯示成WEB網(wǎng)頁(yè)形式
HBase Storage:收集到的數(shù)據(jù)存到HBase中
3. Hbase數(shù)據(jù)庫(kù)的安裝和配置:
Pinpoint以Hbase作為存儲(chǔ)的數(shù)據(jù)庫(kù)。HBase是Apache Hadoop的數(shù)據(jù)庫(kù),能夠?qū)Υ笮蛿?shù)據(jù)提供隨機(jī)、實(shí)時(shí)的讀寫(xiě)訪問(wèn),是Google的BigTable的開(kāi)源實(shí)現(xiàn)。HBase的目標(biāo)是存儲(chǔ)并處理大型的數(shù)據(jù),更具體地說(shuō)僅用普通的硬件配置,能夠處理成千上萬(wàn)的行和列所組成的大型數(shù)據(jù)庫(kù)。HBase是一個(gè)開(kāi)源的、分布式的、多版本的、面向列的存儲(chǔ)模型。可以直接使用本地文件系統(tǒng),也可使用Hadoop的HDFS文件存儲(chǔ)系統(tǒng)。為了提高數(shù)據(jù)的可靠性和系統(tǒng)的健壯性,并且發(fā)揮HBase處理大型數(shù)據(jù)的能力,還是使用HDFS作為文件存儲(chǔ)系統(tǒng)更佳。
HBase的服務(wù)器體系結(jié)構(gòu)遵從簡(jiǎn)單的主從服務(wù)器架構(gòu),它由HRegion Server群和HBase Master服務(wù)器構(gòu)成。HBase Master負(fù)責(zé)管理所有的HRegionServer,而HBase中的所有RegionServer都是通過(guò)ZooKeeper來(lái)協(xié)調(diào),并處理HBase服務(wù)器運(yùn)行期間可能遇到的錯(cuò)誤。
HBase Master Server本身并不存儲(chǔ)HBase中的任何數(shù)據(jù),HBase邏輯上的表可能會(huì)被劃分成多個(gè)Region,然后存儲(chǔ)到HRegion Server群中。HBase Master Server中存儲(chǔ)的是從數(shù)據(jù)到HRegion Server的映射.
HBase的安裝也有三種模式:?jiǎn)螜C(jī)模式、偽分布模式和完全分布式模式,在這里只介紹完全分布模式。前提是Hadoop集群和Zookeeper已經(jīng)安裝完畢,并能正確運(yùn)行。
#在第一臺(tái)節(jié)點(diǎn)上面安裝zookeeper:
tar xzvf zookeeper-3.4.8.tar.gz -C /usr/local/
cd /usr/local/
ln -sv zookeeper-3.4.8 zookeeper
cd /usr/local/zookeeper
mkdir -p data3
mkdir -p logs3
cd /usr/local/zookeeper/conf
cp -r zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/usr/local/zookeeper/data3
dataLogDir=/usr/local/zookeeper/logs3
clientPort=2181
server.189=192.168.1.189:2888:3888
server.190=192.168.1.190:2888:3888
server.191=192.168.1.191:2888:3888
echo 189 >> /usr/local/zookeeper/data3/myid
#將服務(wù)器的標(biāo)識(shí)內(nèi)容登記到/usr/local/zookeeper/data3/myid文件中,這個(gè)189是我的服務(wù)器的IP地址最后一位。
/usr/local/zookeeper/bin/zkServer.sh start
#啟動(dòng)服務(wù)
/usr/local/zookeeper/bin/zkServer.sh stop
#停止服務(wù)
/usr/local/zookeeper/bin/zkServer.sh status
#查看主從角色,leader是主角色,follower是從角色
tickTime: zookeeper中使用的基本時(shí)間單位, 毫秒值
dataDir: zk的數(shù)據(jù)目錄. 可以是任意目錄
dataLogDir: log目錄, 同樣可以是任意目錄. 如果沒(méi)有設(shè)置該參數(shù), 將使用和dataDir相同的設(shè)置
clientPort: 監(jiān)聽(tīng)client連接的端口號(hào),默認(rèn)就是2181
initLimit zookeeper集群中的包含多臺(tái)server, 其中一臺(tái)為leader, 集群中其余的server為follower. initLimit參數(shù)配置初始化連接時(shí), follower和leader之間的最長(zhǎng)心跳時(shí)間. 此時(shí)該參數(shù)設(shè)置為5, 說(shuō)明時(shí)間限制為5倍tickTime, 即5*2000=10000ms=10s
syncLimit: 該參數(shù)配置leader和follower之間發(fā)送消息, 請(qǐng)求和應(yīng)答的最大時(shí)間長(zhǎng)度. 此時(shí)該參數(shù)設(shè)置為2, 說(shuō)明時(shí)間限制為2倍tickTime, 即4000ms
server.X=A:B:C 其中X是一個(gè)數(shù)字, 表示這是第幾號(hào)server. A是該server所在的IP地址. B配置該server和集群中的leader交換消息所使用的端口. C配置選舉leader時(shí)所使用的端口。如果配置的是偽集群模式, 那么各個(gè)server的B, C參數(shù)必須不同。啥是偽集群,就是在一個(gè)服務(wù)器上面運(yùn)行三個(gè)實(shí)例做成的集群;
其他兩臺(tái)服務(wù)器安裝zk和第一臺(tái)的方式一樣,配置文件也一樣,唯一不同的是myid文件的內(nèi)容,應(yīng)該對(duì)應(yīng)自己服務(wù)器的IP地址最后一位標(biāo)識(shí);
安裝完成zk集群之后,就需要HDFS文件系統(tǒng)了,因?yàn)镠base數(shù)據(jù)庫(kù)依賴(lài)于HDFS文件系統(tǒng),其實(shí)Hbase數(shù)據(jù)庫(kù)也可以使用本地文件系統(tǒng)。只不過(guò)使用HDFS文件系統(tǒng)更有利用系統(tǒng)的健壯和性能;因?yàn)槲覄傞_(kāi)始接觸Hbase數(shù)據(jù)庫(kù),對(duì)大數(shù)據(jù)方面的中間件還不是很熟悉,所以我的HDFS文件系統(tǒng)是單機(jī)的。然后我把Hbase數(shù)據(jù)庫(kù)安裝的是集群結(jié)構(gòu)的。分為Hmaster和HRegionServer。
# 安裝hbase數(shù)據(jù)庫(kù)的三臺(tái)服務(wù)器都必須能夠使用root登錄,并且端口是默認(rèn)端口22
chattr -i /etc/ssh/sshd_config
sed -i \\\'s#PermitRootLogin no#PermitRootLogin yes#g\\\' /etc/ssh/sshd_config
sed -i \\\'s#AllowUsers ttadm#AllowUsers ttadm root#g\\\' /etc/ssh/sshd_config
sed -i \\\'s#10022#22#g\\\' /etc/ssh/sshd_config
systemctl restart sshd
# 然后再master的這臺(tái)機(jī)器上面配置公鑰和私鑰,拷貝公鑰到另外兩臺(tái)機(jī)器
ssh-keygen -t rsa
ssh-copy-id 192.168.1.190
ssh-copy-id 192.168.1.191
cd /usr/local/hbase-1.4.10/conf/
vim hbase-env.sh
# 這個(gè)參數(shù)如果是true,表示使用Hbase自帶的zk,因?yàn)槲覀儼惭b了獨(dú)立的zk集群,所以需要將這個(gè)參數(shù)設(shè)置為false
export HBASE_MANAGES_ZK=false
# The java implementation to use. Java 1.7 required.
export JAVA_HOME=/usr/local/jdk1.8.0_131
# Extra Java CLASSPATH elements. Optional.
export HBASE_CLASSPATH=/usr/local/hbase-1.4.10/conf
# vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.1.189:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新變動(dòng),之前版本沒(méi)有.port,默認(rèn)端口為60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.1.189:2181,192.168.1.190:2181,192.168.1.191:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper/data3</value>
</property>
</configuration>
# hbase-site.xml這個(gè)配置文件主要配置了Hbase的數(shù)據(jù)庫(kù)存儲(chǔ)路徑,依賴(lài)zk的一些信息;Hbase數(shù)據(jù)庫(kù)存儲(chǔ)可以使用本地存儲(chǔ),也可以使用HDFS文件系統(tǒng)。如果是本地存儲(chǔ),格式如下:
<name>hbase.rootdir</name>
<value>file:/usr/src/pinpoint_resource/hbase-1.2.4/data</value>
vim regionservers
192.168.1.189
192.168.1.190
192.168.1.191
# 配置regionserver的服務(wù)器地址
cd /usr/local/hbase-1.4.10/bin
./start-hbase.sh
# 啟動(dòng)hbase數(shù)據(jù)庫(kù),啟動(dòng)之前需要將hbase的安裝程序和配置文件都拷貝到另外兩臺(tái)機(jī)器上面,然后配置好免密登錄之后,執(zhí)行start-hbase.sh之后,會(huì)自動(dòng)在另外兩臺(tái)機(jī)器上面HRegionServer。檢查的方式就是jps命令
# 兩臺(tái)從節(jié)點(diǎn)上面查看hbase進(jìn)程
[root@SZ1PRDOAM00AP010 ~]# jps
17408 HRegionServer #表示hbase的RegionServer
16931 QuorumPeerMain #這個(gè)是zk的進(jìn)程
18475 Bootstrap
24047 Jps
# 在主節(jié)點(diǎn)上查看hbase進(jìn)程
[root@SZ1PRDOAM00AP009 conf]# jps
21968 SecondaryNameNode # hdfs文件系統(tǒng)的進(jìn)程
21793 DataNode #這個(gè)是hdfs文件系統(tǒng)的進(jìn)程,存儲(chǔ)數(shù)據(jù)
98883 Jps
73397 QuorumPeerMain #zk的進(jìn)程
81286 Bootstrap
74201 HRegionServer #hbase的進(jìn)程
21659 NameNode # hdfs文件系統(tǒng)的進(jìn)程,管理元數(shù)據(jù)
74061 HMaster #
# 初始化pinpoint的數(shù)據(jù)庫(kù)
wget https://github.com/naver/pinpoint/blob/1.8.5/hbase/scripts/hbase-create.hbase
hbase shell hbase-create.hbase
# 如果需要清除數(shù)據(jù),就下載hbase-drop.hbase腳本
Hbase數(shù)據(jù)庫(kù)安裝成功之后,有個(gè)web管理頁(yè)面可以查看數(shù)據(jù)庫(kù)表的。http://192.168.1.189:16010/master-status,訪問(wèn)16010端口就可以查看了。其中可以看到我們剛才初始化的TABLE.
因?yàn)镠base數(shù)據(jù)庫(kù)依賴(lài)于HDFS文件系統(tǒng),所以我們順便說(shuō)一下安裝HDFS文件系統(tǒng)了。安裝HDFS文件系統(tǒng)首先先按照hadoop.
Hadoop Common是在Hadoop0.2版本之后分離出來(lái)的HDFS和MapReduce獨(dú)立子項(xiàng)目的內(nèi)容,是Hadoop的核心部分,能為其他模塊提供一些常用工具集,如序列化機(jī)制、Hadoop抽象文件系統(tǒng)FileSystem、系統(tǒng)配置工具Configuration,并且在為其平臺(tái)上的軟件開(kāi)發(fā)提供KPI等。其他Hadoop子項(xiàng)目都是以此為基礎(chǔ)而建立來(lái)的
HDFS是分布式文件存儲(chǔ)系統(tǒng),類(lèi)似于FAT32,NTFS,是一種文件格式,是底層的HDFS是Hadoop體系中數(shù)據(jù)存儲(chǔ)管理的基礎(chǔ),它是一個(gè)高度容錯(cuò)的系統(tǒng),能檢測(cè)和應(yīng)對(duì)硬件故障,在低成本的通用硬件上運(yùn)行。
Hbase是Hadoop database,即Hadoop數(shù)據(jù)庫(kù)。它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù),HBase基于列的而不是基于行的模式。HBase是一個(gè)建立在HDFS之上,面向結(jié)構(gòu)化數(shù)據(jù)的可伸縮、高可靠、高性能、分布式和面向列的動(dòng)態(tài)模式數(shù)據(jù)庫(kù)。 Hbase的數(shù)據(jù)一般都存儲(chǔ)在HDFS上。Hadoop HDFS為他們提供了高可靠性的底層存儲(chǔ)支持
cd /usr/local
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz
tar xzvf hadoop-2.9.0.tar.gz
cd /usr/local/hadoop-2.9.0/etc/hadoop
vim hadoop-env.sh
# set JAVA_HOME in this file, so that it is correctly defined on
export JAVA_HOME=/usr/local/jdk1.8.0_13
# 查看hadoop版本
cd /usr/local/hadoop-2.9.0/bin
[root@SZ1PRDOAM00AP009 bin]# ./hadoop version
Hadoop 2.9.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 756ebc8394e473ac25feac05fa493f6d612e6c50
Compiled by arsuresh on 2017-11-13T23:15Z
Compiled with protoc 2.5.0
From source with checksum 0a76a9a32a5257331741f8d5932f183
This command was run using /usr/local/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar
[root@SZ1PRDOAM00AP009 bin]#
# 配置hadoop的環(huán)境變量
[root@SZ1PRDOAM00AP009 bin]# cat /etc/profile.d/hadoop.sh
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR
安裝完成hadoop之后,我們接下來(lái)安裝hdfs文件系統(tǒng)。HDFS文件系統(tǒng)和Hadoop軟件包是一個(gè),修改幾個(gè)配置文件就可以了;
vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.189:9000</value>
</property>
</configuration>
#配置nameNode:接收請(qǐng)求的地址,客戶(hù)端將請(qǐng)求該地址
vim /usr/local/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///usr/local/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///usr/local/hadoop/hdfs/datanode</value>
</property>
</configuration>
# 配置數(shù)據(jù)副本,因?yàn)槲覀兪菃螜C(jī),所以就配置了1副本。存儲(chǔ)目錄是本地文件的目錄。
#ssh免密碼登錄
ssh localhost
#如果不支持,按順序執(zhí)行下面三行命令即可
$ ssh-keygen -t rsa -P \\\'\\\' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
#格式化
#初次使用hdfs需要進(jìn)行格式化
hdfs namenode -format
#啟動(dòng)
#格式化完成以后,我們就可以啟動(dòng)hdfs了
sbin/start-dfs.sh
#啟動(dòng)完成,我們查看一下hdfs進(jìn)程
ps -ef|grep hdfs
#你會(huì)看到:nameNode\\\\dataNode\\\\secondaryNameNode這三個(gè)進(jìn)程,則表示啟動(dòng)成功,否則到logs下的對(duì)應(yīng)日志中查看錯(cuò)誤信息。
#安裝好HDFS文件系統(tǒng)之后,可以通過(guò)web管理頁(yè)面查看狀態(tài);
http://192.168.1.189:50070/dfshealth.html#tab-overview
4. pinpoint的安裝和配置:
pinpoint一般由三個(gè)組件組成。分別是pinpoint-Collector用來(lái)收集數(shù)據(jù),Pinpoint-Web用來(lái)展示數(shù)據(jù),pinpoint-agent是收集客戶(hù)端。Hbase是用來(lái)存儲(chǔ)數(shù)據(jù)。我們先看看pinpoint-Collector的安裝;
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-collector-1.8.5.war
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-web-1.8.5.war
# pinpoint-collector和pinpoint-web都是war包,運(yùn)行在tomcat里面就可以了.如果在生產(chǎn)環(huán)境,建議收集器和web管理界面安裝在不同的機(jī)器上面;
cd /usrl/local/tomcat/webapps/
rm -rf *
unzip pinpoint-collector-1.6.1.war -d ROOT
cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes
vim pinpoint-collector.properties
cluster.zookeeper.address=192.168.1.191
#修改zookeeper地址
vim hbase.properties
hbase.client.host=192.168.1.191
hbase.client.port=2181
#配置數(shù)據(jù)庫(kù)存儲(chǔ)的地址
/usr/local/tomcat/bin/startup.sh
#啟動(dòng)tomcat
cd /usrl/local/tomcat/webapps/
rm -rf *
unzip pinpoint-web-1.8.5.war -d ROOT
cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes
vim hbase.properties
hbase.client.host=192.168.1.191
hbase.client.port=2181
#配置數(shù)據(jù)庫(kù)存儲(chǔ)的地址
vim pinpoint-web.properties
cluster.enable=false
cluster.web.tcp.port=9997
cluster.zookeeper.address=192.168.1.191
# web集群功能禁用掉,然后配置zk的地址
/usr/local/tomcat/bin/startup.sh
#啟動(dòng)tomcat
mkdir -p /usr/local/pinpoint-agent
cd /usr/local
tar xzvf pinpoint-agent-1.8.5.tar.gz -C pinpoint-agent
vim pinpoint.config
profiler.collector.ip=192.168.1.190
# 配置collector服務(wù)器的地址
cd scripts
[root@SZ1PRDOAM00AP009 script]# sh networktest.sh
CLASSPATH=./tools/pinpoint-tools-1.8.5.jar:
2019-10-15 16:13:17 [INFO ](com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig) configuration loaded successfully.
UDP-STAT:// SZ1PRDOAM00AP010.bf.cn
=> 192.168.1.190:9995 [SUCCESS]
UDP-SPAN:// SZ1PRDOAM00AP010.bf.cn
=> 192.168.1.190:9996 [SUCCESS]
TCP:// SZ1PRDOAM00AP010.bf.cn
=> 192.168.1.190:9994 [SUCCESS]
[root@SZ1PRDOAM00AP009 script]#
#有個(gè)網(wǎng)絡(luò)測(cè)試腳本,可以測(cè)試agent到collector之間的網(wǎng)絡(luò)是否正常。我這里遇到了一個(gè)問(wèn)題,一直是9995端口不通。后續(xù)經(jīng)過(guò)排查,將三臺(tái)主機(jī)的ip和主機(jī)名配置到/etc/hosts文件之中就可以了。
vim /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS=$JAVA_OPTS -javaagent:/usr/local/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar
JAVA_OPTS=$JAVA_OPTS -Dpinpoint.agentId=gytest
JAVA_OPTS=$JAVA_OPTS -Dpinpoint.applicationName=gytest01
# 給增加agent,只需要修改catalina.sh啟動(dòng)腳本就可以,增加pinpoint的jar包路徑,應(yīng)用的標(biāo)識(shí)而已;
-Dpinpoint.agentId - 唯一標(biāo)記agent運(yùn)行所在的應(yīng)用(如,loan-33)
-Dpinpoint.applicationName - 將許多的同樣的應(yīng)用實(shí)例分組為單一服務(wù)(如,loan)
# 注意:pinpoint.agentId 必須全局唯一來(lái)標(biāo)識(shí)應(yīng)用實(shí)例, 而所有共用相同 pinpoint.applicationName 的應(yīng)用被當(dāng)成單個(gè)服務(wù)的多個(gè)實(shí)例
差不多有近三個(gè)月沒(méi)有寫(xiě)技術(shù)博文了,最近老婆生了二胎家里的事情比較多,加上年底了公司的工作也比較忙,所以一直沒(méi)有抽出時(shí)間來(lái)寫(xiě)博客了,也希望大家能夠諒解。最近我在公司換了一個(gè)項(xiàng)目在做,主要是關(guān)于統(tǒng)一監(jiān)控的項(xiàng)目。涉及到了APM鏈路跟蹤,zabbix監(jiān)控,業(yè)務(wù)監(jiān)控等內(nèi)容,有時(shí)間的話(huà)我也會(huì)將一些經(jīng)驗(yàn)分享出來(lái)給大家。感謝大家的持續(xù)關(guān)注。 我的微信公眾號(hào)是“云時(shí)代IT運(yùn)維”,大家可以?huà)叽a關(guān)注。
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)三五互聯(lián)官網(wǎng):m.shinetop.cn