在信息技術(shù)和系統(tǒng)管理領(lǐng)域,使用 Application Performance Management(應(yīng)用程序性能管理)來(lái)監(jiān)控和管理應(yīng)用程序的性能和可用性。APM 致力于檢測(cè)和診斷復(fù)雜的應(yīng)用程序性能問(wèn)題,以保持預(yù)期的服務(wù)級(jí)別,將 IT 指標(biāo)轉(zhuǎn)化為業(yè)務(wù)價(jià)值。
Pinpoint 是一個(gè)開(kāi)源的、主流的 APM 實(shí)現(xiàn),靈感來(lái)自 Google Dapper,使用 Java、PHP、Python 開(kāi)發(fā)。全球有數(shù)百萬(wàn)用戶(hù)使用它分析架構(gòu)以及跨分布式應(yīng)用程序組件之間的互聯(lián)。
本文將通過(guò)以下主題,介紹 Pinpoint 的自動(dòng)化部署,以及如何配置它監(jiān)控應(yīng)用:
- Pinpoint 介紹
- 自動(dòng)化部署 Pinpoint
- 訪(fǎng)問(wèn) Pinpoint Web UI
- 配置監(jiān)控
- 總結(jié)
39.1 PinPoint 介紹
本節(jié)主要從兩方面討論 Pinpoint。
39.1.1 Pinpoint 架構(gòu)
Pinpoint 架構(gòu)如下:
圖39.1, PinPoint 架構(gòu)圖,圖片來(lái)自 PinPoint 官網(wǎng)
從圖中可以看到四個(gè)主要組件:
- Pinpoint Collector:Web 應(yīng)用程序,收集應(yīng)用數(shù)據(jù)
- HBase Storage:開(kāi)源的非關(guān)系數(shù)據(jù)庫(kù),存儲(chǔ) Pinpoint 數(shù)據(jù)
- Pinpoint Web UI:Pinpoint 前端
- Pinpoint Agent:將應(yīng)用程序的數(shù)據(jù)發(fā)送到 Pinpoint Collector
39.1.2 Pinpoint 特性
以下是 Pinpoint 的相關(guān)特性,也是它為什么在眾多 APM 中脫穎而出的原因:
- 提供云和主機(jī)監(jiān)控;
- 分布式事務(wù)跟蹤,用于跨分布式應(yīng)用程序跟蹤;
- 應(yīng)用程序拓?fù)涓庞[,跟蹤所有組件之間的事務(wù),以識(shí)別潛在的問(wèn)題;
- 輕量級(jí),對(duì)系統(tǒng)性能影響較??;
- 提供代碼級(jí)可見(jiàn)性,輕松識(shí)別故障點(diǎn)和瓶頸;
- 事務(wù)代碼級(jí)可見(jiàn)性,響應(yīng)模式和請(qǐng)求計(jì)數(shù);
- 提供字節(jié)碼檢測(cè)技術(shù),使用中無(wú)需修改應(yīng)用程序代碼;
- 自動(dòng)檢測(cè)應(yīng)用程序拓?fù)?,幫助技術(shù)人員了解應(yīng)用程序配置;
- 實(shí)時(shí)監(jiān)控,實(shí)時(shí)觀察活動(dòng)線(xiàn)程;
- 水平可擴(kuò)展,支持大規(guī)模服務(wù)器組。
39.2 自動(dòng)化部署 Pinpoint
本節(jié)演示如何使用 Ansible 與 Docker,完成 Pinpoint 的自動(dòng)化部署。
文中使用的代碼已提交至 GitHub,可以在對(duì)應(yīng)目錄中查詢(xún)。
39.2.1 要求
Ansible 主機(jī)可通過(guò)具有 sudo 權(quán)限的用戶(hù)免密登錄 Pinpoint 主機(jī)。
有關(guān) sudo 及免密的配置,可以參考之前的文章,或在 GitHub 代碼中查看。
39.2.2 克隆代碼到 Ansible 節(jié)點(diǎn)
在 Ansible 節(jié)點(diǎn)上執(zhí)行以下命令,將自動(dòng)化代碼克隆到本地:
$ git clone https://github.com/weiwendi/automate.git
進(jìn)入 automate/playbook/
目錄,里面包含了很多組件的自動(dòng)化部署。在本篇文章中,主要用到了 docker
和 pinpoint
兩個(gè)目錄。
39.2.3 安裝 Docker
進(jìn)入 docker/
目錄,修改 hosts
文件,指定 Pinpoint 主機(jī)名或 IP。例如我的 Pinpoint 主機(jī) IP 為 10.211.55.69、主機(jī)名為 common.server.aiops.red,hosts 文件內(nèi)容如下:
[nodes]
common.server.aiops.red
需要根據(jù)實(shí)際的 IP 或主機(jī)名稱(chēng)替換 'common.server.aiops.red'。
安裝 Docker:
ansible-playbook -i hosts playbook.yaml
39.2.4 安裝 Pinpoint
切換到 pinpoint
目錄:
cd ../pinpoint/
首先修改 hosts
文件,就像安裝 Docker 時(shí)那樣,將 Pinpoint 主機(jī)的 IP 或主機(jī)名寫(xiě)入該文件。
然后執(zhí)行 possibleReboot.yaml
文件,它的作用是:
- 關(guān)閉 Selinux
- 關(guān)閉 Firewalld
- 更新軟件包
關(guān)閉 Selinux 和更新軟件包的過(guò)程,都可能會(huì)重啟服務(wù)器,因此把這個(gè)文件獨(dú)立出來(lái),用于初次部署時(shí)執(zhí)行。
執(zhí)行 possibleReboot.yaml
文件:
ansible-playbook -i hosts possibleReboot.yaml
最后,執(zhí)行以下命令安裝 Pinpoint:
ansible-playbook -i hosts playbook.yaml
該命令執(zhí)行時(shí)間比較長(zhǎng),執(zhí)行過(guò)程中可能會(huì)遇到報(bào)錯(cuò)。報(bào)錯(cuò)很可能是從 GitHub 下載 pinpoint-docker 項(xiàng)目時(shí)的網(wǎng)絡(luò)原因?qū)е隆?/p>
注意:
要想在自動(dòng)化過(guò)程中避免下載 GitHub 代碼的網(wǎng)絡(luò)超時(shí)引發(fā)的錯(cuò)誤,可以提前手動(dòng)將 pinpoint-docker 項(xiàng)目的代碼克隆到 Pinpoin 主機(jī)指定的目錄下,然后注釋 ../../roles/pinpoint/tasks/main.yml
文件中以下內(nèi)容:
- name: clone pinpoint-docker project task
ansible.builtin.git:
repo: 'https://github.com/pinpoint-apm/pinpoint-docker.git'
dest: "{{ deployDir }}"
single_branch: true
version: "{{ version }}"
在 ../../roles/pinpoint/defaults/main.yml
文件中定義了兩個(gè)變量:
---
# defaults file for pinpoint
#
deployDir: /software/repos/pinpoint-docker
version: 2.5.2
- deployDir:存放 pinpoint-docker 項(xiàng)目的目錄
- version:Pinpoint 版本
39.3 訪(fǎng)問(wèn) Pinpoint Web UI
在瀏覽器中輸入 Pinpoint 主機(jī) IP:8080 訪(fǎng)問(wèn) Pinpoint Web UI。如果能正常打開(kāi)頁(yè)面,說(shuō)明部署順利完成。如果打不開(kāi)頁(yè)面,需要通過(guò) docker ps -a 命令和 docker logs 等命令查看 Pinpoint 容器的運(yùn)行情況,以及檢查網(wǎng)絡(luò)連通性。
此時(shí) Pinpoint 并沒(méi)有監(jiān)控?cái)?shù)據(jù),需要通過(guò) Pinpoint Agent,收集監(jiān)控對(duì)象的數(shù)據(jù)。下一節(jié)我會(huì)通過(guò)三個(gè)示例演示如何監(jiān)控 Java 程序。
39.4 配置監(jiān)控
本節(jié)通過(guò)演示配置 Pinpoint APM 監(jiān)控 Zookeeper、Kafka 和 Tomcat,來(lái)介紹 Pinpoin 如何使用、以及它的易用性。
39.4.1 下載 Pinpoint Agent
在 GitHub pinpoint-apm 中下載對(duì)應(yīng)版本的 Agent。
示例中解壓到了被監(jiān)控組件主機(jī)的 /opt/pagent252/
。
修改 /opt/pagent252/profiles/release/pinpoint.config
文件,把文件中所有 127.0.0.1 的地址,修改為 Pinpoint 主機(jī)的 IP 地址。
39.4.2 監(jiān)控 Zookeeper
修改 Zookeeper 的啟動(dòng)文件,進(jìn)入 Zookeeper 主目錄,編輯 bin/zkServer.sh
,增加以下內(nèi)容:
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2 >&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 1
fi
fi
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}"
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"
-javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar # 新增內(nèi)容
-Dpinpoint.agentId=zk01 # 新增內(nèi)容
-Dpinpoint.applicationName=zk # 新增內(nèi)容
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p'
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2 >&1 < /dev/null &
...
- -javaagent :指定 Pinpoint Agent 包路徑;
- -Dpinpoint.agentId :全局唯一 ID,可以與 applicationName 關(guān)聯(lián)定位應(yīng)用;
- -Dpinpoint.applicationName :應(yīng)用名稱(chēng),對(duì)于多副本部署的應(yīng)用,該名稱(chēng)應(yīng)設(shè)置為相同的值,通過(guò) -Dpinpoint.agentId 的不同進(jìn)行區(qū)分。
重啟 Zookeeper 服務(wù),使配置生效。
查看 Pinpoint Web UI,可以看到類(lèi)似以下界面:
圖39.2, 監(jiān)控 zk
39.4.3 監(jiān)控 Kafka
在 Kafka 主機(jī)上準(zhǔn)備好 Pinpoint Agent。修改 Kafka 的啟動(dòng)文件,通常位于 Kafka 目錄的 bin/kafka-run-class.sh
。修改以下內(nèi)容:
if [ "x$DAEMON_MODE" = "xtrue" ]; then
nohup "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpin
point.agentId=kafka2 -Dpinpoint.applicationName=kafka $KAFKA_LOG4J_OPTS -cp "$CLASSPATH" $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2 >&1 < /dev/null &
else
exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpinp
oint.agentId=kafka2 -Dpinpoint.applicationName=kafka $KAFKA_LOG4J_OPTS -cp "$CLASSPATH" $KAFKA_OPTS "$@"
fi
-javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar -Dpin point.agentId=kafka2 -Dpinpoint.applicationName=kafka
為新增內(nèi)容。
重啟 Kafka 服務(wù),使配置生效。再次查看 Web UI:
圖39.3, 監(jiān)控 Kafka
39.4.4 監(jiān)控 Tomcat
在 Tomcat 節(jié)點(diǎn)上,準(zhǔn)備好 Pinpoint Agent。
修改 Tomcat bin/catalina.sh
文件,在文件開(kāi)始部分增加以下內(nèi)容:
#!/bin/sh
# 新增內(nèi)容
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/pagent252/pinpoint-bootstrap-2.5.2.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=tomcat1"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=tomcat"
保存并重啟 Tomcat 服務(wù),然后查看 Web UI:
圖39.4 監(jiān)控 Tomcat 內(nèi)存堆棧等使用
再來(lái)看看 Tomcat 調(diào)用鏈路拓?fù)浼?a target="_blank">接口響應(yīng)信息:
圖39.5, 鏈路追蹤與自動(dòng)生成拓?fù)?/p>
39.5 總結(jié)
Pinpoint APM 是常用的鏈路跟蹤及監(jiān)控工具,本教程演示了 Pinpoint APM 的自動(dòng)化部署,以及如何配置 Pinpoint 監(jiān)控 Java 程序。教程同樣適用于其他基于 RPM 的 Linux 發(fā)行版。
-
Linux
+關(guān)注
關(guān)注
87文章
11350瀏覽量
210462 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3409瀏覽量
42723 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3295瀏覽量
57939 -
APM
+關(guān)注
關(guān)注
1文章
71瀏覽量
13047
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
工控儀器自動(dòng)化
招聘自動(dòng)化、電氣自動(dòng)化、自動(dòng)化控制工程師
實(shí)現(xiàn)工業(yè)自動(dòng)化的市場(chǎng)阻礙
七個(gè)步驟實(shí)現(xiàn)自動(dòng)化測(cè)試
七個(gè)步驟完成自動(dòng)化測(cè)試
如何搭建DotNet Core 21自動(dòng)化構(gòu)建和部署環(huán)境
基于IAR EW編譯工具實(shí)現(xiàn)Linux系統(tǒng)上自動(dòng)化構(gòu)建
風(fēng)河Linux平臺(tái)構(gòu)建新型家庭自動(dòng)化網(wǎng)關(guān)
云平臺(tái)的自動(dòng)化部署設(shè)計(jì)與實(shí)現(xiàn)
![云平臺(tái)的<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>部署</b>設(shè)計(jì)與實(shí)現(xiàn)](https://file.elecfans.com/web1/M00/46/0C/pIYBAFqPd-6AIl11AACEScSY6IU006.jpg)
數(shù)據(jù)中心如何實(shí)現(xiàn)自動(dòng)化部署
5G承載網(wǎng)絡(luò)建設(shè)向自動(dòng)化部署的方向邁出堅(jiān)實(shí)的步伐
部署Linux的最佳實(shí)踐探索
Jenkins 與 SonarQube 集成部署,自動(dòng)化代碼質(zhì)量監(jiān)控
![Jenkins 與 SonarQube 集成<b class='flag-5'>部署</b>,<b class='flag-5'>自動(dòng)化</b>代碼質(zhì)量監(jiān)控](https://file1.elecfans.com//web3/M00/05/21/wKgZPGd88t6AK9YwAAEA4xEY1H4138.png)
基于 Docker 與 Jenkins 實(shí)現(xiàn)自動(dòng)化部署
![基于 Docker 與 Jenkins 實(shí)現(xiàn)<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>部署</b>](https://file1.elecfans.com//web3/M00/05/21/wKgZPGd88vSARHEhAAEA43MSbXE167.png)
評(píng)論