(二)。使用日志监测应用程序状况。

日志有两种:产生报表和用于诊断。Brian W. Kernighan和 Rob Pike 在“编程实践”(The Practice of Programming") 一书中从认知体验的角度谈到日志对程序调试的重要性:

“作为个人偏好,我们倾向于只使用调试器获得一个或两个变量的值或者堆栈轨迹。 其中一个原因是,程序员很容易迷失在复杂的数据结构的详细信息和流量控制中,我们发现,在调试中一步步跟踪程序运行的步骤的效率很低,不如花力气思考问题,并增加输出语句和增加在关键代码处的自我检查。调试器上步步点击花费的时间比扫描有条理的输出耗时的多。决定把print语句放在哪里很容易,而推断出代码的关键部分在哪里不是那么简单,即使假设我们知道应该在哪里寻找,调试会话也是暂时性的”。 这段话很形象描述出日志在程序开发和调试中的作用。我们下面主要讨论在程序正常运行中如何使用日志来监测应用程序的状况。

服务器日志包括Web服务器日志(ErrorAccess日志),邮件服务器日志(SMTP队列,连接状况),FTP服务器日志(用户登录,执行的命令记录,上传和下载的文件) 和数据库服务器日志(用户活动,执行的查询等)。

做为网络和系统活动的主要记录者, 日志和日志管理的作用包括:

  • 系统健康状态的监测,诊断。

  • 用户活动监测和管理

  • 系统安全性管理,防止非法***和***

  • 相关法律法规的要求,保存交易相关的资料

一个良好的日志应该具备如下几个特征

  • - 不同机器记录的事件的同步时间戳。

  • - 适当的日志记录级别,记录详细的事件以备诊断。

  • - 保存足够的归档日志信息。

其他还有日志轮值以避免硬盘大小限制,日志保护以防止骇客篡改等等。

日志记录级别有7类:紧急,警报,危险,错误,警告,通知,信息和调试。在最终运行产品时,日志记录级别的设置是必须考虑 的一个重要的参数。日志级别设置太低,不仅影响程序本身的效率,大量的日志记录也占用大量的磁盘空间,在远程日志记录下占用带宽;而如果日志级别设置太高,不能提供诊断所需要的足够信息。

错误或警告的日志记录级别在正常情况下运行产品时就够了。在需要日志记载更多的信息时需要提高日志记录级别,比如记载提供API服务的SLA指标。常用的方法是用统一的格式记录API调用时的时间戳和调用参数值,和API调用完成的时间;籍此可以得出 事务平均响应时间( Average Transaciton Response Time), 每秒通过事务数/TPS ( Transactions per Second), 每秒通过事务总数Total Transactions per Second), 事务响应时间与负载(Transaction Response Time Under Load)等多方面的性能指标。系统可以在收集的服务程序性能指标的基础上建立不同目的的报警(Alert)系统。

市场上有许多Web日志分析软件(web log analyzer ),比如Splunk,从Web服务器上分析服务器日志文件,并在日志文件中包含的值的基础上,报告Web的访问情况(Who, When,How)。 这里谈论的不仅仅是Web的日子,还包括SOA框架中任何服务API的调用。

在系统构架中充分考虑日志处理对监控,审计和出错诊断极为重要,日志系统的基本架构却也往往是大型系统中被忽略的部分。日志管理包括3个方面: 如何防止日志记录无限增大(轮值),如果整合来自不同服务器,不同类型的日志,获得有意义的信息(中心化管理),如果保护日志不受非授权的篡改(安全性)。而大型分布式系统的日志管理有两大挑战: 1)在业务活跃期同时产生的大量日志数据,需要占用大量的系统资源,和2)不同机器记录的日志事件的时间同步戳问题。 如何构架高效和高性能的日志系统?有些大型网站开发和整合了自己的日志系统已满足内部需要。当然市场上也有很多比较成熟的日志管理系统。

集中日志(Centralized Logging)

