WebSphere Application Server V8.5 中的系统管理,第 3 部分: 高性能可扩展日志记录 (HPEL)

IBM® WebSphere® Application Server V8.0 引入了一种新方法来存储日志、处理日志和跟踪内容,这种方法称为高性能可扩展日志记录 (High Performance Extensible Logging, HPEL)。HPEL 在最新发布的 WebSphere Application Server V8.5 中得到了进一步的改进,变得更加有用。本文将介绍 HPEL 是什么,它为什么如此重要。 本文来自于 IBM WebSphere Developer Technical Journal 中文版

Igor Belyi, 软件工程师, IBM

Igor Belyi 是 WebSphere Serviceability 团队的一名开发人员,随着 1999 年 IBM 对 Transarc Corporation 的收购而加入 IBM。Igor 目前担任 Encina/TxSeries/CICS 中间件产品、Dump Anaylzer 框架、IBM Support Assistant 和 Knowledge Centered Support 方面的开发人员。Igor 于 2006 年加入 WebSphere Serviceabiliity 团队。



Scott Highbarger, 咨询软件工程师, IBM

Scott Highbarger 是 IBM 软件部的一名咨询软件工程师。



2012 年 10 月 25 日

免费下载:IBM® WebSphere® Application Server 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

IBM WebSphere Application Server V8.5 增强了 V8.0 版本中引入的高性能可扩展日志记录 (HPEL) 特性。顾名思义,创建 HPEL 就是为了极大地改进现有应用服务器的日志记录和跟踪机制,它提供了一种利用额外的字段来扩展日志和跟踪条目的强大方式。此外,HPEL 还提供了大量易于使用的改进来处理日志和跟踪内容。启用 HPEL 快速而又便捷,无需对您的应用程序进行任何代码更改。

本文为考虑试用 HPEL 的管理员提供了入门指导。

在本文中,“HPEL” 是指 WebSphere Application Server V8.5 中新的日志和跟踪系统,而 “Basic” 指的是以前的日志和跟踪系统。


HPEL 简介

HPEL 是面向 WebSphere Application Server 的一种新的日志、跟踪内容存储和访问系统。HPEL 存储由现有日志和跟踪 API(尤其是 java.util.logging API)生成的日志和跟踪内容。

HPEL 可以满足一些常见需求:

  • 记录和跟踪性能

    如果您曾与 IBM 支持团队共事过,他们可能要求您对某些组件启用跟踪功能。这在您的生产系统上可能会引发问题,因为启用跟踪功能会对您的应用程序的性能产生很大的影响。HPEL 日志和跟踪功能要比 Basic 日志和跟踪快得多,因此对应用程序的性能的影响也要小得多。在使用相同的 DayTrader 基准和 EJBContainer=fine 跟踪规范的情况下,与 Basic 日志和跟踪功能相比,HPEL 可以使整体的基准性能提升 33%(使用 WebSphere Application Server V8.0 测量)。

  • 日志和跟踪条目的可扩展性

    能够扩展日志和跟踪记录将是一项非常有用的功能。例如,您也许希望向每个日志和跟踪记录添加一个 userID 自动,以便以后按照特定 userID 值来搜索您的日志或跟踪记录。Basic 日志和跟踪系统没有提供这类机制。

  • 自动化日志/跟踪分析

    作为一名 WebSphere Application Server 管理员,您可能需要对重要事件自动执行 SystemOut.log 和 SystemErr.log 扫描。这对于 Basic 日志和跟踪系统来说并非易事,因为日志和跟踪条目可能跨日志/跟踪文件中的多个行。SystemOut.log 和 SystemErr.log 文件还会进入循环处理(这意味着,当文件达到特定大小时,会重命名它们,并将它们的长度缩短为 0),这进一步增加了自动化的复杂性。

  • 应用程序分离

    为了简化问题诊断,您可能需要将每个应用程序的日志和跟踪分离到单独的文件。Basic 日志和跟踪系统没有提供轻松实现此操作的机制。如果您为每个应用程序创建了自己的日志文件(可能使用 Log4J),您可能会发现,将日志文件的内容与 WebSphere Application Server 日志文件关联起来,或在查找模式时在应用程序之间关联日志和跟踪内容,这些将会非常繁琐。

  • 请求跟踪

    您可能希望将日志和跟踪记录集中起来组成一个单独的服务器请求,这个请求由多个应用程序服务器线程或不同的应用程序服务器 JVM(比如用于 Web 服务请求)处理。Basic 日志和跟踪系统没有提供这种功能,而 HPEL 在结合使用 Cross Component Trace (XCT) 时提供了这种功能。

  • 远程访问日志/跟踪

    Basic 日志和跟踪系统提供了在管理控制台 (WebSphere Integrated Solutions Console) 中查看 SystemOut.log、SystemErr.log 或 trace.log 的各个部分的能力。HPEL 提供了一个显著改进的用户界面,能够更轻松地过滤和浏览内容。HPEL 还提供了无需访问操作系统即可从管理控制台导出日志和跟踪内容的能力。HPEL 日志和跟踪内容还可以通过一个 JMX MBean 界面或 HPEL API 进行远程访问。

  • 访问 z/OS® 日志/跟踪

    如果在 z/OS 平台上运行您的应用程序,那么在出现问题时,应用程序开发人员就会在查看日志和跟踪内容时感到很困难,因为他们通常对 Windows® 或 Linux® 环境更加得心应手。HPEL 使 z/OS 和其他操作系统团队能够通过一致的方式处理日志和跟踪内容。

