作為 Zabbix 骨灰級粉絲,一直以來對第三方監(jiān)控(APM)都是拒絕的。一來覺得收費,二來擔心數(shù)據(jù)被人所知,三來覺得 Zabbix 牛逼到無可取代。但是,隨著 APM 市場的火爆,我決定「放下身段」試用一次,并且會總結(jié)出它與開源監(jiān)控之間差別在哪里。
運維經(jīng)歷的磨難
雖然都在不同的公司,做著不同的業(yè)務(wù),但是大多運維總會經(jīng)歷相同的故事,以及背著類似的黑鍋。運維們大多有如下經(jīng)歷:
- 網(wǎng)站或者業(yè)務(wù)訪問不了,服務(wù)器問題,運維的責任
- 昨天還好好的,今天就出現(xiàn)的問題,運維的責任
- 部分地區(qū)用戶反饋網(wǎng)站/App 無法試用,運維查查服務(wù)器。而且這種問題大多出現(xiàn)在事后。
- 各種程序都需要監(jiān)控,常見的 MongoDB 、 Redis 、 Nginx ,還會出現(xiàn)各種不常見的應(yīng)用。任何一種軟件都要熟悉,運維總是在不停的學(xué)習,待遇缺一直比不上研發(fā)!
- 服務(wù)器出現(xiàn)問題,老板找運維、領(lǐng)導(dǎo)找運維、開發(fā)也找運維,運維并不知道代碼邏輯,看日志,各種排錯。
初識 OneAPM
OneAPM 是一家為企業(yè)和開發(fā)者提供 APM 解決方案的服務(wù)商,支持 Java、.NET、PHP、Ruby、Python、Node.js、HTML5、iOS、Android 等語言和操作系統(tǒng)。
什么是 APM ?
既然試用 APM ,我覺得很有必要給大家解釋一下這個名詞。應(yīng)用性能管理(Application Performance Management)主要指對企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用進行監(jiān)測、優(yōu)化,提高企業(yè)應(yīng)用的可靠性和質(zhì)量,保證用戶得到良好的服務(wù),降低IT總擁有成本 (TCO) 。使用全業(yè)務(wù)鏈的敏捷 APM 監(jiān)控,可使一個企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用的性能更強大,可以提高競爭力,并取得商業(yè)成功,因此,加強應(yīng)用性能管理(APM)可以產(chǎn)生巨大商業(yè)利益。國內(nèi)外的 APM 有 Compuware 、 iMaster 、聽云、New Relic、OneAPM 、AppDynamics 等。
解釋比較干,如果還是不了解什么是 APM ,那么請隨我全面試用 OneAPM 的過程來了解什么是 APM 。
為什么要使用 OneAPM ?
分別從兩個層面考量,分別為運維層面與代碼層面
- 運維層面
團隊規(guī)模小,大多數(shù)團隊因為成本問題,都由開發(fā)人員兼職,造成了沒有專業(yè)運維的一個局面,導(dǎo)致無法做更多的運維層面監(jiān)控。 - 代碼層面
運維能監(jiān)控到眾多系統(tǒng)層面甚至業(yè)務(wù)級別監(jiān)控,但是代碼級別、終端用戶層面無法監(jiān)控到。部分 App /程序上線初期因為用戶量較少服務(wù)器能夠頂住,但是一旦用戶上來,將會變成亂成一團,最終導(dǎo)致用戶流失。
OneAPM 六個監(jiān)控大項
共有六項功能,接下來我一一使用,并對它和傳統(tǒng)的開源監(jiān)控來做比較
可監(jiān)控 Java、.NET、Node.js、Python、PHP、Ruby 性能,通過探針的方式監(jiān)控,可以監(jiān)控到代碼層面的性能,例如代碼響應(yīng)時間、吞吐量等等,研發(fā)人員通過它可以快速的定位性能低效代碼
通過Ai方式注入或者流量器中增加js ,js 收集瀏覽網(wǎng)頁用戶的信息,并提交到OneAPM服務(wù)器。于是,我們能夠了解到真實用戶對網(wǎng)站的瀏覽情況。例如:白屏時間、首屏時間、腳本錯誤、網(wǎng)頁加載就緒時間、各種瀏覽器的訪問情況,甚至能了解不同瀏覽器、運營商、地區(qū)用戶的訪問狀況。
Ai、Bi 都比較偏向于開發(fā),Ci則偏向于運維,Ci提供對系統(tǒng)、開源程序(例如:Nginx、PHP、Apache、MySQL、redis 等等)的性能指標管理,而且也提供系統(tǒng)層面的基本監(jiān)控,例如 CPU 、內(nèi)存、硬盤,但是功能相對比 Server 模塊弱一點。
與Ai相類似,唯一不同的是它屬于用戶層面軟件管理,真實反饋用戶是用情況,并定位到代碼問題。目前支持 iOS、 Android ,Windows Phone 用戶量畢竟太少
服務(wù)器系統(tǒng)級別監(jiān)控,主要監(jiān)控CPU、內(nèi)存、網(wǎng)絡(luò)、硬盤等基本信息
OneAlert 的前身是 110 monitor ,偏向于運維,它是監(jiān)控中最終的一環(huán)。 OneAlert 是一個中心,任何告警信息發(fā)送至 OneAlert,你可以設(shè)置各種規(guī)則,例如什么時間點發(fā)告警給誰,通過什么發(fā)送發(fā)送,例如短信、郵箱、微信、app等等。此功能相對獨立,不依托前面幾個產(chǎn)品。支持多種插件,例如zabbix、NAGIOS、阿里云,甚至競爭對手監(jiān)控寶。不知道監(jiān)控寶該高興呢還是不高興呢!
OneAPM 正式試用
因為運維生存時間是 LNMP 環(huán)境,所以接下來的內(nèi)容以 LNMP 為主,當然盡量試用更多的業(yè)務(wù)
OneAPM 試用之Ai
其實就是安裝一個 PHP 擴展,而且官方已經(jīng)列出了傻瓜式的文檔,所以可以知道安裝到底有多簡單了。極力推薦官方改成一鍵安裝方式。
安裝OneAPM PHP Agent
#wget https://user.oneapm.com/account/7e42e138b703a72ae6950531c9ad958a/agent/php/OneAPM_php_Agent_latest.tar.gz
tar -xzf OneAPM_php_Agent_latest.tar.gz
cd oneapm-php5-linux-install-script
./oneapm-install
在提示輸入「License Key」時,輸入「License Key」
BwQCBwAPDAd5724VHAhDXw9NW04886BbXhgGCAkDTb0f6wBfGwNRTQcE3ca5BgcZBAAVBls=
等待安裝腳本執(zhí)行。若出現(xiàn)以下信息,則安裝成功。
OneAPM is now installed on your system. Congratulations!
重啟php-fpm
service php-fpm restart
或者你是 Apache ,那么重啟 Apache 就行了,等候幾分鐘,重新進入后臺,便可以看到數(shù)據(jù)。