日志在一般情况下存储在当地硬盘上。当系统包括多个主机时,管理和使用不同主机上的日志变得繁琐和困难。当系统出错时,在分布在数百个不同机器上的数百个日志中寻找特定错误记录,将是件令人生畏的任务。常见的解决方案是,在系统构建时设计集中日志方案,将不同机器上的日志集中到同一个地方处理。

集中日志的好处包括 1)便于开发人员诊断出错 2)客户支持小组查询客户的交易记录 3)执法,安全机构的取证 4)业务分析(BI)。 从技术支持角度考虑, 集中日志也利于日志循环和备份。

如果当前系统已经安装了Syslog(常用的是rsyslog,syslog-ng),可以使用集中模式。用户端的日志守护程序将日志通过TCP (port 10514) 或 UDP (port 514) 传送到syslog的中心守护程序。每个远程的syslog 数据包的报头包括日志记录的时间戳, 服务器名,日志重要性水平,和日志记录内容。

如果使用Log4J作为应用程序的日志机制,Log4J的“SyslogAppender”支持UDP对远程服务器的日志传送。

log4j.rootLogger=INFO, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.SYSLOG.Header=true
log4j.appender.SYSLOG.Facility=LOCAL1

在Log4J的配置文件中加入了Syslog的报头,包括服务器名和时间戳,用于syslog的中心守护程序将远程日志分类。Syslog的过滤功能支持正则表达式,如果

只需要某服务器的出错记录, 可以:

if $hostname startswith ‘web’ and $syslogseverity <= 5 then /var/log/web_errors.log
& ~ #到下一行

使用Syslog作为中心日志系统,存在SPOF。 在高通量,高可用性的系统中越来越多的使用分布式日志收集(Distributed Log Collector)。这些系统往往使用通用的事件/消息管理系统, 而分布式日志收集只是一个应用。基本构架包括在每个特定主机上的日志客户端代理程序,代理程序将日志发送到收集者集群,然后由收集者将日志转发到可扩展性的存储层。 这样,收集者集群和存储层都具有横向可扩展性,保证了整个日志系统的高通量和扩展性。

常见的系统包括Facebook的Scribe,Apache的Flume, LinkedIn的Kafka等。Splunk是商业版。

模式名称: 建立有效的日志管理系统

描述: 在系统构架的整个过程和系统的层次上考虑合理使用日志。

动机/试图解决问题: 大型分布式系统产生大量的日志数据,如何管理这些数据,产生各种报告,如何做到各个日志来源的时间戳同步?日志系统的基本架构却也往往是大型系统中被忽略的部分。

原理: 日志记录了系统活动的过程。 在系统构架中充分考虑日志处理对监控,审计和出错诊断极为重要。

使用

模式名称: 自动收集各项系统性能指数

描述: 自动收集各项系统性能指数, 提供报告和监控基础。

动机/试图解决问题: 复杂系统牵涉很多子系统的相互作用,运行成本需要和经济效益挂钩。

原理: 自动收集各项系统性能指数, 帮助了解系统运行情况,提供商业决策的支持依据。

使用

模式名称: 安装自动报警系统

描述: 在系统各个层次安装自动报警,及时发现出错,减少对终端用户的影响

动机/试图解决问题:复杂系统可能出错环节很多, 一个环节的错误有可能扩散到整个系统,引起灾难性后果。

原理: 自动收集到的各项系统性能指数基础上设立报警阈值, 尽早发现纠正错误。

相关模式:自动收集各项系统性能指数

模式名称: Layer-7 健康监测

描述: 负载平衡器通过Layer-7 健康监测来决定分流请求

动机/试图解决问题: 负载平衡器无论使用Ping还是TCP connection 都无法判断 应用程序是否正常工作 。

原理: Layer-7 健康监测程序自身的健康状态,比如数据库连接是否正常。

使用: 负载平衡

相关模式: 所有服务实现心跳(Heart-beat)API

模式名称: 所有服务实现心跳(Heart-beat)API

描述: 各个服务实现相同的接口,表达自身的健康状况。

动机/试图解决问题: 如果Web服务器运行良好,程序也在运行中,但是程序内部处于非正常工作状况,需要拒绝接受服务请求,自动被重启。