如果您曾使用过 WebSphere Application Server 的早期版本,那么很可能比较熟悉主要的运行时日志和跟踪文件。在分布式系统上,日志文件包括 SystemOut.log、SystemErr.log、trace.log 和 activity.log。HPEL 使用一个日志库、一个跟踪库和一个可选的文本日志替换了所有这些文件。

Basic 日志和跟踪系统在多个位置存储日志,包括 SystemOut.log、服务日志 (activity.log) 和 trace.log(启用跟踪功能时)。System.err 内容单独存储在 SystemErr.log 中,所以难以与 SystemOut.log 中存储的内容进行关联。跟踪内容存储在 trace.log 中,因此,在进行问题诊断时,在启用跟踪后会主要查看 trace.log 日志,而未启用跟踪时则会主要查看 SystemOut.log 日志。

与此相反,HPEL 在日志数据库中存储日志、System.out 和 System.err 内容,在一个跟踪数据库中保存跟踪内容(参见图 1)。

要从日志数据库和跟踪数据库中查看内容,可以使用 logViewer 命令行工具。logViewer 命令提供了对库中所有内容的访问。它还支持实时监控(类似于运行 tail -f SystemOut.log)并支持过滤功能,因此您可以对输出内容进行限制。

HPEL 还提供了一个文本日志(可选内容,但是默认情况下设置为启用)。该文本日志对日志数据库的内容执行镜像操作,但是以纯文本的形式进行该操作,具有与 SystemOut.log 相同的格式。您可以单独启用文本日志来反映跟踪数据库中的内容,但是出于性能方面的考虑,您应该避免对生产系统执行此操作。不管您出于什么原因需要使用纯文本日志,文本日志功能都将非常方便。

图 1. 比较 Basic 和 HPEL 模式中存储的内容
图 1. 比较 Basic 和 HPEL 模式中存储的内容

配置

从 Basic 模式切换到 HPEL 模式需要对每个服务器进行逐一操作。主要的 Troubleshooting > Logs and Trace > serverName 面板提供了一个按钮,可以使用该按钮将每个服务器切换到 HPEL。从 HPEL 切换回 Basic 也非常简单,但需通过同一面板中的 Change 日志和跟踪模式链接来完成。无论哪一种情况,都需要重启修改了日志和跟踪模式的服务器,使修改生效。

管理员控制台还提供了针对日志数据库、跟踪数据库和文本日志的 HPEL 配置选项,因此您可以分别为这三者指定数据保留和缓冲选项。

