中國科學院計算機網絡信息中心,北京 100190
中國科學院超級計算環(huán)境是由總中心、9 家分中心、19 家所級中心組成的三層架構網格計算環(huán)境,同時還連接了院內 11 家單位的 GPU 計算集群,聚合通用計算能力近 1300 萬億次,GPU 計算能力近 3000萬億次。中國科學院超級計算環(huán)境主要為用戶提供計算服務,同時對用戶提出的問題及時響應并提供技術支持。衡量一個超級計算環(huán)境主要關注環(huán)境的資源信息、使用情況和用戶數目等。管理員及時有效地獲取環(huán)境的運行情況,了解環(huán)境的資源使用信息可更好地調度用戶作業(yè),為用戶提供更好的服務。
基于 Nagios 搭建的中國科學院超級計算環(huán)境監(jiān)控平臺[1]中,針對集群主要考慮系統利用率 (CPU 占用率) 和節(jié)點占用率兩個指標。為獲取這兩項數據按照 Nagios 已有插件的實現方式,編寫了獲取集群CPU 和節(jié)點占用率的插件。在獲取這兩項數據的同時一并抓取了集群的其它運行數據,包括集群計算節(jié)點數、CPU 核數、賬號數、作業(yè)數等。在之前的監(jiān)控平臺中處于當時的需求只考慮了系統利用率這一指標,集群的其它運行數據并沒有展示。為了更加詳細準確地反映集群的運行,優(yōu)化改進已有的監(jiān)控平臺,根據實際的運行需求對獲取的運行數據加工處理,設計成更準確直觀反映集群的數據結構。有了這些數據后,為使外部能方便快捷地獲取利用這些監(jiān)控數據,把數據設計成通用接口的形式對外提供。外部人員可直接調用接口快捷地獲取數據并根據自己的需求從各種維度對數據進行展示。本文中用于展示中科院超級計算環(huán)境的 Show 平臺即基于監(jiān)控數據接口開發(fā)并實現的。Show 平臺主要展示超級計算環(huán)境的運維數據、集群的使用信息以及集群利用率等。普通用戶或系統管理員登錄后可根據自己不同的權限查看相應內容。
中科院超級計算環(huán)境監(jiān)控整體結構如圖 1 所示,底層是已搭建好的環(huán)境監(jiān)控平臺,其中涉及獲取集群和服務器信息的插件。在監(jiān)控平臺中主要獲取服務器的磁盤、進程、負載、用戶、數據庫,通過這幾項來保證服務器能與集群正常連接并存儲數據。針對集群主要獲取集群的磁盤和運行信息,包括集群當前的利用率、作業(yè)數等;中間層是監(jiān)控數據接口,利用底層環(huán)境監(jiān)控獲取的監(jiān)控數據以接口的形式對外提供數據。設計的接口包括獲取實時數據 (利用率、計算節(jié)點、賬號、CPU 核、作業(yè)) 和統計數據 (系統利用率) 兩類;上層是應用層,開發(fā)人員利用監(jiān)控數據接口開發(fā)的應用程序。本文設計的展示超級計算環(huán)境的 Show平臺即其中的一個應用,利用監(jiān)控數據接口提供的接口對數據組合并展示。
超級計算環(huán)境以三層架構超級計算網格中間件SCE[2]作為核心支撐軟件,根據部署和管理的要求,設計有登錄客戶端 Client、中央服務器 CS (center server) 以及前端服務器 FS (front server) 三大模塊。其中 FS 負責中央服務器 CS 與超級計算機 HPC 之間的連接,對到 HPC 的連接進行訪問控制,以保證訪問的安全性和合法性。考慮到中國科學院超級計算環(huán)境的三層架構特點,FS 分布在各個分中心或所級中心,采用 Nagios 的分布式監(jiān)控方式部署監(jiān)控平臺。FS 收集網格服務器和相連接的集群的信息,通過NSCA 將數據發(fā)送給部署在總中心的監(jiān)控主服務,具體部署結構圖如圖 2 所示。
服務器的具體含義如表 1 所示。監(jiān)控主服務是部署在中國科學院計算機網絡信息中心的一臺服務器,收集所有信息并集中顯示;監(jiān)控中轉服務器是指與HPC 相連的前端 FS 服務器。由于安全等因素,主服務無法直接獲取 HPC 的相應信息,只能通過 FS 中轉服務器獲取。FS 以及相連的 HPC 的監(jiān)控信息通過匯報的形式發(fā)送給主服務,這樣可做到只要 FS 是正常工作的即可把監(jiān)控信息發(fā)送給主服務。主服務主動連接 FS 獲取監(jiān)控信息會造成主服務自身負載過高或因連接問題獲取不到數據,采用分布式的監(jiān)控方式部署可避免以上問題。
圖1 監(jiān)控整體結構圖Fig. 1 Monitor structure
圖2 監(jiān)控平臺部署結構圖Fig. 2 Monitor platform structure
表1 服務器描述Table 1 Description of servers
中國科學院超級計算環(huán)境現有 HPC 的作業(yè)系統主要包括 LSF、Torque、Pbspro 和 Slurm 四種,所以需要根據各自的使用方式編寫插件獲取集群信息。獲取的集群信息包括利用率、計算節(jié)點、賬號、作業(yè)以及 CPU 核。其中利用率的定義如下:
系統利用率 (CPU 占有率) = (運行作業(yè)占用的CPU 核數/開機總 CPU 核數)
節(jié)點占有率= (運行作業(yè)占用的節(jié)點數/開機總節(jié)點數)
開機率= (開機總節(jié)點數/總節(jié)點數)
計算節(jié)點數據包括總節(jié)點數、離線節(jié)點數、管理員關閉的節(jié)點數、運行作業(yè)占用的節(jié)點數、預留節(jié)點數、空閑節(jié)點數;賬號數據包括總數、有作業(yè)運行的賬號、有作業(yè)排隊的賬號;作業(yè)數據包括總作業(yè)數、運行作業(yè)數;CPU 核數包括可用總核數、運行作業(yè)占用的核數、排隊作業(yè)核數。
集群實現這些插件后,在監(jiān)控中轉服務中定義對集群以及自身服務器的監(jiān)控內容,驗證配置后啟動 Nagios 進程,監(jiān)控中轉服務即可獲取集群的監(jiān)控信息。另外,監(jiān)控中轉服務需要設置 NSCA 的一項配置,通過該命令將監(jiān)控內容發(fā)送給監(jiān)控主服務。在監(jiān)控主服務中同樣需要定義監(jiān)控中轉服務和集群的監(jiān)控內容,與監(jiān)控中轉服務定義的內容不同的是不需要定義獲取監(jiān)控內容的命令。中轉服務將監(jiān)控信息發(fā)送到主服務后,主服務能自動匹配獲取相應內容。在中國科學院超級計算環(huán)境監(jiān)控平臺中,前端服務器 (監(jiān)控平臺中的監(jiān)控中轉服務) 以五分鐘一次的頻率采集集群數據并匯報給監(jiān)控主服務的服務器。部署監(jiān)控主服務的服務器存放有所有集群的信息,可對這些信息進行分析處理或配置一個 Web 服務器展示監(jiān)控信息。在監(jiān)控平臺中,服務器或集群出現故障時,平臺可根據定義的故障處理方式通知管理員,包括郵件、短信等。一旦出現問題管理員會收到郵件通知,有利于及時解決出現的故障問題,為用戶提供更好的服務。
在監(jiān)控平臺中,總中心部署監(jiān)控主服務的服務器收集到的監(jiān)控數據借助 RRDTool(Round Robin Database tool)[3]將數據存儲在對應的 RRD 文件中。“Round Robin”指使用固定大小的空間來存儲數據,并有一個指針指向最新的數據的位置。一段時間后,當所有的空間都存滿了數據,又從頭開始存放。整個存儲空間的大小是一個固定的數值,RRDTool 就是使用類似的方式來存放數據的工具,該工具存儲數據的一個缺點是存儲空間大小固定,當所有空間都存滿時會覆蓋原有的數據。
在保存的數據中,如集群的利用率信息,很多情況下希望可以保留幾個周期,以便于進行對比分析。借助 RRDTool 存儲數據只能保留一段時間,所以在監(jiān)控平臺中引入 NDOUTILES[4]將 Nagios 監(jiān)控數據存入 MySQL 數據庫。利用 MySQL 數據庫中集群的原始數據,根據需求設計不同的表存儲不同時間間隔的數據以便統計數據時使用。表 2 是針對中科院超級計算環(huán)境設計的數據表,其中 scgrid 表存儲每個集群的原始數據,每五分鐘增加一個數據項;scgridhalf、scgridtwo 是通過 scgrid 數據表生成,主要用于提供集群最近半月或一月的數據。scgridhalf 中集群的每個數據項間隔為 30 分鐘,scgridtwo 每 2 小時增加一個數據項;Dayinfo 存儲集群每天的系統利用率數據,通過 scgrid 數據累計求和取均值獲得,用于計算每月的系統利用率數據。
為保證數據訪問的方便快捷,利用 Flask[5]框架 python 語言開發(fā)了一個 Web 服務來獲取監(jiān)控數據??紤]到監(jiān)控數據存儲在 MySQL 數據庫中,外部直接訪問數據庫獲取數據會造成數據的不安全性。SCEAPI-REST[6]是訪問 SCE 環(huán)境的跨平臺和語言的通用接口。在 SCEAPI-REST 中,通過調用獲取監(jiān)控信息的 Web 服務實現獲取監(jiān)控數據的接口。
獲取的監(jiān)控數據主要包括集群利用率、計算節(jié)點數、賬號數、作業(yè)數和 CPU 核數等信息。針對這些數據主要從計算節(jié)點、賬戶、作業(yè)、CPU 核不同維度設計接口;除了考慮實時數據外,還設計了系統利用率的統計數據接口。針對一個超級計算環(huán)境,一般用戶會想要了解環(huán)境的整體信息,包括總計算能力、用戶數、作業(yè)數等,系統管理者除關注環(huán)境整體信息外,對其中各個集群的信息也需要清楚。針對前面的實時數據,分別針對環(huán)境整體和集群設置了兩個接口(當前實時數據和指定時間段內數據)。對系統利用率的統計數據同樣設置了兩個接口 (指定時間段內單個集群的系統利用率和指定月份所有集群的系統利用率)。具體接口定義如表 3 所示:
其中,表 3 給出了定義的接口相對路徑,調用API 時 URI 路徑還需要拼接 HTTP 協議、域名和版本信息,如 http://域名/版本//show/scgrid/tdata 表示獲取環(huán)境整體實時數據全路徑。表 3 中定義的各個接口都設計有自己的參數,如 /show/scgrid/envInfo 參數包括 type、start、end 三個,其中 type 表示需要獲取的數據類型 (計算節(jié)點、賬號、作業(yè)、CPU 核);start 和end 分別用于指定獲取數據的開始時間和結束時間。
如圖 3 部署圖所示:SCEAPI-REST 以 web 形式訪問監(jiān)控的 Web 服務;Web 服務接受請求后查詢存儲 Nagios 信息的 MySQL 數據庫并進行計算,以JSON 格式返回數據。SCEAPI-REST 相當于對 Web服務各個接口進行封裝處理,只要保證 Web 服務提供的接口不變,即使 Web 服務內部的實現根據實際運行做出調整并不影響 API 端接口的使用。Web 服務采用 Flask 框架 python 語言開發(fā)實現。Flask 是一輕量級的 web 應用框架,具有一個包含基本服務的強健核心,其他功能可通過擴展實現。Flask 主要依賴于兩個外部庫 Jinja2 模板引擎和 Werkzeug WSGI 工具集,開發(fā)簡單方便。在 Web 服務中,為獲取所需的環(huán)境整體數據和集群數據,從數據庫獲取數據后需要進一步對數據簡單計算處理。比如環(huán)境整體數據需累加各個集群的對應數據,每個集群雖然都五分鐘一條數據,但由于獲取時間并不完全相同,對時間進行取整操作保證每個時間都存有各個集群的一條數據。獲取到數據結果后,為方便外部使用將數據結果統一為現在比較流行的 JSON 格式輸出。
表2 數據表描述Table 2 Description of data tables
表3 接口定義描述Table 3 Description of interfaces
開發(fā)者可通過 Web 社區(qū)、移動應用、桌面程序、腳本等不同形式的終端訪問 SCEAPI-REST,獲取相應數據。SCEAPI-REST 提供相應的使用手冊,開發(fā)者只要根據手冊可方便地利用提供的各個接口獲取 SCE 環(huán)境的各項數據,從而根據自己的需求開發(fā)設計相應的應用。
中科院超級計算環(huán)境中用戶和集群管理員大都使用科技網通行證,為了方便瀏覽器端的開發(fā),支持科技網通行證,SCEAPI-REST 針對獲取監(jiān)控數據設計和實現了 javascipt 開發(fā)接口。開發(fā)人員可以直接在瀏覽器端使用,不再需要處理同源和跨域問題,該接口支持請求的并發(fā)訪問。具體流程如圖 4 所示,通過科技網通行證的腳本驗證用戶是否已經登錄通行證,若已經成功登錄,“通行證登錄”模塊負責根據 code從科技網通行證服務器獲取用戶信息,并提供公開查詢的權限,然后使用 js 腳本連接訪問公開數據,若未登錄給出出錯信息并提示需要登錄。如果設計的WEB 應用是采用科技網通行證驗證登錄,可直接采用加載瀏覽器的 javascript 腳本方式獲取 JSON 格式數據,進而對數據進行展示處理。
圖3 監(jiān)控數據部署圖Fig. 3 Monitor data structure
圖4 監(jiān)控數據登錄流程示意圖Fig. 4 Login process of monitoring data
基于 SCEAPI-REST,結合運維的實際需求,我們設計開發(fā)了 Show 平臺對其中的監(jiān)控數據從不同維度進行展示。平臺接入了中國科技網通行證平臺,采用科技網通行證統一登錄,直接調用 SCEAPIREST 提供的 javascipt 開發(fā)接口獲取監(jiān)控數據。調用javascript 開發(fā)接口的好處是簡單方便,只需要加載相應的 js 代碼,但必須使用科技網通行證先登錄,否則無法獲取接口返回數據,提示錯誤信息。
關注超級計算環(huán)境的一般為使用資源的用戶或者集群管理員,針對不同的用戶設置了三類角色,包括超級管理員、集群管理員和普通用戶。在平臺中賦予每一類角色不同的權限用于查看不同的頁面內容。圖5是權限控制的流程圖,當用戶發(fā)出訪問請求時,根據用戶提供的憑證 (用戶名、密碼) 驗證用戶的合法性,若憑證無誤,平臺通過角色檢查得到用戶的權限,根據權限顯示對應的網站內容。通過權限控制可實現系統的分級,提高系統安全性,同時更加方便用戶查看自己關注的內容。
針對前面設置的三類角色,平臺分別設計了首頁、集群展示和集群月報利用率三個頁面。首頁展示環(huán)境的整體信息,所有用戶只要登錄該平臺即可查看。集群展示和集群月報利用率頁面展示集群的相應數據,其中集群管理員可查看自己集群的利用信息和利用率數據;超級管理員可查看所有集群的信息。
圖5 權限控制圖Fig. 5 Access Control
圖6 首頁示意圖Fig. 6 Home page
圖6 是首頁展示信息,左側為中科院超級計算環(huán)境的整體運維數據,包括總節(jié)點數、開機節(jié)點數和可用核數;累計開通賬號數;作業(yè)運行和排隊信息。右側為環(huán)境整體計算節(jié)點、核數、作業(yè)數和賬號信息展示圖,通過點擊右側的最近一天、最近一周和最近一月按鈕可分別查看對應時間段的數據。右側顯示的每個圖都是采用 Highcharts[7]所畫的時間軸函數圖,可通過拖拽橫軸查看不同時間段的數據,點擊下側的各個數據項,可控制對應的數據顯示與否。每個圖都可通過一個單獨的鏈接來訪問,如果特別關注某一信息可通過鏈接來訪問并查看相關數據。
集群展示頁面與首頁相比可直接查看集群利用率和節(jié)點開機率兩個維度數據。圖 7 為截取的集群利用信息,包括集群利用率和節(jié)點開機率,這兩項數據是集群管理員最為關注的數據。在計算集群利用率時時只考慮了可用的 CPU 核和節(jié)點,結合節(jié)點開機率信息可反映集群運行的是否比較慢,空閑資源是否很多。與前面的圖類似,也是時間軸函數圖,通過拖拽橫軸可查看不同時間段的數據。集群每月的系統率可通過集群月報利用率頁面查看,這里顯示集群最近半年的數據。
圖7 集群利用信息示意圖Fig. 7 Cluster Utilization
基于 Nagios 開發(fā)了中國科學院超級計算環(huán)境監(jiān)控平臺,通過監(jiān)控平臺可獲取集群的運維數據。為方便外部使用,對其中的運維數據加工處理并設計成接口的形式對外提供。開發(fā)者可利用提供接口獲取運維數據并設計自己的應用展示相關數據。本文利用監(jiān)控數據接口搭建了中科院超級計算環(huán)境展示平臺用于展示整個超級計算環(huán)境以及集群的運行情況。各集群管理員可通過此平臺查看自己集群的運行情況 (計算節(jié)點、作業(yè)、賬號、CPU 核、利用率);普通用戶可通過平臺了解超級計算環(huán)境的整體資源信息;超級管理員可查看整個環(huán)境以及集群的數據,清楚地了解環(huán)境運行信息。平臺提供了時間軸函數圖來展示各項數據,用戶也可通過調用監(jiān)控數據接口獲取監(jiān)控數據,以更方便自己查看使用的形式來展示這些數據。
[1] 和榮,肖海力. 基于Nagios的監(jiān)控平臺的設計與實現[J].科研信息化技術與應用,2014,5(5): 77-85.
[2] 戴志輝. 三層架構超級計算環(huán)境優(yōu)化設計與實現研究[D].北京,中國科學院研究生院,2011.
[3] RRDTool [S]. http://oss.oetiker.ch/rrdtool/,2014.
[4] Nagios項目組. Nagios-3應用指南[S]. http://www.nagios.org,2008.
[5] Flask[S]. http:// flask.pocoo.org/,2010.
[6] 曹榮強,肖海力,盧莎莎. 基于REST風格的科學計算環(huán)境信息Web服務[J].科研信息化技術與應用,2012,3(5):76-82.
[7] Highcharts[S]. http://www.highcharts.com/products/highcharts/,2016.