原理: 各个服务程序实现相同的API接口, API调用时,程序检测自身的健康状态。 系统也可以通过周期性的检测服务心跳而发现非正常工作程序,实现自动重启。

使用: SOA

相关模式: Layer-7 健康监测

附录:

Syslog

Syslog常被称作系统日志,是一种在TCP/IP的网络中传递记录日志的标准,使产生日志的软件和存储,分析日志的系统分离。Syslog属于主从式协定: Syslog的客户端使用UDP/TCP的协议传送 小于 1024的文字信息到Syslog服务器。因为获得各种设备(打印机,路由器)和平台的广泛支持, Syslog 可被用来整合不同类型系统来源的日志记录。

Syslog的另二层含义是指日志记录本身或者管理日志的系统。做为一个功能比较全面的日志管理系统,Syslog用来记录管理Kernel和系统辅助程序产生的消息,消息可以按照来源和重要性分类,传送到日志文件,用户终端或者远程机器。

Syslogd 是管理日志的守护进程,/etc/syslog.conf 是Linux上的配置文件。

日志文件分析软件

在使用日志进行出错诊断时 grep/awk 是非常便捷的工具。常用的分析软件包括监测非法***的ACID (Analysis Console for Intrusion Detection), guard 和一般用途的Lire ,log_analysis , LogSentry (Logcheck), SAWMILL等。log_merge可以按照统一的时间线索合并不同来源的日志。

MRTG/RRDTool

MRTG(Multi Router Traffic Grapher) 是一套用来绘制网络流量图的软件,用Perl写成,因此可以跨平台使用。最初的MRTG只能绘出网路设备的流量图,后来开发出各种plug-in, 以绘制服务器的硬盘使用量,CPU负载等。

RRDTool是MRTG原作者开发的功能更强大的绘图引擎,很多工具例如MRTG都可以调用rrdtool绘图。

RRD是指一种环状数据库(Round Robin Database ) ,适合存储时间序列的数据,而且数据集不会增大,不需要维护 。RRDtool使用RRD创建数据库、存储数据、提取数据、生成用于在Web浏览器中显示的PNG格式的图像 。

常用的网络监测系统Cacti 和 Munnin 都使用 RRDTool做绘图引擎。

Gnuplot

如果需要构建自己的监控报警系统,Gnuplot提供了更加强大的绘图引擎。Gnuplot是最受欢迎的跨平台的开源绘图软件,可以产生png, svg, ps, hpgl等各种图形格式输出。 如果使用REGEXP将任何有规律的文字标志转换成Gnuplot接受的简单格式,可以满足绝大部分文档的绘图需要。一些大型网站内部就使用Gnuplot提供基于日志记录的各种图表。

plot 命令的格式:

Syntax:

plot {[ranges]}

{[function] | {"[datafile]"

{datafile-modifiers}}}

{axes [axes] } { [title-spec] } {with [style] }

{, {definitions,} [function] ...}

使用“data.txt” 数据文件第一列表示 x 坐标,第二列表示 y 坐标, 用点画图

gnuplot> plot "data.txt" using 1:2 with points

用一些外部命令处理后的数据,再用plot画图

gnuplot> plot "&lt; awk '{print $1,$2+$3,$2}' &lt; a.txt" using 1:2

转载于:https://blog.51cto.com/6927843/1172137