Ai 總覽

默認顯示最近30分鐘數(shù)據(jù)。一一看下都有哪些功能及其作用
平均響應(yīng)時間
分為4個事物, Web 事務(wù)、后臺任務(wù)、數(shù)據(jù)庫、外部服務(wù),著重了解 Web 與數(shù)據(jù)庫。

Web 事務(wù)響應(yīng)時間為從接收到請求到放回之間的時間,最高平均值為870多毫秒,這個值可以容忍。好在運維生存時間時間有使用 CDN ,否則絕對都是無法容忍的。

數(shù)據(jù)庫最大平均響應(yīng)時間為3.08ms,執(zhí)行次數(shù)16,316次,總時間50.22毫秒??吹竭@些數(shù)據(jù),心里有底了。
Apdex (性能指數(shù))
先來了解下什么是 Apdex 。 Apdex 是一個國際通用標準,是對用戶體驗滿意度的量化值。
服務(wù)端 Apdex :當前服務(wù)端設(shè)定的 Apdex T 值為0.5秒。這意味著響應(yīng)時間小于0.5秒時,為滿意狀態(tài),介于0.5秒到2秒之間為可容忍狀態(tài),2秒以上為不滿意狀態(tài)。
瀏覽器 Apdex :當前瀏覽器設(shè)定的 Apdex T值為2秒。 這意味著瀏覽器加載時間在2秒內(nèi)是滿意狀態(tài),介于2秒到8秒之間為可容忍狀態(tài),8秒以上為不滿意狀態(tài)。