需要注意的是,还可以对 HPEL 进行配置,以便在您的部署管理器和节点代理流程上使用它。在节点代理流程上启用 HPEL 是一个好方法,因为它将使您能够在部署管理器 GUI 中使用 Log Viewer 来访问该节点上任何服务器的日志,即使这些服务器已经停止运行。


WebSphere Application Server V8.5 中的新特性

HPEL 首次出现在 WebSphere Application Server V8.0 中。初始设计包括能够在日志和跟踪数据库中包含可扩展记录,但是该功能并没有提供给应用程序开发人员或管理员。

在 WebSphere Application Server V8.5 中,应用服务器使用这一扩展将应用程序名称保存在日志和跟踪记录中,后者是在请求 Java™ EE 应用程序的过程中创建的。它还使用该功能将 Cross Component Trace requestID(在启用 Cross Component Trace 后创建)保存在日志和跟踪记录中。最后,V8.5 提供了一个 API 来帮助您将自己的扩展添加到日志和跟踪记录中。

要利用这些扩展字段来扩展 logViewer 命令行工具,使其包含 -includeExtensions 选项,从而能够根据扩展字段的内容过滤日志和跟踪记录。

WebSphere Application Server V8.5 可以跟踪 appNamerequestID 扩展,但是您可以使用 com.ibm.websphere.logging.hpel.LogRecordContext API 随意将自己的扩展添加到日志和跟踪条目中。

让我们实际了解一下 HPEL 的典型应用。


使用 logViewer 命令

当您的生产应用服务器出现问题时,可能需要花很长的时间才能发现日志和跟踪文件中最重要的内容并进行隔离。想象一下,在服务器的日志文件中,您的某个系统出现了一个错误。

在过去,您可以通过三种方法找到日志文件中的错误:

  • 手动查看每个日志,使用 grep 搜索 “E”、“W”、“Error” 或 “Exception” 等。
  • 编写脚本执行上面的搜索。
  • 使用工具挖掘日志,找出警告、错误或异常。

HPEL 可以在二进制库中有效地存储日志和跟踪数据,然后,您可以用 logViewer 命令行工具进行访问、过滤和格式化。

在最简单的情况下,您可以使用下面这个简单的命令从 profile bin 目录中输出日志和跟踪的全部内容(图 2 中所示的输出):

./logViewer.sh

图 2. logViewer.sh 命令的输出
图 2. logViewer.sh 命令的输出

让我们实现一些更有趣的事情。要在日志文件中查找任何警告或错误消息,您可以使用下面的命令(图 3 显示了输出):

./logViewer.sh -minLevel warning

图 3. logViewer.sh 命令的输出
图 3. logViewer.sh 命令的输出

请注意,在图 3 中,服务器进行了重启,而在默认情况下,logViewer 输出包括来自所有服务器 “实例” 的内容。重要的是,logViewer 永远不会修改库,它只是提供一个过滤的、格式化的视图。

现在,让我们进一步限制查询,只查看上一次重启服务器后的内容。这也很容易实现,使用 -latestInstance 选项即可(图 4 显示了输出):

./logViewer.sh -minLevel warning -latestInstance

图 4. logViewer.sh 命令的输出
图 4. logViewer.sh 命令的输出

您可能会在同一个 WebSphere Application Server JVM 上运行数十个应用程序,并希望查看有关 LemonadeStand 应用程序的警告和错误。使用 WebSphere Application Server V8.5,您就可以按照 Java EE 应用程序名称过滤日志和跟踪内容,并按照以下所示使用 appName 扩展(图 5 显示了输出):

./logViewer.sh -minLevel warning -latestInstance -includeExtensions appName="LemonadeStand"

图 5. logViewer.sh 命令的输出
图 5. logViewer.sh -minLevel warning -latestInstance -includeExtensions appName=”LemonadeStand” 命令的输出

现在您已经在日志中找到了一个有趣的错误,您可能希望查看同一线程中在请求的其余部分中发生了什么。这一次,可以通过将 minLevel 设置为 infor 来删除所有跟踪记录(图 6 显示了输出):

