用于 Linux 的完美 New Relic 库 简体中文

Get Involed with Perfect!

Star Perfect On Github Stack Overflow Follow Perfect on Twitter Join the Perfect Slack

Swift 4.0 Linux License Apache PerfectlySoft Twitter Slack Status

此项目为 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)

将库导入到您的代码中 (⚠️注意 ⚠️由于 Linux 上的 Swift 4.0.3 存在严重的链接器问题,因此模块 PerfectNewRelic 必须与 FoundationDispatch 一起使用)

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

限制或禁用 Agent SDK 设置

根据 New Relic Limiting or disabling Agent SDK Settings,以下设置在 Perfect NewRelic 中可用

如果你想... 使用此设置...
在事务期间禁用数据收集 nr.enableInstrumentation(false)
配置在事务跟踪中收集的跟踪段的数量 let t = try Transaction(nr, maxTraceSegments: 50) // // 仅收集最多 50 个跟踪段

API 快速帮助

基于 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)

参数

更多信息

有关 Perfect 项目的更多信息,请访问 perfect.org