使用 Xymon 进行系统监控/其他文档/HOWTO/针对 Hobbit 的自定义监控脚本
我不对本文件中的任何内容(从拼写到技术知识)的正确性或适用性做出任何保证。本文件中的任何内容都应自行承担风险使用,包括思考的指示。所有免责声明均适用。由于使用本文件或其中包含的说明(以电子、印刷或任何其他形式)而产生的任何和所有损害都是您的问题,而不是我的问题。阅读、下载或接触本文件的任何部分,即表示您接受此免责声明。如果您不同意此条款,请立即停止阅读本文件。(无论如何,对我提起诉讼毫无意义。我没有钱。)
本文件受版权保护。我特此授予任何 Hobbit 用户在本文件或其部分内容上的免费使用和分发权利,前提是
- Hobbit 仍然是一个开源项目
- 您不会收取本文件的费用
本文件旨在供希望使用自定义脚本扩展 Hobbit/BB 监控工具范围的系统管理员使用。
- 它们是所有故障的起源,让我直接告诉你我对你的假设。
- 您是一名系统管理员,可能希望让您的生活更轻松。这意味着您有权编写任何脚本并在系统上安装它们,并且您对 Unix 以及您要监控的内容有一定的了解。
- 您了解某种编程或脚本语言。
- 您至少对 Hobbit 以及 Big Brother 或 Hobbit 客户端有足够的了解,可以获得一些基本结果并显示一两个图表,并且已经这样做了。换句话说,我假设您的 Hobbit 安装已经正常运行!
- 您使用 Unix 或其变体。
虽然本文件是在假设您一无所知的情况下编写的,但我假设您并非完全愚蠢。我发现许多手册或操作说明都假设了一点知识,但他们假设您知道的那些知识,通常恰恰是您不知道的。我试图涵盖所有方面。
我不会教你如何编写脚本、从您的数据库获取数据、告诉您为什么您的脚本不起作用或充当您的技术支持部门。我相信 80-20 规则。如果你占用我超过 20 秒的时间,你最好准备好支付我 80% 的工资。我也不会告诉你为什么你的 Hobbit 安装不起作用。订阅 Hobbit 邮件列表。这就是它存在的目的。
我使用 Unix(Solaris 和 Linux),大多数命令和引用将基于 Unix。我同时也是一名 Oracle DBA,因此我将大量使用数据库示例。我使用 Korn shell 来进行任何编程示例。我不会参与关于为什么使用 Korn 而不是 Bash 或 Perl 或任何其他语言的理论辩论。我使用 Korn,因为我比其他任何脚本或编程语言都要熟悉它。我使用它是因为我精通它。辩论结束!我建议您也这样做,无论您选择使用哪种语言。Unix 命令将使用等宽字体显示,输出也是如此。如果您以文本文档的形式获得了本文件,并且所有内容都是一个字体,并且您无法区分主文档和 Unix 命令,那么您真的不应该考虑编写自定义脚本。
在创建自定义脚本之前,请坐下来,认真思考您要监控的内容、您要绘制的内容以及原因。例如,假设您正在考虑监控日志文件以查找特定消息 - 但您将绘制什么图表?您可以监控 CD-ROM 的使用情况或容量,但这样做有什么用?如果驱动器中有一张 CD,那是因为您放进去的。毕竟,您是管理员,并且您的服务器位于受控环境中。如果您想监控它,它需要对您有用。没有必要用毫无意义的点填充您的屏幕。如果您想要这样做,可以轻松地进行伪造 - 参见下文。
好的,现在您知道要监控的内容、原因,并且已经决定了将如何处理数据,我仍然不建议我们立即开始编写自定义脚本。下一步是查看 Hobbit 手册页。检查您是否没有重复造轮子。Larry Wall 曾经说过:“从历史上看,Unix 中车轮的存在从未阻止过它们被重新发明。”他还说:“程序员的三大美德是:懒惰、急躁和狂妄自大。”我赞同懒惰的美德。重复造轮子很糟糕,而且很多时候,前一个人比你能做得更好,或者你有时间去做。
仍然找不到您想要的东西?下一步是 http://www.deadcat.net 这些都是 Big Brother 的插件,但大多数都可以无缝集成到 Hobbit 中,其余的可以用鞋拔子或锤子进行适配。(锤子的尺寸未定义)我仍然不准备重新发明轮子。
此时,如果您仍然没有找到您想要的东西,那么您可能需要自己设计一个轮子。
是时候再次思考了。
Hobbit 只能报告有限数量的状态,这些状态由状态颜色反映,而您只能控制其中的 3 种,即红色、黄色和绿色。
在开始之前,请考虑并记录下任何监控条件将返回的颜色。
例如,在开发系统上的用户目录中生成的程序核心转储实际上并不需要红色状态。由于这是我们可以预期开发人员不时会做的事情,我们为什么要监控它?如果它发生在生产系统上的用户目录中,它可能需要黄色状态。如果它发生在主财务系统的运行目录中,那么它可能需要红色状态。
现在考虑您希望消息看起来像什么。将/var/adm/messages
的全部内容发回是浪费时间和带宽。发回tail /var/adm/messages
更有意义。隔离导致问题的消息可能是一个更好的主意。您在Hobbit屏幕上看到的消息(您单击面部或 blob 时看到的内容)需要足够详细,以便使用,但也需要足够简短,以便您一目了然地了解发生了什么。太多信息和太少信息一样糟糕,尤其是当您打算将监控任务委派给运营部门时。
您将生成图表吗?图表有意义吗?我们只能绘制一段时间内的数量。绘制消息测试结果的图表没有意义。监控 CPU 温度很好。硬盘利用率、数据库表空间、CPU 利用率,这些都是值得绘制的。消息不好。核心不好。错误或核心数量可能很好,但如果您每 5 分钟获得如此多的错误或核心,我认为您遇到了比创建新的 Hobbit 脚本更重要的问题。
所以您想要一个图表。这很好,但是您要绘制什么?如果可能,最好将您的数字减少到百分比。它只是让绘图工具更容易使用,并且可以轻松地将所有内容放在同一个图表上。让我们回到我的数据库示例。我有一个表空间的大小超过 50Gb,使用约 35Gb,另一个只有 700Mb,使用 300Mb。在同一个图表上,它们看起来很愚蠢,即使我可以看到它们的值,我仍然需要记住每个表空间的总大小才能确定空间是否变得有问题。以百分比查看,两者都可以出现在同一个图表上,我知道超过 90% 存在潜在问题,无论表空间的大小是多大还是多小。(如果您不理解上一段,因为您不了解数据库,请再次阅读,但将“磁盘”替换为“表空间”。这是一个类似的概念。)
您将使用于图表的相关信息对监视器可见吗?Big Brother 和 Hobbit 允许您将两种类型的信息发送到 Hobbit 客户端。它们是状态信息(在您单击面部或 blob 图标时显示)和数据(从不显示,但可用于收集信息)。如果信息特别复杂,最好不要显示它。
既然您知道想要什么,在哪里以及如何显示它,请考虑如何获取它。监控磁盘空间很容易。在大多数 Unix 版本中,df -k
将告诉您有关磁盘空间的所有信息,并且在某些版本中甚至会为您提供百分比数字。(有关您的 Unix 版本的详细信息,请参阅Unix Rosetta Stone。)
从数据库获取相同的信息并不总是那么简单,并且通常需要一些相当漂亮的 SQL。现在我们选择开发语言。如上所述,我使用 ksh(又名 Korn Shell),但是没有什么能阻止我用 SQL、Perl 甚至用编译后的 C 编写它,除了我不会说 C,而且我只懂一点点 Perl,很危险。
您选择的语言必须考虑以下几点。
- 您需要能够调用外部二进制文件。
- 您需要能够获取所需的信息
- 它需要是可执行的,以便 BB(或 Hobbit 客户端)可以调用它。
- 它需要解释环境变量。
- 除非我们可以调用 bb 程序,否则我们将无法走得太远。在大多数 shell 脚本中,这很简单。在 SQL 和 Perl 中,它稍微不那么简单,但仍然非常简单,但在其他语言中,它可能有点棘手。
- 如果在我的用 <在此处插入语言> 编写的程序中,我没有任何方法来查询数据库以确定表空间利用率,那么使用这种语言就没有太多意义。在 ksh 中,我可以调用一个 SQL 解释器,并将一个 SQL 脚本传递给它。Perl 有库可以直接与数据库对话。只要您能够获取所需的信息,它就是一个不错的选择。
- 如果我需要解释这个,请远离电脑。
- 您将需要的大多数变量都在
$BBHOME/etc/bbdef.sh
中定义。如果您的脚本无法读取此文件并解释其中的值,那么您可能遇到问题。
无论您使用什么系统或语言,您的脚本可能都有 4 个部分。
- 定义所有内容
- 收集数据
- 处理/操作数据
- 定义颜色并发送
定义所有内容可能与源代码$BBHOME/etc/bbdef.sh
文件一样简单,但它可能有点复杂。熟悉 Oracle 的人知道,在我运行 SQL 脚本之前,还需要定义一些额外的环境变量。无论您如何定义所有内容,请记住记录或注释所有内容。您很可能最终成为维护它的人。
一旦定义了所有变量和环境,请执行收集数据所需的操作。将数据发送到临时文件可能很明智。收集数据可能是一条命令,也可能是一个复杂的程序,该程序运行并查询多个系统和数据库。您如何收集所需内容超出了本文档的范围,但如果您像我一样懒惰,并且正在寻找捷径,请使用 Google。您会对Google 搜索“Oracle 表空间脚本”的结果感到惊讶。
现在我们有了数据,我们需要将其处理成可用的东西。如果它要显示在屏幕上,请使其看起来很好。其中一些可能是数据专用,并且不会显示在屏幕上。将它转储到单独的文件。在这一点上添加状态颜色决策逻辑也可能更容易。这是您的脚本,您说了算。
最后,我们得到一个或两个文件。$BBTMP/data.out.$$
和$BBTMP/status.out.$$
(如果这看起来太神秘,我不建议您使用 ksh 编写您的脚本)
现在我们将输出发送到 Hobbit。命令很简单。检查您的 bb 手册页。如果您愿意,可以硬编码它,也可以使用已定义的变量,这实际上没有区别,除非您想在将来使生活更轻松。(硬编码通常意味着以后会头痛。)
让我们分析一个基本的脚本。这将报告我的表空间级别。
#!/usr/bin/ksh
# Define this to be a Korn shell script.
. ../etc/bbdef.sh # Set up the BB environment
. /export/home/oracle/.profile # Set up the Oracle environment
export TEST=ora # The test name
export COLOUR=green # The default colour
# Note to all Americans. This is how I spell colour - no arguments.
export OUTFILE=$BBTMP/outfile.$$ # My temp file
# We are not using data, only status for this one, so we only have
# one temp file.
# Up to here we have defined the environment
date > $OUTFILE # Create my temp file
# Now we collect the data
sqlplus -s orauser/passwd @/export/home/oracle/tables >> $OUTFILE
# Do not worry about the above syntax. If you understand Oracle, it
# will make sense. If not, assume it is a df -k on table spaces.
# Replace it with df -k >> $OUTFILE
# It is doing the equivalent on the database
# The sql file we just used formats the data for us, so all we
# need to do is check for the status. The values that interest me
# are in the sixth column, as percentage.
awk '{ print $6 }' $OUTFILE | while read VAL
do
[ $VAL -gt 85 ] && COLOUR=yellow
[ $VAL -gt 95 ] && COLOUR=red; break
done
# The logic here is very simple. We start with green, and get
# worse. Once we hit red, it is not getting any worse, so we exit
# the loop.
# A more sophisticated script could do a lot more, but we are
# doing a basic script.
# Now we send the data
$BB $BBDISP "status $MACHINE.$TEST $COLOUR `< $OUTFILE`"
# BB, BBDISP and MACHINE should be defined in bbdef.sh
# This will send the contents of $OUTFILE to the Hobbit client
# It will also ensure that the colour is set correctly
# to whatever appears in $COLOUR
# $BB = the Big Brother (or Hobbit) client program
# $BBDISP = the hostname or IP address of your Hobbit server
# $MACHINE = the name of the machine being monitored
# $TEST = Defined above
# $COLOUR = Colour of the status on the Hobbit server
rm $OUTFILE
# Clean up our temp files
首先,将您的脚本复制到$BBHOME/ext/
目录。我们将其称为bb-ora_ts.sh
。它是一个脚本。使其可执行。chmod 755
将完成此操作,但这取决于您的安全级别。
现在编辑$BBHOME/etc/bb-bbexttab
此文件将采用以下形式
servername: : testname1 testname2 testname3
如果您在名为 wallaby 的服务器上,并且想要添加我们上面显示的测试,请添加或编辑该行
wallaby: : testname1 testname2 testname3 bb-ora_ts.sh
保存并退出,然后重新启动 bb 客户端。您可以使用以下任何命令重新启动。
/etc/rc3.d/S99bb restart
或
su - bb ./runbb.sh restart
或取决于您的设置
su - bb ./bb/runbb.sh restart
等待几分钟。您可能想先去喝杯咖啡。
最终,这应该会导致您 Hobbit 主页上出现一个新的列。列标题应为ora
(因为这是脚本中的值),如果我们单击状态图标,我们应该看到类似的内容。
Wed Jun 8 15:35:46 WST 2005
Tablespace siebprod:XDB totals 20.0Mb and is 0% used.
Tablespace siebprod:WHS_INDEX totals 1440.0Mb and is 33% used.
Tablespace siebprod:WHS_DATA totals 1440.0Mb and is 37% used.
Tablespace siebprod:USERS totals 100.0Mb and is 1% used.
Tablespace siebprod:UNDOTBS1 totals 5000.0Mb and is 30% used.
Tablespace siebprod:TOOLS totals 150.0Mb and is 66% used.
Tablespace siebprod:SYSTEM totals 500.0Mb and is 69% used.
Tablespace siebprod:SIEB_INDEX totals 52240.0Mb and is 68% used.
Tablespace siebprod:SIEB_DATA totals 45120.0Mb and is 56% used.
Tablespace siebprod:LOADER_DATA totals 500.0Mb and is 0% used.
有点平淡,但这是一个好的开始。因为$OUTFILE 中的内容将显示在网页上,所以可以在 $OUTFILE 中添加 HTML 标签。从 deadcat 下载 bb-iostat。该测试在您的 Hobbit 屏幕上将自己识别为 vmio,但该脚本非常奇特,并且对显示执行了一些有趣的操作,包括插入状态图标、下划线和一些字体操作。
改进编程的最佳方法之一是查看其他人的做法。从 deadcat 下载一些脚本,看看它们是如何编写的。
我在我的 Hobbit 中使用上面示例脚本的稍微复杂一点的版本,结果得到以下内容。
Wed Jun 8 16:00:07 WST 2005 Oracle test on "siebprod": OK
=============== Oracle Instance Check ================
Instances specified in ORACLE_SIDS (siebprod) match those found in /export/home/bb/bb/ext/ora9tab
=================== siebprod Check ===================
Database siebprod UP processes: pmon smon lgwr dbw0 ckpt reco
Paranoid test: Database siebprod is up.
============= siebprod Tablespace Check ================
Tablespace siebprod:XDB totals 20.0Mb and is 0% used.
Tablespace siebprod:WHS_INDEX totals 1440.0Mb and is 33% used.
Tablespace siebprod:WHS_DATA totals 1440.0Mb and is 37% used.
Tablespace siebprod:USERS totals 100.0Mb and is 1% used.
Tablespace siebprod:UNDOTBS1 totals 5000.0Mb and is 31% used.
Tablespace siebprod:TOOLS totals 150.0Mb and is 66% used.
Tablespace siebprod:SYSTEM totals 500.0Mb and is 69% used.
Tablespace siebprod:SIEB_INDEX totals 52240.0Mb and is 68% used.
Tablespace siebprod:SIEB_DATA totals 45120.0Mb and is 56% used.
Tablespace siebprod:LOADER_DATA totals 500.0Mb and is 0% used.
一些图标用于引起注意,一些下划线,一些粗体文本。任何能让问题原因显而易见的东西。
每 5 分钟或您的 Big Brother 客户端设置的运行频率,它将运行 bb-bbexttab 文件中列出的每个脚本。该脚本运行,然后调用 Big Brother 消息代理,该代理将数据发送到 Hobbit 服务器以显示。(有点过度简化,但已经足够了)如果您在调用 $BB 时使用了数据而不是状态
$BB $BBDISP "data $MACHINE.$TEST $COLOUR `cat $OUTFILE`"
什么都不会显示,但我们仍然可以使用这些数据,通常用于绘图。为了确保您的脚本正常工作,请将数据更改为状态,并确保 Hobbit 确实收到了您应该发送的内容。
所以你跑去泡了杯咖啡,耐心地喝着,甚至还烫了一下嘴唇,但你的 Hobbit 主屏幕上还是什么都没显示。以下是一些需要检查的事项。
- 其他测试是否都通过了?可能是网络问题。
- 您确定 Hobbit 设置正确且运行正常吗?检查连接测试。
- 您在调用 BB 客户端时是否使用了 status?
- 检查
$BBHOME/BBOUT
日志文件。里面可能有一些有趣的提示。 - 请记住,您的脚本以用户 bb 身份运行。bb 是否拥有执行您所需操作的权限,比如执行测试脚本?
- 确保您正确调用了 Big Brother 客户端。(最简单的方法是在 $BB..... 行前面添加一个 echo,并在后面添加一个重定向,这样这行就会从
$BB $BBDISP "status $MACHINE.$TEST $COLOUR `cat $OUTFILE`"
变为
echo $BB $BBDISP "status $MACHINE.$TEST $COLOUR `cat $OUTFILE`" >/tmp/out
等待一段时间(或者您可以使用此方法在命令行测试您的脚本,而无需在成功后等待或修改脚本:[1]),
然后检查 /tmp/out
;如果为空,请检查您的变量定义。
- 检查所有路径是否正确。
- 注释掉
rm $OUTFILE
行。 - 检查是否正在写入。
- 如果您仍然无法解决问题,请咨询邮件列表中的几位资深成员。
如果您在 Hobbit 监控器上看到了预期显示,那么恭喜您!您已经成功添加了自己的自定义脚本。我建议您非常仔细地测试它。确保颜色发生了变化,并且显示内容已更新。现在它已经运行了,您可以开始变得花哨,添加内联 HTML 等等,让它看起来很酷。
图表是另一份文档的主题,也许还会由另一位作者撰写。(我需要看看我是否有时间)
您的新测试有一个列名,但如果您单击列名,就会出现错误。如果您单击主页面上的“conn”,它会告诉您连接测试的作用。要让您的新测试执行相同的操作,请在 Hobbit 服务器上编辑 /usr/lib/hobbit/server/etc/columndoc.csv
。添加以下内容。
Testname;Test description;
对于我的测试,我会添加
ora;The <b>ora</b> test gives more information about the table space in the database;
您在这里放入的内容完全由您决定。这是一个描述字段,所以您甚至不需要更新它。
作者:Vernon Everett,发送到 Hobbitmon 邮件列表