./logViewer.sh -startDate "05/31/12 22:10:40:000 EDT" -stopDate "05/31/12 22:10:58:000 EDT" -thread 91 -minLevel info

图 6. logViewer.sh 命令的输出
图 6. logViewer.sh 命令的输出

结合使用 HPEL 和 Cross Component Trace

如果您结合使用 HPEL 和 WebSphere Application Server V8.5 中引入的 Cross Component Trace (XCT) 功能,并且您感兴趣的错误发生在 HTTP 或 SIBus 请求期间,那么您可以使用 requestID 来过滤日志(由 XCT 提供)。要查看 requestID,请使用 -format 高级选项重新运行前面的查询(图 7 显示了输出):

./logViewer.sh -startDate "05/31/12 22:10:40:000 EDT" -stopDate "05/31/12 22:10:58:000 EDT" -thread 91 -minLevel info -format advanced

图 7. logViewer.sh 命令的输出
图 7. logViewer.sh 命令的输出

使用高级格式显示输出后,您可以看到该消息的 requestID。使用高级模式查看日志也是一种从日志条目(显示在日志/跟踪记录中的 ‘source’ 字段)获得完整 logger 名称的好方法;这在对某个特定记录器启用更细粒度跟踪时会派上用场。类似地,您可以在高级格式下查看记录/跟踪每个条目的线程的名称。

有了发生错误的请求的 requestID 之后,您现在就可以查询库,查看同一请求中的其他日志和跟踪条目。HPEL 将 requestID 作为扩展保存到日志和跟踪记录中,因此您可以使用 -includeExtensions 选项,如下所示(图 8 显示了输出):

./logViewer.sh -includeExtensions requestID=AAAKLwUVkuH-AAAAAAAAAAC

图 8. logViewer.sh 命令的输出
图 8. logViewer.sh 命令的输出

共享日志和跟踪数据

找出日志文件中的问题之后,您可能希望将 LemonadeStand 应用程序的日志发送到某个团队成员。您可以使用 -outLog 选项将输出以纯文本形式保存到日志中:

./logViewer.sh -includeExtensions appName="LemonadeStand" -outLog /tmp/myLogs.log

或者,您可以使用 extractToNewRepository 选项将过滤后的输出保存为一个新的 HPEL 库,这样您的同事就可以在他们的系统上使用 logViewer 命令继续处理数据:

./logViewer.sh -includeExtensions appName="LemonadeStand" -extractToNewRepository /mySharedDrive/myLogs

收到您的通知后,您的同事可以访问保存在日志中的内容。为此,他们可以使用 repositoryDir 选项指定库的位置:

./logViewer.sh -repositoryDir /mySharedDrive/myLogs


实时查看日志或跟踪数据

在开发应用程序或进行故障排除时,实时监视日志输出的功能通常都很有用。您可能已经察觉到问题并尝试重现问题,或者,作为应用程序测试的一部分,您可能希望监视某个特定事件。不管是哪种情况,您都需要激活一个 shell 窗口并执行 tail -f SystemOut.log 来监视日志输出。

HPEL 可以简化此类任务,它使您能够监视日志库中的新事件,不会因为需要监视多个日志文件或担心文件会回滚(roll over)而影响对这些文件的监视。要实现实时监视,可以使用 -monitor 选项调用 HPEL logViewer 工具:

./logViewer.sh -monitor

使用 HPEL 监视选项的一个重要优势是它可以跨平台工作,为您监视新的日志和跟踪事件提供一致的选项,不会受您使用的硬件或操作系统的影响。这些平台中包括 z/OS® 平台,因此可以在 z/OS 上轻松地查看或处理应用程序日志,无需具备 z/OS 系统管理员的知识或访问日志假脱机文件。

可以结合使用监视特性和过滤选项来监视特定事件。假如您需要监视一个冗长的日志应用程序,寻找与某个特定用户名有关的关键错误消息,用户名包含在消息中。您可以通过下面的命令查看所有新的 severe 或 fatal 日志事件,这些事件在消息中包含了字符串 “user33”,无需执行 grep 命令或使用其他工具:

./logViewer.sh -monitor -minLevel SEVERE -message “*user33*”

您还可以结合使用多个过滤选项来进一步细化您希望显示的日志事件。例如,您可以进一步将显示的记录限制为由 LemonadeStand 应用程序生成的记录,如下所示:

./logViewer.sh -monitor -minLevel SEVERE -message “*user33*” -includeExtensions appName=”LemonadeStand”

通过结合 logViewer 工具的选项,管理员可以从 HPEL 库直接查看所有或特定的日志记录。LogViewer 为查看 WebSphere Application Server 日志和跟踪数据提供了一致的、功能强大的工具,可支持任何平台。它不要求安装任何特定的工具,也不要求管理员将日志文件复制到其工作站中。

现在您已经了解了使用 HPEL 查看实时日志数据和过滤命令行输出有多么简单,接下来让我们将了解它如何在 WebSphere Application Server 管理控制台中查看日志数据。


在管理控制台中查看或跟踪数据

许多系统管理员经常遇到的另一个场景是需要确保对关键的生产应用服务器进行有限制的操作系统访问,同时仍然允许应用程序支持团队或开发小组访问生产应用程序的日志。WebSphere Application Server 现在通过管理控制台提供了一个经过改善的、基于 Web 的日志查看和导出工具,可在启用 HPEL 后使用。

Basic 模式的日志和跟踪功能仅提供了简单的日志查看功能,而 HPEL 提供了改进的日志查看体验。任何已授予访问管理控制台的权限的人都可以使用 HPEL Log Viewer(不要与 logViewer 命令行工具混淆)查看 HPEL 日志和跟踪库数据。以 Monitor 角色访问管理控制台的应用程序支持专家可以查看日志数据,无需对生产服务器进行 OS 级访问或等待系统管理员为他们收集日志文件。

图 9. 日志内容的管理控制台视图
图 9. 日志内容的管理控制台视图

控制台的 Log Viewer 提供了与 logViewer 命令行工具相同的功能强大的过滤选项。要通过管理控制台查看日志和跟踪数据,请导航到 Troubleshooting > Logs and trace 并从列表中选择已启用 HPEL 的应用服务器,然后在 Logging and tracing 面板中选择 View HPEL logs and trace链接。

如有必要,可以将完整的日志库(甚至是过滤后的日志库)直接从管理控制台的 Log Viewer 导出到一个 .zip 文件中,以供日后分析,只需选择 Log Viewer 顶部的导出按钮。您可以选择将完整的库或过滤后的内容导出到一个二进制 HPEL 库中。任何与您共享该库的人都可以使用 logViewer 命令来处理文件。您还可以通过基本或高级格式将整个库或当前选中的内容导出到一个文本文件中。logViewer 命令行工具可以从导出的 zip 文件中读取 HPEL 库,无需进行解压。

图 10. 管理控制台导出日志对话框
图 10. 管理控制台导出日志对话框

结束语

HPEL 利用了一种新的方法来存储日志和跟踪数据,以便提高性能和可扩展性。与此同时,HPEL 维持了与现有日志操作脚本的兼容性,提供了您已经熟悉的 WebSphere Application Server 日志的数据格式。新的命令行和管理控制台工具加快了日志和跟踪数据的监视和过滤。除了提供的工具之外,工具供应商还可以利用新的 HPEL Java API,它能够提供对 HPEL 库的本地和远程访问,并以基本或高级文本格式输出结果,甚至将它们存储到新的 HPEL 库中(请参阅 参考资料)。

在 WebSphere Application Server 中切换 HPEL 可在管理控制台中快速完成,并且需要重启服务器使之生效。轻松地在日志模式之间切换意味着您可以尝试使用 HPEL,并在需要时切换回 Basic 模式。IBM 支持团队处理 HPEL 存储库,不论是从管理控制台中导出,从 logViewer 命令输出,还是仅从服务器日志目录中压缩生成。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=842519
ArticleTitle=WebSphere Application Server V8.5 中的系统管理,第 3 部分: 高性能可扩展日志记录 (HPEL)
publish-date=10252012