远程监控Swift生产服务器运行
相信所有Swift全棧的程序員一定都會頭疼一個很大的問題:如何監控已經部署成功的Swift服務器?
上周,Perfect 團隊剛剛宣布了Perfect New Relic Library for Linux,即基于NewRelic.com提供的服務器云端監控的方法。
通過在Linux生產服務器增加new relic服務,并將監控代碼段植入源程序后,您可以自行選擇監控指標(比如CPU/內存/當前用戶數量)并可以將數據庫或服務器在執行關鍵的寫入過程中分析交易過程(Transaction)消耗的時間:
一旦成功設定,您還可以設置監控指標、下載手機應用,實現管理員24x7不間斷監控。
本項目為New Relic云監控服務的Swift 版本 Agent SDK.
本項目采用SPM軟件包管理器編譯,是Perfect 項目的一部分,但也可以作為獨立模塊使用。
發行說明
本項目只兼容 Ubuntu 16.04 和 Swift 3.1 工具鏈。
快速上手
請用Perfect 軟件助手編譯本項目,否則請使用下列命令進行安裝:
$ git clone https://github.com/PerfectlySoft/Perfect-NewRelic-linux.git $ cd Perfect-libNewRelic-linux $ sudo ./install.sh在安裝過程中,該產品會詢問您在New Relic上注冊的 license key 許可證代碼, application name 應用程序名稱, 開發所用的語言及其版本號。之后安裝程序會將命令行 newrelic-collector-client-daemon 作為系統服務進行安裝,安裝完成后詳細配置可以在這里找到: /usr/local/etc/newrelic.service.
請配置您工程的 Package.swift 文件并追加下列內容:
.Package(url: "https://github.com/PerfectlySoft/Perfect-NewRelic-linux.git", majorVersion: 1)請將函數庫導入您的程序( ??注意?? 由于 Swift 3.1 linux 版本存在一個明顯的編譯器問題,因此 PerfectNewRelic 導入時必須配合 Foundation 函數庫):
import PerfectNewRelic import Foundation除了 Swift 與 C 一些語法上的轉化差異之外,詳細的編程手冊情參考 New Relic Agent SDK
配置
安裝后的配置可以在 New Relic - Configuring the Agent SDK 找到,請注意強烈推薦將其配置為Daemon Mode 服務程序模式 因為截至目前為止 Embedded-mode嵌入模式 仍然處于試驗狀態。
如果配置成功,您可以很輕易地創建NewRelic類的例程:
let nr = try NewRelic()- 還可以創建回調函數來判讀后臺服務的狀態:
Agent SDK 配置和限額
根據 New Relic Agent SDK 配置說明,以下配置信息同樣適用于Perfect NewRelic函數庫:
| 在事務操作過程中關閉服務器性能數據采集 | nr.enableInstrumentation(false) |
| 在事物操作過程中配置允許用于追蹤的最大分段數量 | let t = try Transaction(nr, maxTraceSegments: 50) // 最多猜忌50個追蹤段 |
API 簡要說明
根據 New Relic 開發工具使用說明,Perfect NewRelic 函數庫提供與其C語言函數庫完全一樣的功能:
性能指標和監控
| 舉例 | try nr.recordMetric(name: "ActiveUsers", value: 25) |
| 描述 | 記錄一個自定義指標 |
| 參數 |
|
| 舉例 | try nr.recordCPU(timeSeconds: 5.0, usagePercent: 1.2) |
| 描述 | 記錄CPU用戶占用時間(秒)以及CPU占用百分比。 |
| 參數 |
|
| 舉例 | try nr.recordMemory(megabytes: 32) |
| 描述 | 記錄當前內存用量 |
| 參數 |
|
Transaction 事務對象
Perfect NewRelic 的事物對象Transaction 被定義為一個Swift類,構造函數如下:
public init(_ instance: NewRelic,webType: Bool? = nil,category: String? = nil,name: String? = nil,url: String? = nil,attributes: [String: String],maxTraceSegments: Int? = nil) throws參數說明
- instance: NewRelic 實例, 必填參數.
- webType: 可選參數,真表示 WebTransaction,假則為其他類型。默認為真。
- category: 可選參數. 事務分類名稱,默認為 ‘Uri’
- name: 可選參數. 事務名稱
- url: 可選參數. 對于 WebTransaction 所使用的URL鏈接
- attributes: 可選參數. 事務的屬性,字典類型,字典內每個字段對應一個變量值。
- maxTraceSegments: 可選參數. 在同一個事務內可以跟蹤的最大區段數量限額。默認最大值為2000,也就是說在同一個事務里,如果區段數量超過計劃限額(四倍的apdex_t)時,只有頭2000個分段將用于跟蹤報告。
事務類初始化代碼示范
let nr = NewRelic() let t = try Transaction(nr, webType: false,category: "my-class-1", name: "my-transaction-name",url: "http://localhost",attributes: ["tom": "jerry", "pros":"cons", "muddy":"puddels"],maxTraceSegments: 2000)錯誤通知
Perfect NewRelic 為事務提供 setErrorNotice() 函數:
try t.setErrorNotice(exceptionType: "my-panic-type-1",errorMessage: "my-notice",stackTrace: "my-stack",stackFrameDelimiter: "<frame>")setErrorNotice() 方法參數說明:
- exceptionType: 出錯類型
- errorMessage: 錯誤信息
- stackTrace: 堆棧跟蹤
- stackFrameDelimiter: 堆棧分隔符
Segments 區段
一個事務類型中的區段類型可以是 Generic (通用)、DataStore(數據存儲)或者External(外部調用),參考如下代碼
// 假如 t 是一個Transaction 對象例程 let root = try t.segBeginGeneric(name: "my-segment") // 執行某些常規操作 try t.segEnd(root)// 注意:下面調用方法采用自動 Obfuscation 混合方法并采用自動跟蹤回滾: let sub = try t.segBeginDataStore(table: "my-table", operation: .INSERT, sql: "INSERT INTO table(field) value('000-000-0000')") // 執行某些數據操作 try t.segEnd(sub)let s2 = try t.segBeginExternal(host: "perfect.org", name: "my-seg") // 執行某些外部調用 try t.segEnd(s2)參數說明:
- parentSegmentId: 父區段代碼。默認為零,也就是NewRelic.ROOT_SEGMENT.
- name: 區段名稱
掃一掃 Perfect 官網微信號
如果您喜歡,請加入我們的Slack中文頻道:http://perfect.ly
另外,更歡迎到我們的github上點亮一顆大星星 ? https://github.com/PerfectlySoft/Perfect
總結
以上是生活随笔為你收集整理的远程监控Swift生产服务器运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ARM嵌入式系统开发]第一章之嵌入式系
- 下一篇: wifi信号衰减与距离关系_wifi无线