吞吐量
每分鐘平均請求量

目前這邊每分鐘平均27.17個請求,上圖圖層顯示的數(shù)據(jù)為14:50到14:52兩分鐘內(nèi)平均響應(yīng)時間328.76ms,執(zhí)行次數(shù)66次。如果吞吐量小,響應(yīng)時間長,那應(yīng)該引起足夠的重視,將問題消滅在萌芽期。
Web 事務(wù)
一個 http/https 請求從發(fā)起到收到響應(yīng)這個過程,我們稱之為 Web 事務(wù)。
有時候網(wǎng)站慢,有時候有正常,運維無法排查到問題。OneAPM 的慢事務(wù)追蹤完美解決了這個問題。來找出運維生存時間網(wǎng)站隱藏的問題。

由此,我找到 Uri/wp-login.php 在整個過程相對耗時間,這是一個較少用到的頁面,從上圖可以發(fā)現(xiàn)2分鐘內(nèi)只執(zhí)行了2次,平均響應(yīng)時間卻達到995.78毫秒。

點擊如上連接,進入追蹤

在最慢組件中,我們發(fā)現(xiàn)函數(shù) file_get_contents 調(diào)用了一次,卻執(zhí)行了9秒時間。我們看看追蹤詳情,來探探究竟。

運維生存時間時間啟用了酷炫的登陸頁面,后臺圖片為 bing 的背景。這個文章竟然是通過 file_get_contents 抓取的,得不償失呀!
Web 事務(wù)追中不僅僅包含了代碼級別追蹤,其中還有請求參數(shù),SQL 語句。功能酷的不能在庫了。到底是 SQL 有問題還是代碼有問題,OneAPM 都給你展示出來了。

錯誤信息
程序執(zhí)行過程中可能會少量出現(xiàn)錯誤,因為概率的關(guān)系,我們可能無法遇到,有些錯誤致命,有些錯誤無關(guān)大小,OneAPM 也就能抓住他們,等著開發(fā)人員去消滅。

以上錯誤,在近6小時出現(xiàn)1326次,慶幸它是一個 warning 。為此功能點贊!
OneAPM 試用之 Bi
試用Ai之后,即使它是商業(yè)化產(chǎn)品,但是崇拜之心油然而生,畢竟這些功能 Zabbix 、NAGIOS 無法實現(xiàn)。
Bi , 瀏覽器應(yīng)用管理,適合門戶、論壇等站點,數(shù)據(jù)均來自真實用戶,能夠最直接的了解到站點性能,以及用戶端出現(xiàn)的錯誤。

有三種部署方式
復(fù)制/黏貼 js 純文本
輸入應(yīng)用名稱后,復(fù)制生成的代碼,將其粘貼在<head>中。
注意:需要將代碼粘貼在<meta>后面,所有<script>前面。
優(yōu)勢:避免加載 js 探針第一個腳本引起的網(wǎng)絡(luò)耗時和減少白屏時間。復(fù)制/黏貼 js 鏈接
輸入應(yīng)用名稱后,復(fù)制生成的代碼,將其粘貼在<head>中。
注意:需要將代碼粘貼在<meta>后面,所有<script>前面。
優(yōu)勢:操作簡單,部署方便。Ai 自動注入 Bi 探針
由 Ai 探針自動向前端頁面注入 js 代碼,只需簡單配置,無需修改代碼。
優(yōu)勢:和 Ai 無縫集成,可監(jiān)控 Web 應(yīng)用程序在不同區(qū)域、不同設(shè)備下響應(yīng)時間,更新 js 探針方便
部署 Bi
使用 js 純文本方式部署,輸入應(yīng)用名「運維生存時間 WEB」,保存即可獲取到 js ,獲取到的代碼放到網(wǎng)站共用 head 之間。


