您的位置:首页 > 移动开发 > Swift

远程监控Swift生产服务器运行

2017-05-02 03:50 239 查看




















相信所有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()


还可以创建回调函数来判读后台服务的状态:

nr.registerStatus { code in
guard let status = NewRelic.Status(rawValue: code) else {
// 出错了
}//end guard
switch status {
case .STARTING: // NewRelic Daemon 服务正在启动
case .STARTED: // NewRelic Daemon 服务启动成功
case .STOPPING: // NewRelic Daemon 服务正在停止
default: // NewRelic Daemon 服务已经关闭
}//end case
}//end callback


Agent SDK 配置和限额

根据 New Relic Agent SDK 配置说明,以下配置信息同样适用于Perfect NewRelic函数库:

目标操作……配置方案……
在事务操作过程中关闭服务器性能数据采集
nr.enableInstrumentation(false)
在事物操作过程中配置允许用于追踪的最大分段数量
let t = try Transaction(nr, maxTraceSegments:
4000
50)
// 最多猜忌50个追踪段

API 简要说明

根据 New Relic 开发工具使用说明,Perfect NewRelic 函数库提供与其C语言函数库完全一样的功能:

性能指标和监控

函数
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 占用百分比
函数
recordMemory()
举例
try nr.recordMemory(megabytes: 32)
描述记录当前内存用量
参数megabytes: Double,内存消耗(单位:兆字节)

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息