远程监控Swift生产服务器运行
2017-05-02 03:50
239 查看
![](http://perfect.org/assets/github/perfect_github_2_0_0.jpg)
![](http://www.perfect.org/github/Perfect_GH_button_1_Star.jpg)
![](http://www.perfect.org/github/perfect_gh_button_2_SO.jpg)
![](http://www.perfect.org/github/Perfect_GH_button_3_twit.jpg)
![](http://www.perfect.org/github/Perfect_GH_button_4_slack.jpg)
相信所有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 官网微信号
![](https://raw.githubusercontent.com/PerfectExamples/Perfect-Cloudinary-ImageUploader-Demo/master/qr.png)
如果您喜欢,请加入我们的Slack中文频道:http://perfect.ly
另外,更欢迎到我们的github上点亮一颗大星星 ✨ https://github.com/PerfectlySoft/Perfect
相关文章推荐
- Swift生产服务器性能远程监控 - 完全免费版
- 远程服务器运行情况和远程异地备份情况监控
- 借助mosquitto“实时”远程监控服务器数据库运行状态
- 4006.Cacti集监控IBM刀片服务器温度和风扇运行状态
- 利用SQL 2005 系统表监控管理SQL服务器运行情况
- Terracotta开发控制台监控远程服务器“Timed-out”的问题
- Terracotta开发控制台监控远程服务器“Timed-out”的问题
- 用SrvRepor远程监控管理Linux服务器
- 运行远程服务器上共享的可执行程序
- Nagios 监控 Linux 服务器 运行情况 快速安装手册
- 写了一个简单的shell脚本监控mysql服务器运行状态
- 判断远程服务器是否运行的SQL Server函数
- 远程服务器监控重启方案
- 运行远程服务器上共享的可执行程序
- JavaMelody能够在QA和实际运行生产环境监测Java或Java EE应用程序服务器
- snmp4j监控服务器运行情况
- 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。
- jprofiler监控远程服务器的安装配置
- 监控网站和服务器的运行情况