如果不知道怎么放到 head ,聯(lián)系對應(yīng)的開發(fā)人員,他會告訴你。

在測試的前一周,我們已經(jīng)部署了一個未上 CDN 的小流量站點,先用這個站點看看。
Bi 基本功能
功能分為:受訪頁面、Ajax、腳本錯誤、瀏覽器、地理、運營商。
這部分數(shù)據(jù)對前端工程師非常重要,白屏時間、首屏時間、網(wǎng)頁就緒時間,OneAPM 統(tǒng)計了每一個 URL 的這些指數(shù)的平均時間,從中找出最耗時間的 URL ,對代碼響應(yīng)的改良。

Apdex 性能指數(shù)
此處能非常清晰的表現(xiàn)出當前站點的用戶體驗狀況。如果大于2,那說明網(wǎng)站情況非常糟糕。如上截圖,平均性能指標 Apdex 在0.28,可以容忍,看到這個指數(shù)心里相對放心,咱的站點用戶體驗不差。
腳本兼容性之腳本錯誤
公司有個前端工程師安裝了各種瀏覽器,不知道的人還以為他愛好廣泛呢,實際上他僅僅是為了在每種瀏覽器上做兼容性測試。瀏覽器有多家,每一家都有多個版本, Firefox 都以及42.0了_。腳本錯誤在所難免, js 錯誤進一步導(dǎo)致網(wǎng)站部分功能無法使用。 OneAPM 記錄了用戶腳本錯誤信息,簡直就是一個專業(yè)用戶自動反饋(以往靠熱心的用戶的反饋,還提供測試,遠程測試那得多消磨時間,而且其他未反饋的用戶就別遺忘了,被遺忘幾乎等于流失)。




如上信息可以知道哪個頁面出現(xiàn)了哪些腳本錯誤,并且給出了用戶信息、瀏覽器、錯誤信息、堆棧信息等。我想,前端工程師從這里可以解決相當多問題!
頁面跟蹤
某些頁面慢,到底慢在哪里,和 Ai 的 Web 事務(wù)一樣,提供了慢事務(wù)追蹤。

點擊需要 Trace 的頁面,找到滿加載追蹤,資源為支持的可以 Trace


時間都在DOM

只列出了部分資源時序,底下還有更多,類似 firebug 的「網(wǎng)絡(luò)」,顯示各個資源加載所消耗的時間。但是功能略顯不足,未顯示每個資源 DNS 解析、建立連接、接收數(shù)據(jù)分別消耗的時間,但是它能為我們提供一定的參考。這邊或許可以做得更好。
OneAPM 試用之 Ci
Ci 平臺監(jiān)控,具體干嘛的,我上一張圖你就明白了。

用戶只需在服務(wù)器安裝 OneAPM Ci Agent,配置需要監(jiān)控應(yīng)用的配置文件即可。
部署OneAPM Ci Agent
點擊設(shè)置添加平臺,如下圖

復(fù)制 shell 命令,在 Linux 中運行即可。
平臺添加完畢之后,過幾分鐘就能看到信息

剛配置完畢,平臺服務(wù)列只有 System 。 System 為服務(wù)器基本信息,例如 CPU、內(nèi)存、硬盤、網(wǎng)絡(luò)等。如下圖