创建可扩展性系统-13-2相关推荐

  1. 创建可扩展性系统-4

    高可扩展性系统的一些理论基础 在2000年ACM的PODC座谈会上加州大学伯克利教授 Eric Brewer在主题"建立可靠的分布式系统"的演讲中提出了所谓的CAP定律,至今被大型 ...

  2. bcdedit添加linux引导,Linux_利用Bcdedit创建Linux系统引导,Bcdedit在Windows Vista中的一个命 - phpStudy...

    利用Bcdedit创建Linux系统引导 Bcdedit在Windows Vista中的一个命令行工具,用于建立和重新配置bootloader,无须再使用boot.ini文件.下面我们来谈谈如何用bc ...

  3. 用VMware创建Linux系统时用户名,全名,虚拟机名的区别

    用VMware创建linux系统的时候,会有多个命名的地方 linux的全名和用户名如下图: 用户名:是用于限制权限的多用户操作系统管理工具,是登录是要输入的 个性化Linux全名:虚拟机的个性化名称 ...

  4. Revit开发 - 创建幕墙系统(CurtainSystem)

    本文演示Revit中创建幕墙系统. 1.用Revit绘制模型 2.实例代码 using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; usin ...

  5. 如何用导航系统创建巡逻系统

    要创建巡逻系统,您可以使用导航系统来实现.这可以通过设置一系列的目标点来实现.导航系统会帮助您确定最佳的路径,并使您能够按照规划的路线进行巡逻. 要开始创建巡逻系统,请按照以下步骤操作: 计划巡逻路线 ...

  6. 提高C++性能的编程技术笔记:设计优化/可扩展性/系统体系结构相关+测试代码

    1. 设计优化 我们可以粗略地将性能优化分为两种类型:编码优化和设计优化.编码优化定义为不需要完整理解要解决的问题或者应用程序的执行流程就能实施的优化.通过定义看出,编码优化用于局部代码,同时该过程不 ...

  7. 使用Python创建一个系统监控程序

    最近在做个人网站,但是由于服务器资源不足,偶尔会出现系统崩溃的现象,所以想写一个程序来实时监控系统状态.当系统资源占用过高时发送邮件提醒. psutil(进程和系统实用程序)是一个跨平台的库,用于检索 ...

  8. linux为mysql创建gpower_系统运维|RHEL/CentOS 7中安装并配置 PowerDNS 和 PowerAdmin

    PowerDNS是一个运行在许多Linux/Unix衍生版上的DNS服务器,它可以使用不同的后端进行配置,包括BIND类型的区域文件.关系型数据库,或者负载均衡/失效转移算法.它也可以被配置成一台DN ...

  9. 创建Liunx系统虚拟机

    我这使用的时Ubuntu的服务器版本,其他版本安装都类型 一.下载VMware虚拟机创建工具并安装 二.创建虚拟机 1.点击"文件"-->"新建虚拟机" ...

最新文章

  1. android 带边框的圆角按钮
  2. java substring 性能_《Java程序性能优化》subString()方法的内存泄露
  3. mysql主键外键_MySQL主键和外键使用及说明
  4. mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务
  5. php文件覆盖相同文件,为什么这个PHP代码在打开时会覆盖文件内容?
  6. 安卓应用安全指南 5.5.3 处理隐私数据 高级话题
  7. ibm服务器维修站点,IBM 服务器维修
  8. ctypealpha php_php中Ctype函数用法详解
  9. idea引入本地jar包及打包
  10. Chrome下的语音控制框架MyVoix.js使用篇(二)
  11. openNLP--Sentence Detector
  12. 出场顺序很重要下一句_孩子爱不爱你,出场顺序很重要
  13. ORACLE常用函数汇总
  14. java定时每小时_java 定时任务,每日运行和每小时运行。
  15. 从简单泛函到第二类拉格朗日方程
  16. 语音信号的短时平均过零率
  17. 罗格斯的计算机科学博士奖学金,移动性视角下智能城市的物理信息系统
  18. C语言函数while的用法
  19. two-pointer双指针法
  20. 如何从svn上下载文件

热门文章

  1. (十一)OpenCV实现图像频率域滤波
  2. nbu备份oracle rac,利用NETBACKUP将备份写到磁盘上
  3. python百度语音实时识别成文字_python 上传百度语音识别+文字返回结果
  4. java ing印版_Java TCP实现高仿版QQ聊天(二)
  5. nodejs mysql 同步_NodeJS实现同步的方法
  6. java 日期年度 35变2035_连接IBM MQ原因码报2035的错误解决办法
  7. jsf 导航_JSF导航规则示例教程
  8. Java LinkedList – Java中的LinkedList
  9. python 堆栈_Python堆栈
  10. Python写数据结构:循环队列