此项目为 New Relic 提供了一个 Swift Agent SDK。
此软件包使用 Swift Package Manager 构建,并且是 Perfect 项目的一部分,但可以作为独立的模块使用。
此项目仅与 Ubuntu 16.04 和 Swift 4.0.3 工具链兼容。
请使用 Perfect Assistant 导入此项目,否则 Ubuntu 16.04 提供了一个安装脚本。
$ git clone https://github.com/PerfectlySoft/Perfect-NewRelic-linux.git
$ cd Perfect-libNewRelic-linux
$ sudo ./install.sh
在安装过程中,它会自动要求您提供许可证密钥、应用程序名称、语言及其版本。 然后它将安装命令行 newrelic-collector-client-daemon
作为一项服务,您可以在 /usr/local/etc/newrelic.service
上找到配置。
配置 Package.swift
.Package(url: "https://github.com/PerfectlySoft/Perfect-NewRelic-linux.git", majorVersion: 3)
将库导入到您的代码中 (PerfectNewRelic
必须与 Foundation
和 Dispatch
一起使用)
import PerfectNewRelic
import Foundation
import Dispatch
除了 Swift - C 语法转换差异之外,文档可以在 New Relic Agent SDK 上找到。
安装后配置可以在 New Relic - Configuring the Agent SDK 上找到,请注意 NewRelic 实例配置为守护程序模式,强烈建议使用该模式,因为嵌入模式仍然是实验性的。
如果成功,您可以轻松创建 NewRelic 实例
let nr = try NewRelic()
nr.registerStatus { code in
guard let status = NewRelic.Status(rawValue: code) else {
// something wrong here
}//end guard
switch status {
case .STARTING: // New Relic Daemon Service is starting
case .STARTED: // New Relic Daemon Service is started
case .STOPPING: // New Relic Daemon Service is stopping
default: // shutdown already
}//end case
}//end callback
根据 New Relic Limiting or disabling Agent SDK Settings,以下设置在 Perfect NewRelic 中可用
如果你想... | 使用此设置... |
---|---|
在事务期间禁用数据收集 | nr.enableInstrumentation(false) |
配置在事务跟踪中收集的跟踪段的数量 | let t = try Transaction(nr, maxTraceSegments: 50) // // 仅收集最多 50 个跟踪段 |
基于 New Relic 的 Agent SDK 使用文档,Perfect NewRelic 库在 Swift 中提供与 New Relic Agent SDK 相同的功能。
函数 | recordMetric() |
---|---|
示例 | try nr.recordMetric(name: "ActiveUsers", value: 25) |
描述 | 记录自定义指标。 |
参数 | - name: 指标的名称。 - value: 指标的值。 |
函数 | recordCPU() |
---|---|
示例 | try nr.recordCPU(timeSeconds: 5.0, usagePercent: 1.2) |
描述 | 记录 CPU 用户时间(以秒为单位)和 CPU 容量的百分比。 |
参数 | - timeSeconds: Double,CPU 用于处理用户级代码的秒数 - usagePercent: Double,CPU 用户时间占 CPU 容量的百分比 |
函数 | recordMemory() |
---|---|
示例 | try nr.recordMemory(megabytes: 32) |
描述 | 记录当前正在使用的内存量。 |
参数 | - megabytes: Double,当前正在使用的内存量 |
Perfect NewRelic 中的事务已定义为一个类,其构造函数如下
public init(_ instance: NewRelic,
webType: Bool? = nil,
category: String? = nil,
name: String? = nil,
url: String? = nil,
attributes: [String: String],
maxTraceSegments: Int? = nil
) throws
let nr = NewRelic()
let t = try Transaction(nr, webType: false,
category: "my-class-1", name: "my-transaction-name",
url: "https://",
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()
的参数
事务中的段可以是通用段、数据存储段或外部段,请参见下面的示例
// assume t is a transaction
try t.setErrorNotice(exceptionType: "my-panic-type-1", errorMessage: "my-notice", stackTrace: "my-stack", stackFrameDelimiter: "<frame>")
let root = try t.segBeginGeneric(name: "my-segment")
// do some generic operations in this transaction
try t.segEnd(root)
// NOTE: it will automatically obfuscate the sql input and rollup if failed as well
let sub = try t.segBeginDataStore(table: "my-table", operation: .INSERT, sql: "INSERT INTO table(field) value('000-000-0000')")
// do some data operations in this transaction
try t.segEnd(sub)
let s2 = try t.segBeginExternal(host: "perfect.org", name: "my-seg")
// do some external operations in this transaction
try t.segEnd(s2)
参数
NewRelic.ROOT_SEGMENT
。有关 Perfect 项目的更多信息,请访问 perfect.org。