效果與剛安裝完 Zabbix 一樣,但是安裝更簡單,UI 更漂亮。
添加平臺服務(wù)
有各種各樣的程序需要做性能管理,例如 Nginx 、 MySQL 、 PHP 、tomcat 等
LNMP 環(huán)境部署
所有的配置文件均在 /etc/oneapm-ci-agent/conf.d/ ,支持被監(jiān)控的軟件都有配置文件 sample
配置文件如下
ll /etc/oneapm-ci-agent/conf.d/
-rw-r--r-- 1 oneapm-ci-agent root 2630 Sep 6 22:41 activemq_58.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 2619 Sep 6 22:41 activemq.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 232 Sep 6 22:41 apache.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 2372 Sep 6 22:41 cassandra.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 250 Sep 6 22:41 couchbase.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 916 Sep 6 22:41 couch.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 2408 Sep 6 22:41 docker.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 2385 Sep 6 22:41 elastic.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 1550 Sep 6 22:41 jmx.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 338 Sep 6 22:41 kafka_consumer.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 5957 Sep 6 22:41 kafka.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 245 Sep 6 22:41 mcache.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 872 Sep 6 22:41 mongo.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 917 Sep 6 22:41 mysql.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 627 Sep 6 22:41 nginx.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 952 Sep 6 22:41 php_fpm.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 1787 Sep 6 22:41 postgres.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 1645 Sep 6 22:41 rabbitmq.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 1116 Sep 6 22:41 redisdb.yaml.example
-rw-r--r-- 1 oneapm-ci-agent root 2760 Sep 6 22:41 tomcat.yaml.example
部署 nginx
部署 nginx status
請看之前的文章:http://www.ttlsa.com/nginx/nginx-status-detail/
status地址:http://localhost/status
編輯 nginx 配置
# cat nginx.yaml
init_config:
instances:
- nginx_status_url: http://localhost/ngx_status
tags:
tag_key:tag_value`
重啟OneAPM-C
# /etc/init.d/oneapm-ci-agent restart
Stopping OneAPM CI Agent (using killproc on supervisord): [ OK ]
Starting OneAPM CI Agent (using supervisord): [ OK ]
驗證 php-fpm運行狀態(tài)
# /etc/init.d/oneapm-ci-agent info
如果看到如下信息,說明 php-fpm 監(jiān)控配置成功,登陸 OneAPM,等候幾分鐘,Ci中會有數(shù)據(jù)展示
Checks
======
php_fpm
-------
- instance #0 [OK]
- Collected 7 metrics, 0 events & 2 service checks`
Nginx 性能數(shù)據(jù)

修改配置文件,重啟 Agent 即可獲取到 nginx,非常簡答!
部署 MySQL
部署方法基本類型,只需要修改 mysql.yaml 即可
# cat mysql.yaml
instances:
- server: localhost
user: oneapm
pass: '123456'`
配置數(shù)據(jù)權(quán)限
# mysql -e "CREATE USER 'oneapm'@'localhost' IDENTIFIED BY 123456;"
# mysql -e "GRANT REPLICATION CLIENT ON *.* TO 'oneapm'@'localhost' WITH MAX_USER_CONNECTIONS 5;"
重啟 Agent
# /etc/init.d/oneapm-ci-agent restart`
驗證配置
# /etc/init.d/oneapm-ci-agent restart
Checks
======
[...]
mysql
-----
- instance #0 [OK]
- Collected 8 metrics & 0 events`
備注:密碼如果是數(shù)字,一定記得加上單引號,否則會出現(xiàn)錯誤。這算一個小 BUG,希望 OneAPM 能將它先轉(zhuǎn)為字符串。
MySQL 性能數(shù)據(jù)

當然,這邊只顯示部分12個性能指標,你可以點擊“加載更多”顯示更多,或者前往 MySQL 儀表盤。
Nginx 部署
配置方法都一樣,只是配置文件不同,我列出我的配置文件以及監(jiān)控圖
配置文件 nginx.yaml
# cat nginx.yaml
init_config:
instances:
- nginx_status_url: http://localhost/ngx_status
tags:
-tag_key:tag_value`
性能數(shù)據(jù)

到這里我們可以發(fā)現(xiàn) Ci 監(jiān)控與 Zabbix 部分功能是一樣的
OneAPM 有如下優(yōu)勢
部署簡單,沒有太多復(fù)雜配置
Ui 美觀大方
圖片數(shù)據(jù)能更詳細的顯示,而 Zabbix 僅僅是一張圖
Zabbix 優(yōu)勢
- 開源免費
- 自定義功能強
OneAPM 試用之 Mi
功能與 Ai 類似,可實現(xiàn)代碼級別管理
OneAPM 試用之 Server
Server 監(jiān)控與平臺監(jiān)控中的平臺服務(wù)「system」部分重疊,如果你不想監(jiān)控太多關(guān)于系統(tǒng)層面的數(shù)據(jù)(cpu、內(nèi)存、io之類),那么安裝OneAPM Ci Agent即可。反之,裝OneAPM Servers吧!
部署 OneAPM Servers
# wget https://user.oneapm.com/account/7e42e138b703a72ae6950531c9ad958a/agent/server/OneAPM_server_Age nt_latest.tar.gz
# tar –xzvf OneAPM_server_Agent_latest.tar.gz
# cd oneapm-sysmond-linux-install-script/
# ./oasysmond-install
OneAPM Server Monitor Installation (interactive mode)
============================================
Please select from one of the following options:
1) Install OneAPM Server Monitor
2) Uninstall OneAPM Server Monitor
3) Upgrade OneAPM Server Monitor
0) Exit
Enter choice (1-3, 0 to exit): 1
根據(jù)提示,輸入你的 key 即可。
運行 OneAPM Servers
# oasysmond
數(shù)據(jù)展示
啟動之后,登陸 OneAPM 后臺,進入 Server 監(jiān)控,稍等幾分鐘便可以查看數(shù)據(jù)。我添加了兩臺服務(wù)器,數(shù)據(jù)如下

一個服務(wù)器列表,顯示了最基礎(chǔ)的 CPU\ 內(nèi)存、內(nèi)存、磁盤信息。點擊主機名,查看更多數(shù)據(jù)。我們可以看到四個菜單:總覽、磁盤、網(wǎng)絡(luò)、進程。
相比其他功能, Server 監(jiān)控沒有給我太大的驚喜,畢竟功能和 zabbix 相類似。不過站在非專業(yè)運維角度出發(fā),這絕對是個被需要產(chǎn)品。分別列出一些性能指數(shù)








千萬不要小看這些基本數(shù)據(jù),他能給服務(wù)器是否需要擴容升級提供一個依據(jù),歷史數(shù)據(jù)也更容易協(xié)助解決一些存在故障!
OneAPM 試用之 OneAlert

它是告警 ALL IN ONE,Zabbix 、API、NAGIOS、阿里云、騰訊云、監(jiān)控寶等等發(fā)出的告警信息接入 OneAlert 數(shù)據(jù)中心。 OneAlert 根據(jù)定義好的規(guī)則,將通過定義好的告警方式(可能是郵件、可能是短信、可能是電話)將告警消息傳給指定的人,規(guī)則各種靈活配置。
OneAPM VS Zabbix
通過全面的試用 OneAPM ,我覺得沒有必要拿 OneAPM 與傳統(tǒng)開源監(jiān)控 Zabbix 做個比較。因為各自側(cè)重點不同,互相不可取代。OneAPM 偏重于性能管理, Zabbix 偏重于業(yè)務(wù)監(jiān)控。
OneAPM 與 Zabbix 如何選擇?
文章寫這么多,不是立馬讓你掏錢去買 OneAPM 服務(wù),這并不是我的初衷。我想讓大家全面的了解什么 APM,APM 能做什么? APM 能解決什么問題?如果你覺得它對你們有說幫助,請毫不猶豫的使用它。如果覺得 Zabbix 就夠了。那也沒那個必要。
最后
感謝 OneAPM 提供試用功能,讓我更全面的了解了 OneAPM 性能管理。當然, zabbix 毫無疑問是一個偉大的產(chǎn)品,我是它的鐵桿粉絲(我用 Zabbix 110篇系列文章這個行動證明了),了解到它的強大之處,也了解到了它的不足之處,這個不足恰巧是 APM 的機會!
作者:涼白開 網(wǎng)站:運維生存時間 網(wǎng)址:http://www.ttlsa.com/
如果你也想體驗 OneAPM 強悍的應(yīng)用性能管理功能,歡迎訪問 OneAPM 官方網(wǎng)站進行體驗試用。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方博客。